2014年12月15日月曜日

【IoTをDIY!】ThingSpeakで作る湿温度モニター(第一回)

今回のプロジェクトでは Internet of Things プラットフォーム「ThingSpeak」と室温度センサを使用して、Web上であなたの部屋の室温度をモニターするシステムを作ります。

ArudinoやRaspberryPiが普及したおかげで、「モノのインターネット」を誰でも簡単に作れるようになりました。ArduinoやRpiを使えば、誰でも簡単にセンサーデータを取得するデバイスを作り、それをネットに繋ぐことができます。でも待ってください、そのデータ、いったい管理はどうするんですか?その答えがIoTプラットフォームなのです。今では、ネット上にはそうしたフリーで利用できるIoTサービスが、まるでタケノコのように生えてきています。今回はその中から「ThingSpeak」を紹介したいと思います。


ThingSpeakを使えばこんな感じで、あなたの部屋の温度を、インターネットを介していつでもどこでも見られるようになります。今回はRaspberry Piとpythonを使って、簡単な室温度モニターシステムを構築しながら、Thingspeakの魅力をお伝えしていきたいと思います。






必要なもの
  • Raspberry Pi
  • 室温度センサ DHT11 or DHT22

ThingSpeakの設定

ThingSpeakは最近増えてきている、IoT向けのWebサービスの一つです。IoT、つまりインターネットに接続されたセンサーや製品から出力される各種データの収集と可視化をWeb上で簡単に行えるサービスです。ThingSpeakはシンプルなので、さくっと導入できるのが魅力です。

アカウントの登録

まずThingSpeakにアカウントを登録するところから始めましょう。

https://thingspeak.com/ にアクセスして、トップぺージから「SignUp」をクリックし、アカウントを登録します


必要事項を入力しましょう。TimeZoneはお住いの地域に応じて選択してください。日本でしたら、TokyoかOsakaから選びます。入力が終わったら「Create Account」をクリックしてアカウントを作成します。

チャンネルの作成

ThingSpeakでは、データはチャンネルという単位で管理します。たとえば、今回のような室温度モニターのようなプロジェクトであれば、センサデバイスを配置する大まかなロケーションごとにチャンネルを分けるとよいでしょう。たとえば、「家」、「会社」など単位でチャンネルを作ります。
 一つのチャンネルには最大8つまでのデータ(Field)を登録することができます。今の例ですと「会社」チャンネルには、「居室1」、「居室2」、「会議室」といった詳細なロケーションに分けてFieldを登録することができます。

 また後ほど説明しますが、ThingSpeakではチャンネルごとに、そのチャンネルへのアクセスするための鍵(API-key)が作成されます。したがって、チャンネルの設計は、アクセス権に応じて決めてもよいでしょう。たとえば「家」チャンネルの鍵はプライベート情報なので秘密にしますが、「会社」チャンネルの鍵はオープンにして、従業員へ配布すれば、職場の同僚がThingSpeakを通じて職場内のデータに自由にアクセスすることができるようになります。

では、チャンネルを作成しましょう。チャンネルの作成は以下の画面のように「Channels」→「New Channe」lボタンを押して作成します

チャンネルの設定

チャンネルの設定は「Channel Settings」タブで行います。ざっとみると沢山の項目がありますがここでは基本的なものについて説明します。正直私も全部理解しているわけではないので、興味のある項目についてはみなさんで調べてみてください。



  • Name: チャンネルの名前です。これはたとえば「●●工場」などとします。日本語もOK。
  • Make Public?: チャンネルを公開するかどうかを決めます。チェックを入れるとPublicViewが作成されます。
  • Field 1~8:  チャンネルに登録するデータです。8つのデータを登録することができ、それぞれに名前を付けることができます。たとえば「湿度」、「温度」です。fieldを新たに登録するにはadd fieldにチェックを入れます。 

チャートの設定

channelに登録したデータのチャートはViewで表示することができます。Viewには公開用のViewである「Public View」と、プライベート用のViewである「Private View」が容易されています。「Private View」はSignInしないと表示されませんが、「Public View」はSignInしなくても閲覧することができます。Public Viewを作るには、Channel SettingsでMake Publicを有効にする必要があります。


チャートの設定ダイアログは編集アイコン(チャート右上の鉛筆)を押して起動します。線の種類は線分(line)、曲線(spline)、横棒(bar)、縦棒(column)の4種が容易されています。また平均、中央値、合計値などの簡単な統計操作が用意されているので便利です。

次回

Part1ではThingSpeakのアカウント作成について解説しました。Part2ではRaspberryPiを使って、センサーデータをThingSpeakに送信する方法について解説します。お楽しみに!

2014年11月4日火曜日

タミヤの戦車プラモデルをarduino化しよう!(第一回)

今回のプロジェクトでは、タミヤの1/35スケールの戦車のプラモデルを使って、スマートフォンから操縦することのできるラジコン戦車を作成します。

戦車の操作回路はarduinoを使って作成し、Bluetoothでスマートフォンと通信を行います。スマートフォンのOSはAndroidです。Qt5(QML)を使用して作成したコントローラーアプリを使ってarduinoとの通信を行い、戦車を操縦します。アプリはQt5で作成しているので、近い将来、iPhoneにも対応できると思います。



今回戦車のキットには、ラジコン化のし易い、初期のMMシリーズである旧ソ連の傑作戦車T34/76(76ってのは砲身の大きさで、ミリタリー界ではより大口径の85mmを積んだ後期型のT34と区別するためこのように呼びます)を使用します。タミヤの初期の戦車キットは、もともとモーターライズとして開発されたキットをベースとしているため、戦車の足回りを特に改造することなくRC化することができます。またキット自体も部品数が少なく非常に作りやすい、しかも安い、素晴らしいキットです。しかし当然あなたの好きな戦車を選んでも問題ありません。

レシピ

・タミヤ MM59 T34/76
・タミヤ ツインモーターギアボックス
・Arduino pro mini (3.3v)
・Bluetoothモジュール
・デュアルモータードライバー polou TB6612FNG
・単4電池x4

arduio pro miniは小型のarduinoです。今回のプロジェクトのように、小さいものを作るのに適しています。本番用のarduinoです。検討段階では通常のUNOが扱いやすいです。pro miniは3V駆動8Mヘルツのものを選びました。

TB6612FNGはPWM対応の小型のモータードライバーで、動作電圧はロジック2.7~5.5V、モーター側は4.5~13.5V、最大1Aです。PWMでスピードのコントロールができます。どちらもスイッチサイエンスさんで取り扱っています。

Bluetoothモジュールは様々なものが市場に出回っていますが、なるべく小型で省電力のものを選びます。千石さんで販売されているSparkFun WRL-12580などが使いやすいと思います。

作り方

ギアボックスの作成

ある程度プラモを組んだら、転輪を回転させ履帯を動かす動力となる、ツインモーターギアボックスを車体に組み込みます。

T34の車体は小さいので、ツインモーターギアボックスがすんなりと車体に入りません。写真のように、ギアボックスの後部を斜めに削カットし、車体上部のエンジンカバーに収まるようにします。またギアボックスのシャフトも、そのままでは長すぎるので適当な長さにカットします。シャフトのカットには金属用のこぎりなどがあるとよいでしょう。ギアボックスの切断はプラ用ニッパで行いました。

 ギアボックスを車体に設置するには、車体内部にあるでっぱりなどを削り落としたり、転輪とシャフトの接着など、詳細は省きますが、このあたりはある程度のDIYスキルが必要でしょう。


制御回路の作成

ラジコン戦車の心臓部である制御システムを作成します。今回のプロジェクトで行う戦車のarduino化、その最優先事項はずばり「コンパクト」です。1/35スケールは小さいのでarduino unoはまず入りません。そこでArudinoにはpro miniを採用、モータードライバーも小型のものをえらびました。また、動作電圧も単4電池2本の3vを想定し、それぞれ3.3vで動作できる種類を選択します。Fritzingで作成した回路図は以下のようになります。左から、TB6612FNG、Arduino pro mini, Bluetoothです。(図ではTB6612FNGはpolouのではなくてspark funのドライバーになってますが、たまたまネットで拾ったのがspark funのだったんです、配線に特に問題ないと思います)






ユニバーサルボードで作成したプロトタイプ一号です。



車体にセットする

車体前部には、回路用の単4電池2本、モーター用の電池2本の、合計4つの単4電池をおさめます。ここでも電池ボックスを適度に削って車体にフィットするようにしました。制御回路は電池ボックスの上において、ちょうど砲塔の穴から顔を出すようにします。



今回は、思っていたよりも回路基板が大きくなり、回路と砲塔基部と接触してしまったため、車体側面を削って位置を調整し、なんとかおさめていますが、もっと回路をコンパクトに作成すればきちんと収まると思います。また電源もLipoバッテリーなどを使用すれば空間に余裕がでるでしょう。


次回予告

第二部はarduinoのスケッチを解説します。
第三部はQt5を使ったandroidアプリ作成について解説する予定です。
お楽しみに!

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なんか聞いた日にゃあ、もう感涙ものです。へっへっへ。

2014年2月15日土曜日

Arduinoのライブラリを公開しました

おそくなりましたがaitendoの液晶シールド(UNO026LCD7781TP)用に作成したライブラリをgithubに公開しました。開発中なので機能は完全ではありませんが、基本的な動作はできると思います。arduino-1.0.5, UNO R3で動作確認しています。


githubはこちらです


aitendoで公開されているコードをベースに、Adafruit TFTLCDライブラリを参考にして作りました。

以下は、動作の様子です。






このシールドを、デジタルフォトフレームとして活用するための、便利なPythonプログラムも開発中ですので、こちらも随時公開していきたいと思います。

ただ、最近、格安のSainsmartの3.2インチ液晶をAmazonで買ってしまいました。
「Raspberry Pi」か、手に入れば「BeagleBone Black」と繋げたい。

Saismartの液晶と、Linux開発ボードを使って、GUIツールキット「Qt5」でタッチパネル対応のアプリを開発したいと考えています。ひょっとしたら、このプロジェクトを優先するかもしれません。

なるべく早くこっちをかたずけてしまいたいです。

2014年1月23日木曜日

液晶シールドのアクリルケース

前回作成したaitendoの液晶シールド(UNO026LCD7781TP)だけでは、ちょっとさみしいので、アクリル板で簡単なケースを作りました。

自作ケースとaitend 2.6インチTFT液晶シールド
といっても、適当な大きさにカットしたアクリル板二枚で、arduinoをサンドイッチにしただけのシンプルなケースです。

ちなみにケースの高さは、3センチのネジでちょうどピッタリでした。また、液晶シールドの裏の配線が、USBコネクタと接触して通電することがあるので、絶縁処理しておくとよいでしょう。私は絶縁テープを少し貼っています。


これでオフィスに持っていってもドレスコードはバッチリでしょう?
ちなみに表示している画像は娘の趣味です。


シールドのライブラリは、いまいち不明な点があるので、ST7781のデータシートを解読中です。もうしばらくお待ちください。ケースを作ってた所為も大きいが・・・

完成したらgithubで公開したいと思います。


さて、液晶シールドもドレスアップしたことですので、これでもう少し遊んで見たいと思います。

とりあえず、シールド用の画像作成作業が面倒なので、便利にしたいです。いちいちビットマップ画像を作成してマイクロSDにコピーする作業が面倒なのです。そこで、次のような計画を考えました。
  1. PC上で、任意の画像データを、QVGAサイズのビットマップ画像に変換する
  2. USB経由でPCから画像データをarduinoに送信して、表示する。
  3. USB経由でPCから画像データをarduinoに送信して、SDカードに保存する。
  4. PC上で、クラウドストレージ(Dropboxかpicasa)に保存した画像データを、一括して画像変換し、USBでarduinoに送信してSDカードに保存する
以上のざっくりした計画で、Pythonを使って、液晶シールドを使いやすくするプログラムを作ってみたいと思います。

2014年1月20日月曜日

はじめてのarduino液晶シールド

先日のことです。

arduinoでTFT LCDを表示しよう!

と思いたち、さっそくaitendoさんから2.6インチ液晶シールド[UNO026LCD7781TP]を買ってみました。

TFT LCDは初チャレンジだったんですが、1680円という価格の安さに惹かれて思いって購入してみたももの・・・

公開されているサンプルコードがarduino IDE 1.0.5で動かない、サンプルコードの分量が少ないと、苦労の連続。

結局、adafruitで公開されているTFTのサンプルコードを参考にして、三四日、試行錯誤した結果、なんとかビットマップ画像の表示にまでこぎつけました。



いやー、勉強させていただきました(笑)
苦労するのが一番楽しかったりします。

8ビットパラレルはIOピンを大量に使用するので、UNOだと応用が厳しいですね。

液晶を使用しながら、他の機能を実装するにはarduinoを2台連結させたり、ピンが増強されているarduino MEGAが欲しいところです。




今回作成したコードは整理しだい、公開したいと思います。