ラズパイを使ってCAM-PROGRAM ROBOTをリモコン化した
さて、TAMIYAの楽しい工作シリーズ「CAM-PROGRAM ROBOT」をモータードライバTA7291Pを使って、ラズパイで制御することはできました。
そこで、以前、戦車をリモコン化(ラズパイ戦車をスマホからコントロールする)したように、このCAM-PROGRAM ROBOTのリモコン化に挑戦してみます。
今回は、プログラム作成の手間を極力減らしたいので、前回使用したプログラムをそのまま利用したいと思います。
また、コントロール画面も、戦車で作成したものをそのまま利用します。
この記事では、リモコン化のための配線から、稼働実験、動作の様子まで、コンパクトに紹介していきます。
どうか最後までご覧ください。
CAM-PROGRAM ROBOTをリモコン化
さて、冒頭で述べたように、CAM-PROGRAM ROBOTをリモコン化するにあたり、実施した内容をコンパクトに紹介していきます。
実施した手順は次の通りです。
- 配線の変更
- 稼働実験
- リモコン始動
- 電源を入れ替えて実施
それぞれの内容について、章を分けてご紹介します。
配線の変更
前回使用したプログラムをそのまま利用するには、ラズパイ制御したプログラムから、少し配線を変更しなければなりません。
即ち、ピン12及び32を使用しないようにします。
その代わりに、ラズパイの3.3Vをつなぎ変えます。
TA7291P のデータシートを示します。

配線図も示します。

これによるプログラムも載せます。
ちなみに、このソースは、「ラズパイ戦車をスマホからコントロールする」で使用したプログラムと全く同じものです。
異なるのはピン番号だけです。
import webiopi
# Debug
webiopi.setDebug()
GPIO = webiopi.GPIO
# GPIO 18,23が左モータ、GPIO 24,25が右モータ
MOTOR_L1 = 23
MOTOR_L2 = 24
MOTOR_R1 = 14
MOTOR_R2 = 15
duty=50
# WebIOPi起動時CALL
def setup():
webiopi.debug("Script with macros - Setup")
# GPIOのセットアップ
GPIO.setFunction(MOTOR_L1, GPIO.PWM)
GPIO.setFunction(MOTOR_L2, GPIO.PWM)
GPIO.setFunction(MOTOR_R1, GPIO.PWM)
GPIO.setFunction(MOTOR_R2, GPIO.PWM)
# 静止状態
GPIO.pwmWrite(MOTOR_L1, 0)
GPIO.pwmWrite(MOTOR_L2, 0)
GPIO.pwmWrite(MOTOR_R1, 0)
GPIO.pwmWrite(MOTOR_R2, 0)
#
def loop():
webiopi.sleep(5)
# WebIOPi終了時
def destroy():
webiopi.debug("Script with macros - Destroy")
# GPIO関数のリセット(入力にセットすることで行う)
GPIO.setFunction(MOTOR_L1, GPIO.IN)
GPIO.setFunction(MOTOR_L2, GPIO.IN)
GPIO.setFunction(MOTOR_R1, GPIO.IN)
GPIO.setFunction(MOTOR_R2, GPIO.IN)
#defult function
@webiopi.macro
def forward():
GPIO.pwmWrite(MOTOR_L1, duty)
GPIO.pwmWrite(MOTOR_L2, 0)
GPIO.pwmWrite(MOTOR_R1, duty)
GPIO.pwmWrite(MOTOR_R2, 0)
webiopi.debug("foward")
@webiopi.macro
def left():
GPIO.pwmWrite(MOTOR_L1, 0)
GPIO.pwmWrite(MOTOR_L2, duty)
GPIO.pwmWrite(MOTOR_R1, duty)
GPIO.pwmWrite(MOTOR_R2, 0)
webiopi.debug("left")
@webiopi.macro
def stop():
GPIO.pwmWrite(MOTOR_L1, 0)
GPIO.pwmWrite(MOTOR_L2, 0)
GPIO.pwmWrite(MOTOR_R1, 0)
GPIO.pwmWrite(MOTOR_R2, 0)
webiopi.debug("stop")
@webiopi.macro
def right():
GPIO.pwmWrite(MOTOR_L1, duty)
GPIO.pwmWrite(MOTOR_L2, 0)
GPIO.pwmWrite(MOTOR_R1, 0)
GPIO.pwmWrite(MOTOR_R2, duty)
webiopi.debug("right")
@webiopi.macro
def back():
GPIO.pwmWrite(MOTOR_L1, 0)
GPIO.pwmWrite(MOTOR_L2, duty)
GPIO.pwmWrite(MOTOR_R1, 0)
GPIO.pwmWrite(MOTOR_R2, duty)
webiopi.debug("back")
コントロール画面の HTML も同様のものを使用します。
こちらは全く同じなので、コードは載せません。
「ラズパイ戦車をスマホからコントロールする」を参照してください。
WebIOPi サービスの設定の変更(sudo vi /etc/webiopi/config)も忘れずに実施してくださいね。
稼働実験
前回も実施したように、稼働実験をします。
起動前に、webiopiを起動することを忘れずに実施しましょう。
パスワードは raspberry ですね。

CAM-PROGRAM ROBOT を逆さにおいて、スマホから操作を行い、正しく稼働するか試します。
正常に稼働しました。
リモコン始動
それでは、再び、ラズパイ、電池ボックス、モバイルバッテリを CAM-PROGRAM ROBOT に積載して、リモコンから動かしてみます。




おー、動きますね。
しかし、よく見ると、右回り、左回りの際、右のキャタピラが動いていません!フム・・・。
本体を持ち上げると、キャタピラは問題なく動くので、モーター起動用の電池の出力が足りないのかもしれませんね。
電源をアップしてやってみる価値はありそうです!
電源を入れ替えて実施
危険!
これをやると、ラズパイに過電流が流れて、ラズパイが壊れます!
電源として、積層乾電池(006P型 9V)を採用します。
ネットでもいろいろと調べたのですが、お値段とかを考えて、最終的に100均のものになりました。

これを使用するには、バッテリスナップというものが必要になります。こちらは、ネットで調達しました。

そして、こちらの電源を差し替えました。

そしてリモコンスタートです。
見事に動きましたね。大成功です。
モーター制御からリモコン操作に至る過程の記事です。他の記事もぜひ、ご覧ください。
- bluetooth 通信でリモコン操作 pi3 と zero WH で通信を行う
- ラズパイでリモコンタンク製作準備!モーター制御成功!
- 戦車を製作して、ラズパイでリモートコントロールしてみた!
- スマホから戦車を動かす!準備編/WobIOpiセットアップ
- ラズパイ戦車をスマホからコントロールする
- TAMIYAのロボット工作キットをラズパイで制御する!準備編
- TAMIYAのロボット工作キットをラズパイで制御する!実践編
- ラズパイを使ってCAM-PROGRAM ROBOTをリモコン化した 本記事です
- リモコンCAM-PROGRAM ROBOTにカメラを搭載しようとしたが・・!
- えれェ小さなモータードライバーを使ってモーターを制御してみた
最後に
今回は、CAM-PROGRAM ROBOTをRaspberry Piを用いて、スマホを用いたリモコン化する手法を紹介しました。
従来はPCと有線接続しなければ操作できなかったロボットに対し、ラズパイの無線通信機能を活用することで、Wi-Fi経由での遠隔操作が可能となり、作業場所の自由度が格段に向上しました。
また、Pythonなどのスクリプトを組み合わせることで、自動制御やUI操作の拡張も視野に入ります。
今後は、カメラや言葉との連携によるさらなる自律化にも発展可能です。
ディスカッション
コメント一覧
まだ、コメントがありません