アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

LEGOでRaspberry Piケース "Cordovaくん" を作ってみた

こんにちは、Monacaチームの細井です。
まだまだ、クソ暑い日が続きますが、皆様いかがお過ごしでしょうか。

さて今回は、夏休みの宿題っぽい感じで、「LEGORaspberry Piのケースを作ってみた」という内容をお送りします。


■ テーマ



Monacaチームのある方から、Raspberry Pi買ったからLEGOでケース作ってください、と依頼を受ける。
LEGOなのでテーマ決めないとなー、と思い、せっかくなのでMonacaチームっぽいテーマにしようと思い、決定したのがコレ。


■ 作ってみた



正式名称は知らないのですが、「Cordovaくん」という名前で作りました。

Cordovaくんは、立方体なのですが、ケースなので直方体に。


Cordovaくんの顔が蓋になっています。パカー。


Raspberry Piのデフォルトケースをそのまま入れられるようになっています。



■ 細かいところ



真上から。


緑と赤の部品は、ラズベリーを表現しています。
椅子に座ってる人は、PCでCordovaアプリを開発してるエンジニア。


横と背面には、各端子を差すための穴を設けています。


ドアを開けると、直接配線することも可能です。
ちなみに、上部から出てる赤いケーブルの先は、温度と湿度のセンサーになっているので、Cordovaくんはbotになってオフィスの温度を教えてくれます。


■ おわりに



たまにLEGOをやると普段と違う脳が使われるような気がします。
さすがに業務中にLEGOはできないですが、アシアル社員らしい遊び心を忘れないよう、こういうこともしていきたいですね!


■ お知らせ



Monacaチームでは現在、新規開発メンバーを大募集中です。詳しくはこちらを参照ください!
https://ja.monaca.io/careers.html

走れ!ラズベリーパイ!第二話「車体とステアリング」

こんにちは、斉藤です!
前回の記事はお読みいただけたでしょうか?
引き続き、Raspberry Piラジコンカーの制作過程紹介記事をお届けします!



◆ あらすじ



ふと、ラジコンカーを作りたい!と思い立ち、以下を行いました。


* 仕様決定
* Raspberry Pi内のプログラムで信号制御
* モーターと繋いで実験

その結果、なんとかRaspberry Piでモーターを制御するところまでこぎ着けています(前回参照)。



これを車として組み上げるとき、どうしても車体が必要になってきます。
今回は、そういった車体をどう用意したのかも含め、以下の機械的な部分の過程に触れてみたいと思います。


* 車体の組み立て
* ステアリングに関する問題発見

読んでの通り、ITっぽい話が全くありませんので、ご了承ください。





◆ 車体の組み立て



C言語によるプログラム、トランジスタによるモータードライブ回路により、Raspberry Piから、ギアボックスを制御できるようになりました!いよいよ、車体を作成していきます!

とは言っても、一介のITエンジニアには、重たすぎる以下の課題があります。


* シャーシ作成(アルミ板、真鍮板とかを加工する?3Dプリンタ?)
* ギアボックスとの締結(ネジ穴をあける?)


一応、加工道具は持ち合わせているものの、この部分を自作し始めると、いくら時間があっても足りません。思い通りの形を作るというのは、時間もしくはそれなりのツールが無ければ難しいのです。
今回は"ラジコンを作りたいだけ"という目的なので、この過程には出来るだけ時間をかけないように考えた結果、レゴブロックを使うことに。

レゴブロックの良いところ


* ブロック同士の締結が簡単なため、イメージに近い造形をある程度再現できる
* クランク機構などの機械的な機構の再現が可能

まず、お試しということでこちらを購入しました。
レゴ テクニック ミニレッカー車 9390

これで、以下のことを検証します。


* ギアボックスとレゴブロックが締結できるかどうか
* 車として組み上げた際、思い通り走るか

早速、ギアボックスと締結できるかどうかを試しました。
その結果、ブロック一つ一つのパーツに空いている穴が、ギアボックスで使われている3mmネジに相性が良く、無事締結できることが分かりました。
これで首尾よく、こんな感じのプロトタイプを作成しました。



どうでしょう?
見た目はともかく、ラジコンっぽくなってきましたね!
これで、無事走り出せるはず!
・・・と思っていたのですが、どうやらそう簡単にはいかないようです。
走らせてみて初めて分かったのですが、ステアリングが上手くいきません。



◆ ステアリングに関する問題発見



なぜ上手くいかないかを調査してみると、


* 前輪のステアリング角を固定して、後輪の片方のみを駆動させるだけでは、摩擦が強すぎてスムーズに曲がることが出来ない
* かといって、前輪のステアリング角を自由にすると、思い通りに曲がれず、蛇行してしまう

と言ったことが分かりました。

結論から言うと、実際の車同様、前輪のステアリング制御を行う必要が出てきました。
となると、何らかの方法でRaspberry Piからの信号を、タイヤのステアリング角に変換しなければなりません。
そういった機械的な機構を試行錯誤をする中で、このレゴブロックセットと出会いました。
レゴ テクニック トラクター 9393

このセットの中には、ラックアンドピニオン式のステアリング機構が使われています。
この機構は、ハンドルの回転角度をタイヤのステアリング角に変換する仕組みを提供してくれます。
最近はこんな実車さながらの仕組みを持ったレゴも用意されているんですねー。

となれば、あとはハンドルに相当する装置を用意するだけ!
ここでは、サーボモーターを使うことに。
これはPWM信号によって、速度ではなく、その回転角度(位置)を制御することが出来るというモーターです。
電子工作好きなら誰でも知っている秋月電子通商で購入できる小型のサーボモーターを購入しました。
GWSサーボ S11H/2BBMG/JRタイプ

そして、サーボモーターにはRaspberry PiからのPWM信号を送ってやる必要がありますので、プログラムの修正、サーボモータードライブ回路の追加をしました(特別な回路を組んでいる訳ではないので省略)。


あとは、サーボモーターの回転部分とレゴブロックの締結をしなければなりません。
サーボモーター側にピンバイスで3mmネジが通るように穴をあけて、それぞれを3mmネジで固定しました。
思い通りに動くかどうかを、新しく購入したレゴで確認します。


ばっちり動くことを確認して、ステアリングがまともにできる機構が完成となりました。
あとは、Raspberry Piを載せるところを考慮しつつ、レゴを組み上げます。



完成まで、もう少し!





◆ 次回予告



いよいよ、車体も組み上がり、形を成してきたかに見えたRaspberry Piラジコンカー。
しかし、完全なリモートコントロールには電源の搭載、コントローラーの作成という二つの課題をクリアしなければならない。
この課題に対して、アシアルのITエンジニアはどう答えを導き出すのか。
次回、走れ!ラズベリーパイ!最終話「電源とリモコン」に続く!

という、よくある感じの次回予告で今回は終わりです。
お楽しみに!

走れ!ラズベリーパイ!

こんにちは、斉藤です!

みなさんは、Raspberry Pi(ラズベリーパイ)というものをご存知でしょうか?5v 700mAという低電力で動く小さなコンピューターです。
こんなもの
Raspberry Pi公式サイト

Linuxをインストールすることができるので、WEBサーバーや、ファイルサーバーとして活躍させることができます。今回はこれを使って、こんなラジコンカーを作ったので、その過程をご紹介します。



IT系エンジニアらしく、LinuxiPhoneの話も出てくるのですが、電子工作だったり、機械の機構だったりの話も出ますので、興味のある方はお付き合いいただければと思います。
また長くなりますので、何回かに分けて連載する予定です。

第二話はこちらから





* Raspberry Piとは?


Linuxをインストールすることができる小型のコンピューターです。以下の入出力を持っています。


* USBポート x 2
* DMI出力端子
* オーディオ出力端子
* GPIO: 汎用的な電気信号を扱うための端子。電子回路との接続インターフェースになる。

特に、このGPIOという入出力が重要となってきます。
コマンドラインもしくは、プログラムから、電子回路用の信号を出力することができます。もっと平たく言うと、例えばここにLEDを接続して、点灯を制御することができます。

このRaspberry Piを購入して、動かす(SSHログインなど)までの過程は、以下のページを参考にしました。
Arch Linux on Raspberry Pi
約3,300円で買えるLinuxパソコンRaspberry PiをMacで使う



* 仕様と実装方法


ラジコンを作るにあたり、まずは仕様を考えます。


* 前進後退
* 速度調整
* ステアリング
* 電源を搭載
* 無線化
* リモートでのコントロール

というところでしょうか。これを実装する方法として、それぞれ以下を検討。

- 前進後退
この用途専用の電子回路、モータードライブ回路を自作します。ただし、モーターを制御するには、Hブリッジ回路というものがすでに考案されているので、これを使います。この回路は四つの入力を持ち、それらを切り替えることで、正転、逆転、停止、ブレーキを実現できます。
また、Hブリッジ回路を組む用途のICも販売されていますので、これを購入して実装します。
Hブリッジ回路について、もっと詳しく

- 速度調整
PWM(Palse Width Modulation)という方法を使います。信号のON/OFFを一定間隔で繰り返すことで、出力する電圧の平均を制御する方法です。例えば5v直流電圧にもかかわらず、3v直流電圧と見なして扱うことが可能になります。モーターは掛ける電圧によって、トルクも比例して変動しますので、結果として速度調整をすることができます。このPWMをプログラムで生成します。
PWMについて、もっと詳しく

- ステアリング
おもちゃ屋でも買えるタミヤのギアボックスを用意しました。モーターが左右別々についているため、これでステアリング出来るだろう、と考えました。
ダブルギヤボックス(左右独立4速タイプ)

- 電源を搭載
ラジコンなので、電源ケーブルによる行動の制約を受けないことが必要になります。これは、モーター用電源とシステム用電源と二つに分けます。モーターに負荷が掛かったとき、電流が変動するので、それによってシステムが壊れることを避けるためです。
最終的にどんな電源を使ったかは、次回以降の記事で紹介します。

- 無線化
ここで、Raspberry Piを使います。
当初はArduinoを使うことを考えており、iPhoneで操作できるようにBluetooth通信をしようと思っていました。が、あまり知識が無く、デバッグも大変だろうということから、なかなか開発に着手できませんでした。
そんなとき、Raspberry Piを知ったのですが、Arduino同様GPIOが存在すること、無線化がIPレイヤー(WiFi)で実現可能なことから、こちらを使うことになりました。
特にLinuxを搭載することで、"SSHログインができる車"というアイデアが自分には革新的に思えたので、こちらを採用することに決定。

- リモートでのコントロール
無線化の話でも触れたように、当初はBluetooth通信によって、iPhoneなどのモバイル端末で操作することを考えていました。
が、Linuxを使うことになり、モバイル端末から送信した制御用パケットを受信して制御することになりました。


以上、仕様を実現するための実装方法が揃いました。
システム構成図を描くと、以下の様になります。

早速一つづつ着手。



* モータードライブ回路による前進後退の実装


Raspberry PiのGPIOから出ている電気信号を直接モーターに繋いでも、モーターを動かすだけの電力を得ることはできません。それどころか、運が悪ければ、Raspberry Piが壊れてしまいます。そのためトランジスターを間にはさみ、Raspberry Piの信号によってモーター用バッテリーの電力を制御する必要があります。モーターを制御するだけでなく、そういったためにもこのモータードライブ回路が必要になります。
ちなみに、トランジスターは電気的なスイッチ(信号によって、別の電流を流したり、止めたりできる)のようなものだと思ってください。

これをブレッドボードで実験します。


問題なく動くことが分かったので、ハンダ付け実装。モーター左右別々にHブリッジ回路を組んでいるので、二つICがついています。


また、コマンドラインから、信号のON/OFFができます。
コマンドライン上から、以下のコマンドを実行。


$ echo "4" > /sys/class/gpio/export
$ echo "out" > /sys/class/gpio/gpio4/direction
$ echo "1" > /sys/class/gpio/gpio4/value

これで、GPIOの特定の端子(この例では、4番のGPIO端子)から信号を出力させることができます。
ここまでで、自作の電子回路とRaspberry Piを接続することが出来ました。
GPIOについて、もっと詳しく



* プログラムによる速度調整の実装


ただし、上記コマンドでは単純なON/OFFは出来るものの、速度を変更することができませんので、ここでPWMを導入します。
以下のライブラリを使って、c言語でプログラムを組みます。
Raspberry Pi向け C言語PWMライブラリ
c言語用、Python用、nodejs用など、探せばライブラリはいくつかあるようです。手持ちのRaspberry Piでは、コンパイル速度の速さから、c言語用のライブラリを使用。

コマンドラインからプログラムを実行して、動かしている様子が以下の画像になります。

タイヤが勢いよく回転してますね!

ここまでで、WiFiによる無線通信によって、モーターの制御するという、ラジコンの核となる部分ができました!Linuxを使えば、あっさり無線化できることに感動。。。





* いったん、まとめ


だんだんとラジコンカーが実現に近づきました。
特に、無線化のおまけでLinuxという環境がくっついてきたことが、とても大きかったと思います。
その気になれば、MongoDBやMySQLを使って、走行データのログ収集したり、nginxでマシンの状態をWEBインターフェースで配信したりできるんじゃないかとワクワクしますね!
とりあえず、次回は車体作りとステアリングの過程について、触れてみたいと思います。

第二話に続く!



* 参考情報


Raspberry Pi 使用例まとめ
ミニ四駆×Arduino×Bluetoothで“夢のミニ四駆”を作ろう
トヨタが「Tizen IVI」の開発に参加、車載情報機器のLinux採用に本腰