justice が 2021年02月18日15時29分45秒 に編集
初版
タイトルの変更
四輪独立ステアを使ってラジコン的なものを作る
タグの変更
Arduino
四輪独立ステア
ラジコン
メイン画像の変更
本文の変更
## 目次 1. はじめに 1. 材料 1. 作り方 1. 回路 1. スケッチ 1. 完成 # はじめに なぜ今回の作品を作ろうと思ったかというと、元々Arduinoのプログラムを勉強したいと思っていてちょうど手持ちにジョイスティックがあったので、この2つを使ったらラジコン的なものができるのではないかと思いついたからです。 # 材料 ### 足回り - [DCモーター(pololuギア比20.4:1)](https://shopping.yahoo.co.jp/search?rkf=2&uIv=on&first=1&ei=utf-8&seller=1&p=pololu20.4%2F1&im=1&spro_storeid=suzakulab&spro_itemcd=suzakulab_pololu-3203&stp=1&sc_e=sydr_sspdspro_2511_statgue&__ysp=cG9sb2x1MjAuNC8x#sproanchor) - [サーボモーター(HSR-8498HB)](http://www.robox.jp/shopdetail/019003000002/) - [針ころ軸受け](https://www.monotaro.com/p/0579/9254/) - [アルミA2017(厚さ3mm)](https://www.monotaro.com/g/00189759/) ### 回路 - [乾電池(単3)](https://www.monotaro.com/g/00263785/?t.q=%8A%A3%93d%92r%20%92P3) - [電池BOX(単3x3)](https://www.monotaro.com/p/8699/1292/?t.q=%93d%92rBOX) - [バッテリー(タミヤ・ニカド電池7.2V)](https://store.shopping.yahoo.co.jp/combatraven/0113-0007.html?sc_i=shp_pc_search_itemlist_shsrg_title#ItemInfo) - [ArduinoUno](https://www.monotaro.com/g/02359602/?t.q=arduino%20uno) - [8 Relay Module](https://www.amazon.co.jp/%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%EF%BC%88SainSmart%EF%BC%89-8%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB-5V-%E3%83%AA%E3%83%AC%E3%83%BC%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-Arduino-DSP/dp/B0057OC5WK) - [ジョイスティック](https://www.amazon.co.jp/dp/B082M4V5S9?tag=gekiyasuco089-22&linkCode=osi&th=1&psc=1) # 作り方 まず四輪独立ステアの機構を作っていきます。 サーボモーターの軸がタイヤの中心にくるように設計し、 NCを使ってアルミを切削します。 ![キャプションを入力できます](https://camo.elchika.com/64d68cd91f23a91299c42139517e33bde0ed66a9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35323836656662652d343434392d343630322d386664352d6231383434653333373234392f37643933333331372d343735622d343435392d613165662d613932366463333964396135/) 次に切削したアルミと足回りの材料たちを組み合わせていきます。 画像では見えにくいですが切削したアルミの間に針ころ軸受けがあります。 ![組み立て](https://camo.elchika.com/9010d312232352b713b2024cb0084dee07457bcc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35323836656662652d343434392d343630322d386664352d6231383434653333373234392f37396631333536332d336235652d343333622d383362632d353536326136376634393036/) これで機構の部分は完成です。 # 回路 回路は次のようになっています。 9Vのところは単3の乾電池が6本、5Vのところは単3の乾電池が3本で構成されています。 旋回するときは前と後ろでタイヤの方向が違うので配線を前と後ろで逆にしました。 (今回は配線を変えましたがスケッチでも可) ![キャプションを入力できます](https://camo.elchika.com/7f121d1905a33bc2e308741fb9cd72912069876b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35323836656662652d343434392d343630322d386664352d6231383434653333373234392f62333634303962362d613763612d343539642d393939392d303238323266383561633439/) # スケッチ スケッチはこんな感じです。 コントローラーにジョイスティックしかつけていないので斜め方向を旋回にしました。 ```arduino: #include <Servo.h> Servo servo1; Servo servo2; Servo servo3; Servo servo4; const int sw_pin =0; const int x_pin = A0; const int y_pin = A1; int sw_state = 0; int x_pos = 0; int y_pos = 0; float x_convert =0.0f; float y_convert =0.0f; void setup() { // put your setup code here, to run once: servo1.attach(2); servo2.attach(3); servo3.attach(4); servo4.attach(5); servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); pinMode(sw_pin,INPUT_PULLUP); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); pinMode(10,OUTPUT); pinMode(9,OUTPUT); pinMode(8,OUTPUT); pinMode(7,OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: sw_state=digitalRead(sw_pin); x_pos=analogRead(x_pin); y_pos=analogRead(y_pin); x_convert = (float)x_pos / 1023.0f*5.0f; y_convert = (float)y_pos / 1023.0f*5.0f; //右 if(sw_state == 1&& x_pos >=900 && y_pos <=764&& y_pos>=300){ servo1.write(19); digitalWrite(6,LOW); } else{ servo1.write(63); servo2.write(117); servo3.write(118); servo4.write(53); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(12,HIGH); digitalWrite(13,HIGH); } //左 if(sw_state == 1 && x_pos <=100&&y_pos>=300&&y_pos<=764){ servo1.write(19); digitalWrite(7,LOW);} //上 if(sw_state == 1 && y_pos <=300&& x_pos >=200 && x_pos <=700){ servo1.write(105); digitalWrite(6,LOW);} //下 if(sw_state == 1 && y_pos >=900 && x_pos <=766){ servo1.write(105); digitalWrite(7,LOW);} //右 if(sw_state == 1&& x_pos >=900 && y_pos <=764&& y_pos>=300){ servo2.write(164.5); digitalWrite(9,LOW); } //左 if(sw_state == 1 && x_pos <=100&&y_pos>=300&&y_pos<=764){ servo2.write(164.5); digitalWrite(8,LOW);} //上 if(sw_state == 1 && y_pos <=300&& x_pos >=200 && x_pos <=700){ servo2.write(78); digitalWrite(8,LOW);} //下 if(sw_state == 1 && y_pos >=900&& x_pos <=766){ servo2.write(78); digitalWrite(9,LOW);} //右 if(sw_state == 1&& x_pos >=900 && y_pos <=764&& y_pos>=300){ servo3.write(169); digitalWrite(11,LOW); } //左 if(sw_state == 1 && x_pos <=100&&y_pos>=300&&y_pos<=764){ servo3.write(169); digitalWrite(10,LOW);} //上 if(sw_state == 1 && y_pos <=300&& x_pos >=200 && x_pos <=700){ servo3.write(81); digitalWrite(10,LOW);} //下 if(sw_state == 1 && y_pos >=900&& x_pos <=766){ servo3.write(81); digitalWrite(11,LOW);} //右 if(sw_state == 1&& x_pos >=900 && y_pos <=764&& y_pos>=300){ servo4.write(10); digitalWrite(12,LOW); } //左 if(sw_state == 1 && x_pos <=100&&y_pos>=300&&y_pos<=764){ servo4.write(10); digitalWrite(13,LOW);} //上 if(sw_state == 1 && y_pos <=300&& x_pos >=200 && x_pos <=700){ servo4.write(95); digitalWrite(12,LOW);} //下 if(sw_state == 1 && y_pos >=900&& x_pos <=766){ servo4.write(95); digitalWrite(13,LOW);} //右上 if(sw_state == 1&& x_pos >=800 && y_pos <=50){ servo1.write(63); servo2.write(117); servo3.write(118); servo4.write(53); digitalWrite(7,LOW); digitalWrite(11,LOW); digitalWrite(8,LOW); digitalWrite(12,LOW); } if(sw_state == 1&& x_pos <= 150 && y_pos <=50){ servo1.write(63); servo2.write(117); servo3.write(118); servo4.write(53); digitalWrite(6,LOW); digitalWrite(10,LOW); digitalWrite(9,LOW); digitalWrite(13,LOW); } Serial.print("Swith:"); Serial.print(sw_state); Serial.println(); Serial.print("X / Voltage: "); Serial.print(x_pos); Serial.print(" / "); Serial.print(x_convert); Serial.println(); Serial.print("Y / Voltage: "); Serial.print(y_pos); Serial.print(" / "); Serial.print(y_convert); Serial.println(); delay(100); } ``` # 完成 これで完成です。 動画では横移動しかありませんが前移動、旋回どちらも成功しました。 プログラムの知識が0の状態で始めたのでうまくいかないことも多くとても苦戦しましたが、何とか形になったのでよかったです。次は3DCADを使ってフレームを作ったりして本物のラジコンっぽくしてみるのもありかなーなんて思っています。