Flasheroff

Flasheroff

vk.com/nes_petr
Пикабушник
94 рейтинг 0 подписчиков 0 подписок 2 поста 0 в горячем
Награды:
5 лет на Пикабу
3

Работа с модулем NRF24L01,8 канальное управление (РЕЛЕ)

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

Использую Arduino Mega 2560(выступает в качестве платы исполнения(приёмник)), Arduino Nano(выступает в качестве платы управления(передатчик)), два модуля NRF24L01 и 8-релейный модуль.

Кстати о подключении NRF24L01 к Arduino Nano: CE-D9, CSN-D10, SCK-D13, MO-D11, MI-D12,а к Arduino Mega 2560: CE-D10, CSN-D53, SCK-D52, MO-D51, MI-D50.(У меня модули подключены через специальные стабилизирующие платы на 3.3 вольта).

На пинах Arduino Megs 2560  2,3,4,5,6,7,8,9 подключены реле,а на передатчике Arduino Nano кнопки подключены к пинам D2,D3,D4,D5,D6,D7,D8,A0(Со стягивающим резистором к 5В).(Все пины замыкаются на землю).

Код:

RX (приёмник):

#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

RF24 radio(10,53); // "создать" модуль на пинах 9 и 10 Для Уно 9,53 для Меги


byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"}; //возможные номера труб

byte recieved_data[8];

byte relay1 = 2; // реле на 2 цифровом

byte relay2 = 3; // реле на 3 цифровом

byte relay3 = 4; // реле на 4 цифровом

byte relay4 = 5; // реле на 5 цифровом

byte relay5 = 6; // реле на 6 цифровом

byte relay6 = 7; // реле на 7 цифровом

byte relay7 = 8; // реле на 8 цифровом

byte relay8 = 9; // реле на 9 цифровом

void setup(){


pinMode(relay1, OUTPUT); // настроить пин реле как выход

pinMode(relay2, OUTPUT); // настроить пин реле как выход

pinMode(relay3, OUTPUT); // настроить пин реле как выход

pinMode(relay4, OUTPUT); // настроить пин реле как выход

pinMode(relay5, OUTPUT); // настроить пин реле как выход

pinMode(relay6, OUTPUT); // настроить пин реле как выход

pinMode(relay7, OUTPUT); // настроить пин реле как выход

pinMode(relay8, OUTPUT); // настроить пин реле как выход


radio.begin(); //активировать модуль

radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0,15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах


radio.openReadingPipe(1,address[0]); //хотим слушать трубу 0

radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)


radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS

//должна быть одинакова на приёмнике и передатчике!

//при самой низкой скорости имеем самую высокую чувствительность и дальность!!


radio.powerUp(); //начать работу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

}


void loop() {

byte pipeNo;

while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб

radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал

digitalWrite(relay1, recieved_data[0]); // подать на реле сигнал с 0 места массива

//то бишь 0 или 1

digitalWrite(relay2, recieved_data[1]); // подать на реле сигнал с 1 места массива

//то бишь 0 или 1

digitalWrite(relay3, recieved_data[2]); // подать на реле сигнал с 2 места массива

//то бишь 0 или 1

digitalWrite(relay4, recieved_data[3]); // подать на реле сигнал с 3 места массива

//то бишь 0 или 1

digitalWrite(relay5, recieved_data[4]); // подать на реле сигнал с 4 места массива

//то бишь 0 или 1

digitalWrite(relay6, recieved_data[5]); // подать на реле сигнал с 5 места массива

//то бишь 0 или 1

digitalWrite(relay7, recieved_data[6]); // подать на реле сигнал с 6 места массива

//то бишь 0 или 1

digitalWrite(relay8, recieved_data[7]); // подать на реле сигнал с 7 места массива

//то бишь 0 или 1

}

}




TX(передатчик):

#include <SPI.h> // библиотека для работы с шиной SPI

#include "nRF24L01.h" // библиотека радиомодуля

#include "RF24.h" // ещё библиотека радиомодуля


RF24 radio(9, 10);

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte transmit_data[8];


byte button1 = 2; // кнопка на 2 цифровом

byte button2 = 3; // кнопка на 3 цифровом

byte button3 = 4; // кнопка на 4 цифровом

byte button4 = 5; // кнопка на 5 цифровом

byte button5 = 6; // кнопка на 6 цифровом

byte button6 = 7; // кнопка на 7 цифровом

byte button7 = 8; // кнопка на 8 цифровом

int button8 = 0; // кнопка на 0 аналоговом


void setup() {


Serial.begin(9600); //открываем порт для связи с ПК

radio.begin(); //активировать модуль

radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 15); //время между попыткой достучаться, число попыток

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах


pinMode(button1, INPUT_PULLUP); // настроить пин кнопки

pinMode(button2, INPUT_PULLUP); // настроить пин кнопки

pinMode(button3, INPUT_PULLUP); // настроить пин кнопки

pinMode(button4, INPUT_PULLUP); // настроить пин кнопки

pinMode(button5, INPUT_PULLUP); // настроить пин кнопки

pinMode(button6, INPUT_PULLUP); // настроить пин кнопки

pinMode(button7, INPUT_PULLUP); // настроить пин кнопки

pinMode(button8, INPUT_PULLUP); // настроить пин кнопки


radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных

radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS

//должна быть одинакова на приёмнике и передатчике!

//при самой низкой скорости имеем самую высокую чувствительность и дальность!

radio.powerUp(); //начать работу

radio.stopListening(); //не слушаем радиоэфир, мы передатчик

}

void loop() {


transmit_data[0] = digitalRead(button1); // сигнал с кнопки

transmit_data[1] = digitalRead(button2); // сигнал с кнопки

transmit_data[2] = digitalRead(button3); // сигнал с кнопки

transmit_data[3] = digitalRead(button4); // сигнал с кнопки

transmit_data[4] = digitalRead(button5); // сигнал с кнопки

transmit_data[5] = digitalRead(button6); // сигнал с кнопки

transmit_data[6] = digitalRead(button7); // сигнал с кнопки

transmit_data[7] = analogRead(button8); // сигнал с кнопки


radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив

}

Показать полностью 3
2

Нужна помощь с модулем NRF24L01

Итак,история такая,у меня есть Arduino Mega на микроконтроллере ATMEGA2560, Arduino Nano (для тех кто незнал таже Arduino Uno),два NRF24L01,кнопки и 8-релейный модуль.

Из этих составляющих у меня получилось осуществить управление только трёх реле из восьми.

Далее в скетче где написано про массив принятых данных в RX цифра 3,я её менял на большее значение,после этого всё переставало работать (ну и в TX тоже менял соответственно)

TX

#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"


RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно

//RF24 radio(9,53); // для Меги


byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб


byte button1 = 3; // кнопка на 3 цифровом

byte button2 = 4; // кнопка на 4 цифровом

byte button3 = 5; // кнопка на 3 цифровом


byte transmit_data[3]; // массив, хранящий передаваемые данные

byte latest_data[3]; // массив, хранящий последние переданные данные

boolean flag; // флажок отправки данных


void setup() {

Serial.begin(9600); //открываем порт для связи с ПК


pinMode(button1, INPUT_PULLUP); // настроить пин кнопки

pinMode(button2, INPUT_PULLUP); // настроить пин кнопки

pinMode(button3, INPUT_PULLUP); // настроить пин кнопки


radio.begin(); //активировать модуль

radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах


radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных

radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)


radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS

//должна быть одинакова на приёмнике и передатчике!

//при самой низкой скорости имеем самую высокую чувствительность и дальность!!


radio.powerUp(); //начать работу

radio.stopListening(); //не слушаем радиоэфир, мы передатчик

}


void loop() {


transmit_data[0] = digitalRead(button1); // сигнал с кнопки

transmit_data[1] = digitalRead(button2); // сигнал с кнопки

transmit_data[2] = digitalRead(button3); // сигнал с кнопки


for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов

if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data

flag = 1; // поднять флаг отправки по радио

latest_data[i] = transmit_data[i]; // запомнить последнее изменение

}

}


if (flag == 1) {

radio.powerUp(); // включить передатчик

radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио

flag = 0; //опустить флаг

radio.powerDown(); // выключить передатчик

}

RX

#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

RF24 radio(9, 53); // "создать" модуль на пинах 9 и 10 Для Уно

//RF24 radio(9,53); // для Меги


byte recieved_data[3]; // массив принятых данных

byte relay1 = 2; // реле на 2 цифровом

byte relay2 = 3; // реле на 3 цифровом

byte relay3 = 4; // реле на 4 цифровом


byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб


void setup() {

Serial.begin(9600); //открываем порт для связи с ПК


pinMode(relay1, OUTPUT); // настроить пин реле как выход

pinMode(relay2, OUTPUT); // настроить пин реле как выход

pinMode(relay3, OUTPUT); // настроить пин реле как выход


radio.begin(); //активировать модуль

radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах


radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0

radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)


radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS

//должна быть одинакова на приёмнике и передатчике!

//при самой низкой скорости имеем самую высокую чувствительность и дальность!!


radio.powerUp(); //начать работу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

}


void loop() {

byte pipeNo;

while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб

radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал

digitalWrite(relay1, recieved_data[0]); // подать на реле сигнал с 0 места массива

//то бишь 0 или 1

digitalWrite(relay2, recieved_data[1]); // подать на реле сигнал с 0 места массива

//то бишь 0 или 1

digitalWrite(relay3, recieved_data[2]); // подать на реле сигнал с 0 места массива

//то бишь 0 или 1


}

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества