- Запознаване с RF модула nRF24L01
- Взаимодействие nRF24L01 с Arduino
- Приемна страна: Връзки на модул Arduino Uno nRF24L01
- Страна на предавателя: Връзки на модул Arduino Nano nRF24L01
- Работа с модул за безжичен приемо-предавател nRF24L01 +
- Програмиране nRF24L01 за Arduino
- Управление на серво мотора с помощта на nRF24L01 безжично
Докато Интернет на нещата (IoT), Индустрия 4.0, Комуникационна комуникация и т.н. стават все по-популярни, необходимостта от безжична комуникация стана наложителна, като все повече машини / устройства говорят помежду си в облака. Дизайнерите използват много безжични комуникационни системи като Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi модули, 433MHz RF модули, Lora, nRF и т.н., а изборът на среда зависи от типа приложение, в което се използва.
Сред всички, един популярен безжичен носител за комуникация в локална мрежа е nRF24L01. Тези модули работят на 2.4GHz (ISM лента) със скорост на предаване от 250Kbps до 2Mbps, което е законно в много страни и може да се използва в индустриални и медицински приложения. Твърди се също, че с подходящи антени тези модули могат да предават и приемат до разстояние от 100 метра между тях. Интересно нали !!? И така, в този урок ще научим повече за тези модули nRF24l01 и как да го свържем с платформа за микроконтролер като Arduino. Също така ще споделим някои решения за често срещаните проблеми, докато използваме този модул.
Запознаване с RF модула nRF24L01
На модули nRF24L01 са приемо-предавателни модули, което означава всеки модул може да изпрати, така и за получаване на данни, но тъй като те са полу-дуплекс те могат или да изпраща или получава данни в даден момент. Модулът има общ nRF24L01 IC от северни полупроводници, който отговаря за предаването и приемането на данни. IC комуникира с помощта на протокола SPI и следователно може лесно да бъде свързан с всякакви микроконтролери. С Arduino става много по-лесно, тъй като библиотеките са лесно достъпни. На pinouts на стандартния nRF24L01 модул е показано по-долу
Модулът има работно напрежение от 1,9 V до 3,6 V (обикновено 3,3 V) и консумира много по-малко ток от само 12 mA по време на нормална работа, което го прави ефективен от батерията и следователно дори може да работи на клетки с монети. Въпреки че работното напрежение е 3.3V, повечето щифтове са 5V толерантни и следователно могат да бъдат директно свързани с 5V микроконтролери като Arduino. Друго предимство на използването на тези модули е, че всеки модул има 6 тръбопровода. Значение, всеки модул може да комуникира с 6 други модула за предаване или получаване на данни. Това прави модула подходящ за създаване на звездни или мрежести мрежи в IoT приложения. Също така те имат широк адресен диапазон от 125 уникални идентификатора, следователно в затворена зона можем да използваме 125 от тези модули, без да се намесваме помежду си.
Взаимодействие nRF24L01 с Arduino
В този урок ще научим как да свързваме nRF24L01 с Arduino чрез управление на сервомотора, свързан с единия Arduino, като променяме потенциометъра на другия Arduino. За по-голяма простота използвахме единия модул nRF24L01 като предавател, а другият е приемник, но всеки модул може да бъде програмиран да изпраща и получава данни поотделно.
Схемата за свързване на модула nRF24L01 с Arduino е показана по-долу. За разнообразие използвах UNO за страната на приемника и Nano за страната на предавателя. Но логиката за свързване остава същата и за други Arduino платки като mini, mega също.
Приемна страна: Връзки на модул Arduino Uno nRF24L01
Както беше казано по-рано, nRF24L01 комуникира с помощта на SPI протокол. На Arduino Nano и UNO щифтовете 11, 12 и 13 се използват за SPI комуникация. Следователно свързваме MOSI, MISO и SCK щифтовете от nRF към щифтовете 11, 12 и 13 съответно. Щифтовете CE и CS могат да се конфигурират от потребителя, тук използвах пинове 7 и 8, но можете да използвате всеки пин, като промените програмата. Модулът nRF се захранва от 3.3V щифт на Arduino, който в повечето случаи ще работи. Ако не, може да се опита отделно захранване. Освен взаимодействието с nRF, аз също свързах серво мотор към щифт 7 и го захранвах през 5V щифт на Arduino. По същия начин схемата на предавателя е показана по-долу.
Страна на предавателя: Връзки на модул Arduino Nano nRF24L01
Връзките за предавателя също са едни и същи, освен това съм използвал потенциометър, свързан през 5V ad Ground pin на Arduino. Изходното аналогово напрежение, което ще варира от 0-5V, е свързано към щифта A7 на Nano. И двете платки се захранват през USB порта.
Работа с модул за безжичен приемо-предавател nRF24L01 +
За да накараме нашия nRF24L01 да работи без шум, може да помислим за следните неща. Работя по този nRF24L01 + от дълго време и научих следните точки, които могат да ви помогнат да не се ударите на стена. Можете да опитате тези, когато модулите не работят нормално.
1. Повечето модули nRF24L01 + на пазара са фалшиви. Евтините, които можем да намерим в Ebay и Amazon, са най-лошите (не се притеснявайте, с няколко ощипвания можем да ги накараме да работят)
2. Основният проблем е захранването, а не вашият код. Повечето кодове онлайн ще работят правилно, аз самият имам работещ код, който лично тествах. Уведомете ме, ако имате нужда от тях.
3. Обърнете внимание, защото модулите, отпечатани като NRF24L01 +, всъщност са Si24Ri (да, китайски продукт).
4. Клониращите и фалшивите модули ще консумират повече енергия, следователно не развивайте силовата си верига въз основа на таблица с данни nRF24L01 +, тъй като Si24Ri ще има висока консумация на ток около 250 mA.
5. Пазете се от пулсации на напрежението и токови пренапрежения, тези модули са много чувствителни и могат лесно да изгорят. (;-(изпържи 2 модула до момента)
6. Добавянето на няколко кондензатора (10uF и 0,1uF) към Vcc и Gnd на модула помага да направите вашето захранване чисто и това работи за повечето модули.
И все пак, ако имате проблеми, докладвайте в раздела за коментари или прочетете това или задайте въпросите си на нашия форум.
Също така проверете нашия първоначален проект за създаване на стая за чат с помощта на nRF24L01.
Програмиране nRF24L01 за Arduino
Използването на тези модули с Arduino беше много лесно, благодарение на лесно достъпната библиотека, създадена от maniacbug на GitHub. Кликнете върху връзката, за да изтеглите библиотеката като ZIP папка и да я добавите към вашата Arduino IDE, като използвате опцията Скица -> Включване на библиотека -> Добавяне . След добавяне на библиотеката можем да започнем програмиране за проект. Трябва да напишем две програми, едната е за страната на предавателя, а другата за страната на приемника. Но както казах по-рано, всеки модул може да работи както като предавател, така и като приемник. И двете програми са дадени в края на тази страница, в кода на предавателя опцията на приемника ще бъде коментирана, а в програмата на приемника кодът на предавателя ще бъде коментиран. Можете да го използвате, ако опитвате проект, в който модулът трябва да работи и двете. Работата на програмата е обяснена по-долу.
Както всички програми, ние започваме с включване на заглавните файлове. Тъй като nRF използва протокол SPI, ние включихме заглавката SPI, както и библиотеката, която току-що изтеглихме. Серво библиотеката се използва за управление на серво мотора.
#include
Следващият ред е важният ред, където инструктираме библиотеката за щифтовете CE и CS. В нашата електрическа схема сме свързали CE към щифт 7 и CS към щифт 8, така че задаваме линията като
RF24 myRadio (7, 8);
Всички променливи, които са свързани с RF библиотеката, трябва да бъдат декларирани като съставна променлива структура. В тази програма променливата msg се използва за изпращане и получаване на данни от RF модула.
структурен пакет { int msg; }; typedef struct пакет Package; Данни за пакета;
Всеки RF модул има уникален адрес, чрез който може да изпраща данни към съответното устройство. Тъй като тук имаме само една двойка, ние задаваме адреса на нула както в предавателя, така и в приемника, но ако имате множество модули, можете да зададете идентификатора на всеки уникален 6-цифрен низ.
байтови адреси = {"0"};
След това във функцията за настройка на празнотата ние инициализираме RF модула и настройваме да работи със 115 лента, която е без шум, а също така настройваме модула да работи в режим на минимална консумация на енергия с минимална скорост от 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 лента над WIFI сигнали myRadio.setPALevel (RF24_PA_MIN); // МИН мощност ниско ярост myRadio.setDataRate (RF24_250KBPS); // Минимална скорост myservo.attach (6); Serial.print („Настройката е инициализирана“); забавяне (500); }
void WriteData () функция записва данните, предадени към нея. Както беше казано по-рано, nRF има 6 различни тръби, към които можем да четем или записваме данни, тук използваме 0xF0F0F0F066 като адрес за запис на данни. От страна на приемника трябва да използваме същия адрес нафункцията ReadData (), за да получим записаните данни.
void WriteData () { myRadio.stopListening (); // Спрете да получавате и стартирайте transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Изпраща данни на този 40-битов адрес myRadio.write (& data, sizeof (data)); забавяне (300); }
void WriteData () функция чете данните и ги поставя в променлива. Отново от 6 различни тръби, използвайки които можем да четем или записваме данни тук, използвахме 0xF0F0F0F0AA като адрес за четене на данни. Това означава, че предавателят на другия модул е написал нещо на този адрес и следователно го четем от същия.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Коя тръба да чета, 40 битов Адрес myRadio.startListening (); // Спрете да предавате и започнете Reveicing ако (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Освен тези редове, останалите редове в програмата се използват за четене на POT и преобразуването му в 0 до 180 с помощта на функцията map и го изпращат към модула Receiver, където ние контролираме серво съответно. Не съм ги обяснявал ред по ред, тъй като вече научихме това в нашия урок за Servo Interfacing.
Управление на серво мотора с помощта на nRF24L01 безжично
След като сте готови с програмата, качете кода на предавателя и приемника (даден по-долу) на съответните платки Arduino и ги включете с USB порт. Можете също така да стартирате серийния монитор на двете платки, за да проверите каква стойност се предава и какво се получава. Ако всичко работи както се очаква, когато завъртите копчето POT от страната на предавателя, сервосистемата от другата страна също трябва да се завърти по съответния начин.
Цялостната работа на проекта е демонстрирана във видеото по-долу. Съвсем нормално е тези модули да не работят при първи опит. Ако сте се сблъскали с някакъв проблем, проверете отново кода и окабеляването и опитайте горните указания за отстраняване на проблеми Ако нищо не работи, публикувайте проблема си във форумите или в раздела за коментари и ще се опитам да ги разреша.