hsuetsugu’s diary

ITの技術的なことに関して主に書きます。Rとpythonとd3.jsとAWSとRaspberryPiあたりを不自由なく使いこなせるようになりたいです。

(35連休)17日目:スマホで操作するラジコンをRaspberry Piで作った

「Raspberry Pi使って制御するプラレールっぽい電車」を作るのを目指しているなかでの過程の一つです。

前例が既に数多くありますが、今回はまずは電車ではなく、TAMIYAの楽しい工作シリーズを使ってラジコンを作りました。

作ったものと動いているところ


Raspberry Piでつくる スマホで操作するラジコン - YouTube

こんな感じです。スマホ前進、後退、右旋回、左旋回が指示できる、というのがやれることのすべてです。超音波距離センサーはまだ接続していませんが、いずれOpenCVとあわせて自動運転に使いたいと思っています。こいつのおかげで目みたいに見えて、やたらと愛着が湧いてきてしまった・・・。ハンダ付けをやったことがなくて無理矢理ブレッドボードで作った結果、コードがぴょんぴょんでているところもまた愛嬌があります。
ディズニーのWALL-Eみたいな感じ。リボルテック ピクサーフィギュアコレクション No.002 ウォーリー

部品群

無線化しないと走れないのですが、モバイルバッテリーなど買っていないのでまだいろいろと有線です。曲がったりさせたかったので、ツインモーターギヤーボックスにしました。

  • Raspberry Pi一式(本体typeB、SDカード、LANケーブル、電源ケーブル
  • タミヤの楽しい工作シリーズ:「トラック&ホイールセット」
  • タミヤの楽しい工作シリーズ:「ツインモーターギヤーボックス」
  • タミヤの楽しい工作シリーズ:「ユニバーサルプレート」
  • モータードライバ:TA7291P
  • ユニバーサルプレート間をくっつける部品:プラネジ・スペーサーナット・スペーサー
  • その他:ブレッドボード、ジャンパワイヤ、乾電池×4、電池ボックス、10kΩ抵抗器、

配線

「LEDを光らせてみる(※)」すらつい最近やったばかりの私にとって、モータードライバの配線は大変でした。
(※)先日の記事
(35連休)12日目:Raspberry Pi(はじめての電子工作①:WEBIOPiでスマートフォンでLEDを点灯させるところまで) - hsuetsugu’s diary
(35連休)13日目:Raspberry Pi(はじめての電子工作②:WEBIOPi、ApacheとphpでLEDを制御) - hsuetsugu’s diary

こんな配線をブレッドボードでやっている記事が見つからなくて、電源系統がふたつのときブレッドボードでどう配線するのかなあ、とか少し迷いました。昔やった電池と抵抗と豆電球つなぐような回線図、今になって自分で書いてみることになるとは思わなかったです。ほんと大学でもっと勉強すればよかった。

  • モータードライバ1(左側)

1)GNDGND
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)GNDGND
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

今後の予定

いろいろこれまでやってきたことが、だいぶつながってきました。

  • 筐体造り:あくまで目指しているのはプラレールなので、プラレール風の筐体を作ります。3Dプリンターとか使ってみる予定です。
  • 自動運転:超音波距離センサーとOpenCVを組み合わせて自動運転させたいです。
  • 稼働機情報管理:fluentdとか使って小松製作所のKOMTRAX風な稼働機管理システムを作りたいです。fitbitのプラレール版といってもいいのかも。