Problema con Barriera IR

e' stato l'unico modo per metterle ... non me ne faceva allegare nemmeno una alla volta :expressionless:

toti94:
e' stato l'unico modo per metterle ... non me ne faceva allegare nemmeno una alla volta smiley-neutral

forse perché sono troppo grandi.
Ciao Uwe

quel ricevitore rx l'hai tirato fuori da qualche parte, vero? ecco perché non hai la sigla. Secondo me potrebbe essere un modello a frequenza diversa dai 38KHz, quindi dovresti provare a variare quel 211 in + o in -, a tentativi, o se Leo o Astro ci forniscono il range per spaziare da 32KHz a 44KHz, sempre sperando che il LED IR sia in grado di operare in tale range.
Le foto le devi ridurre di risoluzione, max 640*480, altrimenti pubblichi questi manifesti.

oppure aggiungere al TAG "img" l' attributo "width=600" nella sintassi:
parentesi quadra aperta "img" spazio width=600 parentesi quadra chiusa url del immagine parentesi quadra aperta slesh "img" parentesi quadra chiusa

Ciao Uwe

Basta cambiare il valore di OCR2A ricordando che la formula per calcolare la frequenza (con le impostazioni del codice di Astro e di

TCCR2A = ((1<<COM2A0)  | (1<<WGM21) | (1<<WGM20));
TCCR2B = ((1<<WGM22) | (1<<CS20));
OCR2A = xxxx

Dove per OCR2A si deve mettere il risultato di
(16000000/frequenza_da_ottenere/2)-1
Esempio:
per 38000: 16000000/38000/2=211-1=210
per 40000: 199

Ottimo Leo, grazie.

PS.
per "agganciare" e "sganciare" il segnale, basta mettere il pin come output (segnale agganciato) o input (segnale sganciato), semplicemente con un pinMode. Non importa disattivare ogni volta il timer. Anche perché ogni volta che il timer viene riattivato, impiega qualche istante prima di ripresentare il segnale sul pin.

TCCR2A = ((1<<COM2A0) | (1<<WGM21) | (1<<WGM20));
TCCR2B = ((1<<WGM22) | (1<<CS20));
OCR2A = xxxx

Dove per OCR2A si deve mettere il risultato di
(16000000/frequenza_da_ottenere/2)-1
Esempio:
per 38000: 16000000/38000/2=211-1=210
per 40000: 199

Quindi devo solo cambiare il valore di OCR2A calcolandolo con la formula?

quel ricevitore rx l'hai tirato fuori da qualche parte, vero? ecco perché non hai la sigla. Secondo me potrebbe essere un modello a frequenza diversa dai 38KHz, quindi dovresti provare a variare quel 211 in + o in -, a tentativi, o se Leo o Astro ci forniscono il range per spaziare da 32KHz a 44KHz, sempre sperando che il LED IR sia in grado di operare in tale range.

si l'ho preso da un vecchio decoder, però l'ho usato in un altro progetto dove riceveva comandi da un telecomando della televisione e funzionava benissimo, i telecomandi delle TV non funzionano a 38kHz?
Quindi potrebbe essere il led il problema?

toti94:

TCCR2A = ((1<<COM2A0) | (1<<WGM21) | (1<<WGM20));
TCCR2B = ((1<<WGM22) | (1<<CS20));
OCR2A = xxxx

Dove per OCR2A si deve mettere il risultato di
(16000000/frequenza_da_ottenere/2)-1
Esempio:
per 38000: 16000000/38000/2=211-1=210
per 40000: 199

Quindi devo solo cambiare il valore di OCR2A calcolandolo con la formula?

Sì, tenendo comunque conto che il tutto è molto più complicato e che ho semplificato per questo caso specifico.

certo l'ho immaginato dalle formule XD Ti ringrazio :slight_smile:

Ho provato con tutte le frequenze da 32kHz a 44Khz, naturalmente solo con numeri interi e aumentando di 1000 ogni volta.
E niente mi continua a dare sempre 1, quindi vuol dire che non riceve il fascio di luce.
Però ho notato che all'inizio per un secondo o poco più mi da 0 quindi vuol dire che riceve il fascio?
oppure da 0 per altri motivi?
Sul monitor seriale ho questa situazione :

0
0
ü1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
1
1
1
....

ho messo i puntini per non mettere tutti gli altri 1 inifiniti xD

I telecomandi TV non funzionano necessariamente a 38kHz, specialmente se sono vecchiotti, se il sensore lo hai già sperimentato a 38khz probabilmente è il LED, non si possono fare esperimenti senza sapere con che si lavora, procurati un LED IR che lavori certamente a 38khz e riprova, personalmente non ho altro da consigliarti.

il fatto è che quando ho comprato questi due led IR ho solo detto "mi da due led a infrarossi?" e il negoziante me li ha dati senza chiedermi niente.
Quindi pensavo che tutti i led IR potessero lavorare a varie frequenze :\

pensavo che anche il led fosse da recupero; se l'hai preso in negozio al 99% è a 38kHz, però prova a chiederglielo e vedi se riesci a farti dare la sigla, così cerchiamo il data-sheet e vediamo di capire qualcosa in più. Non sarebbe male nemmeno prendere un nuovo sensore rx.
Una cosa, la descrizione di funzionamento che ti ho fatto riguarda i sensori a cambio di stato, come il TSOP34838, potrebbe anche essere che il tuo sia un modello ad impulsi, che hanno un comportamento diverso: sono comunque sempre su 0 quando interrompi il fascio passano un istante su 0 e poi tornano su 1 anche se il fascio continua ad essere interrotto, è il comportamento, p.es. dgli IR38DM; ma in alcuni casi funzionano all'opposto, stando fissi su 1 e dando un impulso 0 all'interruzione, solo che non so se lo sketch riesce a rilevarlo.
Quindi fai ripartire tutto e fai così: ignora gli 0 iniziali, quando vedi che sul monitor inizia la sfilza di 1 prendi qualcosa di spesso (non usare un foglio di carta che potrebbe non bastare) e chiudi e apri in continuazione la comunicazione visiva tra LED e sensore, se il sensore è di questo tipo, prima o poi devi beccare qualche 0 sul Monitor seriale.

Una prova da fare, più precisa, sarebbe quella di attaccare un interrupt al pin dove è collegato il sensore e vedere di intercettare anche un segnale velocissimo.

Non ci sono led IR a 38kHz. Quelli lampeggiano nella frequenza della tensone di alimentazione che nel codice che avevo proposto é di 38kHz.

@toti94
Se provi il mio codice il LED 13 si accende/spegne in funzione del raggio interrotto?

Ciao Uwe

uwefed:

[quote author=Michele Menniti link=topic=132944.msg1002293#msg1002293 date=1353346827]
pensavo che anche il led fosse da recupero; se l'hai preso in negozio al 99% è a 38kHz, però prova a chiederglielo e vedi se riesci a farti dare la sigla, così cerchiamo il data-sheet e vediamo di capire qualcosa in più. Non sarebbe male nemmeno prendere un nuovo sensore rx.

Non ci sono led IR a 38kHz. Quelli lampeggiano nella frequenza della tensone di alimentazione che nel codice che avevo proposto é di 38kHz.
[/quote]
Probabilmente mi sto sbagliando, ma io so che esistono LED che lavorano a diverse lunghezze d'onda, che stanno nella fascia tra 700nm e 1mm, tutte rientranti nell'infrarosso; onestamente non so se un LED IR a 880nm si debba pilotare alla stessa frequenza di un LED IR a 940nm (quello "classico" di cui si parla comunemente), ma mi riferivo a questa cosa, cioè pensavo che lui avese un LED IR che lavorasse ad una lunghezza d'onda diversa. MI piacerebbe avere un approfondimento in tal senso.

@toti94
Se provi il mio codice il LED 13 si accende/spegne in funzione del raggio interrotto?

Il led rimane quasi sempre spento ma a volte lampeggia per mezzo secondo o meno.

Una prova da fare, più precisa, sarebbe quella di attaccare un interrupt al pin dove è collegato il sensore e vedere di intercettare anche un segnale velocissimo.

Emh ... conosci il mio livello di ignoranza :cold_sweat: Potresti spiegarmi praticamente come fare?... cosa fare teoricamente l'ho capito:sweat_smile:

Probabilmente mi sto sbagliando, ma io so che esistono LED che lavorano a diverse lunghezze d'onda, che stanno nella fascia tra 700nm e 1mm, tutte rientranti nell'infrarosso; onestamente non so se un LED IR a 880nm si debba pilotare alla stessa frequenza di un LED IR a 940nm (quello "classico" di cui si parla comunemente), ma mi riferivo a questa cosa, cioè pensavo che lui avese un LED IR che lavorasse ad una lunghezza d'onda diversa. MI piacerebbe avere un approfondimento in tal senso.
[/quote]
OK quello é la lunghezza d'onda, praticamente "il colore" del infrarosso.
I ricevitori non hanno un filtro a banda stretta che la differenza di colore del infrarosso cambi granche nella loro sensibilitá. Un ricevitore (fotodiodo o fototransistore) ha una sensibilitá spettrale molto larga. Non ci sono problemi.

Ciao Uwe

toti94:
Emh ... conosci il mio livello di ignoranza :cold_sweat: Potresti spiegarmi praticamente come fare?... cosa fare teoricamente l'ho capito:sweat_smile:

Collega il ricevitore al pin D2 della scheda, e poi con la funzione attachInterrupt crei una funzione che accenda il led 13 al cambio di stato dell'interrupt 0 (che è quello agganciato a quel pin).
http://arduino.cc/en/Reference/AttachInterrupt