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

Встраиваемый модуль радиоуправления на nRF24L01
 Представляю готовый модуль для дистанционного управления чем либо, построенный на широко известных радиотрансиверах nRF24L01. Так как модули нельзя назвать дальнобойными, устройство пойдет для управления в пределах комнаты или квартиры. 
 
 

 
 
 Пульт
 Пульт собран на микроконтроллере ATtiny2313A в SOIC корпусе. Тут все предельно просто - 4 кнопки и модуль трансивера NRF24L01. Кнопки подключены способом, который я описывал ранее. Для обработок нажатия кнопок используется всего одно внешнее прерывание INT0. 
 
 
 
 
 
 Питаться схема планировалась от одной 3-х вольтовой литиевой батарейки.  Главная цель была утрамбовать всю схему передатчика в минимальные размеры, чтобы она влезла в заранее купленный корпус-брелок. Я использовал батарейку CR2016, получилось достаточно компактно, плата поместилась в корпус G1402-4B купленном в http://chipnn.ru/ Но чтобы плата влезла в корпус по высоте пришлось перепаять кварц на передатчике (см. фото №3). 
 
 
      
 
 Для того чтобы продлить жизнь батарейки, все время пока пульт лежит без дела, микроконтроллер находится в режиме энергосбережения. Передатчик в свою очередь питается напрямую от ножки микроконтроллера (PortD.0), поэтому когда микроконтроллер спит, питание на передатчик не поступает и расход батареи минимален. Посмотрю сколько проживет батарейка в режиме ожидания. 
 Светодиод D5 на схеме мигает каждый раз при нажатии на кнопки, чтобы было видно что оно работает. Потом можно будет выпаять чтобы не сажало лишний раз батарейку.
 
 
Исходник и прошивка передатчика (частота работы микроконтроллера 1 МГц)
 
 
 
 Приемник
 Приемная часть собрана на микроконтроллере Atmega48, к которому подключен приемник и буферная микросхема, я применил триггер 74hc14. Микроконтроллер тактируется от внутреннего генератора на 1 МГц. Для понижения напряжения питания до 3х вольт применен стабилизатор NCP1117ST33 (U2 на схеме) в корпусе SOT-223. Если сразу использовать для питания 3 вольта, стабилизатор, естественно, можно исключить. 
 
 
 
 Все собрано на плате размером 35*25 мм, которую можно впаять в уже готовое устройство. 
 
 
   
 
 
 

 На выходе приемника активным состоянием, т.е. когда выход включен, является высокий уровень. Для отладки и демонстрации работы на выходы поставил по светодиоду.
 
 
 
 Так как логика работы приемника может быть разной, и зависит от области применения привожу сразу три прошивки, в которых реализована разная логика работы. 
 
 Первый режим работы
 Кратенько поясню какие команды передает передатчик. Пульт управления передает команды одной цифрой, эта цифра обозначает номер нажатой кнопки. Приемник соответственно принимает эту цифру и дальше выполняет программу переключения выходов.
 В первом режиме работы приемник выставляет высокий уровень на одном выходе в зависимости от номера нажатой кнопки. Высокий уровень находится постоянно, пока не придет команда переключиться на другой выход. Это состояние сохраняется в энергонезависимой памяти, поэтому если даже пропадет питание на приемнике, после включения на выходах будет такое же состояние как и до выключения. 
 
 
 
 
 
 
 Второй режим работы
 Во втором режиме при нажатии на кнопку происходит кратковременное (1 сек.) изменение уровня на выходе модуля приемника. 
 
 
 
 
 
 
 
 
 Третий режим работы
В третьем режиме нажатие на кнопку приводит к включению или выключению выхода. Нажали один раз - включили, нажали второй раз - выключили. Можно выставить на выходе любою комбинацию. Эта комбинация, также как и в первом варианте, сохраняется в энергонезависимой памяти. 
 
 
 

UPD: по прошествии 3 недель, в течении которых я каждый день нажимал несколько раз на кнопки, пульт продолжает работать от этой батарейки. Напряжение на ней упало с 3 до 2,6 вольта.
 

Еще одна версия пульта от товарища Polle:
 

 
 
 
Категория: Проекты | Добавлено: 12.09.2013
Просмотров: 32299 | Комментарии: 99 | Теги: NRF24L01 | Рейтинг: 5.0/19
Всего комментариев: 991 2 3 4 »
0  
99 exersizze   (17.03.2016 18:22)
Печатная плата выполнена в DipTrace. Можете скачать ее сами, официальная бесплатная версия тут http://diptrace.com/rus/download-diptrace/#DownloadForm/1/
Фьюзы остаются по умолчанию. Передатчик пойдет только тот что в схеме. Но я бы не стал повторять его на 100%, с той батарейкой что на фото пульт проживет не больше месяца. Или ставьте батарейку большей емкости или переделать с учетом вот этой статьи http://avrproject.ru/publ....1-0-153
Интересно дальность модуля по ссылке с антенной и вправду увеличивается до 1 км? Что-то слабо верится, думаю хорошо если там  хотя бы 100 метров будет.

98 vladimir-arzhanov   (17.03.2016 12:34)
Здравствуйте. у меня к вам парочку вопросов, можете помочь со схемой avrproject.ru/publ/vstraivaemyj_modul_radioupravlenija_na_nrf24l01/1-1-0-147, я пользуюсь в программе спринт лоярт, можете выслать в этом формате, ваш формат у меня не как не открывает. и еще вопрос какие фузы биты выставлять на прошивки передатчика и приемника. Если я возьму этот модуль nRF24L01, только с дополнительной антеной
у него дальность увеличится? Возможно ли подобрать пульт (передатчик) заводской к этому приемнику? vladimir-arzhanov@inbox.ru

97 artcore   (15.10.2015 18:57)
Как-то задавал вопрос по энергосбережению модуля NRF в этом комментарии. Видимо, мало кто уже занимается такими модулями. Но вопрос закрыт, спасибо =) /просто не могу удалить комментарий/

96 koteika   (17.08.2015 13:11)
к сожалению на живую попробовать пока не могу - модули еще в пути. если у Вас будет время, попробуйте пожалуйста и напишите о результатах

95 Valera18   (13.08.2015 16:47)
Для koteika

Не пробовал, но ЗАИНТЕРЕСОВАЛО. Нужно пробовать "на живую".
Вы подали идею по передачи цельного массива данных. Теоретически должно быть возможно, но надо пробовать.

+1   Спам
94 koteika   (13.08.2015 15:52)
спасибо! а еще вопрос: данные обязательно должны быть в шестнадцатиричном виде или можно в десятичном? и можно ли просто указать имя переменной которую необходимо передать?

93 Valera18   (13.08.2015 15:35)
Для koteika

Данная тема уже обсуждалась. Код здесь, в конце статьи в комментариях:
http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92
комментарий номер №163.

Если не найдёте, то вот:
1) передача 5 байт
http://yadi.sk/d/vF7D07Mx9g4QY
2) передача 15 байт
http://yadi.sk/d/FypcajG49g4SE

92 koteika   (13.08.2015 12:09)
а можно за одну передачу отправить не 5 байт а скажем 7 или 10? и что нужно поменять в тексте программы?

91 vakulyuk   (14.11.2014 16:52)
Панда зачет)Тоже себе нарисовал для прикола ток в layout-е =)

+1   Спам
90 bav123   (11.11.2014 21:21)
нормальный проект, автору спасибо

89 Polle   (21.09.2014 17:00)
Пульт питается LiPo аккумулятором на 500Ма\ч, а вот сколько он проработает без подзарядки трудно сказать. Пульт потребляет ток только тогда когда им пользуешься, а если в течении 1 минуты не нажата ни одна кнопка он отключается. За две недели батарея разрядилась от 4,2в до 4,12в.

0  
88 exersizze   (16.09.2014 22:46)
Polle, интересная реализация. А сколько работает пульт без подзарядки, я так понимаю питаете литиевым аккумулятором?
Если не против, прикреплю ваши файлы в конце этой статьи, чтобы не потерялись.

87 Polle   (14.09.2014 13:25)
Добрый день! Предлагаю вашему вниманию мою версию системы дистанционного управления на nRF24L01. Вот ссылка на видео: https://yadi.sk/d/2zDwl3GMbTw8B . По этой ссылке можно найти схему и прошивку.

86 energi911   (23.06.2014 01:35)
позвольте уточнить, в каких программах писался код и делалась схема?
заранее спасибо

85 kip96   (27.04.2014 21:37)
Spiout D_bytes(1) , C_bytes
загрузит начиная с байта D_bytes(1), количество байт равное C_bytes

84 Octoberer   (27.04.2014 18:17)
Добрый день. А вот подскажите такой момент

Есть кусочек вот такого кода

D_bytes(1) = Wr_tx_pload
D_bytes(2) = W
D_bytes(3) = &H00
D_bytes(4) = &H00
D_bytes(5) = &H00
D_bytes(6) = Pult
Call W_register(6)

и такая вот процедура

Sub W_register(byval C_bytes As Byte)
Reset Ss
Spiout D_bytes(1) , C_bytes
Set Ss
End Sub

вопрос данная процедура задвинет весь массив D_bytes (с 1 по 6) по SPI,
либо только 1-н его элемент D_bytes(1).

83 Valera18   (02.03.2014 13:46)
Для domrustika

Странно, проблемы быть не должно...
Попробуй простую прошивку (процесс отправка и приём) для ПРОВЕРКИ.
Вот эту прошивку: http://yadi.sk/d/vF7D07Mx9g4QY
только измени у передатчика с Attiny2313 на Atmega8 и поменяй порты, а у прошивки приёмника удали процесс "Print" и выстави порт светодиода.

После напиши вывод, будет ли работать или нет...

82 domrustika   (02.03.2014 11:19)
нет , я использую мк Мега8 tqfp, забыл указать в своем посте.

81 Valera18   (02.03.2014 09:59)
Для domrustika

С передатчиком на "Config Spi = Soft" проблем не было.

Вы написали: "Config Spi = Soft , Din = Portb.4 , Dout = Portb.3 , Ss = Portd.7 , Clock = Portb.5"
я так понимаю, используете Attiny2313, но я не пойму где вы нашли ножку "Ss = Portd.7", порта Portd.7 на микросхеме Attiny2313 нет. =>вероятно, поэтому и не работает.

80 domrustika   (02.03.2014 01:11)
для Valera18
а вот не получается как вы говорите. нарисовал плату, стравил спаял уже. а нифига не работает...
вот вы говорите когда софт можно радиомодуль вешать на любые ножки.
весь код оставил(передатчика) как в статье заменил лишь
Config Spi = Soft , Din = Portb.4 , Dout = Portb.3 , Ss = Portd.7 , Clock = Portb.5
Config Portd.6 = Output : Ce Alias Portd.6 'CE pin is output
Config Portd.7 = Output : Ss Alias Portd.7 'SS pin is output
Config Pind.4 = Input : Irq Alias Pind.4 'IRQ pin is input
на свои, так не работает! потом ради интереса собрал на макетке, как в статье пины и опять работает... вот как то так. получается даже в софте нельзя менять что ли делать строго по статье..

79 Valera18   (26.02.2014 22:45)
Для domrustika

"Config Spi = Soft" можно использовать только на передатчике.
В режиме "Soft" все выводы nRF24L01 можно подключать к любой ножке МК. =>это удобно.
Если использовать в передатчике "Config Spi = Hard", то выводы nRF24L01 нужно подключать также как и на приёмнике (по SPI портам). =>это не удобно.
Через режим "Config Spi = Soft" осуществляется передача инфы (инициализация+посылка), а считывать (то что nRF24L01 получил) не получается (причину проблемы выяснить не удалось). =>режим "Config Spi = Soft" только на передатчике.

Можно сделать оба "Config Spi = Hard", но мне было удобнее передатчик через "Config Spi = Soft". Скорость работы "Hard" и "Soft" одинаковая...

78 domrustika   (26.02.2014 22:25)
спасибо. а почему в этом проекте передатчик сконфигурирован как софт, а приемник как хард? нельзя оба сделать хард или оба софт? Или есть какой-то тайный смысл? или приемник в принципе нельзя конфигурировать как софт?

77 Valera18   (26.02.2014 16:40)
Для domrustika

У передатчика в режиме "Config Spi = Soft" все выводы nRF24L01 можно подключать к любой ножке МК.
У приёмника или передатчика в режиме "Config Spi = Hard" изменять можно только Ce и Irq

76 domrustika   (26.02.2014 16:22)
Ребят возник еще такой вопрос. пины радиомодуля можно назначать на любые ножки мк?
например IRQ Не на D4 а на любую другую свободную?
ну кроме конечно аппаратных моси,мисо,сцк.

75 Valera18   (13.02.2014 07:51)
Для kip96

Согласен...

+1   Спам
74 kip96   (13.02.2014 07:28)
Valera18
"Внимание! Места в ATtiny13A-SU вполне хватит для кода, только придётся отключить порт Reset от Reset"
Valera18,domrustika, Нет необходимости отключать порт RES. Если использовать ацп контроллера, можно сделать клавиатуру хоть на 10 кнопок на тини13.

73 Valera18   (12.02.2014 22:07)
Для domrustika

Нашёл проблему, всё из-за:
S = See 'вытаскиваем из памяти последнее состояние и выставляем на выходе соответствующий уровень
Portc = S

у Вас на портах Portc.4 и Portc.5 уже подключены часы. Переработайте сохранение состояния портов или удалите, так как из-за выставления состояния и идёт проблема.

По "Config" лучше верните обратно на Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1

+1   Спам
72 domrustika   (12.02.2014 21:04)
не помогло (( вот полный код :(
http://zalil.ru/34963771
может ds1307 в принципе не совместимы с радиомодулями...

71 Valera18   (12.02.2014 16:16)
Попробуй измени на:
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1

70 domrustika   (12.02.2014 13:23)
хорошо, попробую. а как насчет часов ds1307? Как их подружить с этим всем делом?

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






авторизация
Логин:
Пароль:
Комментарии
Семисегментный индикатор. Организация динамической индикации
28.08.2016 - Петр:
Индикацию нужно выполнять в прерывании таймера и тогда мерцаний не будет.
Семисегментный индикатор. Организация динамической индикации
28.08.2016 - жулик:
ребята подскажите пожта. если в динамике работает мк как собрать алгоритм что бы...
RF модули HC-12 с UART интерфейсом
26.08.2016 - amida:
Cпасибо
RF модули HC-12 с UART интерфейсом
24.08.2016 - exersizze:
Да, запросто. Если у всех модулей стоят одинаковые настройки они будут слышать д...
RF модули HC-12 с UART интерфейсом
23.08.2016 - mumrikcheb:
Можно ли создать простую сеть из этих модулей? Чтобы один передавал, остальные п...
RF модули HC-12 с UART интерфейсом
22.08.2016 - exersizze:
Пожалуйста. Не так часто как хотелось бы, но стараюсь)
RF модули HC-12 с UART интерфейсом
22.08.2016 - Scorpushka:
спасибо, что радуешь нас новыми статьями!
Работа с внешней EEPROM в Bascom-AVR на примере 24lc08
16.08.2016 - Limonad:
такая конструкция запишет символы в нужной длинне
For Eew_st = 1 To Len(s...
Работа с внешней EEPROM в Bascom-AVR на примере 24lc08
16.08.2016 - Limonad:
вот такая конструкция соберет страницу для чтения
For I = 1 To 16 'на...