Olá pessoal. Estou começando a desenvolver o projeto de automação residencial, e desde o início gostaria de que fosse wireless. Estou começando com dois Arduinos UNO R3 +NRF24L01, onde um é o Master e recebe o comandos via modulo serial (no momento, pois a ideia depois é partir para o Android e comando por voz), na outra ponta fica outro UNOR3+NRF24L01 que vai acionar um módulo relé.

Já li varios blogs, ASSISTI VIDEOS,  ja tentei a biblioteca NRF24, agora estou usando a Network, mas nada de eu conseguir enviar o comando. Tenho certeza que meu erro está na hora de definir em qual node a informação deve seguir e todas as informações que fazem parte deste comando.... mas tá difícil de eu conseguir... minha cabeça fundiu... rsrsrsrs

Detalhes do projeto:

-Comando enviados por PC (posteriormente comandos por Smartphone via modulo wifi  ESP)

-Comunicação sem fio entre Arduinos via NRF24L01

-Controle de tomadas via módulos relé

-Controle de abertura e fechamento de cortinas (atualmente estou usando um módulo relé pois não adquiri o motor que será usado.

- Acionamento e desligamento de lâmpadas.

Vou postar a sketch do master e do slave1, se alguem puder me dar uma luz, agradeço.

>>>>>>>>>>>>>>>>>SKETCH MASTER

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

// Declaração do rádio nRF24L01(+) nas portas 9 e 10
RF24 radio(9,10);

// Rede usa o rádio
RF24Network network(radio);

// Endereço deste node
const uint16_t t_node = 0;

// Endereços dos outros nodes
const uint16_t r_node_A = 1;
const uint16_t r_node_B = 2;
const uint16_t r_node_C = 3;
const uint16_t r_node_D = 4;
const uint16_t r_node_E = 5;

// Declaração dos vetores que receberão os valores dos comandos para cada slave
int slave1[6];
int slave2[6];
int slave3[6];
int slave4[6];
int slave5[6];

//INDICE
// O QUE CADA SLAVE CONTROLA

// SLAVE1 // CONTROLE REMOTO, TOMADA MODEM, TOMADA NET, TOMADA TV, CORTINA ABRIR, CORTINA FECHAR


void setup() {
Serial.begin(9600);
SPI.begin();
radio.begin();
network.begin(/*canal*/ 90, /*endereço do node*/ t_node);

}

void loop() {
//Atualiza a rede
network.update();

while ( network.available() ){

switch (Serial.read()){
//RECEBER VALORES DO MONITOR

case 'abrircortina':
network.write(r_node_A,slave1[5],sizeof(1));
network.write(A,slave1[4],sizeof(0));
Serial.println("Abrindo Cortina");
break;

case 'fecharcortina':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[4],sizeof(1));
network.write(A,slave1[5],sizeof(0));
Serial.println("Fechando Cortina");
break;

case 'ligartv':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[3],sizeof(0));
Serial.println("TV Ligada");
break;

case 'desligartv':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[3],sizeof(1));
Serial.println("TV Desligada");
break;

case 'ligarmodem':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[2],sizeof(0));
Serial.println("Ligando Modem");
break;

case 'ligarmodem':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[2],sizeof(1));
Serial.println("Desligando Modem");
break;

case 'ligarnet':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[1],sizeof(0));
Serial.println("Ligando NET");
break;

case 'desligarnet':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[1],sizeof(1));
Serial.println("Ligando NET");
break;

case 'ligarnet':(
RF24NetworkHeader for A(r_node_A));
network.write(A,slave1[0],sizeof(0));
Serial.println("Ligando NET");
break;

}

>>>>>>>>>>>>>>>>SKETCH SLAVE1

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <RF24Network.h>
#include <RF24Network_config.h>
#include <Sync.h>

// Declaração do rádio nRF24L01(+) nas portas 9 e 10
RF24 radio(9,10);

// Rede usa o rádio
RF24Network network(radio);

// Endereço deste node
const uint16_t r_node_A = 1;

// Endereços dos outros nodes (que interessam)
const uint16_t t_node = 0;

// Declaração do vetor que receberá os valores dos comandos
int slave1[6]; // Mudamos os nomes dos vetores nos programas B e C para facilitar a identificação do programa adequado.


void setup() {
Serial.begin(9600);
SPI.begin();
radio.begin();
network.begin(/*channel*/ 90, /*node address*/ r_node_A);

// Pinos de cada um dos controlados

pinMode(8,OUTPUT); // pino FECHAR CORTINA
pinMode(7,OUTPUT); // pino ABRIR CORTINA
pinMode(6,OUTPUT); // pino TOMADA TV
pinMode(5,OUTPUT); // pino TOMADA MODEM
pinMode(4,OUTPUT); // pino TOMADA NET
pinMode(3,OUTPUT); // pino CONTROLE REMOTO

// Zerando todos os pinos para evitar problemas com curtos

digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);

}

void loop() {

//Atualiza a rede
network.update();

// CONTROLE REMOTO
if (slave1[0] == 0 ){
digitalWrite(3,HIGH); }
else {
digitalWrite(3,LOW); }

// TOMADA NET
if (slave1[1] == 0 ){
digitalWrite(4,HIGH); }
else {
digitalWrite(4,LOW); }

// TOMADA MODEM
if (slave1[2] == 0 ){
digitalWrite(5,HIGH); }
else {
digitalWrite(5,LOW); }


// TOMADA TV
if (slave1[3] == 0 ){
digitalWrite(6,HIGH); }
else {
digitalWrite(6,LOW); }

//MOTOR CORTINA ABRIR
if (slave1[4] == 0 ){
digitalWrite(7,HIGH); }
else {
digitalWrite(7,LOW); }

//MOTOR CORTINA FECHAR
if (slave1[5] == 0 ){
digitalWrite(8,HIGH); }
else {
digitalWrite(8,LOW); }
}

Exibições: 356

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço