Arduino термометр bluetooth android

Bluetooth термометр

Наверно, уже каждый слышал об Arduino. Поиграться с этой платформой решил и я, и сделать Bluetooth термометр, показания которого можно смотреть на телефоне или компьютере, оснащенным блютуз модулем.

Принцип действия

К Arduino подключен Bluetooth по UART, который эмулируется софтово (используется библиотека SoftwareSerial). Этим освобождаем хардварный порт, что дает возможность одновременного считывания данных через кабель и через блютуз. Также к Arduino подключен термодатчик.
Считываются показания с термодатчика и отправляются в блютуз и по кабелю на компьютер(при необходимости). Любое устройство, оснащенное блютуз и поддерживающее протокол btspp, принимает данные от блютуз-модуля Arduino. А дальше прикладной софт на основе этих данных может строить графики, вести статистику или просто выводить на экран текущую температуру.

Железо

Купил на robocraft.ru:
ORduino Nano (ATmega168) — 500 руб
Блютуз модуль HC-05 — 330 руб
Аналоговый температурнй датчик LM335 — 40 руб
На радиорынке покупал:
1 резистор на 2,2 КОма, стабилизаторы на 3.3 B и на 5.5 В, конденсаторы для них ~ 30 руб

Датчик LM335 аналоговый, поэтому, чтобы рассчитать сколько вольт приходит от него, необходимо знать напряжение питания. Если мы ошибемся в вольтаже даже на 0.01 В, то датчик уже даст ошибку в 1 градус, а чем больше заданное значение напряжения будет отличатся от действующего напряжения, тем больше будет погрешность. Не говоря про то что датчик сам имеет погрешность в 1 градус. Необходим высоко стабилизированный источник питания. И лучший результат тут покажут обычные батарейки (точнее батарея из гальванических элементов) подключенные через стабилизатор напряжения к Arduino (в Nano этого стабилизатора нет). Но схемка потребляет 60-70 мА. Для батареек это многовато («Крону» посадит примерно за час-полчаса, но для тестов подойдет). А сетевые блоки питания выдают не такое стабильное напряжение. Из-за пульсаций показания датчика будут сильно прыгать.
Самый простой выход из этой ситуации использовать цифровые датчики температуры. Например, 1-Wire датчик DS18B20.

Софт

Надо заметить, что Блютуз-модуль HC-05 мне пришел со скоростью 9600 (заявленная 38400). Благо её можно поменять через AT-команды. Для работы с модулем в режиме AT-команд можно воспользоваться нехитрым скетчем, предварительно подключив PIO11 к +5 В через резистор 220 Ом.

#include 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

#include 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[] = > 8, tempC & 0xFF >; // формируем пакет // отправляем пакет Serial.write(packet, 4); // на компьютер mySerial.write(packet, 4); // блютуз-модулю // индикация работы - помигаем светодиодом digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(1500); > 

Мидлет для телефона написан на J2ME (на чём же ещё. это же мидлет), плюс в том что будет работать на любом телефоне с поддержкой jsr82. Но, зная про «кросплатформенность» J2ME, по крайней мере должен работать 🙂
Обратите внимание, что в мидлете указан адрес моего блютуз-модуля.

Читайте также:  Rcd 510 активация bluetooth

Исходники мидлета, а также скетчи Arduino можно найти здесь

Схема

Блютуз подключается к пинам D2 и D3.
Напряжение с датчика температуры снимается на пин A0.


Заключение

Термометр можно использовать как домашний или как уличный, только тогда всё устройство нужно защитить от агрессивной окружающей среды. И не надо сверлить никаких дырок в стене под провод.

А ещё можно написать клиент для мобильного телефона и получить доступ в Интернет или отправлять смс. И не надо никаких GSM/GPRS шилдов и AT-команд. Лишь телефон с блютузом, но это уже совсем другая история…

Источник

Температурный датчик с выводом значения на смартфон

Статья расскажет о проекте термометра, основным отличием от похожих проектов будет то, что показания датчика температуры будут передаваться на смартфон по Bluetooth и отображаться на его экране. Такой датчик температуры можно разместить в недоступном месте, например за окошком, в холодильнике. И вы всегда сможете проверить температуру без визуального контакта с этим датчиком. Вы запускаете мобильное приложение, подключаетесь к датчику и на экране Смартфона или планшета контролируете температуру. Сам датчик будет реализован с помощью Arduino. Для реализации передачи значения температуры на смартфон мы используем библиотеку RemoteXY.

Для реализации электрической части устройства термометра вам потребуется любая плата Arduino, термистор 1кОм, резистор 1кОм, желательно так же батарейный отсек для автономного питания Arduino. Термистор подойдет на любое сопротивление от 1 до 100 кОм, но в этом случае сопротивление резистора должно быть аналогичным. Ниже приведена схема подключения всех элементов конструкции. Мы же все это собрали на макетной плате.

Термистор включен в цепь делителя напряжения, во втором плече которого находится постоянное сопротивление. Таким образом, при изменении температуры будет изменяться сопротивление термистора, а значит и одного плеча делителя напряжения. Напряжение делителя будет изменяться в след за температурой. Среднюю точку делителя напряжения мы подключили к аналоговому входу Arduino с номером A5.

Разработку программы мы начнем с калибровки нашего датчика. Калибровку мы выполним по двум точкам, и для этого нам понадобится эталонная температура. У меня в комнате стоит термометр, который показывает 25 градусов Цельсия, это будет первая эталонная температура. Так же я знаю что температура моего тела составляет 36.6 градусов Цельсия, и это будет вторая эталонная температура. Так же примем, что сопротивление нашего термистора в определенных пределах изменяется по линейному закону в зависимости от температуры. По этому, в дальнейшем, для вычисления текущей температуры будем использовать линейную интерполяцию.

Читайте также:  Tribit stormbox bluetooth speaker black

Для выполнения калибровки нам необходимо определить, какое значение выдает АЦП Arduino при температурах датчика, которые мы выбрали эталонными. Используем Serial и монитор порта, для того что бы передавать значение АЦП на компьютер, что бы мы могли посмотреть, какое же оно при наших эталонных температурах. Для этого нам потребуется загрузить в Arduino следующий простой скетч.

Данный скетч в каждом цикле программы измеряет напряжение аналогового вывода A5, оцифровывает его и отправляет в Serial. Вы можете подключиться монитором порта (Сервис/Монитор порта) и посмотреть, какие значения передаются. Теперь нам необходимо записать значения АЦП при выбранных эталонных температурах датчика. Первую эталонную температуру вы получаете сразу, если ваш термистор достаточно долго находился в комнате. Для получения второй эталонной температуры приложите термистор к своему телу и подержите его несколько минут. Перепишите значения АЦП, которые передаются в монитор порта при этих температурах. У нас получились следующие значения:

Заходим в онлайн редактор RemoteXY и создаем интерфейс управления. Он состоит из текстового поля, через которое будет передаваться измеряемая температура, и текстовой метки. Длина текстового поля, задаваемая в настройках, определяется максимальной длиной передаваемой строки. В нашем случае это могут быть значения «-40.0» или «100.0». То есть длина строки не может превышать 5 символов. Можно оставить предлагаемую по умолчанию системой длину в 10 символов.

Выбираем в настройках проекта целевую платформу Arduino (SoftwareSerial), library version и формируем исходный код нашего интерфейса. Не забудьте загрузить библиотеку RemoteXY и подключить ее к Arduino IDE (Скетч/Импортировать библиотеку/Add library. ).

Для передачи значения температуры на экран смартфона мы должны получить текущее значение АЦП, получить значение текущей температуры, используя линейную интерполяцию по двум известным точкам, преобразовать полученное значение в строку и записать ее в поле text_1 структуры RemoteXY. Для преобразования числа типа double в строку используем функцию:

dtostrf (floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf)

Задачу линейной интерполяции мы решим используя простую формулу:

Собрав все воедино мы получаем следующий исходный код — скетч для Arduino:

В данном коде вы должны изменить определяемые значения SENS_1_VAL, SENS_1_TMP, SENS_2_VAL, SENS_2_TMP, подставив вместо них ваши, которые вы получили при измерениях значений для калибровки.

Загрузите скетч в вашу Arduino. Загрузите в ваш смартфон или планшет приложение RemoteXY. И можете контролировать температуру находясь на удалении от изготовленного вами датчика, используя Bluetooth.

Источник

Arduino + Android = Метеостанция

Суть работы такова. Ардуина считывает показания с датчиков и отправляет их по UARTу bluetooth-модулю, тот в свою очередь передаёт дынные смартфону, в смартфоне данные разбираются и выводятся на экран.

Итак, нам понадобится Ардуина, bluetooth HC-05 и датчики DHT.

Bluetooth

Вначале нужно настроить модуль.

Так как программирование модуля осуществляется с помощью AT-команд, его необходимо подключить к компьютеру посредством USB-UART моста.

Сделать это можно воспользовавшись вот такой штукой:

Либо превратить ардуину в USB-UART мост замкнув контакт RST на землю (GND).

Либо сделать это программно с помощью вот такого незамысловатого скетча:

Подключение:

Питание 3.3v
TX — TX
RX — RX
GND — GND
Key — 3.3v только для программирования модуля.

Если у вас модуль без шилда, то вот распиновка:

Читайте также:  Xbox 360 wireless controller bluetooth

Соедините ардуину с компьютером, откройте монитор последовательного порта, подождите пару секунд и отправьте команду AT

В окошке выбора завершающего символа установите NL & CR.

В режиме программирования скорость всегда 38400, а для рабочего режима можно устанавливать разные скорости (см. ниже).

Если модуль ответил ОК, то можно переходить к следующим командам.

Проверьте настройку UARTа для рабочего режима — AT+UART?

Две последние цифры должны быть ,1,0 (1 stop bit, no parity)

Если у вас другие значения, тогда введите такую команду — AT+UART=9600,1,0

Первая цифра это скорость, может быть: 9600,19200,38400,57600,115200,230400,460800, вторая StopBit, третья Parity.

Модуль ответит ОК.

Проверьте — AT+UART?

Всё окей.

Другие команды

Перезагрузка — AT+RESET

Версия — AT+VERSION?

Сброс настроек — AT+ORGL

Имя модуля — AT+NAME?

Сменить имя — AT+NAME=istarik.ru
Можно придумать модулю какое-нибудь интересное название, оно будет отображаться при поиске.

Узнать пин код — AT+PSWD?

Сменить пин код — AT+PSWD=1235
Не помешает сменить пин (четыре любые цифры).

Модуль настроен.

Ардуина

Подключаем модуль вот по этой схеме:

Обратите внимание, (в сравнении с предыдущей схемой) RX и TX поменялись местами, отключён пин для программирования и убрана перемычка.

DHT

Схему разделил на две части, чтоб не выглядело громоздко.
Резисторы не обязательны.

Скачиваем и устанавливаем библиотеку для подключения нескольких датчиков DHT, подробно о ней написано тут.

 #include "stDHT.h" DHT sens(DHT22); // Указать датчик DHT11, DHT21, DHT22 void setup() < Serial.begin(9600); pinMode(2, INPUT); digitalWrite(2, HIGH); pinMode(3, INPUT); digitalWrite(3, HIGH); >void loop() < int t = sens.readTemperature(2); // чтение датчика на пине 2 int h = sens.readHumidity(2); // чтение датчика на пине 2 delay(2000); int t2 = sens.readTemperature(3); // чтение датчика на пине 3 int h2 = sens.readHumidity(3); // чтение датчика на пине 3 delay(2000); Serial.print("A"); Serial.print(" "); Serial.print(t); Serial.print(" "); Serial.print(h); Serial.print(" "); Serial.print(t2); Serial.print(" "); Serial.print(h2); Serial.print(" "); Serial.print(0); // не удалять Serial.print(" "); Serial.print(0); // не удалять Serial.print(" "); Serial.println("Z"); >

Если установили у модуля другую скорость, то не забудьте поменять её в скетче.

Android

Выполните сопряжение телефона с bluetooth-модулем (если не меняли пароль, то он скорее всего 1234, либо 0000).

Откройте браузер на телефоне, перейдите по ссылке istarik.ru/file/climat.apk, установите и откройте приложение (попросит разрешения).

Всплывёт запрос на включение Bluetooth, после подтверждения появится окно с названием телефона и списком сопряжённых устройств (название, мак-адресс):

После касания нужного пункта, через пару секунд, установится соединение с вашим bluetooth-модулем, а следом откроется главное окно программы.

Arduino Bluetooth Android Метеостанция

Значёк в правом углу становится синим при приёме данных. Если в течении 30 секунд отсутствуют данные или связь, то значёк станет серым
Если связь разорвалась, то нужно перезапустить приложение.

Кнопка скроет приложение, а кнопка разорвёт коннект и закроет его.

Вот и всё, теперь у вас есть настольные часы с метеостанцией.

Вступайте в Telegram-группу Arduino

Здесь можно почитать про управление ардуиной.

  • 31 марта 2016, 10:03
  • stD
  • 26487
  • —>

    Известит Вас о новых публикациях

    Источник

    Оцените статью
    Adblock
    detector