Skip to main content

🌤️ Датчики окружающей среды

Роботы все чаще работают не в лабораториях, а в реальном мире — на улице, в полях, в городах. Чтобы принимать правильные решения, они должны понимать, что происходит вокруг: какая температура, не идет ли дождь, чистый ли воздух.

Зачем роботу знать погоду?

Практические применения:

  • Агророботы: Знать влажность почвы и температуру воздуха для полива
  • Дроны: Проверять скорость ветра перед полетом
  • Роботы-курьеры: Учитывать дождь и гололед при движении
  • Экологические мониторинговые системы: Измерять загрязнение воздуха

В школьных проектах:

  1. Метеостанция для школьного двора
  2. Умная теплица с автоматическим поливом
  3. Робот-эколог, измеряющий качество воздуха в школе

Основные типы датчиков

1. 🌡️ Температура и влажность

Популярные датчики:

  • DHT11/DHT22 — самые простые, дешевые (±2°C точность)
  • BME280 — профессиональный (температура, давление, влажность)
  • SHT31 — высокая точность (±0.2°C)

Пример с DHT11:

#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float temp = dht.readTemperature();  // Температура в °C
  float humidity = dht.readHumidity(); // Влажность в %
  
  Serial.print("Температура: "); Serial.print(temp);
  Serial.print("°C, Влажность: "); Serial.print(humidity);
  Serial.println("%");
  
  delay(2000);
}

2. 📊 Давление и высота

Зачем нужно:

  • Предсказание погоды (падение давления = возможен дождь)
  • Определение высоты для дронов
  • Навигация в многоэтажных зданиях

Датчики:

  • BMP280 — цифровой барометр
  • MS5611 — высокая точность для дронов

Расчет высоты:

float pressure = bmp.readPressure(); // Давление в Па
float seaLevelPressure = 101325;     // Давление на уровне моря

// Формула барометрической высоты
float altitude = 44330 * (1 - pow(pressure/seaLevelPressure, 1/5.255));

3. 💨 Качество воздуха

Что измеряют:

  • CO₂ (углекислый газ) — показатель духоты в помещениях
  • VOC (летучие органические соединения) — загрязнения
  • PM2.5/PM10 — частицы пыли

Датчики:

  • MH-Z19B — CO₂ датчик (инфракрасный)
  • CCS811 — VOC и eCO₂
  • SDS011 — датчик пыли

Пример для класса:

Если CO₂ > 1000 ppm → пора проветривать класс!
Робот может сам открывать окна или включать вентиляцию.

4. ☀️ Освещенность и цвет

Датчики:

  • Фотодиод/фоторезистор — просто “светло/темно”
  • TSL2561 — точная освещенность в люксах
  • TCS34725 — распознавание цвета

Применения:

  • Робот, ищущий самый светлый угол для зарядки
  • Сортировщик по цвету (конструктор LEGO)
  • Автоматическое включение фар у робота

5. ☢️ УФ и радиация

Для специальных проектов:

  • UV-индекс — опасность солнечных ожогов
  • Гейгер-Мюллер счетчик — радиационный фон

Школьный проект: Картография солнечной активности на школьном стадионе


Практические проекты для школы

Проект 1: Школьная метеостанция

Цель: Измерять погоду на школьном дворе
Датчики:
• BME280 — температура, влажность, давление
• Анемометр — скорость ветра (самодельный)
• Дождемер — количество осадков
• Датчик UV — солнечная активность

Что делает:
1. Каждые 5 минут измеряет все параметры
2. Отправляет данные на школьный сайт
3. Предупреждает о резких изменениях погоды

Проект 2: Робот для умной теплицы

Цель: Автоматический уход за растениями
Датчики:
• DHT22 — температура/влажность воздуха
• Датчик влажности почвы
• Датчик освещенности
• Датчик CO2

Что делает:
• Если почва сухая → включает полив
• Если темно → включает фитолампы
• Если жарко → открывает форточки
• Показывает все данные на экране

Проект 3: Робот-эколог

Цель: Проверять качество воздуха в школе
Датчики:
• MH-Z19B — CO2 в классах
• SDS011 — пыль в коридорах
• Датчик формальдегида — вредные испарения

Что делает:
• Ездит по расписанию по школе
• Измеряет воздух в каждом кабинете
• Строит карту качества воздуха
• Рекомендует, где нужно проветрить

Как правильно работать с датчиками среды

1. Калибровка — это важно!

Датчики часто показывают неточно без калибровки.

Для температуры:

// Измерить температуру тающего льда (должно быть 0°C)
float offset = readTemperature() - 0.0;

// Потом корректировать все измерения
float realTemp = readTemperature() - offset;

Для CO₂ датчика:

  • Проветрить помещение (свежий воздух ≈ 400 ppm)
  • Датчик калибруется на 400 ppm

2. Защита от окружающей среды

Датчики на улице нужно защищать:

  • От дождя: Водонепроницаемый корпус
  • От солнца: Солнцезащитный экран
  • От насекомых: Сетка на вентиляционных отверстиях

3. Фильтрация данных

Показания скачут даже в стабильных условиях:

// Экспоненциальное скользящее среднее
float filteredValue = 0;
const float alpha = 0.1; // Коэффициент сглаживания

float readFiltered() {
  float raw = readSensor();
  filteredValue = alpha * raw + (1 - alpha) * filteredValue;
  return filteredValue;
}

4. Энергосбережение

Многие датчики можно отключать:

// BME280 имеет режим сна
bme.setSampling(Adafruit_BME280::MODE_SLEEP);

// Перед измерением разбудить
bme.setSampling(Adafruit_BME280::MODE_NORMAL);
delay(10); // Дать время на прогрев
float temp = bme.readTemperature();
// Снова в сон

Сравнение датчиков для школьных проектов

ДатчикТочностьЦенаСложностьПотреблениеДля каких проектов
DHT11±2°C, ±5%100-200₽★☆☆☆☆низкоеПервые опыты, теплица
DHT22±0.5°C, ±2%300-500₽★☆☆☆☆низкоеМетеостанция, точные измерения
BME280±1°C, ±3%400-600₽★★☆☆☆очень низкоеПрофессиональные проекты, дроны
MH-Z19B±50 ppm1500-2000₽★★★☆☆среднееЭкология, качество воздуха
TSL2561±0.1 люкс300-500₽★★☆☆☆низкоеОсвещенность, автоматическое освещение

Пример кода: Полная метеостанция на ESP32

#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

Adafruit_BME280 bme;
const int LIGHT_SENSOR_PIN = 34;

void setup() {
  Serial.begin(115200);
  
  // Инициализация BME280
  if (!bme.begin(0x76)) {
    Serial.println("Ошибка BME280!");
    while (1);
  }
  
  // Настройка пина освещенности
  pinMode(LIGHT_SENSOR_PIN, INPUT);
}

void loop() {
  // Чтение всех датчиков
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F; // в гПа
  int lightLevel = analogRead(LIGHT_SENSOR_PIN);
  
  // Расчет высоты
  float altitude = bme.readAltitude(1013.25);
  
  // Вывод в Serial
  Serial.println("=== МЕТЕОСТАНЦИЯ ===");
  Serial.print("Температура: "); Serial.print(temperature); Serial.println(" °C");
  Serial.print("Влажность: "); Serial.print(humidity); Serial.println(" %");
  Serial.print("Давление: "); Serial.print(pressure); Serial.println(" гПа");
  Serial.print("Высота: "); Serial.print(altitude); Serial.println(" м");
  Serial.print("Освещенность: "); Serial.print(lightLevel); Serial.println(" ед.");
  Serial.println();
  
  // Проверка условий
  if (temperature > 30) {
    Serial.println("ВНИМАНИЕ: Жарко!");
  }
  if (humidity > 80) {
    Serial.println("ВНИМАНИЕ: Высокая влажность!");
  }
  if (lightLevel < 100) {
    Serial.println("Совет: Включите свет");
  }
  
  delay(10000); // Измерять каждые 10 секунд
}

Частые проблемы и решения

Проблема 1: “Датчик показывает нереальные значения”

Пример: Температура -50°C или +200°C
Решение: 
1. Проверить подключение (I2C адрес, провода)
2. Добавить pull-up резисторы на I2C линии
3. Проверить питание (3.3V или 5V?)

Проблема 2: “Показания скачут”

Решение:
1. Добавить конденсатор 100 мкФ рядом с датчиком
2. Использовать фильтрацию в коде
3. Убедиться, что нет электрических помех

Проблема 3: “Датчик медленно реагирует”

Особенно для газовых датчиков и BME280
Решение:
1. Дать время на прогрев (10-30 секунд)
2. Не измерять чаще, чем нужно
3. Использовать sleep режим между измерениями

Проблема 4: “Не работает на улице зимой”

Решение:
1. Использовать защитный корпус
2. Подогревать датчик (для некоторых моделей)
3. Использовать датчики с расширенным диапазоном

Эксперимент: Создай мини-метеостанцию

Что нужно:

  • ESP32 или Arduino
  • BME280 модуль
  • Макетная плата и провода
  • Коробочка для защиты

Шаги:

  1. Подключите BME280 по I2C:

    ESP32 → BME280
    3.3V → VCC
    GND → GND
    GPIO21 → SDA
    GPIO22 → SCL
    
  2. Загрузите код выше

  3. Поместите в разные места:

    • На подоконнике (солнце)
    • В тени
    • В холодильнике (осторожно с конденсатом!)
    • Возле батареи
  4. Сравните показания и сделайте выводы

Что узнаете: Как температура и влажность меняются в разных условиях


Что дальше?

Освоили датчики среды? Теперь можно:

Совет: Начните с одного датчика (например, DHT11). Разберитесь как следует: как подключать, как калибровать, как фильтровать данные. Потом добавляйте новые датчики. Качественные данные с одного датчика лучше, чем плохие с десяти.