作品タイトル:キノコ栽培の補助ガジェット
表示名:久米 史也
コンセプト・作品説明 |
---|
Windows 98 と同じ1998 年生まれの久米です。ちなみに、初めて触ったPC は、Windows 8 です!高校1年生からプログラミングを始めて、プログラミング歴は3年になります。名古屋や東京で行われるIT系勉強会に参加して新しい技術を吸収するだけではなく、最近では、学んだことをLightning Talk (持ち時間5分) で発表もしています。Windows ストアアプリやiOS アプリ、さらにChrome Extension 等の開発を行い、ストアでの公開もしています。最近では、IoT が話題になることが多いため、電子工作に興味を持ち始めました。そこで、昨年末から始めた株式会社 Shaxwareでのインターンシップの課題として、GR-PEACH を利用したガジェット作成に挑戦することにしました。 |
回路図と必要な部品
ライブラリやサンプルが多いことから、温度と湿度センサーはHDC1000 を、LCD にはAQM802 を選びました。これらは共にI2Cを使って通信・制御を行います。当初、カメラもI2C接続の製品を探したのですが、キノコの撮影するときの設置の自由度を考えて、USB 接続のウェブカムを採用することにしました。USB 接続なのでわざわざ回路の設計を考えなくても済むこともメリットの1つです。ウェブカムは非常に多くの製品があるのですが、GR-PEACH での動作実績があるLOGICOOL C270 を選びました。今回のガジェットで使用した部品は、資料1にまとめてありますので参考にしてください。これらの部品を組み合わせて、以下のような回路を設計しました。
◆HDC1000 の準備
◆AQM0802 の準備
◆GR-PEACH のJP3 の加工
USB カメラを使えるようにするには、マイコンボードがUSB ホストとして動作する必要があります。GR-PEACH の場合、本体の内側にあるUSB1 のUSB ホストを有効にするためにJP3 をショートさせる必要があります。単純に半田付けしても良いのですが、USB ホスト機能の有効・無効を簡単に切り替えられるように、ピンヘッダーとジャンパーピンを使用することにしました。
JP3 はGR-PEACH本体の真ん中にあります。そこに2.4mm のピンヘッダーを差し込み、半田付けします。クリップの先端でピンヘッダーを挟んでピンヘッダーを手で持つようにすると、GR-PEACH への半田付けが楽になります。ガムテープなどで一時的に固定しても良いかもしれません。
写真は、ピンヘッダーを取り付けたところです。
USB1 のUSB ホスト機能を有効にする場合、写真のようにジャンパピンを差し込みます。
◆ブレッドボードとGR-PEACH を組み合わせる
キノコ栽培は数日にも渡ります。その間に不用意に触って壊れたりしないようにするために、ジャンパーワイヤーなどを使用しないで、ガジェットをよりコンパクトにする必要があると考えました。そこで、ブレッドボードを用いた階層化を考えました。具体的には、Arduino とピン互換のあるGR-PEACH のピン穴にArduino シールド用ピンソケットを差し込みます。Arduino シールド用ピンが少々長めなため、カットして長さを調整する必要があります。1つめのピンソケットを取り付けたら、Arduino 用バニラシールドを乗せた後に、2つめのピンソケットを取り付けます。次に、ブレッドボードの裏面についている両面テープの保護テープをはがしから、ブレッドボードをバニラシールドの上に乗せます。
ブレッドボードの上に前もって準備したHDC1000 とAQM0802 を乗せ、写真のように回路を組み立てていきます。
ウェブカムはPC との接続を前提としているため、USB Type-A が使われています。Micro USB しか持たないGR-PEACH と接続するために、OTG ケーブルを使用してウェブカムを接続します。
プログラムの作成
プログラムの仕様として、1)HDC1000 で取得した温度と湿度を、LCD (AQM802) に表示、2)一定時間以上の間、キノコにとって適切でない温度や湿度が続いた場合、ウェブサービスを使って警告を通知、3)適切な温度や湿度に戻った場合にも通知、4)キノコの生育を確認するために、定期的にキノコの写真をウェブサービスに保存することにしました。通知や写真の保存にメールを利用することも考えましたが、撮影したキノコの写真を友達へシェアすることを考え、Twitter を利用することにしました。GR-PEACH では、mbed と.NET Micro Framework の2つの開発・実行環境がありますが、今回はmbed を採用しました。C++ でのプログラミングは初めてだったため、色々と勉強になりました。
◆開発と実行
ARM が提供しているクラウド開発環境であるmbed compiler を利用して開発しました、ブラウザさえあればどこからでも、お手軽に開発ができることがスゴイと思いました。mbed compiler でコンパイル・リンクすると、バイナリがダウンロードされます。PC にGR-PEACH を接続するとGR-PEACH がドライブとして見える(*)ので、ダウンロードしたバイナリをそこへコピーします。その後、GR-PEACH のUSB ポートの隣にあるリセットボタンを押すと、プログラムが動作します。
* 事前にドライバーをインストールする必要があります。
◆インポートとデバッグ
mbed のサイトには、幅広くサンプルやライブラリが公開されています。それらのサンプルのページから"Import"をクリックするだけで簡単に試すことができます。今回のプログラムで使用したライブラリは、資料2にまとめてありますので参考にしてください。インポートする時に下記のスクリーンショットのように「最新のバージョンに更新」とした場合、多くのライブラリを使用しているとコンフリクトを起こすので注意が必要です。開発当初、単純に「最新のバージョンに更新」していたため、コンフリクトが発生しかなり悩みました。
mbed compiler はお手軽でとても良いのですが、デバッガが使用することができません。そこで、プログラム中にprintf 関数などを使って必要な情報を出力し、TeraTerm などのターミナルソフトで確認しながらデバッグを行う必要があります。なお、改行するときは"¥n" ではなく、"¥r¥n" と出力する必要がありました。また、使ってるケーブルによっては、GR-PEACH を認識しないこともあるようです。
◆Twitter への投稿
本ガジェットのプログラムは非常に簡単なので、説明は割愛したいと思います。ここでは、最も苦労したTwitter への投稿について説明したいと思います。当初、IFTTT を使用してTwitter へ投稿することを検討していましたが、IFTTT では画像の投稿はサポートしていないことが分かりました。そこで、Twitterへ直接投稿することを検討しました。Twitter は2014年1月14日から全てAPIの利用にHTTPS(SSL/TLS)を必須とする仕様変更をしているのですが、標準のHTTPClinet はHTTPS をサポートしていません。更に調査したところ、wolfSSL が提供するHTTPSClient ライブラリが使用できることを確認しましたが、OAuth やJSON など調査・開発することが多く、時間切れのため泣く泣く断念しました。代わりに、HTTP 経由でTwitter へ投稿できるプロキシを、ASP.NET 4.6 + C# で開発しました。自前でTwitter のプロキシを開発しましたが、世の中には同様のプロキシがたくさんあるので、それを使用しても良いと思います。
他にもいくつかハマったところがあるので、紹介したいと思います。HTTPClient はURL のパスの部分が32byteしかサポートされておらず、長いパスがあると動作しませんでした。HTTPClient を書き換えても良かったのですが、自作のTwitter プロキシのパスを短くすることで対処しました。また、標準のHTTPClient には巨大なデータを送ると送信が終わらないという不具合があるようです。この不具合は、暫定的にチャンクのサイズ(CHUNK_SIZE) を変更することにより対処しています。他にも、メインスレッドのスタックのサイズが小さすぎるため、mbed-rtos に定義されているOS_MAINSTKSIZE の値を大きくしました。
キノコの栽培
キノコを育てるためには、一日に数回霧吹きで水分を補充して直射日光のあたらない涼しい場所に置いておく必要があります。温度・湿度の管理に失敗すると、うまく育たなかったり、キノコの形が悪くなってしまいます。
◆キノコの栽培準備
キノコの栽培キットの菌床をケースから取り出すキノコの菌床が乾燥していたらさっと湿らせる程度に水道で水をかけるか、霧吹きで菌床を湿らせて、トレーの上に置きます。トレーや容器の四隅に割り箸などの支柱を突き立て、ビニール袋をかぶせます。高温・直射日光・乾燥に弱いので、栽培場所は慎重に選んでください。
◆キノコの栽培
キノコの栽培には、適切な温度(10℃~25℃) と湿度(65~70%) が必要です。一般的なきのこの栽培では、キノコの栽培の準備が整ったら温度・湿度の調整にいつも気を使わなければいけません。今回作成したガジェットは、適切な温度・湿度でない場合、警告をツイートするのですぐに気づくことができます。湿度が基準を下回った際には、霧吹き器で水分を補充してください。乾燥すると発生が悪くなったり、キノコの形が悪くなる場合があります。途中で間引きをすると大きなキノコが育ちやすくなります。栽培を始めて3日~10 日後には、キノコを収穫できます。
以下のスクリーンショットは、実際にキノコの栽培している最中のツイッターです。
まとめ
作成したガジェットは、センサーから値を取得するだけでなくTwitter と連携するため、今話題のIoT 的なガジェットになったと思っています。電子工作では、半田付けをセンサーなどの小さな穴にする箇所で上手く半田が流れなかったり、逆に半田が流れ過ぎてしまったところが大変でした。作成したガジェットを利用してキノコ栽培を行ったところ、上手く成長し、無事収穫までたどり着けてとてもうれしかったです。収穫した後に育てたキノコを料理に使ってみましたが、自分で育てたキノコは格別の味でした。
◆今後の課題と拡張
課題としては、ガジェットを作成・運用している中で、持ち運びの途中で分解してしまったことがありました。壊れないようにするために、専用ケースを3D プリンターで作成すると面白そうです。また、夜間や光の少ない場所では上手く写真が撮れないことがありました。フラッシュや暗視カメラなどの利用を検討したほうがよいと思いました。
今後の拡張としては、こまめに霧吹きを行うことが大変だったので、加湿器を使って湿度設定の自動化を行いたいと思いました。また、Microsoft Azure やAmazon Web Services (AWS) などのクラウドサービスへデータの保存と可視化を行うことで、どのように栽培するのが最適かを調査できると良いかもしれません。
◆謝辞
◆本記事を作成するにあたり、株式会社 Shaxware の社本さん、渋木さん、石野さんから、丁寧かつ熱心なご指導を賜りました。ここに感謝の意を表します。
資料
◆パーツリスト
名前 | 説明 | 価格 (税込) |
---|---|---|
GR-PEACH Full | ワンボードマイコン | 9,690円 |
AE-HDC1000 | 温度・湿度計センサー | 680円 |
AE-AQM0802 | LCD | 600円 |
ピンヘッダー | ピンヘッダー | 526円 |
ジャンプワイヤ | ジャンプワイヤー | 508円 |
BB-601 | ブレッドボード | 120円 × 2 |
Arduino 用バニラシールド ver.2 | 電子部品を乗せるためのバニラシールド | 400円 |
Arduino シールド用ピンソケットのセット (R3対応) | GR-PEACH とバニラシールドを固定 | 185円 × 2 |
LOGICOOL C270 | ウェブカム | 2,551円 |
OTGケーブル | OTG ケーブル | 385円 |
※執筆当時(2016年)の値段です。
◆ライブラリリスト
名前 | 説明 |
---|---|
HDC1000 | HDC1000 (温度・湿度センサー) を扱うライブラリ |
AQM0802 | AQM0802 (LCD) を扱うライブラリ |
USBHostC270 USBHostCam USBHost_Addlso |
USB カメラを扱うライブラリ |
SDFileSystem | SD カードを扱うライブラリ |
ConfigFile | 設定ファイルを扱うライブラリ |
EthernetInterface | Ethernet を扱うライブラリ |
HTTPClient | HTTP を扱うライブラリ |
NTPClient | NTP を扱うライブラリ |
◆設定ファイルの仕様
項目名 | 型 | デフォルト値 | 説明 |
---|---|---|---|
TemperatureMax | float (℃) | 10 | キノコを生育するための上限温度 HDC1000 の計測範囲は-20℃~85℃ |
TemperatureMin | float (℃) | 25 | キノコを生育するための下限温度 制限事項は、TemperatureMax と同様 |
HumidityMax | float (%) | 65 | キノコを生育するための上限湿度 最大値は100% |
HumidityMin | float (%) | 70 | キノコを生育するための下限湿度 最小値は0% |
WarningInterval | float (秒) | 30 * 1000 | 警告をTwitterに投稿する間隔 内部的にTimer class を使用しているため、最大値は約35 * 1000秒 Twitterの仕様上、最小間隔は60秒 |
CameraInterval | float (秒) | 30 * 1000 | カメラを撮影する間隔 制限事項は、WarningInterval と同様 |
NTPServer | char | ntp.tohoku.ac.jp | NTP サーバー |
TwitterProxy | char | Twitter のProxy サーバー | |
Token | char | ||
TokenSecret | cha |
普段は情報系の大学でコンピューターサイエンスについて学習中。
趣味でGR-PEACHやRaspberry Pi をいじっています。
休日は、最新の技術を学ぶためIT系勉強会に参加している、最近は、5分間で好きなことを発表するLT(Lightning Talk)にも挑戦している。
http://kuxumarin.hatenablog.com/