Примечание: статья создана с использованием искусственного интеллекта (для структурирования и редактирования текста).
Введение
Привет, друзья! Сегодня разберём проект, который сочетает простоту реализации и реальную практическую пользу — цифровой термометр‑гигрометр с записью данных на microSD.
Устройство на базе STM32 будет:
- измерять температуру и влажность;
- сохранять показания с меткой времени;
- выводить текущие значения на дисплей.
Идеально для контроля микроклимата в доме, теплице или лаборатории.
Зачем это нужно?
Обычный термометр показывает «сейчас», но не отвечает на вопросы:
- Как менялась температура за сутки?
- Были ли критические перепады влажности?
- Когда включалось отопление?
Наш регистратор решает эти задачи:
- создаёт архив измерений для последующего анализа;
- подаёт сигнал при выходе параметров за заданные границы.
Схема устройства
Система состоит из четырёх ключевых блоков:
- Датчик (DHT22 или SHT31) — снимает показания температуры и влажности.
- Микроконтроллер (STM32F103C8T6) — обрабатывает данные, управляет периферией.
- MicroSD‑карта — хранит лог в текстовом формате.
- Дисплей (LCD 16×2) — отображает текущие значения.
Дополнительно:
- часы реального времени (RTC, например, DS1307) — для тайм‑стемпинга;
- светодиод — индикация ошибок;
- суперконденсатор — страховка от потери данных при отключении питания.
Как это работает: пошаговый алгоритм
1. Инициализация
При включении STM32:
- настраивает GPIO для датчика и дисплея;
- активирует SPI для microSD и I²C для LCD;
- запускает RTC.
Калибровка RTC:
- выполняется один раз при первом включении или после замены батареи DS1307;
- для повышения точности возможна синхронизация через GPS или NTP (при наличии Wi‑Fi);
- для лучшей стабильности рекомендуется использовать термокомпенсированные RTC (например, DS3231).
2. Измерение параметров
Датчик опрашивается раз в 10 секунд.
Для DHT22 (интерфейс 1‑Wire):
- отправка стартового импульса;
- чтение 40 бит данных;
- проверка CRC.
Для SHT31 (интерфейс I²C):
- I²C‑запрос с проверкой контрольной суммы.
Важные нюансы:
- DHT22 требует стабильного питания (не ниже 3 В). Рекомендуется установить конденсатор 100 мкФ рядом с датчиком.
- Тайм‑аут ожидания ответа DHT22 установлен в 500 мс (с запасом; по спецификации — до ~200 мс).
- Для SHT31 убедитесь, что адрес устройства на шине I²C соответствует настройкам в коде (стандартные адреса: 0x44, 0x45).
3. Формирование записи
Данные упаковываются в строку формата CSV (удобно для Excel):
2026-02-03,15:42:10,22.3,48.7
Буфер накапливает 5–10 записей перед записью на карту — это снижает износ microSD.
4. Сохранение на microSD
Через библиотеку Petit FatFS устройство:
- открывает файл DATA.TXT в режиме добавления (формат 8.3, совместимый с FAT16/FAT32);
- записывает буфер;
- закрывает файл, чтобы избежать потери данных.
Важные ограничения Petit FatFS:
- не поддерживает длинные имена файлов;
- работает с FAT16/FAT32 (максимальный размер файла — 2 ГБ);
- при заполнении карты устройство переходит в режим «только чтение» до очистки.
Защита от сбоев:
- при ошибках записи система делает 3 попытки с интервалом 1 с;
- если ошибка сохраняется, данные остаются во внутреннем буфере STM32 до восстановления связи с картой;
- суперконденсатор (1–2 Ф, 5.5 В) обеспечивает 1–2 с для завершения операции f_write() и вызова f_close() при отключении питания. Он подключается параллельно питанию MCU через диод Шоттки для предотвращения обратного тока.
5. Вывод на дисплей
На LCD отображаются:
Temp: 22.3 C
Hum : 48.7 %
При ошибке датчика — сообщение ERR SENSOR.
6. Аварийная сигнализация
- Если температура > 30 °C, включается звуковой сигнал (пищалка).
- При отсутствии microSD мигает светодиод. После вставки карты запись возобновляется автоматически (без перезагрузки).
Ключевые технические нюансы
- Файловая система
Petit FatFS занимает ~6 КБ ОЗУ (критично для STM32F103).
Имена файлов — в формате 8.3 (например, DATA.TXT). - Энергосбережение
между измерениями MCU переходит в режим Sleep (потребление 1–2 мА при отключении периферии);
в режиме Sleep отключаются: дисплей, датчик, SPI/I²C. RTC продолжает работать от резервного питания. - Защита от сбоев
перед записью проверяется свободное место на карте;
если DATA.TXT достигает 2 ГБ, создаётся DATA2.TXT;
при заполнении всех файлов устройство переходит в режим «только чтение»;
данные буферизируются для минимизации операций записи. - Точность времени
RTC с кристаллом 32.768 кГц даёт погрешность < 1 мин/месяц (зависит от качества кристалла и температуры);
калибровка выполняется при первом включении, после замены батареи или если погрешность > 5 мин/месяц. - Объём лога
каждая запись занимает ~20 байт;
при интервале 10 с: 8640 записей/день → ~173 КБ/день;
на 1 МБ карты — ~6 дней данных (при интервале 20 с — ~14 дней).
Выбор компонентов: на что обратить внимание
Датчик
ПараметрDHT22SHT31Цена≈100 руб.≈300 руб.Погрешность температуры±2 °C±0.3 °CИнтерфейс1‑WireI²CУстойчивость к влагеНизкаяВысокая
Нюансы:
- DHT22 при высокой влажности может «зависать». Решение — принудительный сброс питания через MOSFET.
- Если датчик не отвечает в течение 500 мс, система регистрирует ошибку TIMEOUT и повторяет запрос в следующем цикле.
microSD‑модуль
- ищите платы с логическим уровнем 3.3 В (иначе нужен преобразователь);
- для надёжности используйте карты объёмом до 2 ГБ (некоторые SDHC‑карты ≥ 4 ГБ могут быть несовместимы с Petit FatFS);
- подключение: используйте аппаратный SPI1 (пины PA5–PA7, PA4 — CS). Если модуль на 5 В, добавьте преобразователь уровней (например, на транзисторах или микросхеме 74LVCX245).
Дисплей
- LCD 16×2 с модулем PCF8574 (стандартные адреса: 0x27 или 0x3F) экономит выводы MCU;
- альтернатива: OLED с SPI (освобождает выводы).
Важно: если дисплей не отображается:
- проверьте адрес устройства на шине I²C;
- убедитесь, что подтягивающие резисторы 4.7 кОм не создают «перетяжку» сигнала. При подключении нескольких устройств на шину:
суммарное сопротивление подтяжки снижается (параллельное соединение);
если оно становится < 1 кОм, сигналы могут искажаться;
в таких случаях резисторы удаляют с одного или нескольких модулей либо заменяют на резисторы большего номинала (например, 10 кОм).
Питание
- стабилизатор LM1117‑3.3 для надёжного 3.3 В;
- суперконденсатор (1–2 Ф, 5.5 В) для страховки от потери данных при отключении питания.
Калибровка датчиков
Для повышения точности показаний датчиков DHT22 и SHT31 рекомендуется провести калибровку по эталонному прибору.