TAMIYAのロボット工作キットをラズパイで制御する!実践編

2020年2月4日

それでは、CAM-PROGRAM ROBOT を製作しましょう。

設計図に従って作成すれば、問題なく組みあがると思います。

ギヤケース、モーターの取り付けたの説明書です。

実際に出来上がったギヤケースがこれです。

CAM-PROGRAM ROBOT は、基本的にプログラムバーというものを使用して、ロボットの動きを制御します。

Aタイプ、Bタイプが選べますが、今回はラズパイで制御するので、タイプ選びは不要です。そのため、今回は、ステアリングレッグ(Aタイプで使用)という部品の取付けは中止しました。

キャタピラ(設計図には、履帯※の作成と書いてあります)を作成します。

キャタピラは、8コマ、10コマ、30コマの3本を組み合わせるんですが、止め方がちょっと面倒ですが、落ち着いて行えば問題ないと思います。

さらに、アーム、ルーフを取り付けて完成です。キャタピラーというのは、登録商標なんですね。

※装軌車両において、金属の板を帯状に連結して車輪に履かせた走行装置。 履帯のほか、無限軌道、キャタピラー、クローラー、トラックなどの呼び方がある。 一般によく用いられる「キャタピラー」は、アメリカのキャタピラー社の登録商標である 【ピクシブ百科事典】参照

ご覧のように完成しました。

スポンサーリンク

モータ稼働のテスト

ラズパイを CAM-PROGRAM ROBOT に組み込む前に、モーターの稼働テストをしましょう。

CAM-PROGRAM ROBOT が動き出さないよう、逆さにして机に置きます。

次に、CAM-PROGRAM ROBOT のモーターからのジャンパ線を、前回使用したブレッドボードに接続します。

これで準備が整いました。

前回、使用したプログラムを実行してみます。

左右のキャタピラが同方向に動いた後、一旦止まって、先ほどとは逆方向に動くことが確認できました。


RaspberryPi zero WH を搭載

CAM-PROGRAM ROBOT にラズパイを搭載しましょう。
設計図に、ユニバーサルプレートの設定方法が書いてあります。

これに従い、ユニバーサルプレートを取り付けます。

まずは、ルーフを取り外します。

突起をユニバーサルプレートの穴に差し込みます。

水色の部品をロボットにセットすることで、ユニバーサルプレートをセットできます。

横から見るとこんな感じです。

取り付けたユニバーサルプレートに、ブレッドボードを置きます。

ブレッドボードの空いたところに、zero WH を両面テープで貼り付けます。

電池ボックスは、奥にセットします。

これで、RaspberryPi zero WH を搭載できました。

走行テスト

走行テスト用プログラム

前後に走らせるだけでは面白くないので、次の順に走行させてみます。

  • 前進 ⇒ 右回転 ⇒ 後進 ⇒ 左回転

右回転、左回転は、キャタピラの動く方向を左右で逆にすれば実現できます。
プログラムソースを以下に示します。

# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
time.sleep(3)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT) #ピン番号8を設定
GPIO.setup(10, GPIO.OUT) #ピン番号10を設定
GPIO.setup(12, GPIO.OUT) #ピン番号12を設定
GPIO.setup(16, GPIO.OUT) #ピン番号16を設定
GPIO.setup(18, GPIO.OUT) #ピン番号18を設定
GPIO.setup(32, GPIO.OUT) #ピン番号32を設定
pwmR = GPIO.PWM(12, 50)
pwmR.start(0)
pwmL = GPIO.PWM(32, 50)
pwmL.start(0)
#前進
pwmR.ChangeDutyCycle(0)
GPIO.output(8, 1)
GPIO.output(10, 0)
pwmL.ChangeDutyCycle(0)
GPIO.output(16, 1)
GPIO.output(18, 0)
pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(3) #前進の距離を調整
#ストップ
GPIO.output(8, 0)
GPIO.output(10, 0)
GPIO.output(16, 0)
GPIO.output(18, 0)
time.sleep(3)
#右回転
pwmR.ChangeDutyCycle(0)
GPIO.output(8, 1)
GPIO.output(10, 0)
pwmL.ChangeDutyCycle(0)
GPIO.output(16, 0)
GPIO.output(18, 1)
pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(2) #回転時間調整
#ストップ
GPIO.output(8, 0)
GPIO.output(10, 0)
GPIO.output(16, 0)
GPIO.output(18, 0)
time.sleep(3)
#後退
pwmR.ChangeDutyCycle(0)
GPIO.output(8, 0)
GPIO.output(10, 1)
pwmL.ChangeDutyCycle(0)
GPIO.output(16, 0)
GPIO.output(18, 1)
pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(3) #後退の距離を調整
#ストップ
GPIO.output(8, 0)
GPIO.output(10, 0)
GPIO.output(16, 0)
GPIO.output(18, 0)
time.sleep(3)
#左回転
pwmR.ChangeDutyCycle(0)
GPIO.output(8, 0)
GPIO.output(10, 1)
pwmL.ChangeDutyCycle(0)
GPIO.output(16, 1)
GPIO.output(18, 0)
pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(2) #回転時間調整
pwmR.stop()
pwmL.stop()
GPIO.cleanup()
time.sleep(1)

実行

それでは、このプログラムを実行してみます。

上記に示した通りに動きましたね。

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

スポンサーリンク
この記事を書いた人

60爺

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