Этот проект превращает 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 для пыли)

