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

Earth Analyzer: Продвинутый набор IoT-сенсоров для экологического мониторинга

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

Необходимые инструменты

Приложения и онлайн-сервисы

О проекте

Этот проект представляет собой ровер для мониторинга состояния почвы и окружающей среды, предназначенный для помощи фермерам. Система состоит из трёх основных модулей.

Модуль 1: Базовая платформа и сенсоры

Подключение двух DC-моторов через драйвер L298. Выходы драйвера соединяются с цифровыми пинами Bolt (0–3). Датчик влажности почвы подключается к цифровому пину 4, датчик температуры LM35 — к аналоговому входу A0. Все цепи питания и земли объединяются и запитываются от аккумулятора через Solar Power Manager.

Модуль 2: Радио-управление (nRF24L01)

Два модуля nRF24L01 обеспечивают радиоканал для ближнего управления ровером. Один модуль (передатчик) подключается к джойстикам на стороне оператора, второй (приёмник) — к Arduino на ровере. Джойстик 1 управляет движением платформы, джойстик 2 — сервоприводом (например, для поворота камеры или манипулятора).

Модуль 3: Программное обеспечение и облачные сервисы

Код передатчика (Arduino + nRF24L01)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CSN, CE
const byte address[6] = "00001";

int x_key = A1, y_key = A0, p_key = A3, q_key = A2;
int x_pos, y_pos, p_pos, q_pos, pos;

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(87);
  radio.setDataRate(RF24_250KBPS);
  radio.stopListening();
  Serial.begin(9600);
  pinMode(x_key, INPUT); pinMode(y_key, INPUT);
  pinMode(p_key, INPUT); pinMode(q_key, INPUT);
}

void loop() {
  x_pos = analogRead(x_key); y_pos = analogRead(y_key);
  p_pos = analogRead(p_key); q_pos = analogRead(q_key);

  if (p_pos > 400 && p_pos < 600 && q_pos > 400 && q_pos < 600) {
    if (x_pos > 400 && x_pos < 600 && y_pos > 400 && y_pos < 600) pos = 100; // Стоп
    else if (x_pos > 400 && x_pos < 600 && y_pos < 400) pos = 200; // Вперёд
    else if (x_pos > 400 && x_pos < 600 && y_pos > 600) pos = 300; // Назад
    else if (y_pos > 400 && y_pos < 600 && x_pos < 400) pos = 400; // Влево
    else if (y_pos > 400 && y_pos < 600 && x_pos > 600) pos = 500; // Вправо
    radio.write(&pos, sizeof(pos));
  } else if (p_pos < 400 || p_pos > 600) {
    pos = (p_pos < 400) ? 600 : 700; // Серво: 90° или 180°
    radio.write(&pos, sizeof(pos));
  }
  delay(100);
}

Код приёмника (Arduino + nRF24L01 + Серво)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

RF24 radio(7, 8);
const byte address[6] = "00001";
Servo servo;
int pos;

void setup() {
  Serial.begin(9600);
  radio.begin();
  servo.attach(9);
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(87);
  radio.setDataRate(RF24_250KBPS);
  radio.startListening();
  pinMode(3, OUTPUT); pinMode(4, OUTPUT);
  pinMode(5, OUTPUT); pinMode(6, OUTPUT);
}

void loop() {
  if (radio.available()) {
    radio.read(&pos, sizeof(pos));
    switch (pos) {
      case 100: digitalWrite(6,LOW); digitalWrite(5,LOW); digitalWrite(4,LOW); digitalWrite(3,LOW); break;
      case 200: digitalWrite(6,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); digitalWrite(3,LOW); break;
      case 300: digitalWrite(6,LOW); digitalWrite(5,HIGH); digitalWrite(4,LOW); digitalWrite(3,HIGH); break;
      case 400: digitalWrite(6,LOW); digitalWrite(5,HIGH); digitalWrite(4,HIGH); digitalWrite(3,LOW); break;
      case 500: digitalWrite(6,HIGH); digitalWrite(5,LOW); digitalWrite(4,LOW); digitalWrite(3,HIGH); break;
      case 600: servo.write(90); break;
      case 700: servo.write(180); break;
    }
    delay(10);
  } else {
    Serial.println("connection lost");
  }
}

Облачный мониторинг через Telegram (Python на сервере)

Скрипт на Python (например, на Replit) периодически опрашивает Bolt Cloud, считывает значение датчика влажности (пин 4) и при превышении порога отправляет уведомление в Telegram-бот.

import requests, json, time
from boltiot import Bolt
import conf

mybolt = Bolt(conf.bolt_api_key, conf.device_id)

def get_sensor_value(pin):
    try:
        resp = mybolt.digitalRead(pin)
        data = json.loads(resp)
        if data["success"] != 1: return -999
        return int(data["value"])
    except Exception as e:
        print(e); return -999

def send_telegram(msg):
    url = f"https://api.telegram.org/{conf.telegram_bot_id}/sendMessage"
    data = {"chat_id": conf.telegram_chat_id, "text": msg}
    try:
        r = requests.get(url, params=data)
        return json.loads(r.text)["ok"]
    except Exception as e:
        print(e); return False

while True:
    val = get_sensor_value("4")
    if val == -999: time.sleep(10); continue
    if val >= conf.threshold:
        send_telegram(f"Влажность превысила порог: {val}")
    time.sleep(100)

Файл conf.py содержит API-ключи Bolt, ID устройства, токен бота и ID чата Telegram, а также пороговое значение.

Интеграция с Google Assistant, Twilio и Mailgun через Integromat (Make)

Сценарий Integromat принимает вебхук от IFTTT (голосовая команда Google Assistant), запрашивает значение температуры с Bolt Cloud, преобразует сырое значение АЦП в градусы (деление на 10.24 для LM35) и отправляет результат по SMS (Twilio) и Email (Mailgun).

Схемы подключения

В разделе Schematics представлены фото подключения LM35 к Bolt WiFi Module и итоговая схема на макетной плате.

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

  1. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  2. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  3. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  4. Создание пользовательских LED-часов с будильником — видно с 12 метров
  5. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  6. Оптимизированные решения питания для проектов на Arduino
  7. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  8. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  9. Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
  10. Своё рулевое управление (джойстик) для игр на Arduino