manhoosbilli1

drone bot workshop arm

Jul 11th, 2019
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. Basic Robot Arm Controller
  2. robot-arm-control-basic.ino
  3. Controls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM Controller
  4. Uses Adafruit PWM library
  5. Uses 5 potentiometers for input (can be modified for 6)
  6.  
  7. DroneBot Workshop 2018
  8. https://dronebotworkshop.com
  9. */
  10.  
  11. // Include Wire Library for I2C Communications
  12. #include <Wire.h>
  13.  
  14. // Include Adafruit PWM Library
  15. #include <Adafruit_PWMServoDriver.h>
  16.  
  17. #define MIN_PULSE_WIDTH 650
  18. #define MAX_PULSE_WIDTH 2350
  19. #define FREQUENCY 50
  20.  
  21. Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
  22.  
  23. // Define Potentiometer Inputs
  24.  
  25. int controlBase = A0;
  26. int controlElbow = A1;
  27. int controlWrist = A2;
  28. int controlPivot = A3;
  29. int controlJaws = A6;
  30.  
  31. // Define Motor Outputs on PCA9685 board
  32.  
  33. int motorBase = 0;
  34. int motorElbow = 1;
  35. int motorWrist = 2;
  36. int motorPivot = 3;
  37. int motorJaws = 4;
  38.  
  39. // Define Motor position variables
  40. int mtrDegreeBase;
  41. int mtrDegreeElbow;
  42. int mtrDegreeWrist;
  43. int mtrDegreePivot;
  44. int mtrDegreeJaws;
  45.  
  46. void setup()
  47. {
  48. // Setup PWM Controller object
  49. pwm.begin();
  50. pwm.setPWMFreq(FREQUENCY);
  51. }
  52.  
  53. // Function to move motor to specific position
  54. void moveMotorDeg(int moveDegree, int motorOut)
  55. {
  56. int pulse_wide, pulse_width;
  57.  
  58. // Convert to pulse width
  59. pulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  60. pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
  61.  
  62. //Control Motor
  63. pwm.setPWM(motorOut, 0, pulse_width);
  64. }
  65.  
  66. // Function to convert potentiometer position into servo angle
  67. int getDegree(int controlIn)
  68. {
  69. int potVal,srvDegree;
  70.  
  71. // Read values from potentiometer
  72. potVal = analogRead(controlIn);
  73.  
  74. // Calculate angle in degrees
  75. srvDegree = map(potVal, 0, 1023, 0, 180);
  76.  
  77. // Return angle in degrees
  78. return srvDegree;
  79.  
  80. }
  81.  
  82. void loop() {
  83.  
  84. //Control Base Motor
  85.  
  86. // Get desired position
  87. mtrDegreeBase = getDegree(controlBase);
  88. // Move motor
  89. moveMotorDeg(mtrDegreeBase,motorBase);
  90.  
  91.  
  92. //Control Elbow Motor
  93.  
  94. // Get desired position
  95. mtrDegreeElbow = getDegree(controlElbow);
  96. // Move motor
  97. moveMotorDeg(mtrDegreeElbow,motorElbow);
  98.  
  99.  
  100. //Control Wrist Motor
  101.  
  102. // Get desired position
  103. mtrDegreeWrist = getDegree(controlWrist);
  104. // Move motor
  105. moveMotorDeg(mtrDegreeWrist,motorWrist);
  106.  
  107.  
  108. //Control Pivot Motor
  109.  
  110. // Get desired position
  111. mtrDegreePivot = getDegree(controlPivot);
  112. // Move motor
  113. moveMotorDeg(mtrDegreePivot,motorPivot);
  114.  
  115.  
  116. //Control Jaws Motor
  117.  
  118. // Get desired position
  119. mtrDegreeJaws = getDegree(controlJaws);
  120. // Move motor
  121. moveMotorDeg(mtrDegreeJaws,motorJaws);
  122.  
  123.  
  124. // Add short delay
  125. delay(20);
  126.  
  127. }
Add Comment
Please, Sign In to add comment