Comunicação RF 433

Olá Srs,

Apareço com mais um problema! E desta vez, não sei nem por onde começar :blush:

Vou explicar o mais detalhado possível.
Terei 4 arduinos, todos irão ter os módulos RX e TX 433Mhz
Cada um deles terá:

  • led verde (indicando que esta ligado)
  • led vermelho (piscará quando estiver em uso)
  • Sensor Doppler microwave (parecido com aqueles de portas automáticas de shoppings). Emite um sinal igual aos pushbutton quando utilizado con a instrução input_pullup.

Como a coisa deve funcionar:
Quando o sensor de um deles detectar movimento por mais de 3 segundos, ele deve emitir um sinal para os outros arduinos e ‘dizer’ que devem se alarmar por um período de 60segundos. O led vermelho de cada um deles começa a piscar por esse tempo, inclusive o que avisou do alarme. Após o termino do alarme, todos devem voltar ao estado de repouso (somente com o led verde acesso. Aliás, este led nunca deve se apagar) e prontos para emitir ou receber um novo alarme caso algum deles tenha o seu sensor ativado por mais de 3 segundos.

Fiz este esquema para tentar melhorar o entendimento.

Os itens em amarelo, seriam como 2 eventos aguardando por sua ativação:

  • Radar Doppler - Caso o arduino receba o sinal do radar por mais de 3 segundos, deve entender que precisa enviar um sinal rf para os outros arduinos. Todos que estiverem ao alcance do sinal, devem se alarmar
  • Sinal RF recebido de outro arduino, se alarma pelo período de 60 segundos.

(Dúvida: não sei se é possível realizar 2 operações ao mesmo tempo no arduino, mas caso um deles já esteja alarmado por ter recebido o sinal para se alarmar. E por algum motivo o radar deste arduino é acionado, ele conseguiria transmitir o sinal para outros arduinos ou precisaria terminar o alarme antes de fazer qualquer novo trabalho? )

Fiz este código inicial, que daqui sairia todo o resto. O FernandoGarcia me ajudou a solucionar um detalhe que tinha. Mas como disse, não sei por onde começar para implantar esta idéia.

int Led_red = 5;        
int Led_green = 3;
int botao = 4;
unsigned long millis_antes = 0;

void setup()
{
  pinMode(Led_red, OUTPUT);     
  pinMode(Led_green, OUTPUT);   
  pinMode(botao, INPUT_PULLUP);
  digitalWrite(Led_green, HIGH);
}
void loop()
{
  if(digitalRead(botao) == false)
  {
    millis_antes = millis();
  }
  while(digitalRead(botao) == false)
{
   if((millis() - millis_antes) > 3000){
   alarma();
   break;
   }
   }
}

void alarma() {               
  for (int x=0; x<5; x++)     
  {                           
    digitalWrite(Led_red, HIGH);
    delay(500);                 
    digitalWrite(Led_red, LOW); 
    delay(500);
  }
  delay(100);                   
  digitalWrite(Led_red, HIGH);  
  delay(100);                   
  digitalWrite(Led_red, LOW);   
}

Obrigado e espero ter explicado de forma clara.

Legal a cinemática do seu projeto, me lembrou as cameras de segurança do jogo pra PS1 Metal Gear solid.
A ideia por trás do miilis() para tarefas concorrentes, é a ideal mas a implementação é pesada, a cada verificação tem que atualizar uma variavel de 4 bytes e depois compara-la para cada função.
refaça seu codigo com o seguinte, um delay no loop de 250ms, entao os 60s viram 240 unidades de 250ms, 3 segundos viram 12,
tarefa 1: (dentro do loop)

if (pino_sensor) byte timer1++;
else timer=0;

if (timer1>=12)
led_vermelho_on
ativado=1
envia sinal aos outros

tarefa 2: alarme 60s
if (timer2_ativo=1) timer2++
if ativado=1 ( timer2_ativo=1; timer2=0)
if (timer2>=240) timer2_Ativo=0; led verde on;

depois que esse metodo funcionar pode jogar ele dentro de um interrupt de algum timer ocioso, e configura-lo para estourar a cada 250 ms, deixando o loop livre para outras tarefas.
alguns links:
http://vonkonow.com/wordpress/2012/04/d1/
http://www.romanblack.com/RF/cheapRFmodules.htm
http://www.romanblack.com/blacknet/blacknet.htm

Olá Fabio,

Verdade, o modo é praticamente o mesmo que aquelas cameras do MGS do PS1. Bons tempos!

Entendi a metade do que me disse, a outra metade precisarei estudar. Não sei programar bem em arduino, mas vamos ver no que vai dar.

Obrigado pelas dicas!

Se alguém mais puder contribuir, fico grato!

Godoy

Que rádio e biblioteca vai usar?

Olá Fernando!

Nada disso foi definido todavia. O que me sugere ?

Sei que o 315 é ótimo para ambiente aberto por ter ondas largas. Já o 433 é melhor para ambiente fechado. Esta aplicação será voltada para ambiente externo, ou seja, me imagino que será o 315. A programação de ambos dá no mesmo ?

Obrigado!

Não estou falando da frequência.

Estou falando do modelo.

No meu projeto eu uso o RFM12B.

http://jeelabs.net/projects/hardware/wiki/RFM12B_Board

Se olhar para o exemplo "pingpong" da jeelib.h vai encontrar o que precisa.

Foi mal pela resposta! Sou crú no ramo de comunicação :(

Achei essas placas no ebay, são bem feitas pelas fotos!

O alcance delas é longo ?

Veja este link: https://lowpowerlab.com/shop/index.php?_route_=moteino-r4

Open air range:

RFM69W: 915Mhz and 868Mhz have about 300-400m range in open air (tested at 55Kbps) RFM12B reaches about 150m (tested at 38.2kbps) Longer range is achievable by tweaking the library settings (lowering the bitrate and fine tuning the RX bandwidth) Here is a thread that shows some RFM12B vs RFM69 testing at various bit rates This forum thread reveals a 1.5mile range on RFM69 using a dipole antenna at 1.2kbps!