Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умный мониторинг растений на Arduino MKR IoT Bundle: автополив и уведомления

Компоненты и материалы

Компонент Количество Примечание
Arduino MKR IoT Bundle 1 Включает MKR1000, сенсоры, реле, провода

Сервисы

О проекте

Устройство для удаленного мониторинга состояния растения: влага почвы, температура, освещенность. Данные отправляются на Email (через Zapier) и в ThingSpeak для графиков. Используется RTC MKR1000 для ежедневных отчетов. В комплекте MKR IoT Bundle есть все необходимое.

Цели обучения

Настройка Zapier

  1. Создайте Zap: Trigger = Catch Hook (Webhooks)
  2. Скопируйте уникальный URL (например, https://hooks.zapier.com/hooks/catch/12345/abcde/)
  3. Протестируйте: откройте в браузере URL?temperature=22&moisture=150&light=40&warning=test
  4. Action = Gmail: Send Email. Настройте шаблон (см. HTML-шаблон ниже).
  5. Включите 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

  1. Создайте канал на ThingSpeak, получите Write API Key.
  2. Библиотека ThingSpeak.h.
  3. Отправляйте поля каждую минуту (или по 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). Реле и актуаторы — по необходимости.

Производственный процесс

  1. Синтаксис нетлистов SPICE: именование компонентов, пассивные и активные элементы, определение источников
  2. Удобрения: наука, производство и устойчивое будущее
  3. Интегральные схемы (ИС): компактные мощные чипы, питающие современную электронику
  4. Запуск Reliable Plant: Ваш надежный проводник к совершенству в обслуживании
  5. Набор MOSMusic: MOSFET, Arduino и управление светом по музыке
  6. Обслуживание завода: Лучшие практики для современных индустрий
  7. Раскрытие ценности в заводах базовой химии: стратегии роста
  8. Основные компоненты сверлильного станка: подробный обзор
  9. Обслуживание электростанций: проверенные практики для надежного производства энергии
  10. Ключевые компоненты двигателя внутреннего сгорания