É possivel que emissor (código binário) e receptor (código binário) funcionem em um único Arduino?

Olá amigos de Garagem!

Sou mega iniciante no mundo do Arduíno e através de uma dificuldade entrei neste Laboratório.

Tenho uma situação que parece fácil mas se torna difícil para eu que sou iniciante!

Imagine que tenho uma guilhotina e quando ela se move é um perigo e preciso tomar uma ação!

*Já tentei utilizar sensor IR e receptor IR mas tenho problema quando o sol bate diretamente e o receptor recebe IR e o aviso acontece sem que a guilhotina se mova!

 *Já tentei colocar um emissor IR de frente para o receptor IR e o aviso acontece quando utilizo rádio comunicador próximo!

Foi ai que tive a ideia de utilizar o sinal codificado pelo emissor (um sinal binário utilizado por controle remoto) e quando o receptor receber somente o código é que ele executa a função de aviso (acender um LED por exemplo). Desta maneira eu conseguiria evitar todas as interferências citadas acima.

É possivel que emissor (código binário) e receptor (código binário) funcionem em um único Arduino?

        Emissor pisca em um código binário único;

        Arduino executa uma função somente quando o receptor IR recebe este único código binário;

Eu já consegui fazer com dois arduinos mas não com apenas um.

Exibições: 235

Responder esta

Respostas a este tópico

Olá.

 Possivel é, mas é exagero.

 Se vc piscar ele, algo como:

Acende, delay, verifica se está aceso, delay, verifica dnovo se esta aceso, delay, verifica mais uma vez se está aceso, delay, apaga, delay, verifica se está apagado, delay, verifica se está apagado, delay, verifica dnovo se está apagado, delay, repete.

E contar 6 oks (para o exemplo) de forma que ele pisque e vc verifique na entrada um sinal piscando na frequencia que vc mesmo está emitindo acredito que baste.

É mais ou menos assim que os bons sensores oticos trabalham. Eles ainda tem armadilhas óticas (um caninho de cada lado) para pegar apenas luz da direção certa. 

Obrigado pela resposta!

Então eu devo piscar o emissor IR com uma determinada frequência, descubro esta frequência como se eu estivesse reconhecendo um botão de controle remoto e coloco isso no programa?

É possivel piscar em uma frequência "inventada" sem usar função delay? Isso seria legal!!

Quando coloco dois arduinos funciona muito bem pois escolho um binário para ele repetir continuamente e o receptor recebe somente este binário e executa! Eu só não entendo muito porque não posso em um único arduino.

Se vc mesmo gera e le a frequencia é mais fácil fazer sincronizado mesmo.

Para evitar o delay() vc pode usar uma interrupção de tempo.

Algo assim:

configura um timer para interromper, vide:

http://labdegaragem.com/forum/topics/d-vidas-com-a-library-timerone

O ideal seria ter logo de cara na interrupção um if() para ver se vc comandou por ultimo acender ou apagar. Se foi acender verifique se o receptor corresponde a aceso. Se foi apagar verifique se corresponde a apagado.

Se bateu vc incrementa um contador. Se não bateu vc zera.

No programa principal vc considera fechado só se o contador atingir 10 acertos. 

Algo assim.

Essa frequencia vc escolhe. Algo em torno de 400Hz a 1KHz deveria funcionar bem.

Depende do led que vc está usando.

Estou imaginando que vc está usando um par de emissor e receptor tipico para obstáculo (chave otica de fim de curso)

Se estiver usando um par para controle remoto mesmo o certo seria emitir na frequencia do filtro do receptor, que é por ex 38KHz. Tem que ver seu modelo. E esses 38KHz serem ligados e desligados. Complica. O receptor apenas recebe o ligado e desligado (demodulado).

Ola Eduardo obrigado mesmo!

Estou utilizando um receptor de IR com três pernas e o meu código está assim:

#include <IRremote.h>
int IR_Recv = 11; //Pino OUT do Receptor Infravermelho (IR)
int ledVermelho = 3;

IRrecv irrecv(IR_Recv);
decode_results results;

void setup(){
pinMode(8,OUTPUT);
Serial.begin(9600); //iniciamos a comunicacao serial
irrecv.enableIRIn(); //inicia o receptor infravermelho (IR)
pinMode(ledVermelho, OUTPUT); // configuramos o pino digital como saída

}

void loop(){
if( (((int)(millis() / 100)) % 2) == 1 ){
digitalWrite(8, !digitalRead(8));
}
//decodifica a entrada do receptor infravermelho
if (irrecv.decode(&results)){
long int decCode = results.value;
Serial.println(results.value);

switch (results.value){
case 4255908176: //quando o codigo ao lado aparece acende o LED
digitalWrite(ledVermelho, HIGH);
break;
case 3772811383: //quando o codigo ao lado aparece apaga o LED
digitalWrite(ledVermelho, LOW);
break;
}
irrecv.resume(); // Atualiza o próximo valor do codigo emitido pelo IR
}
}

O fato é que o código recebido na Porta COM,  não tem padrão e aparece assim, até funciona mas demora para aparecer o código desejado.

4255908178
3689098101
1286666975
4255908176
1253111734
4255908176
4255908178
4272685799
3166520621
1101443656
3732648685
565936248
2564915405
489623154

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço