LEGOTARO が 2021年02月07日19時21分59秒 に編集
コメント無し
本文の変更
### 実際の動き |日本語バージョン|英語バージョン| |---|---|---| |@[youtube](https://www.youtube.com/watch?v=XtYlJCI2JAo) |@[youtube](https://www.youtube.com/watch?v=wVFjX0iXQxY&t=7s)| ### 経緯 コロナ禍でお店に遊びに行きにくいですが、これならお家でクレーンゲームが楽しめます。 夏休みの宿題で作りました。 配線図はFlitzingで初めて描いてみました!!! ほかの作品の配線図も描きたいのですが、パーツがなくてかけないので残念です。 動画の英語バージョンはCoolest Projectに応募するために、英語を教えてもらいながら作りました。 ### 外観  完成図です。 ### 機構(構造) ##### 1.前後左右の機構  ]  前後左右の機構です。
ラダーチェーンを使うことで前後左右に動かしていますが、可動域はあまり広くありません。
ラダーチェーンを使うことで前後左右に動かしていますが、夏休みの宿題で学校に持っていきたかったので、コンパクトにしようとしたため、可動域はあまり広くありません。
##### 2.アームを下ろす機構 
ミニモーターでアームを上下させています。
タミヤのミニモーターでアームを上下させています。 ミニモーターを左右に動かすためのスライダーはカーテンレールを切って使いました。
##### 3. アームの機構   3つのサーボモーターを同時に動かすためにPCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続)を使いました。 ボタンを押してアームの開閉をします。 ### 配線 |前後左右の配線|上下の動き・アームの開閉の配線| |---|---|---| ||| ### プログラム #### 前後左右のプログラム ```arduino: int val_ud; int val_lr; void u() { digitalWrite(2, HIGH); digitalWrite(4, LOW); } void d() { digitalWrite(2, LOW); digitalWrite(4, HIGH); } void r() { digitalWrite(7, HIGH); digitalWrite(8, LOW); } void l() { digitalWrite(7, LOW); digitalWrite(8, HIGH); } void s() { digitalWrite(2, LOW); digitalWrite(4, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); } void loop() { val_ud = analogRead(A4); val_lr = analogRead(A5); Serial.println(val_ud); delay(1); Serial.println(val_lr); delay(10); if (val_lr < 300) { l(); delay(1); } else if (val_lr > 800) { r(); delay(1); } else if (val_ud < 300) { u(); delay(1); } else if (val_ud > 800) { d(); delay(1); } else { s(); delay(1); } } ``` #### 上下の動き・アームの開閉 ```arduino int val_ud; #include <Wire.h> #include <PCA9685.h> PCA9685 pwm = PCA9685(0x40); #define SERVOMIN 120 #define SERVOMAX 350 void setup() { pwm.begin(); pwm.setPWMFreq(50); Serial.begin(9600); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); } int n = 90; int ch0 = 0; int ch1 = 1; int ch2 = 2; void loop() { val_ud = analogRead(A4); Serial.println(val_ud); delay(200); if (val_ud < 300) { digitalWrite(10, HIGH); digitalWrite(11, LOW); delay(1); } else if (val_ud > 800) { digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(1); } else { digitalWrite(10, LOW); digitalWrite(11, LOW); delay(1); } // servo_write(ch0,n); // n=n-10; // if(n<=40)n=100; // delay(0); if (!digitalRead(7)) { catch1(); } if (!digitalRead(8)) { serv(90); } } void servo_write(int ch, int ang) { ang = map(ang, 40, 100, SERVOMIN, SERVOMAX); pwm.setPWM(ch, 0, ang); delay(100); } void serv(int ang) { ang = map(ang, 40, 100, SERVOMIN, SERVOMAX); pwm.setPWM(0, 0, ang); pwm.setPWM(1, 0, ang); pwm.setPWM(2, 0, ang); delay(100); } void catch1() { serv(n); delay(50); serv(85); delay(50); serv(80); delay(50); serv(75); delay(50); serv(70); delay(50); serv(65); delay(50); serv(60); delay(50); serv(55); delay(50); serv(50); delay(50); delay(1500); } } ``` ### 今後やっていきたいこと クレーンゲームにBGMを付けたり、ライトで装飾したりしたいです。 今回は自動で初期位置に戻せなかったので リミットスイッチを使い、自動で初期位置に戻すことができるようにしたいです。 ### 材料 板 制御ボックス(下部) 1、30×15cm・・・2枚 2、30.5×15cm・・・2枚 3、30×30cm・・・3枚 4、30×30㎝(内側をくり抜く)・・・1枚 高さ(柱) 5、2.5×2.5×45cm・・・4本 制御ボックス(上部) 6、7×30cm・・・4枚 Arduino Uno・・・2台 DCモーター・・・大2台(タミヤ)、ミニ1台(タミヤ)、モータードライバー サーボモーター 3台 モータードライバー(TA77191p) ラダーチェーン&スプロケットセット(タミヤ) ユニバーサルプレート ブレッドボード ジョイスティック タクトスイッチ ジャンパーコード ### 遊び方 電源を入れる。(上:1カ所、横:3カ所、9ボルト電池をスナップに付ける。) 前後左右のジョイスティック(向かって左)🕹でアームの位置を決める。 赤いボタンでアームを開く。 上下のジョイスティック(向かって右)🕹でカプセルの上にアームを移動させる。 青いボタンでカプセルをつかむ。 上下のジョイスティックで少し上に移動させる。 前後左右でカプセル取り出し口へ移動し、赤いボタンでカプセルを落とす。