Передача измеренной температуры по радиоканалу. Связка NRF24L01+ и DS18B20
Небольшой проект с использованием радиомодулей NRF24L01. Задача проста - измерить температуру и отправить данные на приемник. Измерением температуры занимается цифровой датчик DS18B20. Измеренная температура, полученная на другой стороне приемником, выводится на ЖК дисплей. Хороший пример для демонстрации возможностей радиомодулей.
Передатчиком служит тестовая платка с atmega8, которая была собрана ранее. К ней дополнительно подключил датчик 18b20 к выводу PortC.0 с резистором подтяжки на 4,7 килоом
Схема передатчика:
Запитываться передатчик должен напряжением от 3 до 3,6 вольт (нижний предел 3 вольта для датчика температуры, а верхний - для NRF24L01). В моем случае все запитывалось подсаженным литий-ионным аккумулятором, в котором осталось 3,5 Вольт.
Приемник собран на макетке, схема подключения радиомодуля практически идентична, за тем исключением, что питание на него идет отдельно через понижающий стабилизатор на 3,3 вольта. Одно хорошо, что входы/выходы модуля толерантны к 5-и вольтовым уровням, поэтому схему согласования с контроллером делать не обязательно.
Схема приемника:
Вот как это выглядит в сборе у меня. Приемник расположен слева, передатчик-справа.
Что касается дальнобойности, то приемник "слышит" сигнал через 2 железобетонные стены (максимальное удаление по квартире). А вот третья стена его уже глушит (уносил передатчик на лестничную площадку), но тем не менее считаю что результат вполне неплохим, свою цену они отрабатывают на все 100%
И напоследок видео работы
Так как измеряюще/передающая часть работает автономно, запитываясь от аккумулятора, хорошо бы задействовать один из способов энергосбережения. Благо сам радиомодуль тоже умеет засыпать по команде. Но это пока только наметки на будущее.
Здравствуйте! Тема достаточно старенькая, но все же напишу тут. Я только начинаю учится работать с микроконтроллерами, раньше только на транзисторах и лампах собирали+ простейшая логика. Недавно родилась у меня дочка и встал вопрос о контроле температуры в комнате и на улице. Есть идея сделать пару (может и 3-4) датчиков в комнате в разных местах и пару датчиков на улице тоже в разных местах. На приемник приходят разные данные и выводится среднее значение. думаю в таком варианте показания будут более точными. И сделать вскопе не только температуру но и давление, влажность, скорость и направления ветра. Так как я только учусь обращением с МК то я решил собирать пока в proteus но не нашел радио модуль NRF24L01 может у кого есть моделька для протеуса? и еще вопрос. у нордика есть разные чипы даже однокристальные SoC в связи с этим вопрос так как в новых NRF24L.. есть уже кристал возможно ли использовать трансивер без дополнительного МК?
ФУХХХ! Это было какое-то проклятье, наверное. Не стал я ждать завтра, перепаял немножко питание и все заработало как часы! Причину мне стыдно озвучивать, но виноват я сам. Я триста раз открывал даташит на мегу8 по разным ситуациям и не обращая внимание на первую страницу вплоть до сегодняшнего вечера был уверен (даже готов был поспорить!), что у меги8 (-16PU) питание от 1.8 до 5.5 В., пока не увидел коммент Valera18 http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92#ent2410 который озвучил страшную правду. Я посмотрел в даташите и до сих пор в шоке. И я наивно полагал, что в моей схеме питания 4 В хватит обоим, как трансиверу так и меге. >> to Valera18 ОГРОМНОЕ СПАСИБО!
Автор по привычке (а может на будущее) использовал внешний кварц. Без разницы, хоть внешний, или хоть внутренний. Практика показывала, что "внешние" и "внутренние (RC)" кварцы могут быть разными (1-16МГц) = проблем с работой не было выявлено. Обычно Я использую внутренний кварц (RC), так как не хочется возиться с фьюзами. Модули могут работать даже если у передающей Atmega8 внутренний кварц на 1 МГц, а у принимающей Atmega8 внутренний кварц на 8 МГц.
Принцип работы NRF24L01: отправка данных (температура) через передающий NRF24L01, а принимающий NRF24L01 ждёт приёма, и когда примет данные выставляет порт IRQ в 0 (ноль). Когда нет данных IRQ = 1. Если IRQ = 0, то Atmega8 считывает принятые данные с NRF24L01. Даже если Atmega8 не успела считать данные с первой отправки, внутренняя память NRF24L01 перезаписывается на новые данные. Поэтому у принимающей Atmega8 нужно выставлять частоту равную передающей (8МГц - 8МГц), или у передатчика <=8МГц, а у приёмника всегда >=8МГц (чтобы успела считать данные = 1,2,3,4,5,6,7). Если сделать наоборот, тогда возможны проскоки (пропуск данных = 1,2,4,7 и так далее).
Попробую, у Atmega8 подтянуть порт RESET (PC6) через 10 кОм к плюсу (+). У модуля NRF24L01 подтяни порт IRQ через 10 кОм к плюсу (+). Так будет надёжнее (против помех и статики). Если проблема останется, тогда уже нужно проверять к каким портам припаяны информационные провода, и сверять их с теми, что выставлены в прошивке. Может где ошибка. Питание желательно стабильное, без просадок.
Если думаешь, что проблема из-за Wi-fi, просто измени частоту работы NRF24L01 в прошивке (передатчика и приёмника), в конце прошивки: Call W_register(2) D_bytes(1) = Write_reg + Rf_ch 'Set RF channel D_bytes(2) = 40 (((D_bytes(2) = может быть от 0 до 125, то-есть частота равна (2400)+40 = поэтому текущая частота 2440 Мгц)))
Попробуй с простых прошивок (для проверки), находятся в конце статьи: http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92
Всем привет! Ребята, ну подскажите новичку: А почему в этом проекте выбран способ тактирования от кварца, а не от внутреннего генератора? Я уже 2 неделю не могу наладить эти модули с мегой8. Передача данных идет только тогда, когда этого захотят невидимые силы. И то, только в моей квартире. Выхожу на улицу - связь пропадает напрочь. Ни одного пакета не доставляется. Грешил на вайфай - он не виноват. Позавчера связь была отличная, 99% доставки пакетов, сидел 2 часа наблюдал, обрадовался, что все, решил проблему, оставил работать на ночь - а утром облом, опять не одного пакета. Покупал на алиэкспрес по 1 баксу. Я уже не знаю, что придумать. Но я тактировался от внутреннего генератора, пробовал разные частотами (1 Мгц, 8 Мгц). Может ли это быть причиной проблемы? 22:31 Valera18, спасибо за советы! Перечитал сейчас все комментарии к другой (соседней) статье по этому модулю, появилась куча мыслей, завтра начну последовательно проверять все.
Про аналоговые камеры ничего не скажу, а вот если использовать "цифровые" от сотовых, то обработать сигнал можно. На bascom.at.ua есть пара проектов с видеокамерами раз и два Дальше скорость передачи видео упирается в скорость радиоканала, и она явно не даст передавать вид в реальном времени. Простой расчет: при разрешении картинки 640х480 пикселей (256 оттенков цвета) одна картинка получается весом 307200 байт (307,2 кБ). Радиомодуль может передавать со скоростью до 2 Мбит/сек (0,25 Мбайт/сек=250 кБ/сек). Итого передача одного кадра займет 1,23 сек. Это в лучшем случае, ведь контроллер еще должен будет обработывать картинку и "загружать" кадр в буфер передатчика.
А кто задумывался о передачи Video сигнала через NRF24L01? Было бы интересно передавать Video сигнал на расстояние 1 километр. Как думаете, возможно ли (с помощью Atmega) обрабатывать Video сигнал с "аналоговой CCTV камеры" с последующей передачей через NRF24L01?
На днях закажу http://www.aliexpress.com/item/Free-shiping-best-prices-100pcs-lot-NRF24L01-NRF24L01-Wireless-Module-2-4G-Wirele ss-Communication-Module/674686536.html и http://www.aliexpress.com/item/Free-Shipping-Special-promotions-1100-meter-long-distance-NRF24L01-PA-LNA-wireles s-modules-1100meters-with-antenna/748911091.html
С солнечной батареей задумка правильная, только если передатчик буде на улице зимой и летом, то батарейки на долго не хватит.
Сегодня заказал nrf24l01 - цена действительно радует-меньше 100 руб.за пару,так ещё впридачу к ним солнечные панельки двухвольтовые 50 мА заказал.Думаю пару панелек(или одну с преобразователем)+ батарейка от телефона-неплохой источник питания для радиомодуля должен получится.
Настоящие испытания не проводил, но по документации на чип рабочий диапазон от -40 до +85 С По трансиверам на 433 МГц есть модули RXQ-2, неплохие по характеристикам, только дороговато по сравнению с nrf24l01 http://www.dessy.ru/catalog-pdc230118.html Но этот модуль можно попробовать собрать самому, в нем стоит чип nRF9E5
Не,уже закинул обратно в ящик(мож как-нибудь,когда совсем делать нечего будет из спортивного интереса)Метров 5 пробовал-нормально.Однако для уличного датчика(как я хотел) не прокатит.Сегодня почитал описание-диапазон всего от -10 градусов.И тока жрёт вместо заявленных 4 ма 15(без микроконтролёра).Надо что-то получшей.Да ,кстати ,а как себя ведёт NRF24L01 при низких температурах?А то может что-то другое придётся заказывать.
Не,не выйдет.Это для пультиков, и то с кодерами и декодерами. Оно конечно можно на меге поизвращаться, проверку сделать, контрольные суммы там, бла,бла,бла, но оно Вам надо? У менятакой лежит. Проверял просто, мега по UART выдавала слово, а приёмник к компу подключён и на терминал. Метров десять более или менее, дальше мусор. Ну если победите,то ждёмс отчёта.
Как делал я: в коде передатчика завел дополнительную переменную (Byte) и записывал в нее какое-нибудь значение, соответствующее знаку температуры. К примеру: если знак "+" записываем в переменную 100, если температура "-" записываем 200. Если знака нет, записываем 0. Затем отправляем значение этой переменной, а в приемнике проделываем обратное преобразование и получаем знак температуры.
Нарыл кое-что на приёмо-передатчики 433мгц.Нарисовал код(если можно так сказать-повырывал по кусочку и кое как слепил).Но вроде работоспособно.Помогите вывести знак минуса на дисплей.Код:
передатчик
$regfile = "m8def.dat" $crystal = 1000000
Dim Junk As Byte Dim Synch As Byte Dim Temp1 As Byte Dim Temp2 As Byte
Dim Byte0 As Byte Dim Byte1 As Byte Dim Signtemperatura As String * 1 Dim T1 As Byte Dim T2 As Byte Dim I As Integer Config 1wire = Portd.0
Synch = 127 Temp1 = 0
Wait 5
Do 1wreset 1wwrite &HCC 1wwrite &H44
Wait 1
1wreset 1wwrite &HCC 1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
If Byte1 >= 248 Then Byte0 = &HFF - Byte0 Byte1 = &HFF - Byte1 Signtemperatura = "-"
Они самые.Просто валяются без дела три пары.Хочется попробовать для температурных датчиков.Есть тестовые исходники,но они на С.А я только в Баскоме понемногу осваиваюсь.
Могу сказать, только про RX/TX "Bluetooth HC-05", но там частота >2ГГц.
Вы про это, тоже интересные модули: http://www.dealextremeru.com/p/433mhz-wireless-transmitter-module-superregeneration-for-arduino-green-149254 http://www.dealextremeru.com/p/diy-433mhz-wireless-receiving-module-for-arduino-green-149252 А почему именно 433мГц? С дальностью буду проблемы из-за помех. Где хотите использовать (для чего)?
Вот, "причешу" исходники , и открою. Планов милион. К примеру часы. Уже не редкость, что в доме куча часов. Вот каждые часы могут принимать температуру с одного датчика.Тем более, что 24L01 выходит дешевле 18В20, и проводов не тянуть. Второе- те-же часы. Одни центральные, 1307, и остальные ведомые. При пропадании напряжения, после восстановления, ждём точного времени от ведущих. Опять-же дешевле.
Valera18, Я запустил твои прошивки на три передатчика. В передатчике изменил только режим прерывания , Config Int0 = Low Level заменил на FALLING. Ну и плюс мелочи под себя изменил. Всё заработало. Приёмник свой писал. Далее немного изменил передатчики, что-бы удобно с ними работать было. Сделал на Меге48 и Меге48р. Они дешевле Тини2313 и АЦП есть. Термометр- Lm35. Кстати, разница двух термометров, лежащих рядом, отличались на 0.1С при ни какой стабилизации напряжения. Точнее простой параметрический, из резистора на 68Ом и белого светодиода в качестве стабилитрона.( питание 5 вольт.) Далее, для проверки , сделал термостат на приёмнике, но нагрузкой управляет передатчик. Т.е. Передатчик меряет температуру, по команде с приёмника, отправляет данные на приёмник, он решает, включить нагрузку или нет, и отправляет команду на передатчик. И тот включает нагрузку. На Меге48-41%. Вообщем всё работает. Предлагаю тему открыть на форуме, выложу туда исходники, ну и видео. Но тока завтра, или послезавтра