※この記事は公開から時間が経っているため、現在の環境とは内容が異なる場合があります。
ラズベリーパイ(Raspberry Pi Zero WH)とScratch(スクラッチ)を使って、チェーンプログラムロボットを操作できるようにします。
\ 学会発行誌の謝辞に掲載いただきました! /
このページのURLを「電子情報通信学会」発行誌 の「Raspberry PiとSCRATCHでロボットを動かそう」
の謝辞に掲載していただきました!!
うさたんすごい!
まあるありがとうございます!
Scratchの基本的な使い方は、こちらで紹介しています。

今回の制作内容
今回は、Scratchの操作画面からRaspberry Pi Zero WHのGPIOを動かし、モータードライバを通してロボットの左右のモーターを回します。

大まかな流れは、次の通りです。
- チェーンプログラムロボットを組み立てる
- Raspberry Pi Zero WH、ブレッドボード、モバイルバッテリーを載せる
- モータードライバ TA7291P を使って左右のモーターを制御できるようにする
- Scratchで前後左右と停止の操作ボタンを作る
- ScratchのスクリプトでGPIOをON/OFFする
- ロボットが前進、バック、左右に曲がるか動作確認する
Raspberry Piでロボットを動かすと聞くと難しそうに感じますが、考え方はシンプルです。
Scratchでボタンを押すと、Raspberry PiからGPIO信号が出ます。その信号をモータードライバが受け取り、左右のモーターに流す電気を切り替えます。
左右のモーターの回し方を変えることで、前に進んだり、後ろに下がったり、左右に曲がったりできます。
準備するもの
今回使うものは、次の通りです。
- Raspberry Pi Zero WH
- microSDカード
- microUSB電源ケーブル
- パソコン
- ブレッドボード
- ジャンパーワイヤー
- 抵抗
- モータードライバ TA7291P
- モバイルバッテリー
- カットしたUSBケーブル
- チェーンプログラムロボット
- ユニバーサルプレート
Raspberry Pi Zero WH
Raspberry Pi Zero WHは、初期設定と環境設定が済んだものを使います。



microSDカード
Raspberry PiのOSやプログラムを保存するために、microSDカード を使います。

microUSB電源ケーブル
Raspberry Pi Zero WHの電源用に、microUSB電源ケーブルを使います。

パソコン
プログラム作成やブラウザでの動作確認に使います。

ブレッドボード
ブレッドボード は、はんだ付けをしなくても電子部品を差し込んで配線できるボードです。

ジャンパーワイヤー
ジャンパーワイヤー は、Raspberry Piとブレッドボード、電子部品同士をつなぐために使います。

抵抗
抵抗は、モータードライバの入力まわりで使います。

モータードライバ TA7291P
モータードライバは、モーターの回転方向や回転速度を制御するために使います。

モバイルバッテリー
ロボットを動かすため、2ポート出力のモバイルバッテリーを使います。

ユニバーサルプレート
ユニバーサルプレートは、穴の開いた透明のプレートです。
Raspberry Pi、ブレッドボード、モバイルバッテリーなどを固定するために使います。
カットしたUSBケーブル
モバイルバッテリーからモータードライバに電源をとるためのケーブルです。
本当は、電源用マイクロUSBコネクタDIP化キット(要はんだ付け 130円)を使って、 モバイルバッテリー → ブレッドボード の接続をしたかったのですが、手元にありません。
130円の部品を買うのに送料500円かかってしまうのも困るので、次回購入したいと思います。秋月電子通商の隣に住みたいです。
近所のダイソーでUSBケーブルを購入してきました。

ニッパーとカッターでUSBケーブルをカットして外側の黒いゴムの被覆をとりました。
モバイルバッテリーでArduinoとモーターを動かすと導通チェックというサイトを参考にさせていただきました。ありがとうございます。

USBコネクタのGNDが黒、VSSが赤い方の電線に繋がっていることを、導通チェックで確認しました。

チェック方法は次の通りです。
テスターをこの写真のように接続して電源をONします。

- テスターの赤と黒の端子の先をくっつけてピーっと鳴ることを確認する
- USBコネクタのGNDと被覆をとったケーブルの黒い方の電線をテスターの端子にくっつけて、ピーっと鳴ることを確認する
- USBコネクタのVSSと被覆をとったケーブルの赤い方の電線をテスターの端子にくっつけて、ピーっと鳴ることを確認する
被覆をとった電線部分をねじってまっすぐにして、そのままブレッドボードに挿します。
チェーンプログラムロボット
今回使うのは、自分で組み立てるチェーンプログラムロボットです。

付属のチェーンの組み合わせを変えることで、「前進」「右カーブ」「左カーブ」といった動きをプログラミングできます。
作るのはもちろん楽しいのですが、さらに改造しやすいところも魅力です。
このロボットを少し改造して、ラズベリーパイ(Raspberry Pi Zero WH)で動かします。
ロボットの改造ポイント
チェーンプログラムロボットは、そのままではRaspberry Piを載せるスペースが足りません。
そこで、ユニバーサルプレートを追加し、Raspberry Pi Zero WHやブレッドボードを載せられるようにしています。

変更した箇所は、主に次の4つです。
- 頭の後ろにRaspberry Pi Zero WHを設置
- 前面にユニバーサルプレートとミニブレッドボードを固定
- モバイルバッテリーを搭載
- 右側の車輪ストッパー(組立説明図のB8)を逆向きにする
もともとは、右側の車輪の軸はチェーンを読み込むために後ろ向きに回転し、車輪自体は空回りするように止めます。
この車輪を止めているパーツを逆向きにして、空回りしないように変更します。

配線方法
ロボットの左右のモーターを動かすために、モータードライバ TA7291P を2つ使います。
片方のモータードライバで左モーター、もう片方で右モーターを制御します。
回路図
回路図はこちらです。

左右のタイヤのモーター2つ分、同じ考え方の回路になっています。
- GPIO2 / GPIO3:左モーター側
- GPIO17 / GPIO27:右モーター側
- モバイルバッテリーの5V:モーター用の電源
- GND:Raspberry Pi側とモーター用電源側で共通にする
Raspberry PiのGPIOから出した信号を、TA7291Pの入力端子へ入れます。
TA7291Pは、その信号に合わせてOUT1 / OUT2からモーターへ電流を流します。
配線図
ブレッドボード上の配線図はこちらです。

配線の写真
実際の配線を見ると、このようになっています。
透明のユニバーサルプレートに、ミニブレッドボードとモバイルバッテリーを載せています。
輪ゴムやビニタイも使いながら、なんとか固定しています。

前に積んでいるカメラは、Scratch1.4で使えませんでした。他の方法で使えるよう考えます。
上から見ると、頭の後ろにRaspberry Pi Zero WHがあります。

側面の写真です。少し後ろに長くなってしまいました。


Scratchでプログラミング
配線とロボットの準備ができたら、Scratchで操作画面を作ります。
今回作る操作は、前進、バック、左に曲がる、右に曲がる、停止の5つです。

Scratchのボタンをクリックして操作するだけでなく、キーボードの矢印キーやスペースキーでも操作できるようにします。
操作画面の作成
まずは、Scratchで操作画面を作ります。
「コスチューム」タブの「ペイント」ボタンをクリックします。

表示されたペイントエディタで絵を描きます。

「すとっぷ」「まえ」「うしろ」「ひだり」「みぎ」という5つのスプライトを作成しました。

前に進む
次に、各スプライトにスクリプトを作成します。
まずは「まえ」スプライトを選択した状態で、「スクリプト」タブをクリックします。
「まえ」スプライトをクリックするか、上向き矢印キーを押すと前進するようにします。

左右のタイヤが前に進むように、gpio2とgpio17をONにします。

「config2outを送る」などの出力設定がなくても動いたため、ここでは省略しています。
環境によっては、GPIOを出力に設定する処理が必要になる場合があります。
右に曲がる
次は「みぎ」スプライトを選択した状態で、「スクリプト」タブをクリックします。
「みぎ」スプライトをクリックするか、右向き矢印キーを押すと右に曲がるようにします。
左のタイヤだけ前に進ませるように、gpio2をONにします。

左に曲がる
「ひだり」スプライトをクリックするか、左向き矢印キーを押すと左に曲がるようにします。
右のタイヤだけ前に進ませるように、gpio17をONにします。

バックする
「うしろ」スプライトをクリックするか、下向き矢印キーを押すと後ろに下がるようにします。
左右のタイヤが後ろに進むように、gpio3とgpio27をONにします。

ストップする
「すとっぷ」スプライトをクリックするか、スペースキーを押すと止まるようにします。
停止するときは、すべての信号をOFFにします。

Scratchでプログラムを実行する
スクリプトができたら、GPIOサーバーを開始します。
メニューバーから、次の順にクリックします。
[編集] → [GPIOサーバーを開始]
GPIOサーバーを開始したら、操作画面のボタンやキーボードでロボットを動かします。
- 「まえ」または上向き矢印キー:前進
- 「うしろ」または下向き矢印キー:バック
- 「ひだり」または左向き矢印キー:左に曲がる
- 「みぎ」または右向き矢印キー:右に曲がる
- 「すとっぷ」またはスペースキー:停止

VNCを使うと、スマホからも操作することができます。
ただ、ロボットを動かしながら操作するなら、パソコンからキー操作する方が扱いやすいです。
動作確認
まずは、前進しているところを確認します。
右に行ったり、左に行ったり。操作してみると、なかなか思い通りに動かすのが難しいです。
コースを作って、トンネルをくぐれるか試してみました。
ロボットが実際に動くと、Scratchのボタン操作とモーターの動きがつながって見えるので、ただ画面の中で動かすよりもずっと手応えがあります。
スラロームを通ったり、障害物を置いたり、タイムを測ったりすると、同じロボットでもいろいろな遊び方ができます。
まとめ
今回は、Raspberry Pi Zero WHとScratchを使って、チェーンプログラムロボットを前後左右に動かしました。
流れをまとめると、次のようになります。
- チェーンプログラムロボットを組み立てる
- Raspberry Pi Zero WH、ブレッドボード、モバイルバッテリーを載せる
- モータードライバ TA7291P で左右のモーターを制御する
- Scratchで操作ボタンを作る
- GPIOをON/OFFして前後左右に動かす
- 動作確認しながら、思い通りに動くか試す
Scratchは、コードを文字で書く代わりにブロックを組み合わせるので、操作とロボットの動きの関係を確認しやすいです。
LEDのON/OFFだけでなく、モーターの制御まで進むと、Raspberry Piから外のものを動かしている感覚が一気に強くなります。
画面で操作した内容がGPIOに出力され、モータードライバを通ってロボットの動きになる。
この考え方は、次にPythonやJavaScriptでロボットを操作する内容にもつながります。
次の記事では、このロボットをPythonとJavaScriptで動かすところに進みます。

関連するラズベリーパイ記事や制作記録はこちらです。






