Главная » Статьи » Проекты

Передача измеренной температуры по радиоканалу. Связка NRF24L01+ и DS18B20
 


 Небольшой проект с использованием радиомодулей NRF24L01. Задача проста - измерить температуру и отправить данные на приемник. Измерением температуры занимается цифровой датчик DS18B20. Измеренная температура, полученная на другой стороне приемником, выводится на ЖК дисплей. Хороший пример для демонстрации возможностей радиомодулей.

 Передатчиком служит тестовая платка с atmega8, которая была собрана ранее. К ней дополнительно подключил датчик 18b20 к выводу PortC.0 с резистором подтяжки на 4,7 килоом
 
 Схема передатчика:




 Запитываться передатчик должен напряжением от 3 до 3,6 вольт (нижний предел 3 вольта для датчика температуры, а верхний - для NRF24L01). В моем случае все запитывалось подсаженным литий-ионным аккумулятором, в котором осталось 3,5 Вольт.


 Приемник собран на макетке, схема подключения радиомодуля практически идентична, за тем исключением, что питание на него идет отдельно через понижающий стабилизатор на 3,3 вольта. Одно хорошо, что входы/выходы модуля толерантны к 5-и вольтовым уровням, поэтому схему согласования с контроллером делать не обязательно. 

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

 






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







 Что касается дальнобойности, то приемник "слышит" сигнал через 2 железобетонные стены (максимальное удаление по квартире). А вот третья стена его уже глушит (уносил передатчик на лестничную площадку), но тем не менее считаю что результат вполне неплохим, свою цену они отрабатывают на все 100%


 И напоследок видео работы







 Так как измеряюще/передающая часть работает автономно, запитываясь от аккумулятора, хорошо бы задействовать один из способов энергосбережения. Благо сам радиомодуль тоже умеет засыпать по команде. Но это пока только наметки на будущее.



Категория: Проекты | Добавлено: 17.09.2012
Просмотров: 101440 | Комментарии: 120 | Теги: радиопередача, 18b20 | Рейтинг: 4.6/24
Всего комментариев: 120« 1 2 3 4 »
60 edgi   (05.11.2013 21:58) [Материал]
Здравствуйте!
Тема достаточно старенькая, но все же напишу тут. Я только начинаю учится работать с микроконтроллерами, раньше только на транзисторах и лампах собирали+ простейшая логика. Недавно родилась у меня дочка и встал вопрос о контроле температуры в комнате и на улице. Есть идея сделать пару (может и 3-4) датчиков в комнате в разных местах и пару датчиков на улице тоже в разных местах. На приемник приходят разные данные и выводится среднее значение. думаю в таком варианте показания будут более точными. И сделать вскопе не только температуру но и давление, влажность, скорость и направления ветра. Так как я только учусь обращением с МК то я решил собирать пока в proteus но не нашел радио модуль NRF24L01 может у кого есть моделька для протеуса? и еще вопрос. у нордика есть разные чипы даже однокристальные SoC в связи с этим вопрос так как в новых NRF24L.. есть уже кристал возможно ли использовать трансивер без дополнительного МК?

+1   Спам
59 ArtemKolesnikov   (22.05.2013 00:59) [Материал]
ФУХХХ! Это было какое-то проклятье, наверное.
Не стал я ждать завтра, перепаял немножко питание и все заработало как часы!
Причину мне стыдно озвучивать, но виноват я сам. Я триста раз открывал даташит на мегу8 по разным ситуациям и не обращая внимание на первую страницу вплоть до сегодняшнего вечера был уверен (даже готов был поспорить!), что у меги8 (-16PU) питание от 1.8 до 5.5 В., пока не увидел коммент Valera18
http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92#ent2410
который озвучил страшную правду. Я посмотрел в даташите и до сих пор в шоке.
И я наивно полагал, что в моей схеме питания 4 В хватит обоим, как трансиверу так и меге.
>> to Valera18
ОГРОМНОЕ СПАСИБО!

58 Valera18   (21.05.2013 21:39) [Материал]
Для ArtemKolesnikov

Автор по привычке (а может на будущее) использовал внешний кварц. Без разницы, хоть внешний, или хоть внутренний.
Практика показывала, что "внешние" и "внутренние (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

57 ArtemKolesnikov   (21.05.2013 21:07) [Материал]
Всем привет!
Ребята, ну подскажите новичку: А почему в этом проекте выбран способ тактирования от кварца, а не от внутреннего генератора?
Я уже 2 неделю не могу наладить эти модули с мегой8. Передача данных идет только тогда, когда этого захотят невидимые силы. И то, только в моей квартире. Выхожу на улицу - связь пропадает напрочь. Ни одного пакета не доставляется. Грешил на вайфай - он не виноват. Позавчера связь была отличная, 99% доставки пакетов, сидел 2 часа наблюдал, обрадовался, что все, решил проблему, оставил работать на ночь - а утром облом, опять не одного пакета.
Покупал на алиэкспрес по 1 баксу.
Я уже не знаю, что придумать. Но я тактировался от внутреннего генератора, пробовал разные частотами (1 Мгц, 8 Мгц). Может ли это быть причиной проблемы?
22:31 Valera18, спасибо за советы!
Перечитал сейчас все комментарии к другой (соседней) статье по этому модулю, появилась куча мыслей, завтра начну последовательно проверять все.

56 exersizze   (09.03.2013 09:33) [Материал]
А почему нет, можно. Но надо учитывать что там размер буфера ограничен, поэтому надо будет слать данные кусками определенного размера.

55 Dust   (08.03.2013 10:19) [Материал]
А прозрачную радиопередачу сделать на этих модулях можно? ну например радио удлинитель для RS485?

54 exersizze   (01.03.2013 08:57) [Материал]
Про аналоговые камеры ничего не скажу, а вот если использовать "цифровые" от сотовых, то обработать сигнал можно. На bascom.at.ua есть пара проектов с видеокамерами раз и два
Дальше скорость передачи видео упирается в скорость радиоканала, и она явно не даст передавать вид в реальном времени. Простой расчет: при разрешении картинки 640х480 пикселей (256 оттенков цвета) одна картинка получается весом 307200 байт (307,2 кБ). Радиомодуль может передавать со скоростью до 2 Мбит/сек (0,25 Мбайт/сек=250 кБ/сек). Итого передача одного кадра займет 1,23 сек. Это в лучшем случае, ведь контроллер еще должен будет обработывать картинку и "загружать" кадр в буфер передатчика.

53 Valera18   (27.02.2013 20:55) [Материал]
А кто задумывался о передачи Video сигнала через NRF24L01? Было бы интересно передавать Video сигнал на расстояние 1 километр.
Как думаете, возможно ли (с помощью Atmega) обрабатывать Video сигнал с "аналоговой CCTV камеры" с последующей передачей через NRF24L01?

+1   Спам
52 max   (27.02.2013 20:03) [Материал]
На днях закажу 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

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

51 sany2   (27.02.2013 19:16) [Материал]
Сегодня заказал nrf24l01 - цена действительно радует-меньше 100 руб.за пару,так ещё впридачу к ним солнечные панельки двухвольтовые 50 мА заказал.Думаю пару панелек(или одну с преобразователем)+ батарейка от телефона-неплохой источник питания для радиомодуля должен получится.

50 exersizze   (27.02.2013 00:50) [Материал]
Настоящие испытания не проводил, но по документации на чип рабочий диапазон от -40 до +85 С
По трансиверам на 433 МГц есть модули RXQ-2, неплохие по характеристикам, только дороговато по сравнению с nrf24l01 http://www.dessy.ru/catalog-pdc230118.html 
Но этот модуль можно попробовать собрать самому, в нем стоит чип nRF9E5

49 sany2   (26.02.2013 22:07) [Материал]
Не,уже закинул обратно в ящик(мож как-нибудь,когда совсем делать нечего будет из спортивного интереса)Метров 5 пробовал-нормально.Однако для уличного датчика(как я хотел) не прокатит.Сегодня почитал описание-диапазон всего от -10 градусов.И тока жрёт вместо заявленных 4 ма 15(без микроконтролёра).Надо что-то получшей.Да ,кстати ,а как себя ведёт NRF24L01 при низких температурах?А то может что-то другое придётся заказывать.

48 kip96   (26.02.2013 21:44) [Материал]
Не,не выйдет.Это для пультиков, и то с кодерами и декодерами. Оно конечно можно на меге поизвращаться, проверку сделать, контрольные суммы там, бла,бла,бла, но оно Вам надо? У менятакой лежит. Проверял просто, мега по UART выдавала слово, а приёмник к компу подключён и на терминал. Метров десять более или менее, дальше мусор. Ну если победите,то ждёмс отчёта.

47 sany2   (26.02.2013 20:24) [Материал]
Вот такие
http://viewitem.eim.ebay.ru/1pcs-433Mhz-RF-transmitter-and-receiver-kit-for-Arduino-project/261041100836/item

46 kip96   (26.02.2013 18:42) [Материал]
А что за приёмо-передатчики 433мгц?

45 sany2   (26.02.2013 16:08) [Материал]
exersizze - спасибо.буду пробовать

44 exersizze   (26.02.2013 08:41) [Материал]
Как делал я: в коде передатчика завел дополнительную переменную (Byte) и записывал в нее какое-нибудь значение, соответствующее знаку температуры. К примеру: если знак "+" записываем в переменную 100, если температура "-" записываем 200. Если знака нет, записываем 0. Затем отправляем значение этой переменной, а в приемнике проделываем обратное преобразование и получаем знак температуры.

43 sany2   (25.02.2013 23:51) [Материал]
Нарыл кое-что на приёмо-передатчики 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 = "-"

Else
Signtemperatura = "+"
End If

T1 = Byte0 / 16
T2 = Byte1 * 16

T1 = T1 + T2
Temp1 = T1
Gosub Xmit

Loop
End

Xmit:

Open "comd.5:4800,8,N,1,inverted" For Output As #1
Baud #1 , 4800
Print #1 , Junk : Waitms 25
Print #1 , Synch : Waitms 25
Print #1 , Temp1 : Waitms 75

Close #1
Return
################################################################################# ####################################

приёмник

'avrproject.ru 'avrproject.ru
'exersizze@2013
$regfile = "m16def.dat"
$crystal = 16000000 ' 16 MHz
$hwstack = 32
$swstack = 10
$framesize = 40

Config Lcdpin = Pin , Rs = Porta.5 , E = Porta.4 , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0
Config Lcd = 16 * 2
Cursor Off
Cls

Dim Synch As Byte
Dim Junk As Byte
Dim Temp1 As Byte
Dim Temp2 As Byte

Start1:

Baud #2 , 4800
Start2:

Open "comb.1:4800,8,n,1,inverted" For Input As #2
Input #2 , Junk : Waitms 20 'was 20ms at 2400 baud
Input #2 , Synch
If Synch <> 127 Then Goto Start1
Waitms 20
Input #2 , Temp1 : Waitms 20
Input #2 , Temp2 : Waitms 20

Close #2

Cls 'CLEAR THE LCD DISPLAY

Locate 1 , 1 : Lcd "Temp :" ; Temp1 ; "." ; Temp2 'show the test as a temperatur

Waitms 20

Goto Start2
End

+2   Спам
42 kip96   (24.02.2013 21:36) [Материал]
http://avrproject.ru/forum/3-138-1
Создал тему. Видео на телефон снимал-ужас, по-этому не выложил. Завтра пересниму.
Если не против, переходим.

41 sany2   (24.02.2013 21:16) [Материал]
Они самые.Просто валяются без дела три пары.Хочется попробовать для температурных датчиков.Есть тестовые исходники,но они на С.А я только в Баскоме понемногу осваиваюсь.

40 Valera18   (24.02.2013 20:15) [Материал]
Для sany2

Могу сказать, только про 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мГц? С дальностью буду проблемы из-за помех.
Где хотите использовать (для чего)?

39 sany2   (24.02.2013 18:59) [Материал]
Доброго времени.Где можно почитать о работе с RX/TX модулями на 433мГц?

38 max   (24.02.2013 17:36) [Материал]
С часами прикольная задумка.

+1   Спам
37 kip96   (24.02.2013 15:22) [Материал]
Вот, "причешу" исходники , и открою. Планов милион. К примеру часы. Уже не редкость, что в доме куча часов. Вот каждые часы могут принимать температуру с одного датчика.Тем более, что 24L01 выходит дешевле 18В20, и проводов не тянуть. Второе- те-же часы. Одни центральные, 1307, и остальные ведомые. При пропадании напряжения, после восстановления, ждём точного времени от ведущих. Опять-же дешевле.

36 max   (24.02.2013 14:41) [Материал]
kip96 создайте сами тему на форуме.

+2   Спам
35 kip96   (24.02.2013 14:36) [Материал]
Valera18, Я запустил твои прошивки на три передатчика. В передатчике изменил только режим прерывания , Config Int0 = Low Level заменил на FALLING. Ну и плюс мелочи под себя изменил. Всё заработало. Приёмник свой писал.
Далее немного изменил передатчики, что-бы удобно с ними работать было.
Сделал на Меге48 и Меге48р. Они дешевле Тини2313 и АЦП есть. Термометр- Lm35.
Кстати, разница двух термометров, лежащих рядом, отличались на 0.1С при ни какой стабилизации напряжения. Точнее простой параметрический, из резистора на 68Ом и белого светодиода в качестве стабилитрона.( питание 5 вольт.)
Далее, для проверки , сделал термостат на приёмнике, но нагрузкой управляет передатчик. Т.е. Передатчик меряет температуру, по команде с приёмника, отправляет данные на приёмник, он решает, включить нагрузку или нет, и отправляет команду на передатчик. И тот включает нагрузку. На Меге48-41%. Вообщем всё работает.
Предлагаю тему открыть на форуме, выложу туда исходники, ну и видео. Но тока завтра, или послезавтра

34 max   (24.02.2013 13:12) [Материал]
Я не дружу, Гугл переводит.

33 bec123   (24.02.2013 12:49) [Материал]
не спорю в китае можно кто с английским дружит

32 max   (24.02.2013 11:53) [Материал]
Что-то там дороговато. В Китае можно купить за эти деньги штук 6 модулей, не меньше.

31 bec123   (24.02.2013 10:38) [Материал]
ура пришли радио модули теперь будем собирать и тестировать.
Каму интересно модули заказывал здесь http://dvrobot.ru в разделе датчики

1-30 31-60 61-90 91-120
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация