2015年3月29日日曜日

【完成】Wiiリモコン+Arduino+LEGO でラジコンを作る(4):WiiリモコンでDCモーターを操作する

もくじ
  1. Wiiリモコン+Arduino+LEGO でラジコンを作る(1):材料選定
  2. Wiiリモコン+Arduino+LEGO でラジコンを作る(2):DCモーターを動かす
  3. Wiiリモコン+Arduino+LEGO でラジコンを作る(3):USB Host Shield で Bluetooth ドングルを使えるようにする
  4. 【完成】Wiiリモコン+Arduino+LEGO でラジコンを作る(4):WiiリモコンでDCモーターを操作する



ついにラジコン制作も最終回です。たぶん。



完成した回路はこのようになります。



ArduinoWiiRemoteRC_fig3.jpg



複雑に見えますがこれまでに扱ってきたものを組み合わせただけです。

念のため1つずつ見ていきましょう。



モータードライバ TA7291P



左右のモーターを別々に制御する必要がありますので

線対称にモータードライバを2つ配置します。



その他に、以前はコードを簡単にするために固定抵抗器を使っていましたが、

今回は固定抵抗器無しでドライバ1つあたり3ピンをArduinoに接続しています。



ただ単に気まぐれで変更したわけではなく、これには深い理由があります。

・・・と言うことに組み上げてから気づきました。)




USB Host Shield


モータードライバを固定抵抗器無しで制御している理由は

USB Host Shield, Arduino UNO, TA7291P のそれぞれの仕様にあります。



Arduino での出力電圧の調整は PWM で行うのですが、

全てのピンで PWM が使えるわけではありません。

ピン番号に「~」がプリントされているピンだけが PWM に対応しています。

具体的には D3, D5, D6, D9, D10, D11 です。



USB Host Shield を Arduino UNO に載せると、

D7~D13 は USB Host Shield が使ってしまうため

モーター制御には使えなくなります。



となると、残る D0~D6 のうちでモーター制御用に

PWM が使えるのは D3, D5, D6 の3つだけということになります。



固定抵抗器有りで TA7291P を使う場合、

TA7291P の5番ピンの電圧で正転のスピードを調整します。

また、反転の場合は6番ピンです。

つまり、TA7291P 1つあたり2本のピンについて電圧を

調整できる必要があります。



今回、TA7291P を2つ使いたいわけですから、

固定抵抗器有りの回路だとArduino UNO に PWM 対応ピンが

4つ必要になってしまい D3, D5, D6 の3つでは回路が組めません。



そこで、固定抵抗器を使わずに TA7291P の4, 5, 6番ピンの

3本で制御することを考えます。

TA7291P を3本のピンで制御する場合、4 番ピンの電圧だけで

スピード調整が可能です。

5 番、6番ピンはそれぞれ HIGH or LOW の組み合わせで

正転/反転を指定するだけです。

つまり、TA7291P を2つ制御するために Arduino UNO 側で必要な

ピンはPWM が2本、デジタルピンが4本ということが分ります。



USB Host Shield を使用している状態で Arduino UNO で使用可能なピンは

PWM が D3, D5, D6 の3本、デジタルピンが D0, D1, D2, D4 の4本ありますので

この構成であればギリギリ制御可能です。



なお、スピード調整せずに単に前進/後退/その場回転だけで良ければ

PWM は不要なのでこんなややこしいことを考える必要はありません。



モーター回転方向とキャタピラの動作


今回、制作を簡単にするためにキャタピラを使っていますが、

キャタピラには通常のタイヤにはない「その場回転」という動作があります。

モーターの動作とキャタピラの動作の関係をまとめると次のようになります。


  • 直進

    左モーター:正転

    右モーター:正転

  • 後進

    左モーター:反転

    右モーター:反転

  • 左折

    左モーター:減速正転

    右モーター:正転

  • 右折

    左モーター:正転

    右モーター:減速正転

  • バック左折

    左モーター:減速反転

    右モーター:反転

  • バック右折

    左モーター:反転

    右モーター:減速反転

  • 左回転

    左モーター:反転

    右モーター:正転

  • 右回転

    左モーター:正転

    右モーター:反転



プログラム


Wii リモコンの十字ボタンをキャタピラの動作方向に割り当てて、

Wii リモコン自体を横持ちした場合の左右傾きを右左折角度として使います。



それらの挙動を2個のモーターの制御で実現するプログラムは次のようになります。

Arduino IDE から Arduino UNO に書き込んでおきましょう。



実は、ビデオ撮影時のプログラムをうっかり保管し忘れていたので、

下記のコードはいま書きました。

実機でデバッグしていないため不具合ありましたらご指摘ください。

#include <Wii.h>
#include <usbhub.h>

#define  R_INR  3
#define  R_IN1  1
#define  R_IN2  2
#define  L_INR  6
#define  L_IN1  4
#define  L_IN2  5

USB Usb;
USBHub Hub1(&Usb);
BTD Btd(&Usb);
WII Wii(&Btd,PAIR);

void setup() {
Serial.begin(115200);

// Wii リモコンとの接続待ち
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while(1); //halt
}
Serial.print(F("\r\nWiimote Bluetooth Library Started"));

// Arduino UNO の出力ピンを設定
pinMode(R_INR, OUTPUT);
pinMode(R_IN1, OUTPUT);
pinMode(R_IN2, OUTPUT);
pinMode(L_INR, OUTPUT);
pinMode(L_IN1, OUTPUT);
pinMode(L_IN2, OUTPUT);
}

void loop() {
Usb.Task();

// Wii リモコンとの接続が切れたら終了
if(!Wii.wiimoteConnected) { return; }
if(Wii.getButtonClick(HOME)) {
Serial.println("CLOSE");
Wii.disconnect();
return;
}

// Wii リモコン横持ちでの左右回転を 0~360 で取得
int pitch = Wii.getPitch();
int right = 0;
int left = 0;
if( 0 <= pitch && pitch <= 90 ){
right = constrain( map(pitch, 0, 45, 0, 255), 0, 255 );
}else if( -90 <= pitch && pitch <= 0 ){
left = constrain( map(pitch, 0,-45, 0, 255), 0, 255 );
}else if( 270 <= pitch ){
left = constrain( map(pitch, 360, 315, 0, 255), 0, 255 );
}

if(Wii.getButtonPress(UP)){
// Wii リモコンの上ボタンが押されたら両方のモーターを正転
digitalWrite(R_IN1, HIGH);
digitalWrite(R_IN2, LOW);
digitalWrite(L_IN1, HIGH);
digitalWrite(L_IN2, LOW);

// Wii リモコンが右に傾いている時は右を減速
// 左に傾いている時は左を減速
analogWrite(R_INR,255 - right);
analogWrite(L_INR,255 - left);
}else if(Wii.getButtonPress(DOWN)){
// Wii リモコンの下ボタンが押されたら両方のモーターを反転
digitalWrite(R_IN1, LOW);
digitalWrite(R_IN2, HIGH);
digitalWrite(L_IN1, LOW);
digitalWrite(L_IN2, HIGH);

// Wii リモコンが右に傾いている時は右を減速
// 左に傾いている時は左を減速
analogWrite(R_INR,255 - right);
analogWrite(L_INR,255 - left);
}else if(Wii.getButtonPress(RIGHT)){
// Wii リモコンの右ボタンが押されたら右モーターだけを反転
digitalWrite(R_IN1, LOW);
digitalWrite(R_IN2, HIGH);
digitalWrite(L_IN1, HIGH);
digitalWrite(L_IN2, LOW);
analogWrite(R_INR,255);
analogWrite(L_INR,255);
}else if(Wii.getButtonPress(LEFT)){
// Wii リモコンの左ボタンが押されたら左モーターだけを反転
digitalWrite(R_IN1, HIGH);
digitalWrite(R_IN2, LOW);
digitalWrite(L_IN1, LOW);
digitalWrite(L_IN2, HIGH);
analogWrite(R_INR, 255);
analogWrite(L_INR, 255);
} else {
// ボタンから手を放したら停止
digitalWrite(R_IN1, LOW);
digitalWrite(R_IN2, LOW);
digitalWrite(L_IN1, LOW);
digitalWrite(L_IN2, LOW);
analogWrite(R_INR, 0);
analogWrite(L_INR, 0);
}
}



レゴ


レゴはお好きなように組み立ててください。

問題はギヤボックスから出ているシャフトの太さが

レゴのキャタピラ用ギヤの軸の太さと全く合わない点です。



ホットボンドで穴を埋めるか、ミニ四駆等のピニオンギヤを

削り出すのが簡単です。




以上でラジコン完成です。

100行程度のプログラムで無線通信ラジコンが作れてしまう
Arduino の素晴らしさが伝わりましたでしょうか。



携帯を載せて撮影しても楽しいです。






子どもと一緒に遊ぶために作ったのに、

子どもから全力シカトされている点には突っ込み禁止です。


ギアボックスのシャフトとレゴのギヤを繋ぐための部品を3Dプリンタで出力してみました。



GitHubでソースコードを公開しました。

31 件のコメント:

  1. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    コードをコピペして入れてみると、いくつかエラーが発生しますが、対処法はありますか?

    返信削除
  2. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    エラーメッセージをここにコピペしてください。

    返信削除
  3. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    以下、エラーコードのコピーです。
    Arduino: 1.7.1 (Windows 7), ボード:"Arduino Uno"
    In file included from C:\Users\-\Desktop\arduino-1.7.1\libraries\USB_Host_Shield_20-master/Usb.h:27:0,
    from C:\Users\-\Desktop\arduino-1.7.1\libraries\USB_Host_Shield_20-master/BTD.h:21,
    from C:\Users\-\Desktop\arduino-1.7.1\libraries\USB_Host_Shield_20-master/Wii.h:23,
    from Wii.ino:3:
    C:\Users\-\Desktop\arduino-1.7.1\libraries\USB_Host_Shield_20-master/settings.h:133:176: fatal error: SPI.h: No such file or directory
    #include <SPI.h> // Use the Arduino SPI library for the Arduino Due, RedBearLab nRF51822, Intel Galileo 1 & 2, Intel Edison or if the SPI library with transaction is available
    ^
    compilation terminated.
    コンパイル時にエラーが発生しました。
    This report would have more information with
    "コンパイル中の詳細な出力を表示する"
    ファイル > 設定 で有効にする
    こんなメッセージです。
    なお、プログラム三行目のところに
    サンプルスケッチにあった
    #ifdef dobogusinclude
    #include <spi4teensy3.h>
    #include <SPI.h>
    #endif
    を挿入するとなぜかコンパイルが成功します。
    しかし、モーターの動きが思ったようにはいかず、少し変です。
    あと、出来ればですが、
    ��>スピード調整せずに単に前進/後退/その場回転だけで良ければ
    の回路の図やスケッチも教えていただけると助かります。

    返信削除
  4. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ご指摘の通り、SPI.h などをincludeするので正しいようです。
    私が作った時は古いバージョンのライブラリなので現在のものと多少違っているのかもしれません。
    動きがおかしいのは、どのようにおかしいのかによりますが、、、
    止まったり動いたりするのであれば接触不良だと思うので配線を見直すと良いかと。
    思ったのと違う方向に回るのであれば、モーターのプラスとマイナスを反対にすれば、とりあえず反転させられます。
    スピード調整しない方法についてはWii.hのサンプルコードやTA7291Pの各ピンの意味を参照しながら考えてみてください。
    この場合、Wiiリモコンの加速度センサを使うよりも、十字ボタンをラジコンの操作に割り当てるのが簡単だと思います。
    自分の好みの操作方法になるように試行錯誤するのが自作の醍醐味ですよね!
    ��と、偉そうに言ってみましたが、ただ単に回路を分解してしまってコードを書けないだけです。すみません。)

    返信削除
  5. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    回答ありがとうございます。
    わかりました。あまり人に頼りすぎるのもいけませんね…頑張って自分で考えてみようと思います。
    一つだけ質問です。モータードライバの話ですが、仮に、スピード調節がいらない場合、4番ピンと7番ピン(PWMと5v接続のピン)を接続なしにして、5番ピン、6番ピンのみで正転と反転を操作するやり方で大丈夫でしょうか?
    ArduinoとUSBホストシールドは高価なものなので、壊れてしまうと負担が大きいです。心配なので質問させていただきます。
    お忙しい中何件も返信いただきありがとうございます。今はここだけが頼りになってます。

    返信削除
  6. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    まず、7番(5v)は必須です。
    何故なら、5,6番の制御電圧は相対値として扱われるので、1番(GND)と7番が接続されていて初めて5,6番の入力値がどういう意味なのか分かる、という仕組みだからです。(たぶん)
    で、4番については接続なしだと上手くいかないですが、少し前のページに書いたように5v端子から適当な固定抵抗を挟んで固定電圧を入力してやればOKです。
    私が描いた図ではモーター電源から固定抵抗に繋いでいますが、arduinoの5vから繋いだ方が正しいかもしれません。
    ��単三4本ならどちらでも大差ないですが、9vの角形電池の場合に図の通りだと4番の電圧が高過ぎになってしまうので。)
    その上でarduinoからは5,6番にdigitalWrightでHIGHまたはLOWを書き込む感じですね。
    http://onthehand.blog.fc2.com/blog-entry-3.html
    分かりにくいようでしたら遠慮なくご質問ください。

    返信削除
  7. SECRET: 0
    PASS: ae392cd3ae7764eaf586695bdde7db30
    arduino初心者ですが、大変参考になります。
    とりあえず書いてあるようにラジコンを作ってみるつもりなのですが、そこでいくつか質問があります。
    一つ目はコスト削減の為に、USBホストシールドとトングルを使うのではなく、Bluetoothシールドを使用しようかと検討しております。そういった場合でも十分に運用可能ですか?また、bluetoothシールドを用いた場合、回路に影響はでますか?
    二つ目は第四回に書いてあるプログラムをマイコンボードに書き込もうとするとこのようなエラーメッセージが出ます。まだ自分は実験段階でとりあえず書き込もうとしていて、wiiリモコンもシールドも接続していません。これはプログラムのエラーなのか、ただ自分がwiiなどを接続していないからなのでしょうか?
    wii.ino:1:17: fatal error: Wii.h: No such file or directory
    compilation terminated.
    コンパイル時にエラーが発生しました。
    三つ目は、第三回に載っていたようにサンプルコードをマイコンボードに書き込み、wiiリモコンを認識させますが、その後第四回のプログラムをそのまま上書きしてもよろしいでしょうか?(要するにUSB Host Libraryのサンプルコードは完成したarduinoには書き込まれていない状態ですか?)
    以上の点をご教授願いたいです。

    返信削除
  8. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    私はBluetoothシールドを使ったことは無いのであまり分かりませんが、
    USBホストシールドのBluetoothライブラリと互換性のあるシールドであれば
    私のサンプルコードがそのまま動く可能性があります。
    互換性がない場合、別のBluetoothライブラリが用意されているのだと思いますが、
    そのライブラリをベースにしたWiiリモコン用のライブラリが存在すれば
    比較的簡単にWiiリモコンと繋がると思います。
    Wiiリモコンライブラリが存在しない場合、
    自分でWiiリモコンの通信部分を作る必要があるのでかなり難易度が上がります。
    Wiiリモコンとの接続さえ成功すれば駆動系の回路は同じものが使えると思います。
    ただし、シールドもArduinoのピンを使用するので、
    シールドのデータシートを参照して、ご自身が使用されるピンとシールドが使用するピンがぶつからないようにする必要があります。
    コンパイルエラーの件ですが、Wiiリモコンのライブラリ(Wii.h)がインストールされていない、もしくはリンクに失敗しているようです。
    USBホストシールドの場合はシールドのライブラリをインストールすると一緒に含まれています。
    Bluetoothシールドの場合は前述の通り、製品によって異なります。
    Arduinoの場合、デバイスが接続されていないことが原因でコンパイルエラーになることはあまりありません。
    接続されていない場合はコンパイルに成功するが動作しないだけです。
    プログラムの上書きのご質問についてですが、
    Arduinoはプログラムを書き込むと、それ以前の情報を完全に忘れます。
    ライブラリ類はプログラム毎にリンクされます。
    Raspberry PiなどのLinux系ボードのように、ボードに対するインストールや環境設定の概念はありません。
    Wiiリモコンと接続させる部分は結構トライ&エラーになりがちですが、
    一旦やり方が分かってしまえば色々遊べますので頑張ってください。

    返信削除
  9. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    wii.hがないのですがどこにあるのでしょうか?

    返信削除
  10. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > wii.hがないのですがどこにあるのでしょうか?
    ��つ前の「USB Host Shield で Bluetooth ドングルを使えるようにする」という回で説明している
    USB Host Shield のライブラリを入れると wii.h が入っています。
    http://onthehand.blog.fc2.com/blog-entry-5.html

    返信削除
  11. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    右旋回やバックができないのですがどどうすればいいですか
    そして、サーボモータに問題があるのでしょうか

    返信削除
  12. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    今回このページを見つけて実際につくってみました。
    その中で手こずるところがあり、動きがうまくいきません。
    上の方々の通り、Wiiリモコンの十字キーでの制御がうまくいきませんでした。
    後退が全然できませんでした。
    プログラムと配線はあっているのですが...

    返信削除
  13. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    複数の方が同じハマり方をしているということは、
    私の回路図かコードが何かおかしいんでしょうね。
    単なる勘ですが、右左折制御用変数の left, right って、
    私の使い方だとおかしなことになりませんかね?
    後退の場合はモーターが反転している訳で、
    ってことは left, rightは逆?
    ひとまず、left, right に 0 を代入してみると
    分かるかもしれませんね。
    それでもダメな場合、色々な要素が絡み合っているので、
    次のようにして問題を切り分けてみてはいかがでしょうか。
    (1) Wiiリモコンからの値が期待通りか
    Serial.println などで、Wiiリモコンから取得した値を出力してみる。
    (2) 回路図は本当に信用して良いのか
    下記のページなどを参照しながら、
    モーター一個を正しく制御できるかどうかを
    確認するのが得策かもしれません。
    http://kousaku-kousaku.blogspot.jp/2008/06/arduino-dcta7291p.html?m=1
    (3) 電圧
    上記のページの最後にも書いてありますが
    TA7291P の4番ピンの電圧は電源電圧より
    低くなっている必要があります。
    4番にanalogWriteで255をセットすると
    電源電圧付近になったりして。
    間に適当な抵抗を挟むか、
    200をセットしたら解決したりして…。
    上手くいったら教えてくださいませ。

    返信削除
  14. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    自分はプログラム書込み後 D1端子が Highのまま(オシロで確認したところ)という症状です。
    リモコンからの情報は上下左右をちゃんと認識してます。
    Serial.begin(115200); をコメントアウトすると初期Lowになります。
    何が原因なのでしょうか?

    返信削除
  15. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > 自分はプログラム書込み後 D1端子が Highのまま(オシロで確認したところ)という症状です。
    > リモコンからの情報は上下左右をちゃんと認識してます。
    > Serial.begin(115200); をコメントアウトすると初期Lowになります。
    > 何が原因なのでしょうか?
    下記のフォーラムで全く同じ症状の人がいました。
    http://forum.arduino.cc/index.php?topic=95431.0
    こちらのページ内で「D0」で検索してヒットする箇所がヒントになるかもしれません。
    http://www.ric.co.jp/book/contents/pdfs/948_chap2.pdf
    D0, D1 は RX,TX(データ通信用)を兼ねているようなので、
    PCとUSB接続している間、もしくは接続していなくても
    Serial.begin のある場合は D0, D1 がダメなのかも。
    デバッグしづらいですが、Serial.begin をコメントアウトした上で、
    USB ケーブルも抜いて動作させると解決するのではないでしょうか。

    返信削除
  16. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��iiリモコン側の右ボタンを押したとき、下ボタンを押したときのラジコンの動作が全く一緒になってしまいます。
    回路を変えたり、できることはやってみたのですが、改善できません。
    なにかいい方法ありましたらご教授ください

    返信削除
  17. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��斎藤様
    1個前の過去コメントと同じ問題ではないでしょうか?
    D0,D1はSerialと干渉するのでSerial.printlnをすべてコメントアウトすれば
    解消するのではないかと。
    無茶苦茶デバッグしにくいですが、ピン数に余裕が無いので仕方ないです…。

    返信削除
  18. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ラジコンを前進、後進させることができる段階にはできたのですが、2つのモーターの回るスピードが違うせいで、直進することができません。。。何か改善策はありますでしょうか。
    私が確認できた動作や症状は以下のとおりです。
    ・ArduinoのD4,5,6のピンと繋いだモーターの速度がはやく、D1,2,3のピンと繋いだモーターは遅いため、一方のモーターが劣化していることは考えにくい。
    ・データ通信をするD1を使っているため、うまくいかない。
    ご指摘くだされば、とてもありがたいです(__)

    返信削除
  19. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��高橋様
    片方が動かないならよくあるのですが、速さが違うというケースはなかなか聞かないですね。。。
    問題の切り分け方法としてサクッと思いつくのは次のあたりでしょうか。
    ・Wii.getPitch() の値を確認してみる。
     (何らかの事情で Wii リモコンから取得した
     加速度センサ値の中心が「0」になっていない場合、
     pitch の値に応じてモーター速度に差が出るはず。)
    ・Arduino で analogWrite しているピンを Analog In のピンに直結し、analogRead してみる。
     (analogRead で左右の出力が一致していれば Arduino~モーター間の問題。
      一致しなければ Wiiリモコン~Arduino 間、もしくはプログラムの問題。)
    ・Serial.print をすべて削除してみる。
     (何らかの条件式の内部に Serial.print が入っていると
      時々 D1 が機能しなくなって速度が変わる、、、とか?)
    ・Arduino からモーターまでの配線の接触不良を疑ってみる。

    返信削除
  20. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��/2に質問をした者です。
    モーターの左右での回転速度が違う問題が、こちらの方でも発生しました。
    対策として get pitchのプログラムをまるごと消去しようと考えてみたのですが、
    この際に
    // Wii リモコン横持ちでの左右回転を 0~360 で取得
    int pitch = Wii.getPitch();
    int right = 0;
    int left = 0;
    if( 0 <= pitch && pitch <= 90 ){
    right = constrain( map(pitch, 0, 45, 0, 255), 0, 255 );
    }else if( -90 <= pitch && pitch <= 0 ){
    left = constrain( map(pitch, 0,-45, 0, 255), 0, 255 );
    }else if( 270 <= pitch ){
    left = constrain( map(pitch, 360, 315, 0, 255), 0, 255 );
    }
    この部分だけを切り取った後はほかに加えたほうがいいプログラムなどはございますか?

    返信削除
  21. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    右旋回・後退のときに右側のモーターがまったく動きません。
    前進と左旋回のときは正常に動きます。
    自分はキャタピラが手元になかったのでモーターを4つ取り付けています。
    そしてWiiリモコンの傾きなどが機能している様子もありません。

    返信削除
  22. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    wiiをbluetoothに接続したあとモーターを動かそうとして十字キーを押すと通信が切れてしまうのですがなぜでしょうか。

    返信削除
  23. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��suzuki様
    そもそもArduino UNOではアナログ出力のピン数が足りなくてモーター4個を制御できません。
    ��個ずつ同じ出力を繋ぐこともできなくは無いですがそれでは曲がりません。

    返信削除
  24. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��斎藤様
    > この部分だけを切り取った後はほかに加えたほうがいいプログラムなどはございますか?
    >
    それだけで良いと思います。
    ピッチはそこでしか使っておらず、十字キーの操作とは独立です。

    返信削除
  25. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ��竹下様
    > wiiをbluetoothに接続したあとモーターを動かそうとして十字キーを押すと通信が切れてしまうのですがなぜでしょうか。
    >
    初めて聞く症状ですね。
    Wii リモコンの電池が切れかかっていたりしませんか?

    返信削除
  26. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    電池を変えてみたところ通信が切れる頻度は減ったのですが、十字キーを押した際に信号が出続けてしまいモーターが止まりませんでした

    返信削除
  27. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > 電池を変えてみたところ通信が切れる頻度は減ったのですが、十字キーを押した際に信号が出続けてしまいモーターが止まりませんでした
    たぶん、Bluetoothの接続が切れてますね。
    誰も動作保証していない構成ですから、
    そういう問題を自力で調べて切り抜けて行くのも
    この手の工作の醍醐味ですよね!
    頑張ってください!

    返信削除
    返信
    1. arduino本体が悪かったらしく日本製のものに交換したところ改善されました。

      削除
    2. そんなことあるんですね。
      どこかのピンが接触不良だったのかもしれませんね。

      削除
  28. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    このサイトの構成ではモーター4つを制御することはできないんですね。
    二個ずつ同じ出力につないでいました。
    ではキャタピラ以外でうごかせるものってありますでしょうか。

    返信削除
  29. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    手でタイヤを動かしてみると分かるのですが、
    二個x2だとカーブを曲がれないと思います。
    キャタピラなしで二輪制御の例ですが、
    三輪車にして、制御しないタイヤを
    360度回転するキャスターにするとか。
    ただし、摩擦の影響を受けやすいので上手に作る必要があります。
    あとは空き缶に全部詰め込んで両端に大型タイヤを付けた二輪とか。
    まぁその辺りは本物の車と同じで、
    エンジンの前にちゃんと走る車両を設計するのが
    大切ですし、そこが自作の面白いところでもありますよね。

    返信削除