プラントコミュニケータ
コンポーネントと消耗品
> |
| × | 1 |
アプリとオンラインサービス
| ||||
|
このプロジェクトについて
注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。
はじめに
イギリスの詩人ウィリアム・ワーズワースがかつて言ったように:
「あなたの心は庭であり、あなたの考えは種であり、収穫は花か雑草のどちらかです。」
植物はコミュニケーションが非常に苦手なので、植物を生かしておくことは非常に難しい場合があります。
彼らを幸せに保つ一つの方法はあなたの植物をあなたと一緒に持ってくることです、しかし多分あなたはあなたの冬のジャケットのポケットから突き出ているその大きなオレサボテンまたはシダと一緒に持ち歩きたくないでしょう。また、ほとんどの植物は寒さを嫌います。
スパイダープラントとの通信に数か月を費やした後、MKR IoTバンドルコンポーネントをあきらめて使用し、代わりに任意のプラントの状態をリモートで調査するデバイスを作成しました。
一言で言えば:
この実験では、Arduinoの魔法を使用するだけでなく、植物を保護して生き残る方法を学びます。
湿気、温度、光を監視することで、植物が幸せであることを確認できます。毎日メールやグラフを送信し、必要性を通知することができます。
コンポーネント
- TMP36温度センサー
- フォトトランジスタ
- DIY水分センサー
学習目標
- Zapierインターネットサービスの紹介
- HTTPリクエストの送信
- リアルタイムクロックとアラームの管理
- DIY水分センサーの構築
- thingSpeakで値をプロットする #ProTips
- HTMLとCSSを使用してメールのスタイルを設定する #ProTips
- PostMan #ProTips を使用してAPIをテストします
もっと知りたいですか?
このチュートリアルは、MKR1000とIoTに慣れるための一連の実験の一部です。すべての実験は、MKRIoTバンドルに含まれるコンポーネントを使用して構築できます。
- ラブユーピロー
- パズルボックス
- パブロフの猫
- オタク
- プラントコミュニケーター
Zapierをセットアップする
Zapierは、他のアプリのAPIを簡単に管理できるオンライン自動化ツールです。複数のタスクを組み合わせる場合や、使用するアプリにArduinoでは管理できない複雑なAPIがある場合に最適なツールです。
この例では、これを使用して、Arduinoから取得したデータを含むメールを送信します。
このいくつかの簡単な手順に従って、独自のザップを作成してください!
<図> <図> <図> <図>続行するには、最初に指定されたURLをコピーしてフックをテストし、次に[続行]を押したときに表示される[テストとレビュー]ボタンを選択する必要があります。次のパラメータをURLに追加します:
custom_webhook_URL?temperature =0&moisture =0&light =0&warning =0
次に、このURLをコピーして新しいブラウザページに貼り付けます。
次のような応答が表示されます:
<図> <図>おめでとう! httpリクエストを送信しました!
これはまさにArduinoボードで行うことです。 ただし、そのURLをブラウザページに貼り付ける代わりに、Zapierサーバーに直接送信します。また、センサー値でゼロに設定されているパラメーターの値を変更します。
APIをテストして操作するためのより高度な方法については、をご覧ください。 #ProTip ページの下部にあります。
リクエストをテストした後、Zapの作成に進むことができます。
これを行う... を使用して編集を続行します
<図> <図> <図> <図> <図> <図> <図> <図>メールボックスをチェックして、Zapierから生成された電子メールを確認します。 Gmail設定の最初のステップで使用したアカウントからのものになります。
ボードを設定する
すべての機能を実装するために、次のライブラリを使用します。
- WiFi101 //インターネットに接続してネットワークをスキャンする
- RTCZero //時間トリガーイベントを管理する
このガイドで説明されているように、ライブラリマネージャからダウンロードできます。
ZapierのAPIを使用するには、最初に証明書をアップロードする必要があります。 MKR1000で。 これはほとんどのオンラインサービスとAPIに適用されます!
WiFi101ライブラリからFirmwareUpdaterの例をアップロードし、 hooks.zapier.com を追加します ドメインに。
>の例> WiFi101> FirmwareUpdater
Arduino Web Editorを使用している場合、この機能はまだ実装されていないため、を介してこれを行う必要があります。 Arduinoデスクトップアプリケーション。
<図> <図> <図>
HTTPリクエストの送信
これで、ArduinoボードからHTTPリクエストを送信する準備が整いました。
今のところ、パラメータに任意の値を設定し、後で実際のセンサー値に置き換えます。
フロート温度=22; int水分=150; int light =40; String warning ="これは警告メッセージです"; warning.replace( ""、 "%20");
文字列をエンコードする必要があることに注意してください 、HTTPリクエストでは空白を送信できないため。すべての空白スペースは、エンコードされた同等の %20
に置き換えられます
パラメータを設定した後、 send_email()
を呼び出します。 関数は、それらすべてを文字列に変換し、以前に使用したものと同じURLを再構築します その後、Zapierサーバーに投稿します。
このスケッチに、WiFiクレデンシャルとZapierから受け取ったURLを入力してアップロードします。
#include #include const char * ssid =SECRET_SSID; //ネットワークSSID(名前)const char * password =SECRET_PSWD; //ネットワークパスワードStringhttpsRequest =SECRET_REQUEST; // Zapier URL const char * host ="hooks.zapier.com"; WiFiSSLClientクライアント; void setup(){Serial.begin(9600); while(!Serial); delay(2000); Serial.print( "接続Wifi:"); Serial.println(ssid); while(WiFi.begin(ssid、password)!=WL_CONNECTED){Serial.print( "。"); delay(500); } Serial.println( ""); Serial.println( "WiFi接続"); } void loop(){フロート温度=22; int水分=150; int light =40; String warning ="これは警告メッセージです"; warning.replace( ""、 "%20"); send_email(温度、湿気、光、警告); delay(20000)} void send_email(floattemperature、intmoisture、int light、String warning){//値を文字列に変換するString _temperature =String(temperature); String _moisture =String(moisture); String _light =String(light);文字列_warning =警告; if(client.connect(host、443)){client.println( "POST" + httpsRequest + "?temperature =" + _temperature + "&moisture =" + _moisture + "&light =" + _light + "&warning =" + _warning + "HTTP / 1.1"); client.println( "ホスト:" + String(host)); client.println( "接続:閉じる"); client.println(); delay(1000); while(client.available()){//サーバーの回答をコンソールに出力しますchar c =client.read(); Serial.write(c); } client.stop(); //サーバーから切断します} else {Serial.println( "クライアントへの接続に失敗しました"); }}
選択したアドレスに20秒ごとにメールが送信されます。
リクエストに注意してください。Zapierでは月に100件の無料リクエストしか許可されていません。
RTCとアラーム
MKR1000のリアルタイムクロックを使用して、毎日特定の時間にメールを送信できます。
このスケッチでは、日時を2017年12月4日の16:00に設定し、毎日16:01にアラームをトリガーします。
アラームは割り込みに関連付けられているため、注意してください 関数遅延を含めることはできません 、ただし、ブール変数を使用して、 loop()
でアクションをトリガーできます。
#include RTCZero rtc; // RTCオブジェクトを作成します/ *これらの値を変更して現在の初期時刻を設定します* / const byte seconds =0; constバイト分=0; constバイト時間=16; / *これらの値を変更して、現在の初期日付を設定します* / const byte day =4; constバイト月=12; constバイト年=17; bool email_already_sent =false; void setup(){Serial.begin(9600); while(!Serial); delay(2000); rtc.begin(); // RTC 24H形式を初期化しますrtc.setTime(hours、minutes、seconds); rtc.setDate(日、月、年); rtc.setAlarmTime(16、1、0); // Arduinoがメールを送信する時間を設定しますrtc.enableAlarm(rtc.MATCH_HHMMSS); rtc.attachInterrupt(alarmMatch); } void loop(){if(!email_already_sent){// send_email(); email_already_sent =true; }} void alarmMatch(){//アラームが発生したときにトリガーされますSerial.println( "Alarm Match!"); email_already_sent =false; }
DIY土壌水分センサー
土鍋に配置された2本のワイヤーは可変抵抗器を形成します。その抵抗は土壌水分によって異なります 。
この可変抵抗器は分圧器構成で接続されており、Arduinoは2本のワイヤー間の抵抗に比例した電圧を収集します。
つまり、土壌の湿度が高いほど、Arduinoから測定される電圧は低くなります。
1メガオーム抵抗器を使用 2本のワイヤーでDIY土壌水分センサーを作成できます!
<図>次のスケッチをアップロードすると、センサーの値の読み取りを開始できます。最初に乾燥した土壌でテストを開始することをお勧めします。 そして、あなたが読んだ価値を書き留めてください。
その値はしきい値を設定するために使用されます Arduinoがあなたの植物がいつ水を必要としているかを知り、緊急メールを送信するようにします。
intmoisturePin =A2; //使用した抵抗に応じてこのスリーホールドを設定します//この値を校正する最も簡単な方法は、乾いた土壌と湿った土壌の両方でセンサーをテストすることですint threeshold =800; void setup(){Serial.begin(9600); while(!Serial); delay(2000); } void loop(){Serial.println(get_average_moisture()); delay(5000); } int get_average_moisture(){//より正確になるように10個の値の平均を作成しますint tempValue =0; //水分値を一時的に保存する変数(int a =0; a <10; a ++){tempValue + =analogRead(moisturePin); delay(100); } return tempValue / 10; }
温度センサーと光センサーを追加
2つのセンサーを配線するには、以下の回路図を参照してください。次の2つの関数を使用して、センサーから値を読み取ります。
float get_temperature(){int reading =analogRead(A1);フロート電圧=読み取り値* 3.3;電圧/ =1024.0; //温度を摂氏で印刷フロート温度C =(電圧-0.5)* 100; // 500mVオフセットで1度あたり10mvから変換//華氏に変換floattemperatureF =(temperatureC * 9.0 / 5.0)+ 32.0;戻り温度C; } int get_light(){int light_value =analogRead(A0); light_valueを返します。 }
temperatureF
を返すことで、華氏単位を使用できることに注意してください。 temperatureC
の代わりに
#ProTip:ThingSpeakを使用して値をプロットする
コントロールフリークの皆さんのために、ここに収集されたすべてのデータを次のような美しいグラフにプロットする手順があります:
<図>ThingSpeakプラットフォームを使用してグラフをプロットし、次の手順に従って開始します。
<図> <図> <図>ThingSpeakライブラリをダウンロードして始めましょう。以下のスケッチは、センサー値を毎分クラウドにアップロードします。WiFiクレデンシャルとチャンネルのAPIキーを入力してアップロードするだけです。
#include #include #include "ThingSpeak.h" const char * ssid =SECRET_SSID; //ネットワークSSID(名前)const char * password =SECRET_PSWD; //ネットワークパスワードWiFiClientThingSpeakClient; unsigned long myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lightPin =A0; //光センサーが接続されているアナログピンinttempPin =A1; // TMP36のVout(センス)ピンがintmoisturePin =A2に接続されているアナログピン。 void setup(){Serial.begin(9600); while(!Serial); delay(2000); Serial.print( "接続Wifi:"); Serial.println(ssid); while(WiFi.begin(ssid、password)!=WL_CONNECTED){Serial.print( "。"); delay(500); } Serial.println( ""); Serial.println( "WiFi接続"); ThingSpeak.begin(ThingSpeakClient);} void loop(){ThingSpeak.setField(1、get_light()); ThingSpeak.setField(2、get_temperature()); ThingSpeak.setField(3、get_average_moisture()); ThingSpeak.writeFields(myChannelNumber、myWriteAPIKey); Serial.println( "メッセージがクラウドに送信されました"); delay(60000); // 1分ごとに値を送信します} float get_temperature(){int reading =analogRead(tempPin);フロート電圧=読み取り値* 3.3;電圧/ =1024.0; //温度を摂氏で印刷フロート温度C =(電圧-0.5)* 100; // 500mVオフセットで1度あたり10mvから変換//華氏に変換floattemperatureF =(temperatureC * 9.0 / 5.0)+ 32.0;戻り温度C; } int get_average_moisture(){//より正確になるように10個の値の平均を作成しますint tempValue =0; //水分値を一時的に保存する変数(int a =0; a <10; a ++){tempValue + =analogRead(moisturePin); delay(10); } return tempValue / 10; } int get_light(){int light_value =analogRead(A0); light_valueを返します。 }
以下の完全なProスケッチ このアップロードを、毎分トリガーされるRTCアラームに添付する方法を確認できます。
残念ながら、Gmailでは埋め込みできません グラフ および iframes メールの本文に記載されていますが、美しいボタンでメールでリンクを送信できます。以下のヒントをご覧ください。
ThingSpeakを選択しましたが、選択肢はたくさんあります。たとえば、Dweet.ioとfreeboard.ioを見てください。
#ProTip:メールのスタイルを設定する
Zapierを使用すると、本文にhtmlおよびcssコードを埋め込むことができます メールの。これを使用して、次のようなかなり定型化された電子メールを送信できます。
<図>この結果を得るには、体型をhtmlに変更するだけです。 Zapierインターフェースで、カスタムHTMLとCSSを追加します。
<図> <図>このテンプレートをコピーして貼り付けます:
<!doctype html> HELLO!
これがあなたの庭についての毎日の更新です& #9752;
&#9832;温度:{{querystring__temperature}} C &#9748;水分:{{_ querystring__moisture}} &#9728;ライト:{{querystring__light}} {{querystring__warning}} グラフを見る
#ProTip:PostManでAPIをテストする
HTTPリクエストの操作は難しい場合がありますが、幸いなことに、必要なURLを作成するのに役立つツールがたくさんあります。
郵便配達員は良い例です:
<図>Zapierによって指定された初期URLを貼り付け、パラメーターを追加して送信するだけです。サーバーからの応答を出力し、URLを作成します。