Умный мониторинг растений на Arduino MKR IoT Bundle: автополив и уведомления
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino MKR IoT Bundle | 1 | Включает MKR1000, сенсоры, реле, провода |
Сервисы
- Zapier — автоматизация: HTTP-запрос → Email
- ThingSpeak — облачный график показаний сенсоров
О проекте
Устройство для удаленного мониторинга состояния растения: влага почвы, температура, освещенность. Данные отправляются на Email (через Zapier) и в ThingSpeak для графиков. Используется RTC MKR1000 для ежедневных отчетов. В комплекте MKR IoT Bundle есть все необходимое.
Цели обучения
- Работа с Zapier (Webhooks → Gmail)
- HTTP/HTTPS запросы с Arduino (WiFi101 + WiFiSSLClient)
- RTC и будильники (библиотека RTCZero)
- Самодельный датчик влаги (два провода + 1МОм)
- Графики в ThingSpeak
- HTML/CSS-шаблоны писем в Zapier
- Тестирование API через Postman
Настройка Zapier
- Создайте Zap: Trigger = Catch Hook (Webhooks)
- Скопируйте уникальный URL (например,
https://hooks.zapier.com/hooks/catch/12345/abcde/) - Протестируйте: откройте в браузере
URL?temperature=22&moisture=150&light=40&warning=test - Action = Gmail: Send Email. Настройте шаблон (см. HTML-шаблон ниже).
- Включите Zap.
Загрузка сертификатов на MKR1000
Для HTTPS (Zapier, ThingSpeak) нужно загрузить корневые сертификаты. В Arduino IDE: Файл → Примеры → WiFi101 → FirmwareUpdater. Добавьте домен hooks.zapier.com (и api.thingspeak.com). Загрузите на плату. В Arduino Web Editor это недоступно — нужен Desktop IDE.
Отправка HTTP-запроса
#include <WiFi101.h>
#include <WiFiSSLClient.h>
const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
String httpsRequest = SECRET_REQUEST; // Часть URL после домена
const char* host = "hooks.zapier.com";
WiFiSSLClient client;
void send_email(float temperature, int moisture, int light, String warning) {
warning.replace(" ", "%20"); // URL-кодирование пробелов
String _temperature = String(temperature);
String _moisture = String(moisture);
String _light = String(light);
if (client.connect(host, 443)) {
client.println("POST " + httpsRequest + "?temperature=" + _temperature +
"&moisture=" + _moisture + "&light=" + _light + "&warning=" + warning + " HTTP/1.1");
client.println("Host: " + String(host));
client.println("Connection: close");
client.println();
delay(1000);
while (client.available()) Serial.write(client.read());
client.stop();
} else {
Serial.println("Connection failed");
}
}
RTC и ежедневные отчеты
MKR1000 имеет встроенный RTC. Установите время/дату, настройте будильник на 16:01 ежедневно. В прерывании будильника устанавливайте флаг, в loop() отправляйте email.
#include <RTCZero.h>
RTCZero rtc;
bool email_sent = false;
void setup() {
rtc.begin();
rtc.setTime(16, 0, 0);
rtc.setDate(4, 12, 17);
rtc.setAlarmTime(16, 1, 0);
rtc.enableAlarm(rtc.MATCH_HHMMSS);
rtc.attachInterrupt(alarmMatch);
}
void alarmMatch() { email_sent = false; }
void loop() {
if (!email_sent) { send_email(...); email_sent = true; }
}
Самодельный датчик влаги
Два провода в почве = переменный резистор. Схема: делитель напряжения с резистором 1МОм. Чем влажнее почва, тем ниже сопротивление, тем ниже напряжение на аналоговом входе. Усредняем 10 замеров для стабильности.
int moisturePin = A2;
int threshold = 800; // Калибруйте: замерьте в сухой и влажной почве
int get_average_moisture() {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += analogRead(moisturePin);
delay(10);
}
return sum / 10;
}
Датчики температуры (TMP36) и света (фототранзистор)
float get_temperature() {
int reading = analogRead(A1);
float voltage = reading * 3.3 / 1024.0;
return (voltage - 0.5) * 100; // °C
}
int get_light() {
return analogRead(A0);
}
#ProTip: Графики в ThingSpeak
- Создайте канал на ThingSpeak, получите Write API Key.
- Библиотека
ThingSpeak.h. - Отправляйте поля каждую минуту (или по RTC-будильнику).
#include "ThingSpeak.h"
WiFiClient tsClient;
unsigned long channel = 356392;
const char* writeKey = SECRET_WRITE_API;
void loop() {
ThingSpeak.setField(1, get_light());
ThingSpeak.setField(2, get_temperature());
ThingSpeak.setField(3, get_average_moisture());
ThingSpeak.writeFields(channel, writeKey);
delay(60000);
}
#ProTip: Красивые письма в Zapier
В действии Gmail выберите Body Type: HTML. Вставьте шаблон с CSS. Доступны переменные: {{querystring__temperature}}, {{querystring__moisture}}, {{querystring__light}}, {{querystring__warning}}. Добавьте кнопку-ссылку на ThingSpeak-график.
#ProTip: Тестирование API в Postman
Вставьте URL Zapier, добавьте параметры, нажмите Send. Postman покажет ответ и сгенерирует готовый URL.
Полная схема подключения
TMP36 → A1, Фототранзистор → A0, DIY-влага → A2 (через 1МОм к GND). Реле и актуаторы — по необходимости.
Производственный процесс
- Синтаксис нетлистов SPICE: именование компонентов, пассивные и активные элементы, определение источников
- Удобрения: наука, производство и устойчивое будущее
- Интегральные схемы (ИС): компактные мощные чипы, питающие современную электронику
- Запуск Reliable Plant: Ваш надежный проводник к совершенству в обслуживании
- Набор MOSMusic: MOSFET, Arduino и управление светом по музыке
- Обслуживание завода: Лучшие практики для современных индустрий
- Раскрытие ценности в заводах базовой химии: стратегии роста
- Основные компоненты сверлильного станка: подробный обзор
- Обслуживание электростанций: проверенные практики для надежного производства энергии
- Ключевые компоненты двигателя внутреннего сгорания