工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマートプラントコミュニケーター: Arduino MKR IoT Bundleで自動ガーデニング

必要な部品

部品名 数量
Arduino MKR IoT Bundle (MKR1000 + センサーキット) 1

使用サービス

プロジェクト概要

植物はコミュニケーションが苦手。枯らしてしまう前に、MKR1000とIoT Bundleのセンサーで「植物の声」を可視化し、メール通知・グラフ化・アラートで見守るデバイスを作ります。

ひとことで言うと

使用センサー (Bundle付属)

学習目標

関連実験 (同Bundleで製作可能)

Zapierセットアップ (Webhook → Gmail)

  1. Zapierで新規Zap作成 → Trigger: Webhooks by Zapier / Catch Hook
  2. 生成された固有URLをコピー (例: https://hooks.zapier.com/hooks/catch/xxxxxx/)
  3. テスト用パラメータを付けてブラウザでアクセス: ...?temperature=0&moisture=0&light=0&warning=0
  4. 「Test & Review」で成功確認 → Action: Gmail / Send Email を追加
  5. Gmailアカウント連携 → 宛先・件名・本文を設定 (本文はHTML指定可能)
  6. 動作テスト後、ZapをONにする

※ 無料プランは月100リクエストまで。頻度に注意してください。

MKR1000ボードセットアップ

必要ライブラリ

ライブラリマネージャからインストール。

SSL証明書のアップロード (重要)

MKR1000でHTTPS通信するには、接続先ドメインのルート証明書をボードに書き込む必要があります。Zapierの場合 hooks.zapier.com を登録します。

  1. Arduino IDE (デスクトップ版) で ファイル → スケッチ例 → WiFi101 → FirmwareUpdater を開く
  2. スケッチ内のドメインリストに hooks.zapier.com を追加
  3. MKR1000に書き込み実行 (シリアルモニタで進捗確認)

注意: Arduino Web Editorでは未対応。デスクトップ版IDE必須。

HTTPリクエスト送信 (基本スケッチ)


#include 
#include 

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
String httpsRequest = SECRET_REQUEST; // Zapier Webhook URLのパス部分
const char* host = "hooks.zapier.com";
WiFiSSLClient client;

void setup() {
  Serial.begin(9600);
  while (!Serial); delay(2000);
  Serial.print("Connecting: "); Serial.println(ssid);
  while (WiFi.begin(ssid, password) != WL_CONNECTED) { Serial.print("."); delay(500); }
  Serial.println("\nWiFi connected");
}

void loop() {
  float temperature = 22;
  int moisture = 150;
  int light = 40;
  String warning = "This is a warning message";
  warning.replace(" ", "%20"); // URLエンコード (スペース→%20)
  
  send_email(temperature, moisture, light, warning);
  delay(20000); // 20秒ごと (テスト用。本番はRTCアラームで制御)
}

void send_email(float temperature, int moisture, int light, String warning) {
  String _temp = String(temperature);
  String _moist = String(moisture);
  String _light = String(light);
  
  if (client.connect(host, 443)) {
    client.println("POST " + httpsRequest + "?temperature=" + _temp + "&moisture=" + _moist + "&light=" + _light + "&warning=" + warning + " HTTP/1.1");
    client.println("Host: " + String(host));
    client.println("Connection: close");
    client.println();
    delay(1000);
    while (client.available()) { char c = client.read(); Serial.write(c); }
    client.stop();
  } else {
    Serial.println("Connection failed");
  }
}

RTCとアラームで定期実行

MKR1000内蔵RTCを使い、毎日決まった時刻にメール送信。アラームは割り込みで動作するため、割り込み内では delay() 禁止。フラグ変数で loop() 側に処理を委譲します。


#include 
RTCZero rtc;

const byte seconds = 0, minutes = 0, hours = 16; // 16:00:00
const byte day = 4, month = 12, year = 17;       // 2017/12/4
bool email_sent = false;

void setup() {
  Serial.begin(9600); while(!Serial); delay(2000);
  rtc.begin();
  rtc.setTime(hours, minutes, seconds);
  rtc.setDate(day, month, year);
  rtc.setAlarmTime(16, 1, 0); // 16:01にアラーム
  rtc.enableAlarm(rtc.MATCH_HHMMSS);
  rtc.attachInterrupt(alarmMatch);
}

void loop() {
  if (!email_sent) { send_email(...); email_sent = true; }
}

void alarmMatch() { email_sent = false; } // 割り込みでフラグクリア

DIY土壌湿度センサー

土に刺した2本のワイヤー間抵抗が湿度で変化する性質を利用。1MΩ抵抗と分圧回路を作り、アナログ入力で電圧を読み取ります。「湿っているほど抵抗が下がり、電圧が上がる (読み値が大きくなる)」のが特徴です。


int moisturePin = A2;
int threshold = 800; // 乾燥/湿潤の境界値 (実測で調整)

void setup() { Serial.begin(9600); while(!Serial); delay(2000); }

void loop() {
  Serial.println(get_average_moisture());
  delay(5000);
}

int get_average_moisture() {
  int sum = 0;
  for (int i = 0; i < 10; i++) { sum += analogRead(moisturePin); delay(10); }
  return sum / 10;
}

乾燥土・湿潤土で実測し、閾値を決定してください。閾値を下回ったら「水やり必要」アラートを飛ばせます。

温度・光センサー追加

配線は回路図参照。読み取り関数:


float get_temperature() {
  int reading = analogRead(A1); // TMP36 Vout
  float voltage = reading * 3.3 / 1024.0;
  float tempC = (voltage - 0.5) * 100; // 10mV/°C, 500mVオフセット
  return tempC; // 華氏なら (tempC * 9/5) + 32
}

int get_light() { return analogRead(A0); } // フォトトランジスタ

#ProTip: ThingSpeakでデータ可視化

  1. ThingSpeakでチャネル作成 → Write API Key取得
  2. ThingSpeak ライブラリインストール
  3. 以下のスケッチで1分ごとにアップロード

#include 
#include 
#include "ThingSpeak.h"

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
WiFiClient tsClient;
unsigned long channel = 356392;
const char* writeKey = SECRET_WRITE_API;

int lightPin = A0, tempPin = A1, moisturePin = A2;

void setup() {
  Serial.begin(9600); while(!Serial); delay(2000);
  while (WiFi.begin(ssid, password) != WL_CONNECTED) { Serial.print("."); delay(500); }
  Serial.println("\nWiFi connected");
  ThingSpeak.begin(tsClient);
}

void loop() {
  ThingSpeak.setField(1, get_light());
  ThingSpeak.setField(2, get_temperature());
  ThingSpeak.setField(3, get_average_moisture());
  ThingSpeak.writeFields(channel, writeKey);
  Serial.println("Sent to ThingSpeak");
  delay(60000);
}
// get_temperature, get_average_moisture, get_light は上記参照

RTCアラームで1分ごと起動するよう組み込めば、継続的なログが取れます。Gmailにグラフを埋め込めないため、メール本文にThingSpeakチャートへのリンクボタンを設置するのがおすすめ。

#ProTip: HTML/CSSでメールを装飾

Zapierのメール本文タイプを「HTML」にし、以下のテンプレートを貼り付けると美しいレポートメールになります。









HELLO !

Here's your daily update about your garden ☘

♨ Temperature: {{querystring__temperature}} C
☔ Moisture: {{querystring__moisture}}
☀ Light: {{querystring__light}}
{{querystring__warning}}
SEE THE GRAPH

{{...}} はZapierがWebhookパラメータで置換してくれます。

#ProTip: PostmanでAPIテスト

HTTPリクエストの組み立て・デバッグに Postman が便利です。ZapierのWebhook URLを貼り付け、パラメータを追加して送信すれば、レスポンスと完成URLが確認できます。

完全版スケッチ (ProTip統合版)

RTCアラーム駆動で毎日決まった時刻にメール送信 + 1分ごとThingSpeakアップロード + 閾値監視アラートを統合した完全版スケッチは、元記事の「Complete sketch」セクションを参照してください。

回路図

スマートプラントコミュニケーター: Arduino MKR IoT Bundleで自動ガーデニング

TMP36 → A1, フォトトランジスタ → A0, DIY湿度センサー → A2 (1MΩプルダウン)

製造プロセス

  1. 『Reliable Plant』創刊号:メンテナンス卓越性への信頼できるガイド
  2. プラントメンテナンスを解き明かす:モダンインダストリーのベストプラクティス
  3. 肥料:科学、生産、持続可能な未来
  4. 集積回路(IC):現代エレクトロニクスを支える微小強力チップ
  5. MOSMusicプロジェクトキット: MOSFET、Arduinoで音楽同期照明制御
  6. ボール盤の主要構成部品と機能:ベースからモーターまで完全解説
  7. プラントメンテナンスの極意:信頼性の高いエネルギー生産のための実証済みプラクティス
  8. 内燃機関の主要コンポーネント:構造と機能
  9. バルク化学プラントの価値最大化:成長のための戦略
  10. SPICEネットリスト構文マスター:コンポーネント命名、受動・能動素子、電源定義
  11. 産業用IoT予測2018:スマート・プラントが製造業をどう変えるか