編集履歴一覧に戻る
Okayuのアイコン画像

Okayu が 2021年02月28日23時13分23秒 に編集

コメント無し

本文の変更

ローテーションサーボモーターと距離モジュールで障害物を避ける車を作りました。 材料 - - Arduino - ローテーションサーボモーター(FS90R) - FS90R対応タイヤ(https://akizukidenshi.com/catalog/g/gP-13207/) - ボールキャスター - 距離モジュール(GP2Y0A21YK) - 適当な箱 - ブレッドボード - ジャンパワイヤ - モバイルバッテリー つなぎ方 - ジャンパワイヤで下記の通りにサーボモーターや距離モジュールをArduinoに接続します。 また、ブレッドボードを使ってこれらを5Vに接続します。 **サーボモーター(左)**    **Arduino** PWM(黄)   →   D10 Vcc(赤)   →   ブレッドボード GND(茶)   →   GND **サーボモーター(右)**    **Arduino** PWM(黄)   →   D11 Vcc(赤)   →   ブレッドボード GND(茶)   →   GND **距離モジュール**    **Arduino** Vcc(黒)   →   ブレッドボード GND(黄)   →   GND Vo(白)   →   A0 **ブレッドボード**    **Arduino** 上記3つと接続する穴 → 5V プログラム - ArduinoをPCに接続しArduinoIDEで下記のようにプログラミングします。 距離モジュールで30cm以内に障害物が現れると車体が右に旋回するプログラムです。 プログラミングする際、ローテーションサーボモーターは通常のサーボモーターと異なり、下記のように回転します。 | 入力 | 動作 | |:---:|:---| | 0〜89度 | 右回転 | | 90度 | 停止 | | 91〜180 | 左回転 | また、90度から離れれば離れるほど回転速度は速くなります。 ```arduino:aruduino #include "Servo.h" Servo myservoR; Servo myservoL; void setup() { myservoR.attach(10); myservoL.attach(11); } void loop(){ int value = analogRead(0); int distance = (6787/(value-3))-4; if(distance <= 30){ myservoR.write(140); myservoL.write(140); } else{ myservoR.write(100); myservoL.write(80); } } ``` 完成品 - 動作の確認を終えたら、箱前部に距離モジュールと左右にタイヤを付けたサーボモータを固定します。 箱の内部にArduinoや電源となるモバイルバッテリーを入れて、箱の後部にボールキャスターを固定しましょう。 ![キャプションを入力できます](https://camo.elchika.com/bf664b24116089b763cc7bd1af3e39931984cce5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38306536343534352d656130382d343430642d396235612d3730646665336235303263302f39333039663939332d383336612d343330312d623363392d316135386136633764393965/)

+

![キャプションを入力できます](https://camo.elchika.com/4ec6c548ce26519261ba5469817009409dc13031/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38306536343534352d656130382d343430642d396235612d3730646665336235303263302f34316336393430632d633231352d343735362d383936622d626534393263363838626631/)

箱の形によっては旋回のスピードが足りない場合があります。その場合はプログラムの ```arduino:13,14行目 myservoR.write(140); myservoL.write(140); ``` の()内の数字を大きくすることで対応可能です。この時に数字を180より大きくしないように注意しましょう。