2016年6月17日金曜日

Raspberry Pi上のScratchでDCモーターを制御してみた

0. はじめに

前回のエントリ「NOOBS 1.9.2でインストールしたRaspbian (jessie) 上のScratchで日本語入力を可能にしてみた」にて、Raspberry Pi上のScratchを使えるようになりましたので、本来の目的に戻り、ScratchでGPIOにアクセスしてみました。

目標は、DCモーターを一つ搭載したタンク型模型をScratchから操作することです。タンク型模型は下図のようにタミヤの楽しい工作シリーズで作成しました。


このタンク型模型をスプライトの動きに合わせて左右にコントロールしている様子を示した動画がこちらです。


1. 回路とプログラム

まず、作成した回路はこちら。モータードライバTA7291Pを用いています。GPIO 25と24からソフトウェアPWM信号を出力する回路としています。



そして、この回路に対して作成したプログラムは下図のようになります。

スプライトの動き(「向き」)が反転するたびに、「向き」は-90と90との間を切り替わります。それに応じてモータードライバへの出力を切り替えるプログラムとなっています。

プログラム動作中にスペースキーが押されると、モーターを止め、アプリケーションを終了しています。


2. ソフトウェアPWMについて

プログラム作成には、「Raspberry Piではじめる どきどきプログラミング」および公式のドキュメント「SCRATCH GPIO」を参考にしました。

公式のドキュメントでは、PWMの指定法について「gpio + pin number + pwm + [ 0..1024 ] 」と書いてあったので、0~1024でデューティ比を指定するのかと最初は思いました。

しかし、試してみるとどうも「0~256」程度の範囲がデューティ比0%~100%に対応しているようでした。上記のプログラムでは、デューティ比50%に相当する値128を用いています。

さらに、そのソフトウェアPWM信号の周波数ですが、オシロスコープで波形を見たところ、800Hzでした。100Hz程度だろう、と思っていたので、思いのほか高い周波数で驚きました。

また、下図では値128に対応するデューティ比が確かに50%程度になっていることも観察できます。

(追記:しかし、これはこの時期のScratchのバグであり、バグが修正されたバージョンでは1024でデューティ100%、512でデューティ50%になっているはずです)


3. 終わりに

そのようなわけで、ScratchでGPIOにアクセスしてDCモーターを制御することができました。

これにより、タミヤの楽しい工作シリーズの様々な模型をScratchから操作できます。うまく使うと、小中学生のプログラミングの教材として面白いものができるのではないでしょうか?

こちらもどうぞ



「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

0 件のコメント:

コメントを投稿