Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
Компоненты и материалы
| Arduino Nano R3 | × | 1 |
| Перемычки (набор) | × | 1 |
| Bluetooth-модуль HC-06 | × | 1 |
| NTC-термистор | × | 1 |
| Резистор 10 кОм | × | 1 |
| Резистор 1 кОм | × | 1 |
| Резистор 2.21 кОм | × | 1 |
Инструменты
- Паяльник (по желанию)
- 3D-принтер (по желанию — для корпуса)
Приложения и сервисы
- MIT App Inventor 2 (создание Android-приложения)
О проекте
В этом уроке покажу, как сделать Arduino-контроллер температуры, отправляющий данные на Android через Bluetooth.
Необходимые детали:
- Arduino Nano
- NTC-термистор (нужно знать сопротивление при 25°C для формулы Бета)
- Резисторы: 2к, 1к и один номиналом, близким к термистору
- Bluetooth-модуль HC-06
- Перемычки
Сборка делителя напряжения для термистора
Соберите схему (рисунок 1) для измерения неизвестного сопротивления термистора как функции температуры.

Рисунок 1 Делитель напряжения для оценки сопротивления термистора.
Эта схема позволяет Arduino измерить падение напряжения на известном резисторе и вычислить сопротивление термистора (рисунок 2).
raw = analogRead(analogPin);
if(raw) {
ratio = raw * Vin;
Vout = (ratio) / 1024.0;
ratio = (Vin / Vout) - 1;
R2 = R1 * ratio;
}
Рисунок 2 Код Arduino для вычисления сопротивления термистора.
Полученное сопротивление конвертируется в температуру по формуле Бета (рисунок 3).
ВАЖНО: Бета-коэффициент и Ro при 25°C указаны в даташите вашего термистора! Проверьте перед запуском!
Temp = Beta / log(R2 / (Ro * exp(-Beta / To)));
Temp = Temp - 273.15;
Рисунок 3 Код для перевода в температуру.
Подключение Bluetooth-модуля HC-06
Для подключения TX Arduino к RX модуля (3.3В) нужен делитель напряжения (рисунок 4).

Рисунок 4 Схема Arduino с HC-06.
Данные отправляются через Serial. В примере измеряется диапазон 25–75°C, при высокой температуре отсчитывается ~300 секунд, затем меняется сообщение (рисунок 5).
void setup() { Serial.begin(9600); }
void loop(){
if(Temp >= 74) {
for (int i = 0; i <= 30; i++) {
Serial.print("Temperature >= 74 °C");
delay(10000);
}
Serial.print("Heating Complete");
delay(10000);
} else if (Temp <= 26){
Serial.print("Temperature <= 25 °C");
delay(10000);
} else {
Serial.print("Temperature: ");
Serial.println(Temp);
delay(10000);
}
}
Рисунок 5 Инициализация Serial и вывод значений.
Собранное устройство на макетной плате (рисунок 6).

Рисунок 6 Полное устройство на макетке.
Android-приложение через MIT App Inventor 2
Интерфейс (рисунок 7) и блоки программирования (рисунок 8).

Рисунок 7 Пользовательский интерфейс.

Рисунок 8 Блоки программирования.
Приложение в галерее: App Inventor Gallery
Можно сделать свои уведомления: звук при T < 25°C, оповещение через 5 мин при 75°C.
Опционально: пайка и 3D-корпус
Результат в рисунке 9. Отверстие сбоку для USB-питания. Длинные провода термистора — чтобы держать электронику подальше от измеряемого раствора.

Рисунок 9 Готовое устройство.
Надеюсь, проект поможет понять основы Bluetooth-коммуникации. Вопросы и ошибки — пишите!
UPD: Исправлена ошибка в схеме делителя для Bluetooth.
UPD2: Если не загружается скетч — отключите Bluetooth-модуль.
Код
Temperature monitor with bluetooth module (Arduino)
// Temperature monitor with bluetooth module
int analogPin = 0;
int raw = 0;
int Vin = 5;
float Vout = 0;
float R1 = 10000; // ваш резистор
float Ro = 10000; // сопротивление термистора при 25°C
float R2 = 0;
float ratio = 0;
float Temp = 0;
float Beta = 3694; // ваш Beta
float To = 298.15; // 25°C в Кельвинах
void setup() {
Serial.begin(9600);
}
void loop() {
raw = analogRead(analogPin);
if(raw) {
ratio = raw * Vin;
Vout = (ratio) / 1024.0;
ratio = (Vin / Vout) - 1;
R2 = R1 * ratio;
Temp = Beta / log(R2 / (Ro * exp(-Beta / To)));
Temp = Temp - 273.15;
if(Temp >= 74) {
for (int i = 0; i <= 30; i++) {
Serial.print("Temperature >= 74 °C");
delay(10000);
}
Serial.print("Heating Complete");
delay(10000);
} else if (Temp <= 26){
Serial.print("Temperature <= 25 °C");
delay(10000);
} else {
Serial.print("Temperature: ");
Serial.println(Temp);
delay(10000);
}
}
}
Схемы
Резистор R2 меняйте под ваш термистор. Ошибка растёт с разницей (R_unknown - R2).

Производственный процесс
- Raspberry Pi сетевой монитор температуры и влажности — руководство по DIY сборке
- Создание монитора температуры ThingSpeak с Raspberry Pi и BrickPi
- Мониторинг домашней температуры с панелью управления на Raspberry Pi
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
- Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Точный тест времени реакции на Arduino UNO