Любая вещь становится лучше с блютусом.
(с) из телесериала «Теория Большого взрыва» (The Big Bang Theory)
Даже простой аналоговый датчик температуры — LM335.
Идея простая — Bluetooth-термометр, показания с которого можно смотреть на телефоне или компьютере.
Автору проекта (om2804) потребовались:
* ORduino Nano (ATmega168)
* Bluetooth-модуль HC-05
* Аналоговый температурнй датчик LM335
* плюс немного мелочёвки (резистор на 2,2 КОма, стабилизаторы на 3.3 B и на 5.5 В, конденсаторы для них)
мы помним этот заказ — и даже угадали, что планировал сделать автор 🙂 рады, что всё получилось!
Реализация
К Arduino, Bluetooth-модуль подключается по UART-у, который эмулируется программно (используется библиотека SoftwareSerial).
Software Serial — библиотека, позволяющая эмулировать последовательный порт на любых двух цифровых ногах ардуины (со скоростью работы 4800 или 9600 бод).
Такое решение освобождает аппаратный последовательный порт МК, что позволяет одновременно считывать данные и через USB-кабель и через блютуз.
Bluetooth-модуль подключается к цифровым портам D2 и D3.
Напряжение с датчика температуры снимается на аналоговом порту A0.
Термодатчик подключается к аналоговому порту Arduino, показания датчика считываются контроллером и отправляются в последовательный порты (блютуз и по кабелю на компьютер).
Любое устройство, оснащенное блютуз, принимает данные, а дальше, на основе этих данных, прикладной софт может вести статистику и строить графики.
Скетчи
Bluetooth-модуль HC-05 был настроен на работу со скоростью 9600 (вместо заявленной 38400), но её можно поменять через AT-команды; для этого можно использовать следующий скетч, предварительно подключив PIO11 к +5В через резистор 220 Ом.
UART2USB.ino
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if (mySerial.available()) { int c = mySerial.read(); // читаем из software-порта Serial.write(c); // пишем в hardware-порт } if (Serial.available()) { int c = Serial.read(); // читаем из hardware-порта mySerial.write(c); // пишем в software-порт } }
Скетч для работы с термодатчиком и Bluetooth: данные передаются в бинарном формате (каждый пакет начинается с 0xDEAD)
btTermometr.ino
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); const double opVoltage = 4.98; // опорное напряжение (напряжение питания) const byte tmpPin = 0; // номер пина, на котором сидит термодатчик void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(13, OUTPUT); } void loop() { double vl = (analogRead(tmpPin)*opVoltage)/1024; // значение напряжения на пине int tempK = vl*100; // расчет температуры в кельвинах int tempC = tempK - 273; // перевод температуры в градусы цельсия byte packet[] = {0xDE, 0xAD, tempC >> 8, tempC & 0xFF }; // формируем пакет // отправляем пакет Serial.write(packet, 4); // на компьютер mySerial.write(packet, 4); // блютуз-модулю // индикация работы - помигаем светодиодом digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(1500); }
Вариант развития проекта — использовать цифровые датчики температуры (например, 1-Wire датчик DS18B20).
автор проекта: om2804
Полное авторское описание на хабре:
Bluetooth термометр
исходники
По теме
Bluetooth-модуль HC-05
Аналоговый датчик температуры – LM335
Температурный 1-Wire датчик DS18S20