Miniature RoboticArm
A miniature three degrees of freedom robotic arm that you can even record the movement and loop it!
Components and supplies
1
Cardboard & plastic platform
1
Tactile button
1
String
1
Rotary potentiometer (generic)
1
Arduino UNO
1
RGB Diffused Common Cathode
1
Jumper wires (generic)
1
Cable Ties (10 Pack)
1
Servos (Tower Pro MG996R)
Tools and machines
1
Hot glue gun (generic)
1
Scissors
Project description
Code
Code for miniature robotics arm
arduino
Code for potentiometer, button, servo motors and RGB led.
1#include <Servo.h> 2Servo servo1; 3Servo servo2; 4Servo servo3; 5 6const int potpin1 = A0; 7const int potpin2 = A1; 8const int potpin3 = A2; 9 10const int button1 = 2; 11const int button2 = 10; 12 13 14 15int val1; 16int val2; 17int val3; 18 19int button1Pressed = 0; 20boolean button2Pressed = false; 21 22 23 24int pot1Angle; 25int pot2Angle; 26int pot3Angle; 27 28 29int servo1PosSave[10]; 30int servo2PosSave[10]; 31int servo3PosSave[10]; 32 33 34int saves; 35 36void setup() { 37 pinMode(4, OUTPUT); 38 pinMode(5, OUTPUT); 39 pinMode(6, OUTPUT); 40 Serial.begin(9600); 41 servo1.attach(7); 42 servo2.attach(8); 43 servo3.attach(9); 44 45 pinMode(button1, INPUT); 46 pinMode(button2, INPUT); 47 48 saves = -1; 49} 50 51 52 53void loop() { 54 digitalWrite(4,HIGH); 55 digitalWrite(5, LOW); 56 digitalWrite(6, LOW); 57 58 val1 = analogRead(potpin1); 59 val2 = analogRead(potpin2); 60 val3 = analogRead(potpin3); 61 62 63 64 pot1Angle = map (val1, 0, 1023, 0, 179); 65 pot2Angle = map (val2, 0, 1023, 30, 90); 66 pot3Angle = map (val3, 0, 1023, 110, 50); 67 68 69 servo1.write(pot1Angle); 70 servo2.write(pot2Angle); 71 servo3.write(pot3Angle); 72 73 if(digitalRead(button1) == HIGH){ 74 button1Pressed++; 75 switch(button1Pressed){ 76 case 1: 77 servo1PosSave[0] = pot1Angle; 78 servo2PosSave[0] = pot2Angle; 79 servo3PosSave[0] = pot3Angle; 80 Serial.println("Position #1 Saved"); 81 {digitalWrite(4,LOW); 82 digitalWrite(5, HIGH); 83 digitalWrite(6, LOW);} 84 delay(500); 85 saves = 0; 86 break; 87 case 2: 88 servo1PosSave[1] = pot1Angle; 89 servo2PosSave[1] = pot2Angle; 90 servo3PosSave[1] = pot3Angle; 91 Serial.println("Position #2 Saved"); 92 {digitalWrite(4,LOW); 93 digitalWrite(5, HIGH); 94 digitalWrite(6, LOW);} 95 delay(500); 96 saves = 1; 97 break; 98 case 3: 99 servo1PosSave[2] = pot1Angle; 100 servo2PosSave[2] = pot2Angle; 101 servo3PosSave[2] = pot3Angle; 102 Serial.println("Position #3 Saved"); 103 {digitalWrite(4,LOW); 104 digitalWrite(5, HIGH); 105 digitalWrite(6, LOW);} 106 delay(500); 107 saves = 2; 108 break; 109 case 4: 110 servo1PosSave[3] = pot1Angle; 111 servo2PosSave[3] = pot2Angle; 112 servo3PosSave[3] = pot3Angle; 113 Serial.println("Position #4 Saved"); 114 {digitalWrite(4,LOW); 115 digitalWrite(5, HIGH); 116 digitalWrite(6, LOW);} 117 delay(500); 118 saves = 3; 119 break; 120 case 5: 121 servo1PosSave[4] = pot1Angle; 122 servo2PosSave[4] = pot2Angle; 123 servo3PosSave[4] = pot3Angle; 124 Serial.println("Position #5 Saved"); 125 {digitalWrite(4,LOW); 126 digitalWrite(5, HIGH); 127 digitalWrite(6, LOW);} 128 delay(500); 129 saves = 4; 130 break; 131 case 6: 132 servo1PosSave[5] = pot1Angle; 133 servo2PosSave[5] = pot2Angle; 134 servo3PosSave[5] = pot3Angle; 135 Serial.println("Position #6 Saved"); 136 {digitalWrite(4,LOW); 137 digitalWrite(5, HIGH); 138 digitalWrite(6, LOW);} 139 delay(500); 140 saves = 5; 141 break; 142 case 7: 143 servo1PosSave[6] = pot1Angle; 144 servo2PosSave[6] = pot2Angle; 145 servo3PosSave[6] = pot3Angle; 146 Serial.println("Position #7 Saved"); 147 {digitalWrite(4,LOW); 148 digitalWrite(5, HIGH); 149 digitalWrite(6, LOW);} 150 delay(500); 151 saves = 6; 152 break; 153 case 8: 154 servo1PosSave[7] = pot1Angle; 155 servo2PosSave[7] = pot2Angle; 156 servo3PosSave[7] = pot3Angle; 157 Serial.println("Position #8 Saved"); 158 {digitalWrite(4,LOW); 159 digitalWrite(5, HIGH); 160 digitalWrite(6, LOW);} 161 delay(500); 162 saves = 7; 163 break; 164 case 9: 165 servo1PosSave[8] = pot1Angle; 166 servo2PosSave[8] = pot2Angle; 167 servo3PosSave[8] = pot3Angle; 168 Serial.println("Position #9 Saved"); 169 {digitalWrite(4,LOW); 170 digitalWrite(5, HIGH); 171 digitalWrite(6, LOW);} 172 delay(500); 173 saves = 8; 174 break; 175 case 10: 176 servo1PosSave[9] = pot1Angle; 177 servo2PosSave[9] = pot2Angle; 178 servo3PosSave[9] = pot3Angle; 179 Serial.println("Position #10 Saved"); 180 {digitalWrite(4,LOW); 181 digitalWrite(5, HIGH); 182 digitalWrite(6, LOW);} 183 delay(500); 184 saves = 9; 185 break; 186 default: 187 for(int i=0;i<4; i++){ 188 digitalWrite(4,HIGH); 189 digitalWrite(5, LOW); 190 digitalWrite(6, LOW); 191 delay(200); 192 digitalWrite(4,LOW); 193 digitalWrite(5, LOW); 194 digitalWrite(6, LOW); 195 delay(200); 196 } 197 198 }} 199 200 201 if(digitalRead(button2) == HIGH){ 202 button2Pressed = true; 203 } 204 205 206 if(button2Pressed){ 207 digitalWrite(4,LOW); 208 digitalWrite(5, HIGH); 209 digitalWrite(6, HIGH); 210 for (int i =0; i<=saves; i++){ 211 servo1.write(servo1PosSave[i]); 212 servo2.write(servo2PosSave[i]); 213 servo3.write(servo3PosSave[i]); 214 delay(500); 215 } 216 } 217 delay(500); 218 219 220} 221 222 223
Code for miniature robotics arm
arduino
Code for potentiometer, button, servo motors and RGB led.
1#include <Servo.h> 2Servo servo1; 3Servo servo2; 4Servo servo3; 5 6const int potpin1 = A0; 7const int potpin2 = A1; 8const int potpin3 = A2; 9 10const int button1 = 2; 11const int button2 = 10; 12 13 14 15int val1; 16int val2; 17int val3; 18 19int button1Pressed = 0; 20boolean button2Pressed = false; 21 22 23 24int pot1Angle; 25int pot2Angle; 26int pot3Angle; 27 28 29int servo1PosSave[10]; 30int servo2PosSave[10]; 31int servo3PosSave[10]; 32 33 34int saves; 35 36void setup() { 37 pinMode(4, OUTPUT); 38 pinMode(5, OUTPUT); 39 pinMode(6, OUTPUT); 40 Serial.begin(9600); 41 servo1.attach(7); 42 servo2.attach(8); 43 servo3.attach(9); 44 45 pinMode(button1, INPUT); 46 pinMode(button2, INPUT); 47 48 saves = -1; 49} 50 51 52 53void loop() { 54 digitalWrite(4,HIGH); 55 digitalWrite(5, LOW); 56 digitalWrite(6, LOW); 57 58 val1 = analogRead(potpin1); 59 val2 = analogRead(potpin2); 60 val3 = analogRead(potpin3); 61 62 63 64 pot1Angle = map (val1, 0, 1023, 0, 179); 65 pot2Angle = map (val2, 0, 1023, 30, 90); 66 pot3Angle = map (val3, 0, 1023, 110, 50); 67 68 69 servo1.write(pot1Angle); 70 servo2.write(pot2Angle); 71 servo3.write(pot3Angle); 72 73 if(digitalRead(button1) == HIGH){ 74 button1Pressed++; 75 switch(button1Pressed){ 76 case 1: 77 servo1PosSave[0] = pot1Angle; 78 servo2PosSave[0] = pot2Angle; 79 servo3PosSave[0] = pot3Angle; 80 Serial.println("Position #1 Saved"); 81 {digitalWrite(4,LOW); 82 digitalWrite(5, HIGH); 83 digitalWrite(6, LOW);} 84 delay(500); 85 saves = 0; 86 break; 87 case 2: 88 servo1PosSave[1] = pot1Angle; 89 servo2PosSave[1] = pot2Angle; 90 servo3PosSave[1] = pot3Angle; 91 Serial.println("Position #2 Saved"); 92 {digitalWrite(4,LOW); 93 digitalWrite(5, HIGH); 94 digitalWrite(6, LOW);} 95 delay(500); 96 saves = 1; 97 break; 98 case 3: 99 servo1PosSave[2] = pot1Angle; 100 servo2PosSave[2] = pot2Angle; 101 servo3PosSave[2] = pot3Angle; 102 Serial.println("Position #3 Saved"); 103 {digitalWrite(4,LOW); 104 digitalWrite(5, HIGH); 105 digitalWrite(6, LOW);} 106 delay(500); 107 saves = 2; 108 break; 109 case 4: 110 servo1PosSave[3] = pot1Angle; 111 servo2PosSave[3] = pot2Angle; 112 servo3PosSave[3] = pot3Angle; 113 Serial.println("Position #4 Saved"); 114 {digitalWrite(4,LOW); 115 digitalWrite(5, HIGH); 116 digitalWrite(6, LOW);} 117 delay(500); 118 saves = 3; 119 break; 120 case 5: 121 servo1PosSave[4] = pot1Angle; 122 servo2PosSave[4] = pot2Angle; 123 servo3PosSave[4] = pot3Angle; 124 Serial.println("Position #5 Saved"); 125 {digitalWrite(4,LOW); 126 digitalWrite(5, HIGH); 127 digitalWrite(6, LOW);} 128 delay(500); 129 saves = 4; 130 break; 131 case 6: 132 servo1PosSave[5] = pot1Angle; 133 servo2PosSave[5] = pot2Angle; 134 servo3PosSave[5] = pot3Angle; 135 Serial.println("Position #6 Saved"); 136 {digitalWrite(4,LOW); 137 digitalWrite(5, HIGH); 138 digitalWrite(6, LOW);} 139 delay(500); 140 saves = 5; 141 break; 142 case 7: 143 servo1PosSave[6] = pot1Angle; 144 servo2PosSave[6] = pot2Angle; 145 servo3PosSave[6] = pot3Angle; 146 Serial.println("Position #7 Saved"); 147 {digitalWrite(4,LOW); 148 digitalWrite(5, HIGH); 149 digitalWrite(6, LOW);} 150 delay(500); 151 saves = 6; 152 break; 153 case 8: 154 servo1PosSave[7] = pot1Angle; 155 servo2PosSave[7] = pot2Angle; 156 servo3PosSave[7] = pot3Angle; 157 Serial.println("Position #8 Saved"); 158 {digitalWrite(4,LOW); 159 digitalWrite(5, HIGH); 160 digitalWrite(6, LOW);} 161 delay(500); 162 saves = 7; 163 break; 164 case 9: 165 servo1PosSave[8] = pot1Angle; 166 servo2PosSave[8] = pot2Angle; 167 servo3PosSave[8] = pot3Angle; 168 Serial.println("Position #9 Saved"); 169 {digitalWrite(4,LOW); 170 digitalWrite(5, HIGH); 171 digitalWrite(6, LOW);} 172 delay(500); 173 saves = 8; 174 break; 175 case 10: 176 servo1PosSave[9] = pot1Angle; 177 servo2PosSave[9] = pot2Angle; 178 servo3PosSave[9] = pot3Angle; 179 Serial.println("Position #10 Saved"); 180 {digitalWrite(4,LOW); 181 digitalWrite(5, HIGH); 182 digitalWrite(6, LOW);} 183 delay(500); 184 saves = 9; 185 break; 186 default: 187 for(int i=0;i<4; i++){ 188 digitalWrite(4,HIGH); 189 digitalWrite(5, LOW); 190 digitalWrite(6, LOW); 191 delay(200); 192 digitalWrite(4,LOW); 193 digitalWrite(5, LOW); 194 digitalWrite(6, LOW); 195 delay(200); 196 } 197 198 }} 199 200 201 if(digitalRead(button2) == HIGH){ 202 button2Pressed = true; 203 } 204 205 206 if(button2Pressed){ 207 digitalWrite(4,LOW); 208 digitalWrite(5, HIGH); 209 digitalWrite(6, HIGH); 210 for (int i =0; i<=saves; i++){ 211 servo1.write(servo1PosSave[i]); 212 servo2.write(servo2PosSave[i]); 213 servo3.write(servo3PosSave[i]); 214 delay(500); 215 } 216 } 217 delay(500); 218 219 220} 221 222 223
Downloadable files
Schematic
Contains all components. This is my first time using Fritzing, sorry if it is not perfect because I learn as I do.
Schematic
Comments
Only logged in users can leave comments