ラズパイを使ってCAM-PROGRAM ROBOTをリモコン化した

2020年3月3日

さて、TAMIYAの楽しい工作シリーズ「CAM-PROGRAM ROBOT」をモータードライバTA7291Pを使って、ラズパイで制御することはできました。

そこで、以前、戦車をリモコン化(ラズパイ戦車をスマホからコントロールする)したように、このCAM-PROGRAM ROBOTのリモコン化に挑戦してみます。

今回は、プログラム作成の手間を極力減らしたいので、前回使用したプログラムをそのまま利用したいと思います。

また、コントロール画面も、戦車で作成したものをそのまま利用します。

この記事では、リモコン化のための配線から、稼働実験、動作の様子まで、コンパクトに紹介していきます。

どうか最後までご覧ください。

CAM-PROGRAM ROBOTをリモコン化

さて、冒頭で述べたように、CAM-PROGRAM ROBOTをリモコン化するにあたり、実施した内容をコンパクトに紹介していきます。

実施した手順は次の通りです。

  1. 配線の変更
  2. 稼働実験
  3. リモコン始動
  4. 電源を入れ替えて実施

それぞれの内容について、章を分けてご紹介します。

配線の変更

前回使用したプログラムをそのまま利用するには、ラズパイ制御したプログラムから、少し配線を変更しなければなりません。

即ち、ピン12及び32を使用しないようにします。

その代わりに、ラズパイの3.3Vをつなぎ変えます。

TA7291P のデータシートを示します。

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 ですね。

webiopi起動画面の画像

CAM-PROGRAM ROBOT を逆さにおいて、スマホから操作を行い、正しく稼働するか試します。

正常に稼働しました。

リモコン始動

それでは、再び、ラズパイ、電池ボックス、モバイルバッテリを CAM-PROGRAM ROBOT に積載して、リモコンから動かしてみます。

おー、動きますね。

しかし、よく見ると、右回り、左回りの際、右のキャタピラが動いていません!フム・・・。

本体を持ち上げると、キャタピラは問題なく動くので、モーター起動用の電池の出力が足りないのかもしれませんね。

電源をアップしてやってみる価値はありそうです!

電源を入れ替えて実施

危険!
これをやると、ラズパイに過電流が流れて、ラズパイが壊れます!

電源として、積層乾電池(006P型 9V)を採用します。

ネットでもいろいろと調べたのですが、お値段とかを考えて、最終的に100均のものになりました。

積層乾電池の画像

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

バッテリースナップの画像

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

電源差し替えの画像

そしてリモコンスタートです。

見事に動きましたね。大成功です。

モーター制御からリモコン操作に至る過程の記事です。他の記事もぜひ、ご覧ください。

最後に

今回は、CAM-PROGRAM ROBOTをRaspberry Piを用いて、スマホを用いたリモコン化する手法を紹介しました。

従来はPCと有線接続しなければ操作できなかったロボットに対し、ラズパイの無線通信機能を活用することで、Wi-Fi経由での遠隔操作が可能となり、作業場所の自由度が格段に向上しました。

また、Pythonなどのスクリプトを組み合わせることで、自動制御やUI操作の拡張も視野に入ります。

今後は、カメラや言葉との連携によるさらなる自律化にも発展可能です。

この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら