LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Projectos em desenvolvimento => Tópico iniciado por: kast em 14 de Outubro de 2012, 20:16

Título: Domótica - NRF24L01, Sensor de temperatura, Sensor de humidade, etc - (Nó)
Enviado por: kast em 14 de Outubro de 2012, 20:16
Boas

Andei aqui durante muito tempo para construir/montar uma rede de domótica.
Achei que a melhor forma de o fazer seria utilizando um arduino minimalista, que seria apenas orientado para essa função.
Acabei por construir o kastduino que já vai na versão 3.02 e que ainda tem muito para evoluir. Agradeço ao pessoal aqui do fórum que me tem ajudado em muito.

Neste momento cada nó é composto por:

1x Kastduino (podem seguir o desenvolvimento do arduino aqui: http://lusorobotica.com/index.php?topic=3080.0 (http://lusorobotica.com/index.php?topic=3080.0))
1x NRF24L01
1x dc-boost

Código do Nó:
Código: [Seleccione]
/* NO DE DOMOTICA v0.05
 
 */

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


//
// Configuração do NRF24L01
//

 
RF24 radio(10,9); // Define o RF24L01 radio em bus SPI bus mais os pinos 10 (CE) & 9 (CSN)

struct payload_t
 {
   byte id;                  // ID do nó
   unsigned long bstatus;    // Estado da bateria/pilha
   unsigned long n_tms;      // Numero de transmissões
   unsigned long n_ftms;     // Numero de falhas de transmissoes
   payload_t(void): id(),bstatus(),n_tms(),n_ftms() {}
 };

payload_t payload;
long bat;

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Radio pipe addresses for the 2 nodes to communicate.

void setup(void)
{
  payload.id=1; //alterar o numero do no aqui
  payload.n_tms=0;
  payload.n_ftms=0;
  Serial.begin(57600);

  pinMode(A0, INPUT);
  Serial.print("DOMOTICA NO\n\r");
  Serial.print("\n\r");
 
  radio.begin(); 
  radio.setChannel(101);   
  radio.setAutoAck(true);
  radio.setDataRate(RF24_250KBPS);
 
  radio.setPayloadSize(sizeof(payload)); // define tamanho máximo da var a transmitir
  radio.setRetries(15,15); //define n de tentativas e tempo entre elas
 
//falta definir a potência de emissão
 

  radio.openReadingPipe(1,pipes[0]); // abre o pipe para receber
  radio.openWritingPipe(pipes[1]);  // abre o pipe para enviar
 
  radio.printDetails(); //Mostra os detalhes do radio
  Serial.print("ID do nó ");
  Serial.print(payload.id);
  Serial.print("\n\r");
 
  radio.startListening(); // inicia a escuta
  radio.stopListening();  // Necessario para comecar a enviar dados
 
  Serial.print("\n\rA escuta ...\n\r");
  Serial.print("\n\r");
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
}


void loop(void)
{
 
  bat=analogRead(A0);

  payload.bstatus=bat*5080/1023; //envia o resultado em milivolts //falta mudar para percentagem
 
  radio.powerUp(); //necessario devido ao power down no fim do loop
 
  Serial.print("Enviando... ");
  bool ok = radio.write( &payload , sizeof(payload));
  payload.n_tms++;
  if (ok)
  {
     Serial.print("ok ");

     Serial.print("ID ");
     Serial.print(payload.id);
     Serial.print(" Bateria ");
     Serial.print(payload.bstatus);
     Serial.print(" Transmissões ");
     Serial.print(payload.n_tms);
     Serial.print(" Falhas de transmissoes ");
     Serial.println(payload.n_ftms);   
     
     digitalWrite(8, HIGH);
     delay(1);
     digitalWrite(8, LOW);
  }
  else
  {
     payload.n_ftms++;
     Serial.println("Erro na transmissão !!!");
  }


radio.powerDown(); // coloca o radio em stand-by
delay(10000);       // espera 5 segundos

}
Não tenho mais nada ligado ao nó. Neste momento apenas se encontram a transmitir para servidor:

1- ID
2- Estado da bateria
3- Número de transmissões efectuadas
4- Número de transmissões falhadas

Próximos updates:
- Colocar o kastduino em stand-by entre o envio dos dados.
- Gravar na EEPROM o id, número de transmissões efectuadas e número de transmissões falhadada.

Próximos upgrades:
- Shield para colocar sensor de temperatura, humidade, luminosidade, PIR e sensor de gases.
Título: Re: Domótica - NRF24L01, Sensor de temperatura, Sensor de humidade, etc - (Nó)
Enviado por: senso em 14 de Outubro de 2012, 23:28
Conheces os JeeNodes do JeeLabs?
É basicamente o que queres fazer, mas muito, muito mais maduro, e com uma quantidade de utilizadores razoavel.
Título: Re: Domótica - NRF24L01, Sensor de temperatura, Sensor de humidade, etc - (Nó)
Enviado por: kast em 14 de Outubro de 2012, 23:32
Conheço, já há muito tempo que sigo o blog.

A segunda versão do kastduino levava um RFM12B. Mas tinha alguns problemas de funcionamento.
Também experimentei com jeenodes mas não são tão estáveis como apregoados.
Também tenho alguns RFM12, mas os NRF24L01 só pecam mesmo pelo fraco alcance.
Os NRF24L01 parecem-me muito mais faceis de utilizar do que os RFM12.
E claro os RFM12 custam mais do triplo dos NRF24L01.

Título: Re: Domótica - NRF24L01, Sensor de temperatura, Sensor de humidade, etc - (Nó)
Enviado por: npereira em 25 de Outubro de 2012, 11:34
Boas Kast,

qual o alcance máximo que consegues com os NRF24L01? Tenho um projecto idêntico ao teu a funcionar com um WebServer (http://picserver.serveftp.com/) baseado numa PIC(com stack TCP/IP da microchip) + ENC28j60 e neste momento estou a fazer um log das temperaturas adquidas  (http://weather.nelsonpereira.netne.net) e tava a pensar precisamente nesses módulos wireless para meter os sensores à distância. Incluindo o RS que está no exterior:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fnelsonpereira.netne.net%2Fwp-content%2Fuploads%2F2012%2F09%2Fmeteoesta%C3%A7%C3%A3o.jpg&hash=985cec80d51facf1f70e29a5889621edfa67754f)
Título: Re: Domótica - NRF24L01, Sensor de temperatura, Sensor de humidade, etc - (Nó)
Enviado por: kast em 04 de Janeiro de 2013, 20:13
Boas

Primeiro que tudo desculpa pelo "GRANDE" atrasado.

Segundo, com os módulos normais já consegui uns 50-70m com linha de vista, mas já adquiri uns módulos melhores  embora ainda não os tenha testado, mas de acordo com as especificações dão cerca de 1km com 250kbps.