Bluetooth-термометр

Любая вещь становится лучше с блютусом.
(с) из телесериала «Теория Большого взрыва» (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
  • +2
  • 13 марта 2012, 19:36
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.