自作ロボットアーム動作の 記録・再生 機能
以前 自作ロボットアームを自作コントローラで制御するというものを紹介させていただきました。
実はこれには動きをレコードして再生する機能も追加しており、上の記事の最後にサラッと紹介したのですが、詳細知りたいとのありがたいコメントいただきましたので
その ありがたみをガソリンとして記事記載させていただきます。
目次
ロボットアーム動作レコード機能概要
Arduino IDEのシリアルモニタでr入力で動作を記録を開始し、もう一度 r入力で記録を停止します。
記録時は接続した赤LEDを点灯させています。
p入力で記録した動作を再生します。
ここではArduino UNOを使用しているので記録時間はUNOのメモリ量に依存します。
記録・再生以外の時はロボットアームはコントローラの動きに追従します。
Arduinoコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
#include <Servo.h> Servo myservo1, myservo2, myservo3; float th1=90.0,th2=90.0,th3=90.0; float val1, val2, val3; boolean rec = false; boolean play = false; int playCnt = 0; int xyz[250][3] = {}; int delayTime = 50; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); myservo1.attach(9, 500, 2420); //MG995 myservo2.attach(10, 820, 2140); //DS3115 myservo3.attach(11, 820, 2140); //DS3115 set_servo(th1, th2, th3); } void loop() { val1 = analogRead(A1); val2 = analogRead(A2); val3 = analogRead(A3); th1 = map(val1, 170.0, 880.0, 0.0, 180.0); if(th1 >= 180.0){ th1 = 180.0; }else if(th1 <= 0.0){ th1 = 0.0; } th2 = map(val2, 150.0, 860.0, 0.0, 180.0); if(th2 >= 180.0){ th2 = 180.0; }else if(th2 <= 0.0){ th2 = 0.0; } th3 = map(val3, 860.0, 160.0, 0.0, 180.0); if(th3 >= 180.0){ th3 = 180.0; }else if(th3 <= 45.0){ th3 = 45.0; } //シリアルモニタ入力読み込み char c; if ( Serial.available() > 0 ) { c = Serial.read(); if(c=='p'){ play = true; }else if(c=='r'){ rec = !rec; } } if(rec){ //動作記録 digitalWrite(13, HIGH); //赤LED点灯 xyz[playCnt][0] = (int)th1; xyz[playCnt][1] = (int)th2; xyz[playCnt][2] = (int)th3; set_servo(th1, th2, th3); playCnt++; Serial.println(playCnt); delay(delayTime); }else if(play){ //動作再生 for(int i = 0; i < playCnt; i++){ set_servo(xyz[i][0], xyz[i][1], xyz[i][2]); Serial.println(i); delay(delayTime); } play = false; playCnt = 0; }else { //通常時 digitalWrite(13, LOW); set_servo(th1, th2, th3); } } void set_servo(float th1, float th2, float th3){ myservo1.write(th1); myservo2.write(th2); myservo3.write(th3); } |
ロボットアーム構成
ロボットアームはPWMサーボを3つ使用したもので、それぞれの角度を可変抵抗で制御します。可変抵抗はBカーブの10kohmを使用しました。
部品
- Arduno UNO
- サーボモータMG995
-
サーボモータDS3115
- 可変抵抗 10kohm
- 赤LED
コントローラは3Dプリンタで製作しました。
できた!
でも結局 木は使う#3Dプリンタ #anycubic pic.twitter.com/oEMYbeX144— HomeMadeGarbage (@H0meMadeGarbage) December 15, 2019
お父ちゃん
早速記事UP、ありがとうございます。
可変抵抗、今日届きますので試してみます!
ご確認ありがとうございます。
製作楽しみにしております!
やってみます