Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Barriera IR con Arduino

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[1] Barriera IR con Arduino

Messaggioda Foto UtenteZG84 » 6 dic 2013, 12:22

Buongiorno a tutti ho un problema con una barriera IR più che un problema è un dubbio perché funziona ma c'è una cosa che mi lascia un po' perplesso.
Andiamo con ordine:



R1=R3=220ohm
R2=R4=R5=4.7Kohm
Alimentazione 5V USB per Arduino + 5V Alimentatore esterno ecco perché c'è il filo di massa in comune.
Per semplificarvi la vita i datasheet:
Transistor PN3904
Emettitore LTE-302
Ricevitore LTR-301

Premetto che è a puro scopo "didattico" ed è il primo esperimento con gli infrarossi.

Se serve posto anche lo sketch ad ogni modo vi spiego il funzionamento:
L'emettitore emette e non emette per 1 millisecondo.
Il programma confronta l'emettitore e il ricevitore:
Se l'emettitore emette ed il ricevitore riceve tutto_________ok led spento
Se l'emettitore non emette ed il ricevitore non emette______ok led spento
Se l'emettitore emette e il ricevitore non riceve (qualcosa che blocca il fascio)________________Aiuto i ladri
Se l'emettitore non emette e il ricevitore riceve (Fascio IR Esterno tipo telecomando o Jammer)__Aiuto i ladri
:lol: con Aiuto i ladri intendo LED Acceso

Tutto funziona a parte che il led di giorno sfarfalla e presumo sia dovuto ad una mancanza di schermatura e qualche riflesso strano perché se faccio ombra con la mano smette.

La cosa che mi lascia perplesso, come dicevo sopra, è che quando metto il mio ditino od un oggetto qualunque a bloccare il fascio tra emettitore e ricevitore il led si illumina di immenso come volevo ma se lo illumino col fascio IR del telecomando o di un altro led IR non arriva neanche a 1mA si illumina pochissimo.

Presumo che il problema sia sul ricevitore ma non so da che parte girarmi ho provato un po di tutto.
Qualche idea?

Ciao
...e come diceva sempre mio nonno: "Nessuno nasce imparato"
Avatar utente
Foto UtenteZG84
1.710 3 8 12
Expert EY
Expert EY
 
Messaggi: 908
Iscritto il: 11 nov 2013, 17:06

0
voti

[2] Re: Barriera IR con Arduino

Messaggioda Foto UtenteTricka90 » 6 dic 2013, 16:52

Per ovviare al primo inconveniente, quello dello sfarfallamento in presenza di luce ambientale, ti consiglierei di provare ad aggiungere un filtro passa alto fra il collettore del fototransistor e il pin D10. Ovviamente la frequenza di taglio deve essere ben lontana da quella di trasmissione che stai utilizzando.

Forse ho un'idea anche riguardo il secondo problema. Probabilmente vedi il LED illuminato poco perché esso si spegne quando è verificata la condizione:
Se l'emettitore emette ed il ricevitore riceve tutto_________ok LED spento
mentre, si accende quando l'emettitore non emette e il ricevitore riceve (perché sta ricevendo gli IR che gli stai puntando tu col telecomando). Quindi vedi il LED acceso poco perché in realtà sta lampeggiando acceso/spento rapidamente.
Se posti il codice completo mi faccio un'idea più chiara :ok:
Avatar utente
Foto UtenteTricka90
662 1 6 10
Expert
Expert
 
Messaggi: 627
Iscritto il: 1 lug 2013, 15:53

0
voti

[3] Re: Barriera IR con Arduino

Messaggioda Foto UtenteZG84 » 6 dic 2013, 20:52

Ciao Trika90
Non ero sparito stavo solo facendo alcune prove.

Tricka90 ha scritto:Per ovviare al primo inconveniente, quello dello sfarfallamento in presenza di luce ambientale, ti consiglierei di provare ad aggiungere un filtro passa alto fra il collettore del fototransistor e il pin D10. Ovviamente la frequenza di taglio deve essere ben lontana da quella di trasmissione che stai utilizzando.


Parliamo dopo del filtro passa alto una cosa alla volta :D anche perché alla luce dei nuovi problemi non sono più sicuro di niente.

Tricka90 ha scritto:Forse ho un'idea anche riguardo il secondo problema. Probabilmente vedi il LED illuminato poco perché esso si spegne quando è verificata la condizione:
Se l'emettitore emette ed il ricevitore riceve tutto_________ok LED spento
mentre, si accende quando l'emettitore non emette e il ricevitore riceve (perché sta ricevendo gli IR che gli stai puntando tu col telecomando). Quindi vedi il LED acceso poco perché in realtà sta lampeggiando acceso/spento rapidamente.
Se posti il codice completo mi faccio un'idea più chiara


Dopo che ho letto il post ho modificato il programma ed anziché andare direttamente ad accendere il led accedevo ad un loop di lampeggio per tot secondi. Risultato programma semi impazzito allora torno indietro al programma originale e con sommo stupore è diventato ancora più pazzo :shock: .

Dopo vari tentativi di risolvere il problema via software ho preso la saggia decisione di verificare che il circuito fosse a posto perché è inutile lavorare su due problemi e cercare di ripiegare via software agli errori hardware.

Quindi ho scollegato il circuito dall'arduino e ho messo il filo del segnale del ricevitore sulla base del transistor del led.
Ho messo il filo di base del transistor emettitore a positivo.
Se vado ad interrompere il fascio non ho più i 0.20V di segnale(Emettitore emette/ricevitore riceve quindi stato logico basso) ma ne ho 2.70V(contro i 5V che ho senza nessun "carico") ed è più o meno il segnale che rivelavo quando era collegato all'arduino.
la soglia di arduino per definire un pin allo stato logico alto è circa 3 V e non vorrei fosse per quello che il programma impazzisce.
Ora il programma è completamente diverso da quello funzionante e mi sono dimenticato di fare il backup prima di fare tutte quelle modifiche #-o
quindi domani ci darò un occhio con calma, al momento è incasinato.

Continuo a pensare che il problema sia la resistenza del ricevitore che ho scelto ad occhio perché dovendo considerare il ricevitore come un NPN ed essendo "Ib" un fascio infrarosso non sapevo come calcolarla.......Ma il ricevitore può sopportare un carico?
...e come diceva sempre mio nonno: "Nessuno nasce imparato"
Avatar utente
Foto UtenteZG84
1.710 3 8 12
Expert EY
Expert EY
 
Messaggi: 908
Iscritto il: 11 nov 2013, 17:06

0
voti

[4] Re: Barriera IR con Arduino

Messaggioda Foto UtenteTricka90 » 6 dic 2013, 23:42

Ottimo, continua a sperimentare e appena avrai raggiunto una configurazione abbastanza convincente fammela pure vedere (sia la parte hardware che la software) così ti aiuto, volentieri :D
Stai attento, al fototransistor ricevitore stai dando una tensione eccessiva, sei proprio al limite del Absolute Maximum Rating (vedi datasheet). Rischi di farlo fuori.
Avatar utente
Foto UtenteTricka90
662 1 6 10
Expert
Expert
 
Messaggi: 627
Iscritto il: 1 lug 2013, 15:53

1
voti

[5] Re: Barriera IR con Arduino

Messaggioda Foto UtenteZG84 » 7 dic 2013, 13:41

Tricka90 ha scritto:Stai attento, al fototransistor ricevitore stai dando una tensione eccessiva, sei proprio al limite del Absolute Maximum Rating (vedi datasheet). Rischi di farlo fuori.


...ma non è 30 V tra collettore ed emettitore?

Comunque ho risolto i problemi erano dovuti a:
-Un anno che non programmavo più :lol:
-il filo Jumper di massa tra arduino e alimentatore che faceva falsi contatti mandandomi il segnale in floating :evil:
-"errata" configurazione Software-Hardware

Ho risolto facendo una lettura analogica del segnale e stabilendomi io la soglia per stato logico Alto Basso.
Quindi ho riscritto completamente il programma cancellando l'altro per evitare di essere influenzato.

Schema:


Rispetto al precedente Schema è cambiato:
-configurazione dei pin 8-9 (causa riprogrammazione da zero)
-Il filo del segnale anziché andare sul pin digitale 10 va sull'ingresso analogico A0
-la resistenza R1 è diventata da 100 ohm per permettere al mio dito di interporsi agevolmente tra i due sensori

Il programmino lo posto lo stesso per i più curiosi ed ho fatto tutti i commenti in modo che sia leggibile da tutti:

//
//Barriera Infrarossi
//
// Definizione Varibili
byte Rpin=A0; //pin Ricevitore IR
int Rr; //Variabile reale
int Rd; //Variabile definita
byte R; //Variabile stato logico Ricevitore

byte Epin=8; //pin Emettitore IR
byte E; //Variabile stato logico Emettitore

byte L=9; //pin LED Segnalazione

byte Y; //Variabile per entrare uscire dal blink

long clk=1; //Lunghezza Ciclo
long M=0;
unsigned long T=millis();

//Loop setup eseguito una sola volta                                
void setup(){
  // Definizione pin
  pinMode(Epin,OUTPUT);
  pinMode(L,OUTPUT);

  //Definisco Rd Come valore di soglia HIGH LOW
  digitalWrite (Epin,HIGH); //Accendo emettitore
  Rd = analogRead(Rpin) +30; //Leggo la misura e +30 per star tranquilli
  digitalWrite (Epin,LOW); //Spengo l'Emettitore
  digitalWrite (L,LOW); //per sicurezza spengo il led
  }

//Funzione blink ALLARME
void blink(){
  if(Y==1){ //si attiva solo se Y=1
  for( byte t=0 ; t < 6; t++){ //Fino a che t raggiunge 6 ovvero 6 lampeggi
  digitalWrite(L,HIGH);
  delay(250);
  digitalWrite(L,LOW);
  delay(250);
  }
  Y=0;                               //Y=0 per uscire dal ciclo
  }
}

  

//Sketch
void loop(){

  while (T-M <= clk){ //Esegue loop finché T-M diventa più grande di clk
    T=millis(); //Essenziale per aggiornare la condizione while ed uscire dal ciclo
    digitalWrite(Epin,HIGH); //Emettitore Acceso
    E = 1;                           //Valore Logico 1
    Rr = analogRead (Rpin); //Lettura Ricevitore
    if (Rr < Rd) //Se Valore letto dal sensore è minore
      R = 1;                         //Nessun Ostacolo
    else
      R = 0;                         //Presenza Ostacolo
    if(E == R) //Se Emettitore emette e ricevitore riceve
    digitalWrite(L,LOW); //Nessun Allarme
    else
    Y=1;                             //per entrare nel ciclo blink
    blink(); //Allarme


  }

  while (T-M <= clk*2){ //Esegue loop finché T-M diventa più grande di clk*2
    T=millis(); //Essenziale per aggiornare la condizione while ed uscire dal ciclo
    digitalWrite(Epin,LOW); //Emettitore Spento
    E = 0;                           //Valore Logico 0
    Rr = analogRead (Rpin); //Lettura Ricevitore
    if (Rr > Rd) //Se Valore letto dal sensore è minore
      R = 0;                         //Barriera Spenta
    else
      R = 1;                         //Presenza Seganle IR Esterno
    if(E == R) //Se Emettitore emette e ricevitore riceve
    digitalWrite(L,LOW); //Nessun Allarme
    else
    Y=1;                             //per entrare nel ciclo blink
    blink(); //Allarme
  }

  M=T;                               //"Azzera" il contatore
}


Ho provato a sistemare la tabulazione dei commenti ma non ci sono riuscito.
Diciamo che questo programma e la base dopo si può modificare aggiungendo altri cicli con temporizzazioni diverse per codificare ancora meglio il segnale tra Emettitore e Ricevitore io non l'ho fatto perché al momento non ho intenzione di realizzarne una :D

Bene ora posso concludere la relazione (alla fine di ogni progetto ne faccio...una è una rottura di scatole ma almeno se riprendo in mano qualche progetto tra qualche anno non divento scemo) e poi passare alla decodifica dei codici inviati dai telecomandi ma prima devo sistemare la scrivania che è un campo di battaglia.

Grazie dell'aiuto O_/
...e come diceva sempre mio nonno: "Nessuno nasce imparato"
Avatar utente
Foto UtenteZG84
1.710 3 8 12
Expert EY
Expert EY
 
Messaggi: 908
Iscritto il: 11 nov 2013, 17:06

0
voti

[6] Re: Barriera IR con Arduino

Messaggioda Foto UtenteTricka90 » 10 dic 2013, 23:18

ZG84 ha scritto:
...ma non è 30 V tra collettore ed emettitore?


Si hai ragione, ti chiedo scusa per la fesseria che mi è scappata :D
Sono contento che hai risolto, complimenti, bel lavoro! :ok:
Avatar utente
Foto UtenteTricka90
662 1 6 10
Expert
Expert
 
Messaggi: 627
Iscritto il: 1 lug 2013, 15:53

0
voti

[7] Re: Barriera IR con Arduino

Messaggioda Foto UtenteZG84 » 10 dic 2013, 23:48

Grazie era un esperimento che avevo voglia di fare anche per ricordarmi un po come si programma.
Tricka90 ha scritto:Si hai ragione, ti chiedo scusa per la fesseria che mi è scappata

Nessun problema figurati più che altro mi avevi fatto venire il dubbio visto che non sono molto pratico di datasheet :D
...e come diceva sempre mio nonno: "Nessuno nasce imparato"
Avatar utente
Foto UtenteZG84
1.710 3 8 12
Expert EY
Expert EY
 
Messaggi: 908
Iscritto il: 11 nov 2013, 17:06


Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 41 ospiti