Pages: [1]   Go Down
Author Topic: Sensore IR e relè monostabile per comandare relè passo passo  (Read 853 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, sono nuovo del forum e volevo congratularmi con tutti voi per quello che fate...
Sono un neofita di Arduino e mi piace tantissimo perchè permette di fare un sacco di cose offrendo una vasta gamma di sensori e dispositivi...
Ho un piccolo problema con un progettino trovato in rete... un sensore IR collegato ad arduino UNO che mi permette, tramite un telecomando standard, di eccitare un relè monostabile da 6 volt (bobina) e 220v (contatti) per 1 secondo che a sua volta faccia avanzare di un passo il relè dell'illuminazione di casa, quindi 220v.

allego codice:

Code:
#include <IRremote.h> // use the library

int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
int RELE =7;

void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  pinMode(RELE, OUTPUT); // Pin 9 output
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();// receive the next value
  }

  if ( results.value == 0xE13DDA28)//tasto 6 sul telecomando
  {
     digitalWrite(RELE,HIGH);
     delay(1000);
     digitalWrite(RELE,LOW);

   
  }

}

il codice è molto semplice.... il vero problema è che il relè scatta HIGH e dopo un secondo si sente un altro tic ma non torna a LOW....ci torna dopo aver premuto un altra volta il bottone del telecomando...

pensavo si trattasse di un difetto del relè ma ne ho provato un altro e niente da fare.... poi ho provato lo sketch BLINK e il relè funziona perfettamente....

spero possiate aiutarmi e ringrazio anticipatamente...... smiley-roll
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi dispiace non poterti aiutare in quanto anch'io sono in cerca di risposte.

Forse puoi aiutarmi tu  smiley-mr-green , potresti darmi lo schema di collegamento che hai utilizzato e i vari componenti?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Damidu
Certo.... il forum serve a questo, no??

Ho fatto uno schizzo....

* ir e relè_bb.pdf (849.01 KB - downloaded 22 times.)
Logged

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 589
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
il problema potrebbe essere che results.value= memorizza e mantiene il valore memorizzato, quindi quando ricomincia il loop la condizione di if e sempre vera, quindi devi svuotare la variabile, prova a scrivere results.value=0 alla fine del loop

stefano
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Stefa24 e grazie per la risposta....

ma dove lo devo inserire result.value=0 dopo

Code:
{
     digitalWrite(RELE,HIGH);
     delay(1000);
     digitalWrite(RELE,LOW);

   
  }

e qual'è la sintassi giusta???

scusa ma sono alle prime armi...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

FANTASTICOOOO!!!!!
Grazie a Stefa24 ho risolto....
vi posto se vi interessa il codice con la correzione....

Code:
#include <IRremote.h> // use the library

int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
int RELE =7;

void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  pinMode(RELE, OUTPUT); // Pin 9 output
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();// receive the next value
  }

  if ( results.value == 0xE13DDA28)//tasto 6 sul telecomando
  {
     digitalWrite(RELE,HIGH);
     delay(1000);
     digitalWrite(RELE,LOW);
results.value=0;
   
  }

}


GRAZIE
Logged

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 589
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
perfetto
l'istruzione và messa dentro le parentesi dell'if o anche tra le parentesi del loop

stefano
Logged


Pages: [1]   Go Up
Jump to: