Duvida codigo com receptor RXFLEX PLT263 (RESOLVIDO)

Estou começando agora a mexer com arduíno , e estou tendo dificuldades.

Primeiro eu controlei um rele por controle IR, deu tudo certo. Mas por causa do alcance, resolvi mudar para radiofrequência. Então comprei um receptor RX FLEX - PLT 263 e um controle de portão elétrico. Esse receptor possui 3 reles, e quando aperto o botão configurado, ele aciona o um dos reles, deixando a tensão passar ( no caso 5v). Porem, eu não estou conseguindo fazer o arduino reconhecer esse "sinal" de 5v. Estou utilizando um pino INPUT e outro OUTPUT, dai no programa eu coloquei que quando o pino INPUT receber 5v, ele aciona o rele que esta no pino OUTPUT. Mas não está dando certo, será que alguém poderia me ajudar?

Valeu, Abraços.

Como você esta fazendo as ligações?

E uma coisa importante é usar um resistor pulldown, para manter a porta (imput) do arduino no estado LOW enquanto não tiver tensão por parte do rele.

Coloca o teu código aqui para vermos se existe algo de errado nele.

Então, estou usando ate um sensor indutivo, para desligar o relé quando o sensor se aproximar de algo metálico. o Código que eu usava com o controle IR era esse:

#include <IRremote.h>
int RECV_PIN = 2;
int indutor = 9
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600); // Abre a porta serial.
pinMode(7, OUTPUT); // Define o pino 13 como saida.
irrecv.enableIRIn(); // Inicia o receptor IR.
pinMode(9, INPUT); //
}
void loop(){
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC); // Envia o codigo do botão pressionado para a porta serial.
irrecv.resume();

}
if (results.value == 681){
digitalWrite(7,HIGH);

}

if (results.value == 2729
){
digitalWrite(7,LOW);
}
delay(300);

if ( digitalRead(indutor)== HIGH){
digitalWrite(7, LOW);
results.value = 2729;
}
}

Estava dando tudo certo, dai como troquei pelo RF , não sabia o que colocar no código, e simplesmente coloquei isso como código:

int receptor = 11;
int indutor = 12;

void setup(){

Serial.begin(9600);
pinMode (7, OUTPUT);
pinMode (12 , INPUT);
pinMode (11, INPUT);
}
void loop(){

if (digitalRead(receptor) == HIGH){
digitalWrite(7, HIGH);
}

if (digitalRead(indutor) == HIGH){
digitalWrite(7,LOW);
}
}

Só que o rele fica ligando e desligando muito rápido, ou seja, ele esta "entrando" nas duas condições, sem eu apertar nenhum botão.

Antes mesmo de olhar o código, já vi você dizer que liga e desliga muito rápido, se não usou pulldown isso acontece mesmo, porque a porta oscila em LOW e HIGH se não tiver uma referência para cima ou para baixo (por isso chamamos de pull up e pull down).

Coloca os resistores de 10k entre a porta 11 e ground e entre a porta 12 e ground mantendo a porta em estado LOW até que seja conectado a 5V pelo indutor.

Passando os olhos pelo código, não vejo nada de estranho.

Blz, vou fazer isso, e já posto aqui o resultado =] !!! valeuuuuu

então, coloquei os resistores, o rele não fica mais ligando e desligando, mas agora ele não liga também.

Eu fui medir a tensão no pino OUTPUT (do rele), e fica variando de 2 a 2,3v , dai quando aperto o botão, ele vai para 5,1v, mas não liga o rele.

Os dois pinos de entrada, garantem 0v certinho, mas não sei porque o rele não liga quando aperta o botão.

deixei algo passar? rs

Em quais portas esta ligado o que? O rele que responde ao botão esta ligado na porta 11 ou 12?

Você esta ligando os 5V do arduino a um pino do rele e a porta 11 no outro pino do rele (ou seja, o rele conecta/desconecta os 5v do arduino com a porta 11)?

O outro rele (saída) esta ligado na porta 7, certo?

int receptor = 11;
int indutor = 12;

void setup(){
  
  Serial.begin(9600);
  pinMode (7, OUTPUT);
  pinMode (12 , INPUT);
  pinMode (11, INPUT);

aqui você pode usar as variáveis que você criou, mas isso não esta causando o problema ^^

pinMode (receptor, INPUT); 
pinMode (indutor, INPUT);
}
void loop(){
  if (digitalRead(receptor) == HIGH){
    digitalWrite(7, HIGH);
    }
    
    if (digitalRead(indutor) == HIGH){
      digitalWrite(7,LOW);
      }
}

O que esta ligado ao pino 12 (indutor)? Pois se o receptor for HIGH e o indutor for HIGH, não dará tempo de ver o pino 7 HIGH, pois após ligado ele será imediatamente deligado.

Creio que você deva revisar as conexões, deliga tudo e faz parte por parte, use como auxílio do serial monitor, assim você imprime o que esta acontecendo, ajuda muito.

int receptor = 11;
int indutor = 12;

void setup(){
  
  Serial.begin(9600);
  Serial.println("Iniciado");
  pinMode (7, OUTPUT);
  pinMode (12 , INPUT);
  pinMode (11, INPUT);
}
void loop(){
  
   
  if (digitalRead(receptor) == HIGH){
   Serial.println("Definindo porta 7 como HIGH");
    digitalWrite(7, HIGH);
    }
    
    if (digitalRead(indutor) == HIGH){
      Serial.println("Definindo porta 7 como LOW");
      digitalWrite(7,LOW);
      }
}

haha, esta assim:

no pino 7, esta o rele que eu quero "LIGAR" através do receptor(pino 11), e desligar com o sensor indutivo( pino 12).

no pino 11, esta ligado o rele do receptor, que ao apertar o botão do controle, passa 5v.

no pino 12, esta o sensor indutivo, que ao se aproximar de algo metálico, "envia" 5v .

coloquei o código que você mandou, dai ele ficou ligando e desligando , porem mais devagar do que da outra vez.

dai quando aperto o botão do controle, ele liga certinho o rele, mas em seguida ele já desliga, sendo que o sensor indutivo não esta encostando em nada metálico.

é como se ele executasse as duas condições sem eu pedir .

Bom, vou ter que sair, porque vou ficar sem computador, mas amanha de manha já estarei voltando para tentar de novo. Se conseguir descobrir algo, ficarei muito agradecido, pois estou tentando fazer funcionar isso uns 2 dias já hahaha =]. Muito obrigado mortis!!

Você abriu a porta serial para ver os prints?

Já mediu o sensor com o multímetro? Colocou o pull down entre o pino do indutor e o GND? Pois parece-me que ele esteja mandando mais de 3v para a porta 12, definindo-a como HIGH.

Já testou apenas o indutor?

void loop(){ 
  if (digitalRead(indutor) == HIGH){
   Serial.println("Definindo porta 7 como HIGH");
    digitalWrite(7, HIGH);
  }
  else {
      Serial.println("Definindo porta 7 como LOW");
      digitalWrite(7,LOW);
  }
}

consegui o computador =]

Então, acabei de fazer isso, e ele ainda continua ligando e desligando. Na porta serial ele fica mandando sem parar
"Definindo porta 7 como HIGH"
"Definindo porta 7 como LOW"

Medi com o multímetro os pinos 11 e 12, e os dois estão no zero quando não usados( o pull down deu certo =]), dai quando aperto o botão, o pino 11 fica 5v, e quando aproximo o sensor de algo metálico, o pino 12 fica 5v. Não to entendendo porque ele ta desligando e ligando sem fazer nada.
Parece que as condições do IF não ta servindo para nada, ele ta ligando e desligando com os dois pinos (11 e 12) no zero.

o pino 7 ta com tensão tambem, chega a 2 / 2,5v. E o estranho é que a porta 5v do arduíno, ta saindo só 2,5 também.

E medi a tensão também no pino do rele, que vai na porta 7, e nele ta saindo tensão de 5v, não sei se é normal.

Uma pergunta: no arduino tem algumas portas de comunicação RX, e o receptor que eu estou usando é RX FLEX - PLT 263, tem algo a ver?

O fato de na serial aparecer sem parar as linhas
"Definindo porta 7 como HIGH"
"Definindo porta 7 como LOW"
significa que os dois IF são executados, ou seja, as duas portas estão HIGH. Parece que o sensor indutor esta colocando a porta 12 em HIGH (então tem algo estranho com o indutor? Pois se a conexão com ele esta com o pull down, e não existe objeto magnético próximo do sensor, ele deveria mandar o estado LOW, certo?).

Como não colocamos uma condição para ver o estado anterior da porta 11, deveria "aparecer sem parar" apenas "Definindo porta 7 como HIGH" se o sensor indutor estivesse enviando sinal LOW (abaixo de 3v), entende?

Da porta 7 sairá 5V se o estado dela for definido como HIGH, é isso que se espera :wink:

E me ocorreu sobre o rele que estas usando na saída, você esta ligando a bobina do rele diretamente na porta do arduino? Ou esse rele possui um optoacoplador ou transistor para ativar o rele? Pergunto porque as portas do arduino não são capazes de fornecer muita corrente (considere o máximo de 20mA quando for ligar algo), e se ligares uma bobina diretamente queimarás a porta.

Para tudo! rs

Sobre os IFs não servirem para nada, se você deixar o arduino ligado na usb, desligar todo o resto e ativar o serial monitor, verificará que não aparecerá nenhuma das duas mensagens "Definindo porta 7 ####".

Como pode ter apenas 2,5v no pino 5v do arduino? Como você o esta alimentando? Pilhas (quantas?) USB?

Manda um esquema de como você esta ligando as coisas, ou uma foto das conexões.

Pelo que parece "RX FLEX" é apenas o nome do produto.

Aeeww, parei tudo, e montei tudo de novo como voce falou haha, e deu certo!!! \o/

Ficou assim o circuito:

Os fios azuis são GND
Os verdes são 5V
O laranja que esta ligado no receptor é 12v
O laranja que esta ligado na parte de cima, é o sinal do sensor indutivo, que é de 5V também.

Segue a foto do circuito!! =]

Valeu Mortis, muito obrigado mesmo!!! =]

Agora vou incrementar mais algumas coisas, qualquer problema que surgir, voltarei haha \o/

Os pull down estão OK, você ligou nas entradas (porta 11 e 12).

Que bom que funcionou! =) Mas você sabe o que estava errado? Cuidado para não queimar nada!!!! rs

Então, o que eu fiz de diferente foi ligar no GND da fonte ATX que to usando. haha

Mas agora já controlei motor e led pelos reles! Valeu de novo Mortis!!!

Abraço.

\o/

É isso ai... E quanto mais aprendemos mais possibilidades encontramos, o único problema é que parece nunca ser suficiente para tudo o que queremos! rs

Bom divertimento com o teu arduino :wink:

Até