2014年10月5日日曜日

Qt5で作るロボットコントローラーアプリ

Arduinoで作成したロボット戦車を操作するAndroidアプリを作りました。アプリの作成にはQtのQMLを使用しています。Qtのバージョンは5.3.2です。





ArduinoのロボットはBluetoothのシリアル通信(SPP)によって操作できます。前進、後進、回転、速度調節などの操作が可能です。Bluetoothを使ったプログラミングは今回が初めてでしたが、Qtを使うとBluetoothとUIを連携したAndroidアプリが簡単に書けてしまうのが驚きです。

またこのコントローラーではロボットの操作だけではなく、ギミックとして、Android側でリアルな効果音を再生したり、動画を再生したりするなどの機能を追加して、戦車として臨場感を盛り上げています。QMLではこうしたマルチメディア再生も簡単に扱えます。

いやー素晴らしいですQML。

Qtはクロスプラットフォームなので(動作確認はしてないけど)Android以外の各種プラットフォームで動作するはず、のも素敵。


まだまだコードが汚いので、きれいになったら公開したいと思います。


ロボットの詳細
参考までにロボットの構成はこんな感じです

  • arduino uno
  • adafruit モーターシールド
  • adafruit 130サイズモーター(9V) これは3Vのタミヤのモーターと交換
  • Bluetoothモジュール
  • 測距離用の超音波センサー
  • タミヤ トラックホイールセット
  • タミヤ ツインモーターギアボックス

2014年7月6日日曜日

3Dプリンタの排気設備を作る

格安3DプリンタキットPrintrBot Simple用の排気設備を作りました。

レシピは以下のようです。



合計3000円くらい?かな。アクリル板とファンは余ってたものを使ってます。

ダクトホースとファンの接続アダプタは3Dプリンタで出力しました。STLデータの作成はFreeCAD-0.13を使用。FreeCADは、文字通りオープンソースのCADです。0.13からスケッチ機能が使えるようになり、かなり便利になりました。私の知る限りオープンソースのCADではベストです。でも
時々クラッシュするので、頻繁に保存しましょう。



出来上がったものはこんな感じ。当然ファンともピッタシです。キットで余った3mmネジで止めました。

さきっちょにダクトホースが刺さります


排気ボックス作成時に悩んだのはフィラメントの供給方法です。試行錯誤の結果、上部にフィラメント用の穴をあけ(スペーサを突っ込んで結束バンドで固定)、上部からフィラメントを供給する方式にしましたが、これが中々グッドですね。するする入っていきます。

今回使用したファンは、たまたま余ってたものを使ったんですが、パワーがまだ足りないですね。もっと流量の大きなファンに交換する予定です。

ボックスの正面は透明アクリル板を張って中が
見えるようになっています。またサイドには空気取り入れ口があります。
こうしてみると手作り感満載ですね(笑)


印刷時のトラブル

今回作成したダクトホースアダプタは、一辺80mmの大きさです。
Simpleのプリントサイズは最大4インチなので、Simpleにとっては大きめなサイズ。印刷時間もたっぷり半日以上かかります。

これほどの長時間のプリントは初めてだったので、長時間印刷ならではの問題に悩まされました。印刷途中でホットエンドの中でフィラメントが詰まってしまう、ジャムです。拳銃でいうところの弾づまり、紙プリンタでいうところの紙詰まりのような現象ですね。

エクストルーダーからひっこぬいたフィラメントを見ると、ホットエンドの上部でフィラメントが柔らかくなってしまいコブのような形状が形成され、引っかって詰まってしまうようでした。

いろいろ設定を変えてトライしましたが、結局、温度設定が問題だったようです。

Slic3rの設定で、初期温度195度、通常温度190度、ファン使用

にするとジャムもなく印刷ができました。温度設定は難しいですね。

2014年7月2日水曜日

3Dプリンタを直輸入してみた

先日購入した3Dプリンタのキット「PrintrBot Simple」がようやく完成しました。イエー!





Make magazineの3Dプリンタ特集で高評価だったことと、もちろん安かったこともあって、購入に踏み切りました。本体は$349でしたが、付属品と送料を合わせて+$100くらいで、5万円以内でおさまりました。

キットなので自分で組み立てる必要があります。こちらのドキュメントで組み立て方法が詳細に解説されているので、興味のある方は購入前にチェックするとよいでしょう。全部英語ですが・・・(苦笑)。

組み立ては面白かったです。
3Dプリンタのしくみが良く理解できるのはキットの醍醐味と言えます。

しかし、それでも楽しい反面、苦労もあります。

ボディ素材がレーザーカットしたMDFなので組み合わせが大変です。要所要所で削ったり、恐る恐るハンマーでぶっ叩く必要がありますし、結束バンドをキツク閉めないといけません。またこの最新モデルではZ軸の高さを計測するプローブが追加されており、以前のモデルと比べて調整がだいぶましになっていると思いますが、それでもレベル合わせは苦労するのでDIYが好きじゃない人はキットではなく金属製の完成品か、他のメーカーがよいでしょう。

2、3日つかってみたところ、樹脂を溶かす際に発生する匂いが気になることが判明したので、匂い対策として「ドラフトチャンバーのようなもの」を作る予定です。

2014年4月21日月曜日

Qt5+Raspberry Pi+FBTFT = Not Bad

Raspberry PiにQt5.2.1をインストールし、sainsmart3.2インチタッチ液晶で動かしてみました。
Qt5の構築はQtonPiを参考にしました。Ubuntu上でクロスコンパイル環境を作成しています。

QtのIDEであるqtcreator上で、コードのコンパイルからRaspberyPiへリモートデプロイまでを一括して管理できるので、かなり便利な印象です。



この動画では主にQt5付属のデモプログラムを動かしています。実行時のplatformはeglfs、フレームバッファは/dev/fb0を使用し、fbcpでfb1へ転送しています。

tslibプラグインを使ったキャリブレーションが正常に動かなかったり、eglfsでのディスプレイサイズの設定がうまくいかなっかたり、そのほか惜しいところがいろいろありましたが、全体的にはまずまず、といった印象です。


こいつでVolumio用のエンベデッドなGUIを作ったら面白そうですね。

2014年4月8日火曜日

Raspberry Pi とロボットアーム

以前MagPiの記事で読んで以来、気になっていたグリッパーアームロボットを購入したので、早速Raspberry Piと繋いで遊んでみました。




ロボットキット付属のコントローラーがチープで操作レバーが固いので、とりあえずXbox360コントローラーで操作できるようにしました。これだけでも、かなり快適になります。

ためしに3歳の娘に協力してもらって、簡単に操作できるか試してもらいました。



まあ・・・・まずまず、ですか?

(このロボットアームのもっとまともな動画がyoutubeにはたくさんあります。Maplin robot armなどで検索してくださいね)


さて、これでアームロボットは、Raspberry Piと繋いで手軽にインターネット対応化されたので、遠隔操作やカメラをつけたりして、まだまだ遊べそうです。

また、今回作ったプログラムですが、まだ改善の余地があるので(コントローラーのキー配置やモーター操作が悩みどこ)、改善後、githubで公開したいと思います。

2014年3月24日月曜日

「Raspberry Pi」とフレームバッファドライバ「fbtft」で、sainsmartのタッチパネル液晶を動かす

先日amazonで購入した、sainsmartの3.2インチの格安カラータッチパネル液晶(2000円くらい)をRasberry Piから動かしてみました。解像度は320x240です。fbtftというフレームバッファドライバを使用しています。

以下の動画では、前半はタッチペンを使ったタッチ操作の様子(キャリブレーションの調整が必要ですが・・・)と、後半では動画再生の様子を紹介しています。自分では計測していないのですが、fbtftのwikiによるとフレームレートは10fps程度だそうです。




実は、この液晶を動かすには16bitパラレルインターフェースが必要なので、数が足りませんから、直接Raspberry PiのGPIOピンにつなぐことができません。そこで、PiのSPIインターフェースをパラレルインターフェースに変換する回路を別途作成して、液晶とRaspberry Piと繋ぐ必要があります。


汚くてわかりにくいのですが(汗)、ブレッドボード上で実装した、SPIインターフェースから16ビットパラレルインターフェースへの変換回路(タッチパネル制御含む)は、以下のようになりました。74HC4040、74HC4040、74HC04のICを使用しています。




この回路のスケッチはfbtftのwikiで公開されているのですが、エレクトロニクス初級者の筆者にはピンと来なかったので、ブレッドボードへの実装には、この液晶とおなじ同じコントローラー SSD1289を使用した液晶を使用したブレッドボードへの詳しい実装例が紹介されているこじ研さまを参考にさせていただきました。わかりやすく解説されており、大変勉強になりました。ただし、fbtftの回路とは若干異なる点があるので注意が必要です。

これで、Raspberry Piのタッチパネルが、お手頃な値段(?)でつくれました。

(AdafruitのPi TFTを買ったほうがはるかに簡単に作れると思いますが、このブログは筆者の勉強を兼ねてますから、チャレンジ重視です!)

次の課題は以下のいずれかを予定しております。

  • ブレッドボードの実装をどうにかする(ユニバーサル基盤か、できたらプリント基板にチャレンジしたい)
  • Qt5を使って、タッチパネルを使った、娘が遊べる楽しいアプリを開発する
  • BeagleBoneBlackでも使えないか考える
  • Volumioと連携できないか考える

2014年3月4日火曜日

Raspberry PiとVolumioでネットワークミュージックプレイヤーを作る

Volumioというソフトを使ってRaspberry Piでネットワーク対応のミュージックプレイヤーを作ってみました。

 ・・・・ 小さくて、使いやすくて、素晴らしい!






Volumioというのはネットワークオーディオプレイヤー専用のLinuxディストリビューションです。

公式HPでRaspberry PiやBeagleBoneBlackなどのプラットフォームのImageファイルが配布されています。このImageファイルをSDカードに焼いて、Piに差すだけで、さくっと簡単にシステムが構築ができます。Voluminoは内部にWebサーバを持っており、PCやスマートフォンから、ウェブブラウザ経由で操作することができます。ちなみにWebサーバはnginxを使ってますね。


Volumioの特徴は、ざっと以下の様です。

  • フラットデザインUIを持つ、洗練されたWebインターフェース
  • インターネットラジオ対応
  • NAS対応
  • AirPlay対応
  • ハイレゾ対応

システム構成はこんな感じです。Raspberry Piのイヤホン出力も利用できるのですが、たまたま持っていたUSBオーディオ「SoundBlaster」をPiとUSBで繋ぎ、さらにSoundBlasterのオーディオライン出力からミニコンポへと繋ぎました。ネットワークも無線LANにしています。

ミニコンポもSoundBlasterも、押し入れで眠っていたのですが、こうして表舞台に戻ることができました。ありがとうVolumio!

さらに、AdafruitのLCDシールドが余っていたのでlcdprocmpdlcdを使って、LCDシールドで曲目を表示できるようにしました。このシールド(Piの場合はシールドって言わないか?)を使用する場合、対応ドライバーが追加された開発版のlcdprocをインストールする必要があります。この時点で最新版の0.5.6ではできません。

以下に、今回参考にしたURLを挙げます。

http://www.stuart-taylor.net/adafruit-i2c-rgb-16x2-lcdkeypad-raspberry-pi/
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=64992&p=495056

以前Raspbmc入れてセットトップボックス作った時には三日で飽きたんですが、Volumioは満足度も実用度も高いです。

こいつでKraftwerkなんか聞いた日にゃあ、もう感涙ものです。へっへっへ。