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


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение