(35連休)17日目:スマホで操作するラジコンをRaspberry Piで作った
「Raspberry Pi使って制御するプラレールっぽい電車」を作るのを目指しているなかでの過程の一つです。
前例が既に数多くありますが、今回はまずは電車ではなく、TAMIYAの楽しい工作シリーズを使ってラジコンを作りました。
作ったものと動いているところ
Raspberry Piでつくる スマホで操作するラジコン - YouTube
こんな感じです。スマホで前進、後退、右旋回、左旋回が指示できる、というのがやれることのすべてです。超音波距離センサーはまだ接続していませんが、いずれOpenCVとあわせて自動運転に使いたいと思っています。こいつのおかげで目みたいに見えて、やたらと愛着が湧いてきてしまった・・・。ハンダ付けをやったことがなくて無理矢理ブレッドボードで作った結果、コードがぴょんぴょんでているところもまた愛嬌があります。
ディズニーのWALL-Eみたいな感じ。
部品群
無線化しないと走れないのですが、モバイルバッテリーなど買っていないのでまだいろいろと有線です。曲がったりさせたかったので、ツインモーターギヤーボックスにしました。
配線
「LEDを光らせてみる(※)」すらつい最近やったばかりの私にとって、モータードライバの配線は大変でした。
(※)先日の記事
(35連休)12日目:Raspberry Pi(はじめての電子工作①:WEBIOPiでスマートフォンでLEDを点灯させるところまで) - hsuetsugu’s diary
(35連休)13日目:Raspberry Pi(はじめての電子工作②:WEBIOPi、ApacheとphpでLEDを制御) - hsuetsugu’s diary
こんな配線をブレッドボードでやっている記事が見つからなくて、電源系統がふたつのときブレッドボードでどう配線するのかなあ、とか少し迷いました。昔やった電池と抵抗と豆電球つなぐような回線図、今になって自分で書いてみることになるとは思わなかったです。ほんと大学でもっと勉強すればよかった。
- モータードライバ1(左側)
1)GND:GND
2)OUT1:左側モーターへ
3)- :無接続
4)Vref:抵抗を経由で外部電源の+端子(抵抗は8番目につなげる)
5)IN1:GPIO 27
6)IN2:GPIO 17
7)Vcc:5V
8)Vs:外部電源(乾電池4本)の+端子
9)-:無接続
10)Out2:左側モーターへ
- モータードライバ2(右側)
1)GND:GND
2)OUT1:右側モーターへ
3)- :無接続
4)Vref:抵抗を経由で外部電源の+端子(抵抗は8番目につなげる)
5)IN1:GPIO 23
6)IN2:GPIO 24
7)Vcc:5V
8)Vs:外部電源(乾電池4本)の+端子
9)-:無接続
10)Out2:右側モーターへ
組み立て
上の動画の通りですが、下段にツインモーターギアボックスと電池を配置し、上段にRaspberryPiとブレッドボードを配置しています。ユニバーサルプレート同士は上述のスペーサー、プラネジ、ナットを使って接続しています。ブレッドボードなども固定していないので、今はスペーサーを適当にはめ込んでなるべく安定するようにしています。
ここからさらに無線化でモバイルバッテリーとUSBハブをのせるとなると確実に3段構成になってしまう・・・。
ソフトウェアの実装
ソフトウェアとしては、LEDを制御したときと同じようにやっています。LEDでやったときはapacheをWEBサーバーとして使いましたが、結局apacheは使わずに、WEBIOPiの簡易サーバーを使うことにしました。
コードはほとんど下記のサイトのものを参考にさせてもらったので、ここでは記載しません。
http://www.hiramine.com/physicalcomputing/rctank_raspi_wifi/07_implementation.html
pythonで定義した関数をjsから簡単に呼び出せるように、マクロをWebIOPiサーバーにこんな簡単に登録できるとは知らなかった・・・。非常に便利です。公式Tutorialにちゃんと書いてありますが。
Tutorial_Macros - webiopi - Internet of Things framework - Google Project Hosting
Tutorial_Basis - webiopi - Internet of Things framework - Google Project Hosting