Arduinoでラジコンを作った。
前回,車とダブルギアボックスを使って車が動くようになったのだが,これだと左右の前輪がつながっているのでうまく曲がらない。そこで,ボールキャスターを使って左右に曲がるようにした。
さらに,BluetoothモジュールRN-42を使ってPCから操作できるようにした。
表裏はこんな感じ。
構成としては以下の通り。
RN42については,買ったものがXBee用の2mmピッチだったので,2.54mmピッチに変換。秋月電子の変換ボードは3.3Vレギュレータ付きなので,電源は5Vそのままつなげるが,ArduinoからRN42へのシリアル通信は3.3Vに変換しないといけないので適当に抵抗で電圧を落とす必要がある。はんだ付けも多少慣れたけど2mmピッチは小さすぎて辛い。
RN42の使い方はWebを探すと先人が情報を残してくれているが,Macのコンソールが一番楽そうなのでMacから繋いでみる。RN42を配線して電圧をかけると赤LEDが点滅し,それだけでMac上でBluetoothデバイスとして見つかる。ペアリングすると赤LEDが点灯するので,コンソールから「screen /dev/tty.RNBT-DF42-RNI-SPP 115200」を実行。キーボードで通信ができる。
回路図。Fritzingを使用して作図。ごちゃごちゃするのでGND省略してるけど,適当にArduinoのGNDか電池のマイナスにつなぐ。
プログラム。どうしてもハード部分がメインになるのでソフト部分は超適当だけど,上げておこう。
int rpositive = 9;
int rnegative = 6;
int lpositive = 11;
int lnegative = 3;
int led = 13;
int lspeed = 0;
int rspeed = 0;
char inByte = 0;
void setup()
{
Serial.begin(115200);
pinMode(lpositive, OUTPUT);
pinMode(lnegative, OUTPUT);
pinMode(rpositive, OUTPUT);
pinMode(rnegative, OUTPUT);
pinMode(led, OUTPUT);
analogWrite(lpositive, 0);
analogWrite(lnegative, 0);
analogWrite(rpositive, 0);
analogWrite(rnegative, 0);
}
void loop()
{
if (Serial.available() > 0)
{
inByte = Serial.read();
if (inByte == 'w')
{
// forward
lspeed += 50;
rspeed += 50;
Serial.println('f');
}
else if (inByte == 's')
{
// backward
lspeed -= 50;
rspeed -= 50;
Serial.println('b');
}
else if (inByte == 'a')
{
// left
lspeed += 50;
rspeed -= 50;
Serial.println('l');
}
else if (inByte == 'd')
{
// right
lspeed -= 50;
rspeed += 50;
Serial.println('r');
}
else if (inByte == 'z')
{
// stop
lspeed = 0;
rspeed = 0;
Serial.println('s');
}
if(lspeed > 200)
{
lspeed = 200;
}
if(rspeed > 200)
{
rspeed = 200;
}
if(lspeed < -200)
{
lspeed = -200;
}
if(lspeed < -200)
{
lspeed = -200;
}
if(lspeed >= 0)
{
analogWrite(lpositive, lspeed);
analogWrite(lnegative, 0);
}
else
{
analogWrite(lpositive, 0);
analogWrite(lnegative, -lspeed);
}
if(rspeed >= 0)
{
analogWrite(rpositive, rspeed);
analogWrite(rnegative, 0);
}
else
{
analogWrite(rpositive, 0);
analogWrite(rnegative, -rspeed);
}
if(lspeed != 0 || rspeed != 0)
{
digitalWrite(led, HIGH);
}
else
{
digitalWrite(led, LOW);
}
delay(100);
}
}
次はスマホからBluetooth接続できるようにしてスマホから操作するかな。