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); }
}
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por