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

Передача измеренной температуры по радиоканалу. Связка 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
Просмотров: 62856 | Комментарии: 97 | Теги: Радиопередача, 18b20 | Рейтинг: 4.6/19
Всего комментариев: 971 2 3 4 »
0  
97 exersizze   (25.01.2016 00:06)
Фьюзы на внешний высокочастотный кварц. Вот так http://avrdesign.ucoz.ru/_pu/0/00504216.png

96 rulezznv   (20.01.2016 11:59)
Друзья подскажите как устанавливать фьюзы для проекта в понипрог? или достаточно залить прошивку ? спасибо.

95 Valera18   (24.12.2015 07:58)
Для Dimonbav

Да, можно. Приёмник будет перебирать адреса передатчиков и считывать информацию с каждого по порядку.

Передатчик №1 - адрес
'Подготовка к TX
D_bytes(1) = &H30 'TX адрес
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H01

Передатчик №2 - адрес
'Подготовка к TX
D_bytes(1) = &H30 'TX адрес
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H02

Передатчик №3 - адрес
'Подготовка к TX
D_bytes(1) = &H30 'TX адрес
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H03
и так далее...

Приёмник будет перенастраиваться на каждый адрес передатчика и считывать информацию.
Приёмник - ввод адреса
'Подготовка к Rx
D_bytes(1) = &H2A 'RX адрес для pipe0
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H01

считал с первого передатчика.

Приёмник - ввод адреса
'Подготовка к Rx
D_bytes(1) = &H2A 'RX адрес для pipe0
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H02

считал со второго передатчика...

94 Dimonbav   (22.12.2015 16:37)
Скажи пожалуйста, а можно сделать так чтобы приемник показывал с нескольких передатчиков температуру?
Если есть у тебя такое решение,дай схему или ссылку.
За рание спасибо.

93 max   (14.11.2015 09:50)
Как-то так: http://s006.radikal.ru/i214/1511/3d/df5d36f70780.png

92 AlexVolsk   (13.11.2015 13:04)
Не программист. Просьба выложить скриншот фьюзов для прошивки через Pony Prog. Отправлять на Google онлайн калькулятор не надо. Спасибо.

91 nooby   (04.04.2015 23:28)
привет Всем! Хочу настроить модули на максимальную дистанцию, для этого выставил скорость - 250КБс/сек. А как сделать так чтобы передавать только один байт? Не могу разобраться в регистрах

90 sany2   (21.09.2014 17:12)
Вы ещё забыли 3 пунктик(с радиокота)
Все приемопередатчик в радиусе 1-3 км.

Нехилый бюджет должен быть у того кто возьмётся.

89 Client   (20.09.2014 10:13)
Приветствую всех!
Требуется помощь, естественно не бесплатно!
Необходима передача температуры с 8-и и более передатчиков на один приемопередатчик по радиоканалу. По принципу датчиков давления в шинах авто.
1. Длительность работы от элемента питания 1-2 года. (опрос температуры каждые 5-30 сек.)
2. Все датчики в радиусе около 50 метров.
3. Рабочая температура от -40°С до +125 °С.
4. Оповещение при повышении установленного порога температуры.
5. Оповещение при разряде элемента питания.
6. Оповещение при неработающем датчике.
По всем вопросам писать в личку.

88 Valera18   (14.09.2014 11:11)
Для oleg-him

А, Вы хотите передавать данные GPS на компьютер для программного обеспечения.
Это сложнее, так как NRF24L01 отправляет данные "Байтами", пример:
Dan(1) = &HAA 'Байт 1
Dan(2) = &HBB 'Байт 2
Dan(3) = &HCC 'Байт 3
Dan(4) = &H11 'Байт 4
Dan(5) = &H22 'Байт 5
и так далее...
то-есть если отправлять по пакетно, то выйдет примерно 37 Байт для одной строки.
Тут уже нужно придумывать способ пакетирования большого количества данных с одной строки получаемых с UART, а приёмная часть будет складывать все Байты одной строки - в строку с последующей передачей на компьютер по UART.

Было бы проще, если бы Вы передавали только определённые данные (например: время, дата, широта, долгота, скорость движения, путевой угол, GPS fix - верность данных, количество спутников, высота над уровнем моря).

87 oleg-him   (13.09.2014 15:14)
uart настроен на 9600. для молуля neo-6m есть готовое програмное обеспечение. которое в полной мере понимает данные с приемника. поэтому ничего изменять не надо. а передааем ровно то, что получили с модуля ЖПС

86 Valera18   (12.09.2014 09:45)
Для oleg-him

Во первых, подумайте какие данные с GPS Вам нужны, например: время, дата, широта, долгота, скорость движения, путевой угол, GPS fix - верность данных, количество спутников, высота над уровнем моря.

Так-же важно в каком виде идут данные с GPS по UART, например:
$GPRMC,163736.000,A,5500.4237,N,07323.0355,E,500.15,229.72,040513,,,A*6E
$GPVTG,207.84,T,,M,0.21,N,0.38,K,A*3C
$GPGGA,163736.000,5500.4238,N,07323.0355,E,1,15,1.46,17123.7,M,-29.7,M,,*73
$GPGSA,A,3,01,31,30,11,,,,,,,,,3.11,2.94,1.00*0F
$GPGSV,3,1,11,32,72,258,,31,69,156,29,20,47,292,,01,33,244,22*7F
$GPGSV,3,2,11,14,33,083,,25,30,065,,12,16,030,,23,15,267,17*76
$GPGSV,3,3,11,11,12,232,21,30,08,160,26,22,06,138,*4E
$GPGLL,5500.4489,N,07323.0292,E,131424.000,A,A*55
и так далее...
вполне достаточно строк:
$GPRMC,163736.000,A,5500.4237,N,07323.0355,E,500.15,229.72,040513,,,A*6E
$GPGGA,163736.000,5500.4238,N,07323.0355,E,1,15,1.46,17123.7,M,-29.7,M,,*73

и на какую скорость передачи настроен UART у GPS, например: 9600 или 38400

85 oleg-him   (12.09.2014 02:54)
ннмогу понять как подсунуть передатчику именно данные с UART

84 oleg-him   (12.09.2014 02:50)
прошивку приемника менять не надо?

83 Valera18   (11.09.2014 15:57)
Для oleg-him

Используй микроконтроллер (например Atmega8) как посредник, то-есть "данные GPS" в "Atmega8" в "NRF24L01".
Примеры по работе с NRF24L01 и GPS модулем есть на этом сайте.

82 oleg-him   (11.09.2014 08:07)
Друзья, сейчас готовлюсь к соревнованиям по радиоуправляемым моделям, куплю код за деньги! Я собрал тестовый вариант приемника и передатчика, все заработало! теперь хочу передавать с помощью этих радиомодулей данные UART вот с этого модуля http://www.parkflyer.ru/product/700417/ как в Bascom-AVR преобразовать UART в SPI?

81 Valera18   (26.05.2014 15:56)
Здарова! sasha

Пожалуйста, почитай комментарии тут:
http://avrproject.ru/publ/vstraivaemyj_modul_radioupravlenija_na_nrf24l01/1-1-0-147
http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92
http://avrproject.ru/publ/peredacha_izmerennoj_temperatury_po_radiokanalu_svjazka_nrf24l01_i_ds18b20/1-1-0-106
я уже где-то описывал принцип работы nrf24l01 нужным Вам способом.

Опишу вкратце:
1) термометр №1, находится в режиме "передачи", сидит по адресу (индекс)
'Подготовка к TX
D_bytes(1) = &H30 'TX адрес
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H01
Reset Ss
Spiout D_bytes(1) , 6 'Shiftout байты данных SPI корыта, C_bytes это количество байт, которые будут написаны
Set Ss

D_bytes(1) = &H2A 'RX адрес для pipe0
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H01
Reset Ss
Spiout D_bytes(1) , 6 'Shiftout байты данных SPI корыта, C_bytes это количество байт, которые будут написаны
Set Ss

'то-есть адрес 34-43-10-10-01
2) термометр №2, находится в режиме "приёма", сидит по адресу (индекс)
'Подготовка к Rx
D_bytes(1) = &H2A 'RX адрес для pipe0
D_bytes(2) = &H34
D_bytes(3) = &H43
D_bytes(4) = &H10
D_bytes(5) = &H10
D_bytes(6) = &H01
Reset Ss
Spiout D_bytes(1) , 6 'Shiftout байты данных SPI корыта, C_bytes это количество байт, которые будут написаны
Set Ss

'то-есть адрес 34-43-10-10-01
3) термометр №1, находится в режиме "передачи", произвёл передачу температуры по адресу (индексу) 34-43-10-10-01
и после передачи переключился в режим "приёма" по адресу (индексу) 34-43-10-10-02.
4) термометр №2, находится в режиме "приёма", произвёл приём температуры по адресу (индексу) 34-43-10-10-01
и после приёма переключился в режим "передачи" по адресу (индексу) 34-43-10-10-02.
5) термометр №2, находится в режиме "передачи", произвёл передачу температуры по адресу (индексу) 34-43-10-10-02
6) термометр №1, находится в режиме "приёма", произвёл приём температуры по адресу (индексу) 34-43-10-10-02.
и далее снова всё повторяется.

Так будет понятнее, режим "Последовательный": термометр №1 -> термометр №2 -> термометр №1
ВАЖНО! учитывайте, что при работе в таком режиме про энергосбережение можно забыть, так как nrf24l01 будет постоянно включен.

Здесь последняя версия кода (прошивки): http://yadi.sk/d/vF7D07Mx9g4QY или http://yadi.sk/d/FypcajG49g4SE

80 sasha   (26.05.2014 11:57)
привет каждый ...... У меня есть проблема с NRF24L01 Я не знаю, как это работает Двусторонняя в свое время ..... У меня есть два устройства, я хочу, чтобы отправить данные из первого устройства ко второму устройство и второй, чтобы отправить ответ на первый в то же время ... пожалуйста, помогите мне я использую BASCOM AVR для написать свою программу

79 Valera18   (11.02.2014 16:04)
Понятно.
1) Тогда для передатчика лучше использовать ATTINY2313A-SU, малое энергопотребление и достаточное количество свободных портов для кнопок.
Здесь описывается понижение энергопотребления и в комментариях: http://avrproject.ru/publ/poleznaja_informacija/ponizhaem_ehnergopotreblenie_ustrojstv_na_mikrokontrollerakh_avr/4-1-0-64
2) Для составного модуля приёмника (которых будет несколько) лучше использовать Attiny13A-SU + NRF24L01 + РЕЛЕ + БП, так как дешёвая себестоимость, поэтому можно сделать несколько составных приёмных модулей.
Заметка: на Ebay продают дешёвые Attiny13A-SU по 5 штук.

+1   Спам
78 domrustika   (11.02.2014 14:11)
к умному дому и стремлюсь)) ну я не думаю что это будет тяжело. тянуть провода не придется так как планировал что каждый приемник будет состоять из 1 радиомодуля+мк+модуль реле . соответственно он будет стоять там где стоит техника телевизор, свет . а пульт для всех них будет 1 чтоб включать и выключать тот или иной приемник.

77 Valera18   (11.02.2014 13:46)
Да, такое возможно. Идея интересная. Всё это напоминает умный дом :)
Труднее будет связать управляемые устройства (реле света, реле телевизора) с одним приёмником, так как приёмник находится в одном месте, а управляемые устройства в разных местах квартиры, получается нужно тянуть провода от устройств до приёмника с релюшками. Как у Вас идёт проводка (как будете подключать устройства к релюшкам)?

76 domrustika   (11.02.2014 13:09)
спасибо! я пытаюсь соединить эту статью и http://avrproject.ru/publ/vstraivaemyj_modul_radioupravlenija_na_nrf24l01/1-2-0-147
чтобы сделать так сказать радио-розетки. будет 1 приемник и несколько передатчиков в разных местах квартиры и на каждом будет висеть готовый модуль реле, который по кнопке с передатчика бы включал устройство подключенное к реле(свет, телевизор )
вот...
реально ли такое реализовать?)

75 Valera18   (11.02.2014 12:41)
Для domrustika

Вот код для первого передатчика, аналогично и для других передатчиков:
http://yadi.sk/d/vc6qQpiCHgcZC
Напоминаю, что код в комментарии №22 является тестовым (то-есть не проверен, но работать должен).

Над каким устройством Вы работаете?

74 domrustika   (10.02.2014 23:32)
Valera18,
скачал Ваш код с 22 комментария но так и не допер куда там вставить код для датчика 18b20 :( не могли бы Вы залить доделанный код ?

73 Le_Fleurs   (06.02.2014 01:15)
А будет ли 2-я версия этого проекта.
добавить внутренний датчик DHT22 и такой же будет наружный что бы измерять влажность
1-я строчка это домашний 2-я уличный, так же перемычкой задавать интервал передачи уличного датчика. К примеру на выбор передавать данные каждые 5 сек или 1 раз в 5 минут. что продлит срок службы батарейке

+1   Спам
72 amv2000   (30.12.2013 11:22)
Да нет это только у Вас наверное, а модели на NRF24L01 нет, это просто рисунок.

71 T1nK   (30.12.2013 00:07)
Кстати тут при регистрации на сайте, а так же добавлении комментариев вываливается XML в браузер, типа ответ AJAX... Надеюсь скоро поправите, а то пот у меня коммент случайно задулировался теперь, а может ещё у кого(((

70 domrustika   (25.12.2013 14:48)
тут в коментах писали что лучше использовать собаку. ее ведь надо включать в фьюзах да? может кто подсказать в sina prog как выставить фьюзы?

69 sany2   (25.12.2013 14:22)
Ну выходит что так.

68 domrustika   (24.12.2013 12:24)
подождите.. этот код же нужно вставлять в передатчик.. что же получается к нему все равно кнопку тянуть придется?

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






авторизация
Логин:
Пароль:
Комментарии
Бесконтактный датчик температуры MLX90614
19.06.2016 - exersizze:
Интересное решение, спасибо.
Бесконтактный датчик температуры MLX90614
19.06.2016 - Mrshilov:
Можно проще:

$regfile = "m8def.dat"
$crystal = 800...
Использование загрузчика Bascom-AVR
18.06.2016 - Shishkanov:
Добрый вечер. Нужна помощь по Atmega 64A.
Часы, термометр, барометр, гигрометр в одном флаконе.
16.06.2016 - exersizze:
А в чем проблема? Берем прошивку и грузим ее обычным способом, как настроить фью...
Часы, термометр, барометр, гигрометр в одном флаконе.
15.06.2016 - MaxPower1996:
ребят всем привет
помогите загрузить боотлоадер и скажите как програмиров...
Часы, термометр, барометр, гигрометр в одном флаконе.
14.06.2016 - exersizze:
хрен их знает, на скрине видно что галка=0
Часы, термометр, барометр, гигрометр в одном флаконе.
14.06.2016 - zloytoni:
Спасибо большое за скрин! Фьюзы указаны с инверсией или без?
Часы, термометр, барометр, гигрометр в одном флаконе.
13.06.2016 - exersizze:
Если частота контроллера не выставлена то на дисплее и будут квадраты.
Ск...
Часы, термометр, барометр, гигрометр в одном флаконе.
11.06.2016 - zloytoni:
Собрал сей прибор, не запустился, на дисплей выдает только две строчки с квадрат...