GPIOでLチカさせるのがこの世界の「Hello World.」らしいので、やってみた。
ただし、パーツ箱を探したら、LEDは見つけたものの、抵抗が見つからない。
なので小信号用Siダイオードで代用した。
LEDとSiダイオードを直列につないで、GPIOのピンとグラウンドの間に挿入、GPIOコマンドでONにしたらLEDが点灯した。
Lチカは基本‥‥とは言え、すぐに飽きるので、これまた“定番”の模型のタンクを動かすことにした。
検索してみると「タミヤ 楽しい工作シリーズ No.108 タンク工作基本セット」が見つかったが、1モーターなので直進・後進しかできない。ならば、バラバラに以下のキットを購入することにした:
また、2つのモーターのドライバとして、秋月電子で「TB6612使用 DUAL DCモータードライブキット」を購入した。
今回は、単に直進・後進・左折・右折などができればよいと考え、速度制御は敢えて考えないことにした。
TB6612の真理値表を見ると、左右のモーターそれぞれが CWまたは CCWとなるよう IN1、IN2をセットし、PWM、STBYは常に Hのままとすれば正転、逆転する(手抜きですみません)。
念のため、接続図を載せておく。
基盤図、回路図の AO1-AO2、BO1-BO2にDCモーターがそれぞれ接続される。
GPIO pin #01(+3.3V)から引けるか調べると、最大500mAらしいが、ラズパイにあまり負荷をかけたくなかったので、VMには単3電池×2本=3Vを供給した。
さぁ、いよいよラズパイのGPIOとTB6612を接続し動作チェック。
最初はラズパイに「gpio readall」コマンドを与えて、現時点のGPIO設定やステータスをチェックする。
BCMはGPIO番号、wPiはWiringPiと呼ばれるC言語のライブラリ用、真ん中のPhysicalが基板上のピン番号を表すそうだ。
今回は、GPIO.BCMで #17、#27、#23、#24 をそれぞれ TB6612の AIN1、AIN2、BIN1、BIN2 に接続した。
ターミナル(LXTerminal)から、例えば
「gpio -g mode 17 out」は、GPIO #17ポートを出力用に設定
「gpio -g write 17 1」は、GPIO #17ポートの値を 1 (HIGH)に設定
という具合にそれぞれのポートについて設定していき、DCモーターが設定どおりに動作すればOK。
基本的な動作チェックができたところで、当面の目標「Scratchでコントロール」を実行する。
PythonなどGPIOを制御する方法は他にもあるが、子供たちが取り組みやすい「Scratch」をまず取り上げる。
予め組み込まれている「Scratch」と「Scratch 2」のうち、「Scratch」には GPIOサーバとの間でコマンド送信やデータ取得などが行える「Scratch GPIO」が含まれている。
メニューから[プログラム]-[Scratch]を選択すると、Scratch 1.4 (NuScratch)が起動する。
まず[編集]-[GPIOサーバーを開始]をクリック、その後、作成したいプログラムに応じて Scratch“部品”を組み合わせていく。
基本的には、「制御」にある「~を送る」という部品を編集して、例えば「config17out」というように設定する。
これは上述の「GPIO #17ポートを出力用に設定」と同じ意味になる。
また「gpio17off」は「GPIO #17ポートの値を 0 (LOW)に設定」という意味である。