Away, sort of, from radio things I have indulged myself with a robot arm kit, the meArm. But there is a tiny nagging thought at the back of my mind - that is to control a set of these arms by radio, maybe using the ubiquitous 433MHz RX TX modules, and make them dance in harmony, fun eh?
The meArm sitting on my desk
So far I have done a little bit of Arduino programming to try it out, and written a library file to keep some of the functions in.
CODE "meArm.h"
// mearm.h // v 0.5 20-7-17 #include "Servo.h" Servo arm, left, right, grip; // arm deg max = max, home = mid point, left = min #define ARMMAX 180 #define ARMHOME 98 #define ARMMIN 0 // right deg min = in, max = out #define RIGHTMIN 90 #define RIGHTMAX 180 // left deg min = in, max = out #define LEFTMIN 50 #define LEFTMAX 140 // grip close = in, open = out #define GRIPIN 65 #define GRIPOUT 10 // ============= BEGIN ============= void armBegin() { arm.attach(11); right.attach(10); left.attach(9); grip.attach(6); // start positions arm.write(ARMHOME); right.write(RIGHTMIN); left.write(LEFTMIN); grip.write(GRIPOUT); } // ============= ARM MOVEMENTS ============= // ARM steady move arm to pos 0-100 in ms steps void armpos(int pos, int ms) { int m, r; pos = map(pos, 0, 100, ARMMIN, ARMMAX); r = arm.read(); if (pos > r) { for (m = r; m != pos; m += 1) { arm.write(m); delay(ms); } return; } else if (pos < r) { for (m = r; m != pos; m -= 1) { arm.write(m); delay(ms); } } return; } // LEFT steady move left to pos in ms steps void leftpos(int pos, int ms) { int m, r; pos = map(pos, 0, 100, LEFTMIN, LEFTMAX); r = arm.read(); if (pos > r) { for (m = r; m != pos; m += 1) { left.write(m); delay(ms); } return; } else if (pos < r) { for (m = r; m != pos; m -= 1) { left.write(m); delay(ms); } } return; } // RIGHT steady move left to pos in ms steps void rightpos(int pos, int ms) { int m, r; pos = map(pos, 0, 100, RIGHTMIN, RIGHTMAX); r = arm.read(); if (pos > r) { for (m = r; m != pos; m += 1) { right.write(m); delay(ms); } return; } else if (pos < r) { for (m = r; m != pos; m -= 1) { right.write(m); delay(ms); } } return; } // GRIP move open close in ms steps void grippos(int pos, int ms) { int m, r; pos = map(pos, 0, 100, GRIPOUT, GRIPIN); r = arm.read(); if (pos > r) { for (m = r; m != pos; m += 1) { grip.write(m); delay(ms); } return; } else if (pos < r) { for (m = r; m != pos; m -= 1) { grip.write(m); delay(ms); } } return; }
CODE FOR TESTING SERVOS
// move // v0.5 20-7-17 // viewed from behind, range // arm mid xx/98/xx // right 80/xx/140 // left xx/xx/xx #include "meArm.h" void setup() { armBegin(); // attach servos, goto start positions delay(2000); } void loop() { armpos(80, 50); // move to 80%, 50ms steps% delay(5000); armpos(20, 50); // move to 60% in 100 ms steps delay(5000); }
No comments:
Post a Comment