LEGOTARO が 2021年02月13日11時31分30秒 に編集
初版
タイトルの変更
立体迷路(惑星探検迷路)
タグの変更
秋葉原2021
Arduino
LED
フォトリフレクター
LCD1602Module
メイン画像の変更
本文の変更
## 経緯 夏休みの宿題で作りました。 少し前の作品で、動画を撮り忘れていました・・・。残念です。 分解して、クレーンゲームに作りかえてしまったので、もう現物がありません。 分かりにくいかもしれませんが、がんばって説明してみます! ちょっと家の人に相談したりして書きました。 ## 外観と遊び方  1. 9v電池を3個Arduinoにさします。(下部の箱に電池ボックスがある) 2. ジョイスティックを上下左右に動かすと迷路盤(上部)が前後左右に傾きます。 3. (時間を計りたい人)は緑のボタンを押します。 4. ボールをスタートからゴールまで転がします。 迷路盤をジョイスティックを操作して、前後左右に傾けることによって、 ボールを転がしてゴールを目指します。 途中で、妨害装置があるので、それをよけるのが、ちょっと難しいです。 5. 時間を計った人は、ゴールと同時に赤いボタンをおします。 ストップウォッチが止まって、何分かかったか分かります。 赤と緑を両方おすとリセットします。 6. 9v電池を抜いて終了です。 ## 構造 ### 上部  コースを決めて、迷路盤をつくります。 迷路盤に宇宙っぽい絵を描きました。だから作品名が惑星探検迷路です。 迷路盤の裏側の中心部にキャスターをつける。 キャスターのコロコロ部分によって、いろんな方向に迷路盤が傾きます。 左上の角がスタートで、左下の角がゴールです。   ### 仕掛け(2種類) 1.妨害装置   後ろに付けたサーボモータにより羽が動いて、ボールを跳ね返したり、違う場所へ誘導する妨害装置です。 タイミングを見計らってボールを通過させないといけないです。 2. LED点灯装置 写真がないのですが、迷路盤の2か所に穴が開いていて、後ろからLEDとフォトリフレクタが差し込んであります。 フォトリフレクタの上をボールが通過すると、感知して、LEDが光るようにしました。 ### ストップウォッチ タクトスイッチとLCDが使ってみたかったので、時間を計ることにしました。 操作盤に LCD、緑スイッチ(スタート)赤(ストップ)ボタンをつけました。 LCDの画面調整用に可変抵抗器をつけました。 配線のときに、線がモーターの近くにあると、時間計測のときに、LCDに宇宙人からのメッセージみたいな文字がいっぱい出てきてびっくりしました。これがノイズなのかなと思いました。  画素が悪くてすみません。 ### クランク機構(迷路盤を前後左右に傾ける機構)  中の茶色の木とモーターを接続して、上下させます。 茶色の木の上のヒートンに迷路盤の横に打ったくぎを引っかけて固定します。  同じものを2か所に配置しています。 モーターを回転させることによって、クランクが上下します。 モーターの回転運動をクランクにつなげることによって、直線運動(上下運動)させているので、モーターが回転し続け、ギアが180度以上回ると、操作盤とジョイスティックが逆の動きになるので、要注意です。 (タミヤ楽しい工作シリーズNo.110(ギア比 5402:1)) ※後で、もうちょっと早く動くようにしてもよかったかなーと思いました。 ## 配線 前後左右の配線  妨害装置の配線   ## プログラム ### 妨害装置のプログラム ```arduino: #include <Servo.h> Servo myservo9; void setup() { myservo9.attach(9); } void loop() { myservo9.write(180); delay(300); myservo9.write(90); delay(2000); myservo9.write(180); delay(1000); } ``` ### 前後左右のプログラム ```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() { pinMode(2, OUTPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); } void loop() { val_ud = analogRead(A4); val_lr = analogRead(A5); if (val_lr < 300) { l(); } else if (val_lr > 800) { r(); } else if (val_ud < 300) { u(); } else if (val_ud > 800) { d(); } else { s(); } } ``` ### ストップウォッチとLEDが光るプログラム ```arduino: #include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); int A0pin = 0; int pinLED13 = 13; int A1pin = 1; int pinLED12 = 12; void setup() { lcd.begin(16, 2); lcd.clear(); pinMode(pinLED12, OUTPUT); pinMode(pinLED13, OUTPUT); Serial.begin(9600); pinMode(8, INPUT); digitalWrite(8, HIGH); pinMode(9, INPUT); digitalWrite(9, HIGH); pinMode(10, INPUT); digitalWrite(10, HIGH); } double i = 0; double a = millis(); double c ; void loop() { lcd.clear(); lcd.print("PUSH GREEN START"); lcd.setCursor(0,1); lcd.print(" ENJOY!!"); photoRefrectora(); photoRefrectorb(); delay(100); if (digitalRead(8) == LOW) { { lcd.clear(); a = millis(); while (digitalRead(9) == HIGH) { photoRefrectora(); photoRefrectorb(); c = millis(); i = (c - a) / 1000; lcd.print(i); lcd.setCursor(10,0); lcd.print("Second"); lcd.setCursor(0,1); lcd.print(" DO YOUR BEST !!"); lcd.setCursor(0,0); Serial.println(c); Serial.println(a); Serial.println(i); Serial.println("......"); delay(100); } if (digitalRead(9) == LOW) { while (digitalRead(8) == HIGH) { photoRefrectora(); photoRefrectorb(); lcd.setCursor(0, 0); lcd.print(i); lcd.setCursor(10, 0); lcd.print("Second"); lcd.setCursor(0, 0); delay(100); } } } } void photoRefrectora() { int aval; aval = analogRead(A0pin) ; Serial.println(aval) ; if (aval < 800) { digitalWrite(pinLED13,HIGH); } else { digitalWrite(pinLED13, LOW); } } void photoRefrectorb() { int bval; bval = analogRead(A1pin) ; Serial.println(bval) ; if (bval < 800) { digitalWrite(pinLED12,HIGH); } else { digitalWrite(pinLED12, LOW); } } } ``` ## 材料 arduino 木材 釘 ねじ LCD(シールド) フォトリフレクタ タクトスイッチ キャスター タクトスイッチ ジャンパーコード フォトリフレクター ジョイスティック🕹 輪ゴム ピン📌 モーター ギアボックス 鉄のねじ棒(シャフト) 鉄球