Gearさんが投稿したL293D・Arduino・トイラジコンに関するカスタム事例
2021年03月19日 20時52分
L293D モータードライブICを使って、トイラジコンのステアリングを操作してみました。
あくまで試験なので、PCとArduino に繋がった状態です。PCのテンキーで左右とセンターリングの命令を入力して動作させています。PCの画面右下の動きとRCの前輪を見比べると動作が分かりやすいと思います。
ネットに上がっていたプログラムを無修正で使っているので、現在は急ハンドル的なステアリングの切り角バージョンのみですが、プログラムを加工すればスローな動作もできます。残念ながら、サーボモーターのように切り角の微妙なコントロールは無理な感じです。
トイラジコンなので仕方ないのですが、オリジナルのコントローラはステアリングホイールを回している間、小刻みに切っては戻しを繰り返す動作になっていました。ぶるぶる動く感じでリアリティーに欠けるので、このように改良した次第です。
ステアリング用のDCモーターを正転逆転させ駆動offでコイルスプリングによりセンターに戻る仕組みです。なぜこのようになっているかと考えたのですが、たぶんサーボモーターを使うより安上がりだからなのでしょう。低速ならこれで十分だと思いますが・・・。^_^;
L293D モータードライブICです。600mAまで流せるのですが、トイラジと言えどもこれでは駆動輪用のモーターには使えません。それでも、ステアリング用には十分使えています。まだ先の話ですが実際に組み込む際は、この基板に小さなマイコンをセットしてバッテリーで駆動するようにに変更したいと思っています。
試験なので、大きめのマイコンとACアダプターを使用しています。
追記
スローバージョンのスケッチ(プログラム)を以下のとおり作りました。
// Turning(L293D)
/*
L293D
1,2EN 1 16. Vcc1
1A 2 15
1Y 3 14
GND. 4 13
GND 5 12
2Y. 6 11
2A. 7 10
Vcc2 8 9
L293D Arduino
1,2EN 1 D7
1A 2 D5
1Y 3 (Motor+)
4 GND
5
2Y 6 (Motor-)
2A 7 D3
8 (外部5V)
Vcc1 16 (外部5V)
*/
const int ENABLE = 7;
const int CH1 = 5;
const int CH2 = 3;
void setup() {
//Pinの定義
pinMode(ENABLE,OUTPUT); // 7番ピンをOUTPUT指定
pinMode(CH1,OUTPUT); // 5番ピンをOUTPUT指定
pinMode(CH2,OUTPUT); // 3番ピンをOUTPUT指定
Serial.begin(9600);
//コマンド説明
Serial.println("1:Slow Left Turning");
Serial.println("2:Slow Right Turning");
Serial.println("0:STOP");
// 初期化
digitalWrite(ENABLE,LOW); // disable
delay(500);
}
void loop() {
uint8_t i;
if (Serial.available() > 0 ) // データ受信で実行
{
char val = Serial.read(); // データ読み込み
// 1 左回転 (CH1:High CH2:LOW)
if (val == '1')
{
Serial.println("1:Slow Left Turning");
digitalWrite(ENABLE,HIGH); // enable
analogWrite(CH1,255); // 回転のきっかけ
for (i = 207; i < 255; i++) {
analogWrite(CH1,i); // CH1パルス変調(+)
delay(5);
}
for (i=255; i!=0; i--) {
analogWrite(CH1,i); // CH1パルス変調(-)
delay(5);
}
digitalWrite(CH2,LOW); // CH2はLow
delay(50); // 継続時間
digitalWrite(ENABLE,LOW); // disable
}
// 2 右回転 (CH1:LOW CH2:High)
else if (val == '2')
{
Serial.println("2:Slow Right Turning");
digitalWrite(ENABLE,HIGH); // enable
analogWrite(CH2,255); // 回転のきっかけ
for (i = 207; i < 255; i++) {
analogWrite(CH2,i); // CH2パルス変調(+)
delay(5);
}
analogWrite(CH2,255); // 回転のきっかけ
for (i=255; i!=0; i--) {
analogWrite(CH2,i); // CH2パルス変調(-)
delay(5);
}
digitalWrite(CH1,LOW);
digitalWrite(CH2,HIGH);
delay(50); // 継続時間
digitalWrite(ENABLE,LOW); // disable
}
// 0の場合 停止
else if (val == '0')
{
Serial.println("0:STOP");
digitalWrite(ENABLE,LOW); // disable
}
}
}
とりあえず、小さなマイコンボードを基板にセットしてみました。ただ、他の用途で使えるようにベタな配線じゃなく、ジャンパー線を刺して使えるようにしてあります。
左のオープンスペースには、マイコンの電源に必要なDC-DCコンバーターを配置する予定です。
裏面のハンダ付けはこんな感じです。
装置の試験運転
USB シリアル・アダプターを介してPCと接続し、PCから1左、2右、0停止の各コマンドを入力して動作を確認しました。
旋回速度はプログラムで調節可能です。もっと遅い方が良いかもです。
不用になったPCのパーツから使えそうな部分を切り出して、Wiiのコントローラとマイコンを繋げるためのアダプターを作りました。
Wiiのジョイスティックでステアリングを操作できるようにしてみました。
ジョイスティックの動きに合わせて舵取りができます。