Любая вещь становится лучше с блютусом.
(с) из телесериала «Теория Большого взрыва» (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
