Barriera IR semplice (1 metro di portata)

Ok, mi son fatto prendere troppo presto! Il problema è questo il led ir con il nuovo ricevitore vanno benissimo, ma ad una distanza che a me non basta! Praticamente vanno bene fino ad una distanza di circa 15 cm, dopo di che il segnale inizia a perdersi (il ricevitore non riceve più come deve). Il problema penso sia nel fascio ir che mando:

 OCR2A = 211;
 TCCR2A = 0b01000011; 
 TCCR2B = 0b00001001;

(messo nel setup).
Come ha detto Michele si riuscirebbero a mandare 38 Khz, il fatto è che il nuovo ricevitore non so se lavora a 38Khz e neanche riesco trovare il datasheet! Come si fa?! :slight_smile:

Grazie

I ricevitori IR vanno da 32KHz a 44KHz (ma sugli estremi non sono sicurissimo), se non conosci le caratteristiche del ricevitore che stai usando non puoi sapere se c'è un problema di scarsa sensibilità o di frequenza di lavoro; ovvio che in fase sperimentale non puoi introdurre "incognite" come componenti fondamentali che non conosci. Il problema è che non disponi nemmeno di un frequenzimetro, se invece lo hai puoi andare a tentativi: trovi la combinazione di valori del timer per partire da 32KHz ed aumenti di 1KHz per volta ad ogni tentativo, se il problema riguarda la frequenza ad un certo punto otterrai prestazioni decisamente migliori.
L'alternativa migliore è ovviamente quella di prendere un TSSOP34838 che è eccellente e lavora a 38KHz, l'ho usato nella mia barriera.
Il condensatore in realtà può anche essere inferiore, quindi va bene qualsiasi cosa a partire da 4,7µF, serve per garantire stabilità di alimentazione al ricevitore e va montato molto vicino al pin V+

Ok, è andata per il TSOP34838, l'ho preso! Ora aspettiamo che arrivi e poi vediamo un po! Spero solo che reagisce al passaggio degli oggetti come quello che sto provando ora. Mi dispiace che non risco a trovare il datasheet! Se non fosse che dopo i 15 cm inizia a fare capircci è perfetto, al 100% quello che vorrei io!
Tu Michele che hai provato il TSOP34838 dici riuscirò a risolvere?:slight_smile:
Appena posso comunque posto il video di quello che sto provando ora, secondo me se lì in mezzo ci faccio passare un proiettile me lo rileva! xD

Nel mio caso dovevo simulare il passaggio di un treno per gestire un passaggio a livello, non ho fatto la prova a sparare contro il fascio, intanto perché non avevo gli occhiali per vedere gli IR e poi perché temevo di fare qualche danno al laboratorio :smiley:
Il tempo di risposta del ricevitore lo trovi sul data-sheet.

Hai fatto bene! :))

Comunque ho cercato il data-sheet e ho trovato questa frase:

"Up to 800 short bursts per second can be received continuously. "

Qui parla di sequenze al secondo che riesce a ricevere ma non ho trovato niente (o forse non ho visto :slight_smile: ) che parla di tempo di risposta.
Comunque nel caso fa niente, il miglior modo per testarlo e provarlo su banco! xD

Comunque mi chiedevo una cosa, in applicazioni del genere, quindi barriere ir, che dovrebbero essere abbastanza sensibili, tolto ok il ricevente, il fascio ir a 38Khz se il ricevente lavora a tele frequenza ma, quanto conta il led IR utilizzato?
Cioè può andar bene qualsiasi led ir oppure diciamo come qualsiasi altra cosa "ce il peggio e il meglio" ?

I LED IR hanno come tutti il LED una lente e percui la luce prodotta viene convogliato in un fascio con diversi angoli di apertura.
Piú piccolo é l' angolo di apertura piú luce viene inviata su un campo piccolo. La distanza massima varia in questa funzione.
I LED si distinguono anche nella corrente (potenza) massima.

Nel Sketch sottostante il LED IR é collegato con la sua resistenza tra massa e pin 2.
L'uscita del TSOP é collegata al pin 3 e il LED su Pin 13 viene usato per rilevare lo stato della fotocellula.

#define RXTSOP 3      //Pin TSOP 
#define TXIR 2        //LED IR
#define LED13 13      //LED on pin 13

//flag
boolean transmitting_IR; //transmission flag

// turn_off , turn_on, detect functions come as is from
// http://www.eng.utah.edu/~cs1410/Labs/lab09.html

void turn_off_IR ()
{
  // Instead of just adjusting the output on pin 11, this code also
  // turns off the timer controlling the PWM output on pin 11
  
  TCCR2A = 0; // Disconnect PWM
  TCCR2B = 0; // Stops the timer
  OCR2A = 0;  // No timer top
  digitalWrite(TXIR, LOW);  // Ensure output is off
  
  transmitting_IR = false;
}

void turn_on_IR ()
{
  //   Set up Timer2 (which can be connected to pins 3 and 11)
  //   For full details, see:
  //   arduino.cc/en/Tutorial/SecretsOfArduinoPWM
  //   The syntax here has me baffled, but the patterns of usage
  //   are clear if you look at the ATMega328 diagrams.
  //   _BV appears to stand for 'bit value'
  //   Different bits need to be set to control each timer
  //   Refer to diagrams for clarity

  TCCR2A = _BV(WGM21) | _BV(COM2A0); // This mode toggles output once per timer cycle
  TCCR2B = _BV(CS20);  // Do not scale the clock down - use 16 MHz timer rate.
  OCR2A = 210; // Divide sys. clock by 210, 1/2 cycle = 76 khz, 1 cycle = 38 khz
  
  // Output pin 11 should now be emitting a 38 khz signal.
  
  transmitting_IR = true;
}

void detectIR()
{
    if(digitalRead(RXTSOP)){
    digitalWrite(LED13 ,LOW);
    }else{
    digitalWrite(LED13 ,HIGH);
    }
}

void setup(){  
  pinMode(TXIR, OUTPUT);
  pinMode(RXTSOP, INPUT);
  turn_on_IR();
  delay(100);
}

void loop(){
  detectIR(); // search for IR
  delay(50);  
}

Il LED IR puó essere pilotato anche da un secondo Arduino o con um Multivibtatore costruito da un NE555.

Ciao Uwe

Ok quindi anche il led fa la sua parte.. Riguardo lo sketch che hai postato, vedo che ogni 50ms effettua il controllo, ma se il loop fosse più lungo si perderebbe tempo! Non so se hai visto il codice che sto usando ora, si base su un'interrupt, non pensi sia più attendibile? Comunque domani mattina provo così come sta questo sketch e vedo che succede! Altrimenti effettivamente una valida alternativa sarebbe utilizzare un NE555! In modo da tenerlo separato da arduino..

Riguardo lo sketch che hai postato, vedo che ogni 50ms effettua il controllo, ma se il loop fosse più lungo si perderebbe tempo!

La tua nota mi sembra un po strana.
All inizio hai usato una Fotoresistenza. Quelli hanno tempi di risposta anche fino al secondo.

Quanto veloce deve essere la risposta della fotocella?
Ciao Uwe

Nik_90:
Non so se hai visto il codice che sto usando ora, si base su un'interrupt

Ciao a tutti,

scusami se commento solo ora ma non avevo visto che hai modificato il codice per utilizzare un interrupt e vorrei darti un piccolo consiglio.

Sarebbe preferibile che la funzioni che gestisce l'interrupt, nel tuo caso la int_0, sia il più veloce possibile perchè sta interrompendo il flusso principale del programma. Nel tuo caso hai introdotto un delay(500) che, in pratica, ad ogni interrput, blocca il loop principale per mezzo secondo.

Qui mi pare che spieghi bene questo concetto: Appunti su Arduino: interrupts | Michele Maffucci

Magari, al momento, nel tuo caso, questo non ha importanza... lo dico solo per evidenziare un concetto che forse, successivamente, quando svilupperai ulteriormente il codice, potrebbe assumere la sua rilevanza.

Ciao.
Vittorio.

Concordo sul fatto che usare un interrupt per poi ricorrere ad un delay è assolutamente un controsenso, se proprio serve quel ritardo realizzalo con millis che almeno non ti blocca il processore.

Ok ho provato anche lo sketch di uwe e anche quello risponde bene, è veloce:) rimane sempre il problema che dopo una 20ina di cm il segno ir si perde! :confused: unica cosa volevo provare a cambiare tipo di led! Questo che sto usando ora è uno preso da quei mini telecomando quindi di quelli piccoli! Per quanto riguarda il delay di 500ms nell'interrupt lo sto usando per prova, infatti si trova tra l'accensione e lo spegnimento del led di verifica per controllare che il fascio ir sia interrotto!

Nik_90:
Ok ho provato anche lo sketch di uwe e anche quello risponde bene, è veloce:) rimane sempre il problema che dopo una 20ina di cm il segno ir si perde! :confused: unica cosa volevo provare a cambiare tipo di led! Questo che sto usando ora è uno preso da quei mini telecomando quindi di quelli piccoli! Per quanto riguarda il delay di 500ms nell'interrupt lo sto usando per prova, infatti si trova tra l'accensione e lo spegnimento del led di verifica per controllare che il fascio ir sia interrotto!

guarda che i led ir sono praticamente tutti uguali prova ad intubare il tubo avrai meno range "orizzontale" ma raggiungi maggiori distanza ps cerca sensore di prossimità con led ir gioblu c'è un ottima guida per arrivare a 150 cm :wink:

Nelle mie prove ho lavorato tranquillamente fino ad un metro e non sono andato oltre per la lunghezza dei fili; il TSSOP34838 ha una portata di 40 mt (da data-sheet), ovvio che ci vorranno i dovuti accorgimenti, ma 20cm mi sembrano davvero ridicoli, penso che sia il LED IR, forse richiede più corrente, prova ad alimentarlo tramite un transistor invece che direttamente dal pin di Arduino (dove avrai messo la R da 100ohm giusto?)

Si la resistenza da 100 ohm l'ho messa!:slight_smile:
Penso che dipenda dal led perché provando con un qualsiasi telecomando (es. quello del televisore) il led di controllo risponde! Comunque provando con un transistor, mi ritrovo un bc547 può andar bene?

certamente.
pin di Arduino con una R da 1k sulla base, emettitore a GND, catodo del LED sul collettore, anodo ad una R da 68 ohm, l'altro capo a 5V.

Ok ho messo il transistor ma niente, la situazione non cambia!:confused:
Ho fatto un po di misurazioni e ho notato che al led ir (transistor e resistenza) in questa configurazione gli arrivano 1.30 v +o- ..
A differenza ad esempio del led 13 (quello di controllo) con resistenza che arrivano 2.30 v. Entrambi provati con questo sketch:

void setup()

{

pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
}


void loop()

{}

Inoltre ho notato che utilizzando l' IR38DM la situazione con gli sketch utilizzati fino ad ora in un certo senso migliora, poiché nonostante sia lento nella risposta, comunque riesco ad arrivare al metro di distanza senza problemi. Il motivo allora penso sia il ricevitore a questo punto, che ancora non sappiamo se lavori o meno a 38Khz (il segnale che continuo a mandargli)..
Fatto sta che il tempo lo sto perdendo e molto probabilmente domani mi arriva il TSSOP34838 :slight_smile:

AZZZZ, mannaiaattiiaa! me l'ero dimenticato che stai usando il ricevitore ignoto, se no non ti consigliavo il transistor, comunque la tensione che misuri è quella di lavoro del LED, non puoi confrontare diversi LED tra loro. Come ti arriva il TSSOP secondo me va tutto benissimo, poi fai la prova con transistor e senza.

Non vorrei essere inopportuno nè fare la parte di quello che scopre l'acqua calda, ma leggevo "semplice" nel titolo quindi mi sento di consigliarti un semplice led ricevitore ir!
Sono andato al negozio, ho chiesto un led e l'ho collegato come una semplice fotoresistenza..

A proposito, in base a cosa si calcola la resistenza da mettere in questi casi?

sciorty:
Non vorrei essere inopportuno nè fare la parte di quello che scopre l'acqua calda, ma leggevo "semplice" nel titolo quindi mi sento di consigliarti un semplice led ricevitore ir!
Sono andato al negozio, ho chiesto un led e l'ho collegato come una semplice fotoresistenza..

A proposito, in base a cosa si calcola la resistenza da mettere in questi casi?

beh, tu l'hai realizzato e tu dovresti saperlo, cosa intendi per led "ricevitore", un fotodiodo?

sciorty:
Non vorrei essere inopportuno nè fare la parte di quello che scopre l'acqua calda, ma leggevo "semplice" nel titolo quindi mi sento di consigliarti un semplice led ricevitore ir!
Sono andato al negozio, ho chiesto un led e l'ho collegato come una semplice fotoresistenza..

A proposito, in base a cosa si calcola la resistenza da mettere in questi casi?

Il vantaggio di una soluzione "non cosí semplice" (modulazione del raggio infrarosso con 38kHz e ricevitore TSOP) é che é abbastanza immune a della luce ambientale, sia contiua come il sole o lampabine a incandescenza/alogene che da luci da tubi fluresceti con frequenze di 100Hz.

Il LED é fabbricato per generare luce non per riceverla; funziona ma non in modo ottimo. Se vuoi che funzioni bene é meglio prendere dei componenti fatti per ricevere luce come i fototransistori o fotodiodi.

comunque il possibile é anche questo:

dove i LED vengono usati come rilevatori di luce analogici collegati su pin digitali.

Ciao Uwe