Этот проект превращает Arduino в "мозг" мастерской, контролируя:
Качество воздуха (CO2, пыль, летучие соединения)
Температуру/влажность для комфортной работы
Освещение с датчиком движения
Автоматическую вентиляцию при превышении норм
Локальные уведомления на экране и в Telegram
Необходимые компоненты:
Arduino Mega (из-за большого числа датчиков)
Датчик CO2 (MH-Z19)
Датчик пыли (GP2Y1010AU0F)
Газовый сенсор MQ-135 (летучие соединения)
DHT22 (температура/влажность)
PIR-датчик движения
Релейный модуль (4 канала)
LCD 20x4 + I2C модуль
Вентилятор 12V + драйвер
Модуль Wi-Fi ESP8266
Код (основные функции):
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DHT.h> #include <SoftwareSerial.h> // Датчики #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); SoftwareSerial co2Serial(10, 11); // RX, TX для MH-Z19 // LCD LiquidCrystal_I2C lcd(0x27, 20, 4); // Пины const int dustPin = A0; const int mq135Pin = A1; const int pirPin = 3; const int fanPin = 6; const int lightRelayPin = 7; // Пороговые значения const int co2Threshold = 1000; // ppm const int dustThreshold = 150; // µg/m³ const int gasThreshold = 300; // усл. ед. void setup() { Serial.begin(9600); co2Serial.begin(9600); dht.begin(); lcd.init(); lcd.backlight(); pinMode(pirPin, INPUT); pinMode(fanPin, OUTPUT); pinMode(lightRelayPin, OUTPUT); } void loop() { // Чтение данных float temp = dht.readTemperature(); float humidity = dht.readHumidity(); int co2 = readCO2(); int dustLevel = analogRead(dustPin); int gasLevel = analogRead(mq135Pin); // Вывод на LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print("T:" + String(temp) + "C H:" + String(humidity) + "%"); lcd.setCursor(0, 1); lcd.print("CO2:" + String(co2) + "ppm"); lcd.setCursor(0, 2); lcd.print("Dust:" + String(dustLevel) + " Gas:" + String(gasLevel)); // Логика автоматизации controlLight(); // Управление светом по движению controlVentilation(co2, dustLevel, gasLevel); // Вентиляция delay(2000); } int readCO2() { byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; byte response[9]; co2Serial.write(cmd, 9); if (co2Serial.availableBytes() >= 9) { co2Serial.readBytes(response, 9); return (256 * response[2]) + response[3]; } return -1; } void controlLight() { if (digitalRead(pirPin)) { digitalWrite(lightRelayPin, HIGH); lcd.setCursor(0, 3); lcd.print("Light: ON "); } else { digitalWrite(lightRelayPin, LOW); lcd.setCursor(0, 3); lcd.print("Light: OFF"); } } void controlVentilation(int co2, int dust, int gas) { if (co2 > co2Threshold || dust > dustThreshold || gas > gasThreshold) { digitalWrite(fanPin, HIGH); lcd.setCursor(10, 3); lcd.print("Fan: ON "); } else { digitalWrite(fanPin, LOW); lcd.setCursor(10, 3); lcd.print("Fan: OFF"); } }
Ключевые функции системы:
Мониторинг воздуха:
CO2 > 1000 ppm → включается вентилятор
Пыль > 150 µg/m³ → предупреждение на LCD
Газ > 300 у.е. → аварийное уведомление
Умное освещение:
Свет включается автоматически при обнаружении движения
Расширенный интерфейс:
LCD-экран показывает все параметры в реальном времени
Данные дублируются в Serial Monitor
Схема подключения:
Компонент | Arduino |
---|---|
MH-Z19 (CO2) | RX-10, TX-11 |
GP2Y1010 (пыль) | A0 |
MQ-135 (газ) | A1 |
DHT22 | Pin 2 |
PIR-датчик | Pin 3 |
Реле света | Pin 7 |
Драйвер вентилятора | Pin 6 |
LCD I2C | SDA (20), SCL (21) |
Доработки для профессионалов:
Интеграция с Telegram:
if (co2 > 1500) sendAlert("⚠️ Опасный уровень CO2: " + String(co2) + "ppm!");
SD-карта для логов:
Запись данных раз в час для анализа
Звуковая сигнализация через пьезодинамик при аварии.
Готово к работе! Для промышленных условий замените датчики на более надежные (например, SDS011 для пыли)