🌤️ Датчики окружающей среды
Роботы все чаще работают не в лабораториях, а в реальном мире — на улице, в полях, в городах. Чтобы принимать правильные решения, они должны понимать, что происходит вокруг: какая температура, не идет ли дождь, чистый ли воздух.
Зачем роботу знать погоду?
Практические применения:
- Агророботы: Знать влажность почвы и температуру воздуха для полива
- Дроны: Проверять скорость ветра перед полетом
- Роботы-курьеры: Учитывать дождь и гололед при движении
- Экологические мониторинговые системы: Измерять загрязнение воздуха
В школьных проектах:
- Метеостанция для школьного двора
- Умная теплица с автоматическим поливом
- Робот-эколог, измеряющий качество воздуха в школе
Основные типы датчиков
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 ppm | 1500-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 модуль
- Макетная плата и провода
- Коробочка для защиты
Шаги:
Подключите BME280 по I2C:
ESP32 → BME280 3.3V → VCC GND → GND GPIO21 → SDA GPIO22 → SCLЗагрузите код выше
Поместите в разные места:
- На подоконнике (солнце)
- В тени
- В холодильнике (осторожно с конденсатом!)
- Возле батареи
Сравните показания и сделайте выводы
Что узнаете: Как температура и влажность меняются в разных условиях
Что дальше?
Освоили датчики среды? Теперь можно:
- Навигационные датчики — как робот ориентируется в пространстве
- Датчики расстояния — как видеть препятствия
- Программная обработка — как анализировать данные с датчиков
Совет: Начните с одного датчика (например, DHT11). Разберитесь как следует: как подключать, как калибровать, как фильтровать данные. Потом добавляйте новые датчики. Качественные данные с одного датчика лучше, чем плохие с десяти.
