- Знайомство з RF модулем nRF24L01
- Взаємодія nRF24L01 з Arduino
- Сторона приймача: з’єднання модуля Arduino Uno nRF24L01
- Сторона передавача: Підключення модуля Arduino Nano nRF24L01
- Робота з модулем бездротового приймача nRF24L01 +
- Програмування nRF24L01 для Arduino
- Керування сервомотором за допомогою бездротової мережі nRF24L01
У той час як Інтернет речей (IoT), Індустрія 4.0, Зв’язок від машини до машини тощо стають все більш популярними, потреба в бездротовому зв'язку стала актуальною, і все більше машин / пристроїв розмовляють між собою в хмарі. Дизайнери використовують багато бездротових систем зв'язку, таких як Bluetooth Low Energy (BLE 4.0), Zigbee, Wi-Fi модулі ESP43, РЧ модулі 433 МГц, Lora, nRF тощо, і вибір середовища залежить від типу програми, в якій він використовується.
Серед усього популярного бездротового середовища для зв'язку в локальній мережі є nRF24L01. Ці модулі працюють на частоті 2,4 ГГц (діапазон ISM) зі швидкістю передачі від 250 Кбіт / с до 2 Мбіт / с, що дозволено в багатьох країнах і може використовуватися в промислових та медичних цілях. Також стверджується, що за допомогою належних антен ці модулі можуть передавати та приймати на відстань 100 метрів між ними. Цікаво правильно !!? Отже, у цьому підручнику ми дізнаємося більше про ці модулі nRF24l01 та про те, як зв’язати їх із платформою мікроконтролера, такою як Arduino. Ми також поділимось деякими рішеннями для проблем, які часто зустрічаються під час використання цього модуля.
Знайомство з RF модулем nRF24L01
У модулях NRF24L01 є приймально-передавального модулями, тобто кожен модуль може відправляти і отримувати дані, але так як вони напівдуплексних вони можуть або надсилати та отримувати дані одночасно. Модуль має загальну мікросхему nRF24L01 від північних напівпровідників, яка відповідає за передачу та прийом даних. ІЦ взаємодіє з використанням протоколу SPI, і, отже, може бути легко пов'язаний з будь-якими мікроконтролерами. З Arduino стає набагато простіше, оскільки бібліотеки доступні. У терморегулятори з стандартного модуля NRF24L01 показаний нижче
Модуль має робочу напругу від 1,9 В до 3,6 В (зазвичай 3,3 В) і споживає дуже менше струму лише 12 мА під час нормальної роботи, що робить його батареєю ефективним і, отже, може працювати навіть на монетних комірках. Незважаючи на те, що робоча напруга становить 3,3 В, більшість висновків є толерантними до 5 В, і, отже, вони можуть бути безпосередньо пов'язані з мікроконтролерами 5 В, такими як 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,3 В на Arduino, який в більшості випадків буде працювати. Якщо ні, можна спробувати окреме джерело живлення. Окрім взаємодії з nRF, я також підключив сервомотор до виводу 7 і подав його через 5-контактний вивід на Arduino. Аналогічно схема передавача показана нижче.
Сторона передавача: Підключення модуля Arduino Nano nRF24L01
З'єднання для передавача також однакові, крім того, я використовував потенціометр, підключений через 5-контактний контактний заземлювач Arduino. Вихідна аналогова напруга, яка варіюватиметься від 0-5В, підключена до виводу A7 нано. Обидві плати живляться через порт USB.
Робота з модулем бездротового приймача nRF24L01 +
Однак для того, щоб наш nRF24L01 працював без шуму, ми могли б розглянути наступні речі. Я працював над цим nRF24L01 + довгий час і вивчив наступні моменти, які можуть допомогти вам потрапити в стіну. Ви можете спробувати їх, коли модулі не працювали нормально.
1. Більшість модулів nRF24L01 + на ринку є фальшивими. Найдешевші з них, які ми можемо знайти на Ebay та Amazon, є найгіршими (не хвилюйтеся, за декілька налаштувань ми можемо змусити їх працювати)
2. Основна проблема - це джерело живлення, а не ваш код. Більшість кодів в Інтернеті будуть працювати належним чином, я сам маю робочий код, який я особисто протестував. Повідомте мене, якщо вони вам потрібні.
3. Зверніть увагу, оскільки модулі, надруковані як NRF24L01 +, насправді є Si24Ri (так, китайський продукт).
4. Клонові та підроблені модулі споживають більше енергії, отже, не розробляйте свою схему живлення на основі таблиці даних nRF24L01 +, оскільки Si24Ri матиме високе споживання струму близько 250 мА.
5. Остерігайтеся пульсацій напруги та стрибків струму, ці модулі дуже чутливі і можуть легко згоріти. (;-(поки що підсмажили 2 модулі)
6. Додавання пари конденсаторів (10 мкФ і 0,1 мкФ) через Vcc та Gnd модуля допомагає зробити ваш запас чистим, і це працює для більшості модулів.
Однак якщо у вас виникли проблеми, повідомте про розділ коментарів, прочитайте це або задайте свої запитання на нашому форумі.
Також перевірте наш попередній проект зі створення кімнати чату за допомогою nRF24L01.
Програмування nRF24L01 для Arduino
Використовувати ці модулі з Arduino було дуже просто завдяки легкодоступній бібліотеці, створеній maniacbug на GitHub. Клацніть на посилання, щоб завантажити бібліотеку як ZIP-папку та додати її до своєї Arduino IDE за допомогою опції Ескіз -> Включити бібліотеку -> Додати бібліотеку.ZIP . Після додавання бібліотеки ми можемо розпочати програмування для проекту. Ми повинні написати дві програми, одна для сторони передавача, а інша для сторони приймача. Однак, як я вже говорив раніше, кожен модуль може працювати як передавач, так і приймач. Обидві програми наведені в кінці цієї сторінки, в коді передавача коментуватиметься варіант приймача, а в програмі приймача кодуватиметься передавач. Ви можете використовувати його, якщо ви намагаєтесь проект, в якому модуль повинен працювати як обидва. Робота програми пояснюється нижче.
Як і всі програми, ми починаємо з включення файлів заголовків. Оскільки nRF використовує протокол SPI, ми включили заголовок SPI, а також бібліотеку, яку ми щойно завантажили. Сервобібліотека використовується для управління сервомотором.
#включати
Наступний рядок - важливий рядок, де ми вказуємо бібліотеці про висновки CE та CS. На нашій електричній схемі ми підключили CE до виводу 7, а CS до виводу 8, тому ми встановили лінію як
RF24 myRadio (7, 8);
Усі змінні, пов'язані з RF-бібліотекою, повинні бути оголошені як складова структура змінних. У цій програмі змінна msg використовується для надсилання та отримання даних від RF-модуля.
Структурний пакет { int msg; }; typedef struct package Package; Дані пакету;
Кожен RF-модуль має унікальну адресу, за допомогою якої він може надсилати дані на відповідний пристрій. Оскільки ми маємо тут лише одну пару, ми встановлюємо адресу нульовою як для передавача, так і для приймача, але якщо у вас є кілька модулів, ви можете встановити ідентифікатор на будь-який унікальний 6-значний рядок.
байтові адреси = {"0"};
Далі всередині функції налаштування порожнечі ми ініціалізуємо RF-модуль і налаштовуємось на роботу з діапазоном 115 без шуму, а також налаштовуємо модуль на роботу в режимі мінімального споживання енергії з мінімальною швидкістю 250 Кбіт / с.
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 (); // Зупинити отримання та розпочати передачу myRadio.openWritingPipe (0xF0F0F0F066); // Надсилає дані за цією 40-бітною адресою myRadio.write (& data, sizeof (data)); затримка (300); }
void Функція WriteData () зчитує дані та поміщає їх у змінну. Знову ж таки, з 6 різних каналів, за допомогою яких ми можемо читати або записувати дані, ми використовували 0xF0F0F0F0AA як адресу для зчитування даних. Це означає, що передавач іншого модуля щось написав на цю адресу, і, отже, ми читаємо це з тієї ж адреси.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Який конвеєр прочитати, 40 біт Адреса myRadio.startListening (); // Зупинити передачу та розпочати перевірку, якщо (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Окрім цих рядків, інші рядки програми використовуються для зчитування POT і перетворення його в 0 до 180 за допомогою функції map і відправляють його в модуль приймача, де ми відповідно контролюємо сервопривід. Я не пояснював їх рядком за рядком, оскільки ми вже дізналися про це в нашому посібнику з сервоінтерфейсу.
Керування сервомотором за допомогою бездротової мережі nRF24L01
Після того, як ви будете готові до програми, завантажте код передавача та приймача (наведений нижче) на відповідні плати Arduino та увімкніть їх через порт USB. Ви також можете запустити послідовний монітор обох плат, щоб перевірити, яке значення передається, а що отримується. Якщо все працює належним чином, коли ви повертаєте регулятор POT на стороні передавача, сервопривід на іншій стороні також повинен повернутися відповідно.
Повна робота проекту продемонстрована у відео нижче. Цілком нормально, якщо ці модулі не працюють з першої спроби. Якщо у вас виникли проблеми, перевірте код та проводку ще раз і спробуйте наведені вище вказівки щодо усунення несправностей. Якщо нічого не виходить, опублікуйте свою проблему на форумах або в розділі коментарів, і я спробую її вирішити.