Цифровой термометр с уличным датчиком на bluetooth модулях


• О проекте
• Обратная связь
• Полезные ссылки
• Полезные программы
• Друзья сайта


Последние комментарии

Аби: Подключение микроконтроллеров к шине RS-485
написано просто о...

Анатолий: Джойстик для денди на stm32
Автору 100500 рес...




           

Библиотека для AVR





AXLIB Генератор





Помощь сайту


				

Цифровой термометр с уличным датчиком на bluetooth модулях

	
	
	

Дата: 26 Октября 2015. Автор: Алексей

	
	
Завалялись тут у меня два модуля bluetooth, купленные еще как год назад в Китае. И к счастью поломалась Китайская метеостанция. После нескольких лет пользованием метеостанцией я понял что кроме температуры за окном меня ничего больше не интересует. Да, да, даже психрометр не нужен. Мне было все равно на то какая влажность на улице. Отсюда и родилась идея собрать свою "метеостанцию" которая могла бы лишь измерять температуру за окном. Два модуля bluetooth должны соединяться между собой и давать возможность передачи данных. Вот что это за звери.

bluetooth модули

Хотите верьте, хотите нет, но когда я их вытащил из закромов и положил на стол, то я понятия не имел что с ними делать. Далее интернет, сборка тестовой схемы, подключения, первые АТ команды, связь с телефоном, море восторга и облом. А вот от сюда давайте по подробнее. Как оказалось такие модули имеют четыре названия. HC-03, HC-04, HC-05 и HC-06. Ну и что... Да вот что, HC-03/05 могут прикидываться как Мастер, так и Слейв, а вот HC-04/06 могут быть только Слейвами. И как на зло у меня именно второй вариант. Тут я бью себя по лбу и вспоминаю что когда покупал, то выбирал HC-06, мол последний вариант самый лучший. Впредь урок, читай сначала мануал, а потом хватай. Далее при изучении оказалось что данные модули схематикой ничем не отличаются от своих корешей. Значит отличия лишь в прошивке. О да, волшебное слово "перепрошивка". Значит нам дорога на офсайт. А тут подкрался второй облом. Офсайт закрыт для простых смертных. Даже если пройти дотошную регистрацию, все равно фиквам. Че делать. Зы, мир не без добрых людей. Теперь у меня есть прошивка и прошивальщик. А теперь все по порядку. Чем данные модули отличаются друг от друга.

bluetooth модули

Слева изображен модуль HC-03/05, а справа HC-04/06. В чем разница. Если посмотреть на оба модуля, то можно заметить что левые стороны и низ одинаковые, а разница только в выводах по правому борту. Так в чем же разница. У HC-03/05 на один светодиод больше чем у HC-04/06 и вывод KEY расположены по разному. Гы, вот и все. Что данные выводы означают. TX, RX, RESET, 3,3v и GND и так понятны, а вот справа выводы нужны для управления и сигнализации. Вход KEY нужен для управления работы модуля. Данный модуль при подключении к любому bluetooth устройству по сути прикидывается UART соединением. То есть если к смартфону прицепить данный датчик, то запустив терминалы на компе и смарте, можно переписываться как будто они соединены проводом. А для общение на командном уровне, модуль использует тот же порт что и для связи по радиоканалу. Поэтому для того чтобы модуль понял как нужно общатся и предназначен данный вход. Если KEY прижать к GND, то модуль перейдет в режим связи по радиоканалу. Если KEY подтянуть к питанию, то модуль бросит все и начнет отвечать на АТ команды. После каждого перехода входа KEY обязательно нужно рестартовать модуль. Далее идут сигнальные лампочки. У HC-04/05 она всегда моргает и при поиске и при связи. Я не понял в чем секрет, а вот у HC-03/05 есть две лампочки. LED1, если модуль ни скем не связан, то раз в секунду промаргивает как стробоскоп, а при связи с кем-либо моргает с постоянным интервалом. LED2 самая ценная лампочка, при отсутствии связи на выходе висит GND, но как только модуль с кем-нибудь свяжется, то на этом выходе появится 3,3 вольта. Правда есть одна грабля. Я при проектировании платы заложил чтение этого выхода, дабы распознавать подключения модуля к другому, но после нескольких минут работы он стал постоянно выдавать 0,78 вольт. В чем прикол не знаю, хотя и в мануале написано что к данному выводу нужно прицепить светодиод с подтягивающим резистором на 470 Ом, я все же рекомендую подключать к МК данный вход через транзистор. Так будет спокойнее. Поехали дальше. Если данный модуль подключить к питанию, а выводы RX, TX к ПК и запустить терминал, то можно пообщаться с модулем. Главное не забыть KEY подтянуть к плюсу. А теперь веселье, АТ команды. Чем руководствовались программисты при написании прошивок, но явно не благими намерениями. Прикол вот в чем, в модулях HC-03/05 команды как у SIMCOM должны заканчиваться /r/n, а в модулях HC-04/06 команды должны вводится очень быстро и не более одной раз в секунду. То есть окончания ввода команды определяет временной интервал. Скорость передачи данных у HC-03/05 по умолчанию 38400 бод, а у HC-04/06 9600 бод. И еще одна грабля замеченная мной. Если изменить командой скорость передачи данных, а потом снять питания и подождать какое-то время, то скорость вернется в состояние по умолчанию. Поэтому дабы не рисковать я пароль не менял. Да к стати пароль у модулей 1234. Теперь пробежимся по основным АТ командам. За большей информацией милости просим в документацию.(Выложу в конце статьи)

Для модулей HC-03/05

AT - просто вернет OK
AT+RESET - Рестарт модуля
AT+ORGL - Хард ресет
AT+NAME=Имя модуля - Присвоит имя модулю. Напр. My_Module
AT+NAME? - Узнать имя модуля
AT+ROLE - Режим работы 0-Слейв, 1-Мастер
AT+PSWD - Установить пароль модулю
AT+CMODE=параметр - Подключится к устройству если модуль в режиме
мастер. 0 - Подключиться к устройству с фиксированным адресом, 1 - подключиться к
любому устройству.
AT+BIND=адрес - Задание адреса устройства к которому нужно
подключится. Пример. Адрес 01:23:45:67:89:ab будет AT+BIND=0123,45,6789ab
AT+RMAAD - Удалить все адреса из списка подключенных



Для модулей HC-04/06

AT - просто вернет OK
AT+NAMEимя - Установка имя устройства
AT+PINкод - Установка пароля устройчтва

Следующая грабля. У меня два модуля HC-06, а они не могут быть мастерами, следовательно необходимо перепрошить. Для этого понадобится программатор. Вот его схема.

Схема программатора для YC-03/04/05/06

Я сделал такой. )))

Схема программатора для YC-03/04/05/06

А для пошивки собрал по быренькому ПК с WinXP на борту, дабы не было проблем с LPT Портом. А то у меня плохие впечатления от Win7 x64. В итоге вышло так.

Схема программатора для YC-03/04/05/06

Далее программа для прошивки и сама прошивка.
Для прошивки нужна программа BlueSuite. Скачать ее можно прямо тут. BlueSuite
После как скачали, распаковываем и устанавливаем. Установщик установит кучу утилит. Нам нужна BlueFlash. Если ее сразу запустить, то вывалится ошибка. Это происходит из-за того что к порту не подключен модуль и программа его не видит. После установки программы подключаем модуль к LPT порту. Затем качаем прошивку для HC-05 Вот теперь запускаем программу. Должно появится вот такое окно.

BlueFlash

К сожалению я при перепрошивке не делал скриншоты, а модули уже впаяны, поэтому объясню на скаченной картинке из сети. На картинке выше видно окно программы, если такое окно появилось, значит программа увидела модуль. Далее укажите где лежит прошивка HC-05 и нажмите на кнопку Stop Processor. После нажатия активируются остальные кнопки. Настоятельно рекомендую слить текущую прошивку на всякий случай нажав на кнопку Dump. Далее сохранив текущую прошивку можно перепрошивать модуль. Вот тут я наступил на еще одну граблю. Почему-то залить прошивку поверх текущей не удается. Программа сначала начинает заливать, а потом просто виснет и вываливается. Проблема решилась банально и просто. Сначала стираем все что есть в модуле нажав на кнопку Flash Erase, а затем заливаем прошивку нажав на кнопку Download. После всех манипуляций HC-06 превращается в HC-05. Теперь можно настраивать мастер для связи со слевом.
Как это сделать. Подключаемся к модулю в режиме АТ команд (KEY прижимаем к питанию) и кидаем команды.

AT+ORGL Делаем хард ресет
AT+RMAAD Стираем все устройства из памяти
AT+ROLE=1 Переводим модуль в режим Мастер
AT+RESET Рестартуем модуль
AT+PSWD=1234 Задаем пароль слейва
AT+BIND=1234,56,abcdef Задаем адрес устройства*
AT+CMODE=0 Разрешаем соединятся только с нашим слейвом

* Как узнать адрес слейва. Есть два способа. Первый подключить слейв к ноутбуку, ПК, смартфону и т.д., а затем посмотреть в свойства устройства. Для моего слейва адрес будет вот такой.

Адрес слейва

Способ второй, подключаемся к модулю в режиме АТ команд и кидаем команду.
AT+BIND? Модуль вернет адрес устройства.
После того как модуль перевели в режим мастера и задали необходимые параметры, можно немного с ними поиграться. Включаем питание на обоих модулях и встаем на каждый модуль своим терминалом. Далее ожидаем подключения (на мастере должен постоянно висеть плюс питания на выходе LED2) и переписываемся сообщениями. Если данные пошли, то приступаем к сборке модулей термометра, а если нет, то переходим в начало статьи и ищем ошибки.

И так. Радиотермометр состоит из двух модулей. Тот что висит за окном я назвал передатчик, так как он передает температуру. Bluetooth модуль на нем стоит Слейв. Модуль который выводит температуру на индикатор я назвал приемник и соответственно на нем Bluetooth модуль Мастер. Начнем с передатчика. Схема.

Схема передатчика

По крупнее.

Как видно из схемы я использовал микроконтроллер ATmega8A. Кварц на 7,3728МГц взят не спроста, он отлично подходит для UART и дает 0% ошибок. На вход PC0 подключен датчик температуры DS1820. Температуру я беру только целую часть, как правило никого не интересует 0,5 градусов сейчас или 0,0. Мало кто заметит на улице пол градуса. На выход PC2 подключен транзистор, который подает питание на модуль. На вход PB0 подключена схема контроля освещения на базе отечественного оптотранзистора ФТ-1К. Данная схема необходима для экономии питания. Я думаю мало кому интересна температура в 2 часа ночи, поэтому с наступлением темноты микроконтроллер выключает модуль Bluetooth и прекращает передачу данных. Так же на схеме добавлен джампер для выбора работы Bluetooth модуля и выведены ножки UART. Так что можно пообщаться с модулем если что не так.

Вот как выглядит 3D модель передатчика.

3D модель приемника

А это уже в корпусе.

Приемника

Приемника

Теперь давайте поговорим о приемнике.

Схема приемника

По крупнее.

Рассматривая эту схему можно так же убедится что для управления был взят так же микроконтроллер ATmega8A. Линия PC0 управляет питанием Bluetooth модуля. Также выведены джампер для выбора работы Bluetooth модуля и пины для UART. На вход PD3 подключена схема контроля освещения. Здесь данная схема нужна не только для экономии питания, а еще для отключения индикатора. В схеме я использовал светодиодные семисегментные индикаторы красного цвета и не очень интересно перед сном наблюдать этот фонарь. Поэтому при наступлении темноты в качестве погашенных бра, люстр и ночников, приемник так же гасит свой экран. Управление индикатором, за неимением такого большого количества ног на МК, был взят на вооружение сдвиговый регистр с защелкой 74HC595. Из-за малого места и наличие сдвоенных индикаторов(D3621CSR) подключить по регистру к разряду не удалось, поэтому было решено использовать динамическую индикацию. Приемник изначально планировалось питать от батарейки крона, поэтому в схеме питания используется микросхема LM2576 +5.0 для питания индикатора и LM1117 3.3 для Bluetooth модуля. Но в дальнейшем произошла аказия. Индикатор выжрал крону за пол дня и поэтому план питания перешел на розеточное. Так что можно подключать питание от трансформатора сразу 5 вольт на LM1117 3.3, а схему с LM2776 +5.0 выкинуть. Для модулей были выбраны корпуса G519G(BC), так как имеют отсек для установки батареек типа АА или Крона.

Приемник 3D модель верх

Приемник 3D модель низ

Приемник верх

Приемник низ

Теперь про алгоритм. Программы для модулей написаны таким образом: Передатчик раз в секунду измеряет температуру и если она отличается от предыдущей, то отсылает ее приемнику. Приемник в свою очередь читает данные из порта и выводит на индикатор. Самое замороченное это как передается температура. Передача осуществляется одним байтом. Самый старший разряд передает знак, если ноль то плюс, а если единица, то минус. Оставшиеся семь разрядов передают температуру. После сна, модуль включает Bluetooth и начинает получать данные. По умолчанию при просыпании модуль записывает в температуру 0xFF. Это говорит об ошибке связи. Данная ошибка будет выводить на индикатор сообщение Err. Данное сообщение будет выводится до тех пор пока передатчик не скинет температуру. Так же приемник после пробуждения насильно кидает в порт команду 0xAA которая заставляет передатчик, независимо от предыдущего измерения, передать температуру.

Модули в сборе

Вот вроде и все.

Программа для перепрошивки Bluetooth модуля.
Прошивка HC-05 для Bluetooth модуля.
Документация на HC-05.
Проекты модулей приемника и передатчика.
Исходники. (Требуется обязательное наличие библиотеки axlib!!!)


АлексейК    01.02.16 16:42

Добрый день! Получается, что HC-05 нормально работает от двух батареек по 1,5В? Есть у вас опыт наблюдения, при каком минимальном напряжении разряженных батареек (в сумме) передатчик был работоспособен и передавал корректную температуру?

Алексей    01.02.16 16:58

Работает но не долго. Даже если на ночь отключать все равно максимум неделя. Сейчас переделываю на ИК передачу. Собственно через стекло главное температуру передать, а по комнате можно и проводом. Блутуз хорошо работает на АКБ, а АКБ при минусе быстро дохнет.

Игорь    28.04.16 09:54

Я бы попробовал для снижения потребления передатчика отправлять температуру раз в минуту, а не в секунду, вряд ли она меняется так резко. А вот измерять можно раз в несколько секунд для усреднения и исключения влияния всяких дуновений...))

Александр    28.11.16 19:25

Пытаюсь перепрошить HC-06.
у меня проблема программатор проверил раз 10, блю модуль подпоял правильино, вин хр 32, LPT — EPP. Скачал bluesuite 2.4. blue flash пишет NO SPITRANSPORTS FOUND. Не могу понять в чем дело. Схема сдесь silabs.org.ua/hcxx_fw.htm
разица в резистораделителя, это может влиять?

Алексей    28.11.16 19:38

Может, так как LPT выдает 5 вольт на единицу, а модулю нужно 3,3. Делитель делает 3,2 вольта.

Александр    29.11.16 09:29

у меня на входе модуля 3.34в. Это много или нормально?

Александр    29.11.16 09:44

3.34в если на входе делителя 5в.
замерил ЛПТ выход - 3.27, с делителя на модуль
уровень 2.18в. Это нормально?

Алексей    29.11.16 09:49

Низковато. Нужно от 3,2 до 3,3.

Богдан    31.05.17 23:36

Алексей здравствуйте!
А вы случайно не делали видео с написанием и объяснением программного кода для этого проекта?
Если да, то поделитесь ссылкой на него)
А если нет, то вы не собирались делать такое?

Алексей    01.06.17 00:25

Нет, видео я не снимал. После разных тестов я перешел на wifi модули и на радиомодули на частоте 433МГц. Вот по нтм планируется и видео и статью.

Богдан    01.06.17 20:24

Ясно, жаль.
Буду ждать об wifi и радио- модулях.
.
Просто я так и не нашел откуда в коде приемника берется usart_old_in(); и usart_old_out(); ((

Извините, Анонимом написал

Богдан    04.06.17 16:20

Алексей, расскажите пожалуйста, если вы помните,
в в файле приемника main.c есть вызов функций usart_old_in(); и usart_old_out(); но в подключенных файлах библиотеки они не описаны нигде((
Где же мне взять описание этих функций?

АНОНИМ    20.06.17 19:33

Алексей, ну пожааалуйста подскажите )))

Алексей    20.06.17 20:45

Пошукаю.)))

АНОНИМ    21.06.17 00:44

ОО)) спасибо большое, буду ждать с нетерпением))

Алексей    21.06.17 10:37

Посмотрел. К сожалению библиотека использовалась старая, а в новой данных функций уже нет. По памяти я не вспомню. Проще создать новый проект axlib генератором и собрать все заново.

АНОНИМ    22.06.17 01:36

Эхх) жаль( а библиотеки AXLIB версии до 1.0 (0.7 0.8 0.9) не завалялось в архивах?)

Алексей    22.06.17 16:08

Не. Там было много ошибок и я после исправления не сохранил начальную версию.




Чтобы вставить ссылку используйте форму вида[url]http://www.адрес.ru[/url][text]текст ссылки[/text]
Чтобы вставить код используйте форму вида[code]код[/code]

Имя:   





  







Рейтинг@Mail.ru Яндекс.Метрика