justiceのアイコン画像
justice 2021年02月18日作成 (2021年02月19日更新)
製作品 製作品 閲覧数 1577
justice 2021年02月18日作成 (2021年02月19日更新) 製作品 製作品 閲覧数 1577

四輪独立ステアを使ってラジコン的なものを作る

目次

  1. はじめに
  2. 材料
  3. 作り方
  4. 回路
  5. スケッチ
  6. 完成

はじめに

なぜ今回の作品を作ろうと思ったかというと、元々Arduinoのプログラムを勉強したいと思っていてちょうど手持ちにジョイスティックがあったので、この2つを使ったらラジコン的なものができるのではないかと思いついたからです。

材料

足回り

回路

作り方

まず四輪独立ステアの機構を作っていきます。
サーボモーターの軸がタイヤの中心にくるように設計し、
NCを使ってアルミを切削します。
キャプションを入力できます
次に切削したアルミと足回りの材料たちを組み合わせていきます。
画像では見えにくいですが切削したアルミの間に針ころ軸受けがあります。
組み立て
これで機構の部分は完成です。

回路

回路は次のようになっています。
9Vのところは単3の乾電池が6本、5Vのところは単3の乾電池が3本で構成されています。
旋回するときは前と後ろでタイヤの方向が違うので配線を前と後ろで逆にしました。
(今回は配線を変えましたがスケッチでも可)
キャプションを入力できます

スケッチ

スケッチはこんな感じです。
コントローラーにジョイスティックしかつけていないので斜め方向を旋回にしました。

#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を使ってフレームを作ったりして本物のラジコンっぽくしてみるのもありかなーなんて思っています。

1
ログインしてコメントを投稿する