Pages: 1 2 [3] 4   Go Down
Author Topic: Problema con Barriera IR  (Read 3901 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :\
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 494
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


BZ (I)
Online Online
Brattain Member
*****
Karma: 249
Posts: 21188
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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

Ciao Uwe

Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 494
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
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.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
@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.
Quote
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   smiley-roll-sweat Potresti spiegarmi praticamente come fare?... cosa fare teoricamente l'ho capito:smiley-sweat:
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 249
Posts: 21188
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
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.
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
 
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Emh ... conosci il mio livello di ignoranza   smiley-roll-sweat Potresti spiegarmi praticamente come fare?... cosa fare teoricamente l'ho capito:smiley-sweat:
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

Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 494
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Toti, hai fatto la prova che ti ho consigliato qui? è meno efficace di quella che ti sta consigliando Leo, ma almeno non ti costa nulla...
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si prof ho provato ma non vedevo degli zeri durante lo scorrimento quindi ho fermato e sono andato  vedere sopra la situazione ed ho trovato questo ad un certo punto:
Code:
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
però non corrisponde al momento in cui ho interrotto il fascio perchè ho lasciato la penna USB per 10 secondi + o - quindi dovrebbero esserci + zeri e nel momento in cui c'era la penna UWB scriveva cmq 1.
Per quanto riguarda la soluzione di Leo, è giusto questo codice?
Code:
#define led 6
#define rx 2
void setup()
{
 pinMode(11, OUTPUT);
 pinMode (rx, INPUT);
 pinMode (led, OUTPUT);
 digitalWrite (led, LOW);
 OCR2A = 210;
 TCCR2A = 0b01000011;
 TCCR2B = 0b00001001;
 Serial.begin (9600);
 attachInterrupt(0,trovato,RISING);
}
void trovato ()
{
  digitalWrite (led, HIGH);
}
void loop ()
{
int i= digitalRead (rx);
Serial.println (i);
}
Con questo codice ad un certo punto il led si accende, vuol dire che ha trovato lo 0 giusto?
poi una curiosità scusa, quando si attiva l'interrupt il programma non dovrebbe interrompersi? oppure ho detto una scemenza? smiley-roll-sweat
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 494
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hai detto una scemenza relativa, l'interruzione è una pratica del processore, che consiste nell'interrompere una cosa che sta facendo (ma c'è tutto un criterio sulle priorità) per farne un'altra, quindi non consiste nell'arresto completo delle attività. Comunque qui ti aiuta Leo.
La prova che ti ho consigliato, ma il fatto è che tu non leggi quello che ti si scrive, stai sempre a fare tutto in fretta, senza meditare, non è un bene, si basa sull'idea che il tuo sensore possa lavorare ad impulsi quindi se tu lasci qualcosa fisso ad interrompere il fascio tu ottieni solo un impulso poi ritorna su 1, anche se il fascio resta interrotto, ecco perché dovresti fare una prova ad interrompere e ricollegare il fascio in continuazione, e così dovresti ottenere tanti 1 e ogni tanto qualche 0, poi ti fermi una decina di secondi e vedi se esce sempre 1 e quindi ricominci, per vedere se ricompare qualche 0; se funziona così allora non hai problemi, semplicemente ti serve un sensore che lavori a tempo. La prova di Leo è molto più efficace, in quanto ogni volta che interrompi il fascio devi vedere il led che fa un solo lampeggio, così hai conferma di quanto penso io.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah quindi nel codice di leo devo far spegnere il led dopo un po'.
Comunque prof intendevo dire che forse non è un ricevitore del genere che dite voi perchè altrimenti mi avrebbe dato un solo 0 e non tutti quegli zeri o sbaglio?
Posso fare un video del comportamento del circuito e farvelo vedere? magari capite meglio che dalle mie descrizioni xD (intendo il circuito col led e il programma suggerito da leo)
« Last Edit: November 20, 2012, 06:50:59 am by toti94 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@toti:
modifica il tuo programma così:

Code:
#define led 6
#define rx 2
byte ledFlag = 0;
void setup()
{
 pinMode(11, OUTPUT);
 pinMode (rx, INPUT);
 pinMode (led, OUTPUT);
 digitalWrite (led, LOW);
 OCR2A = 210;
 TCCR2A = 0b01000011;
 TCCR2B = 0b00001001;
 Serial.begin (9600);
 attachInterrupt(0,trovato,RISING);
}
void trovato ()
{
  digitalWrite (led, HIGH);
  ledFlag = 1;
}
void loop ()
{
int i= digitalRead (rx);
Serial.println (i);
if (ledFlag == 1) {
  delay(500);
  digitalWrite(led LOW);
}
}

In questo modo se l'interrupt vede un cambio di stato, hai un'attesa di 500 ms prima che il led venga rispento ed i dati tornino ad essere spediti. Comunque prova anche cambiando modalità dell'interrupt. Da quel che ho capito, il tuo sensore dovrebbe portare il pin a 0 quando viene interrotto, per cui potresti usare anche "LOW" come evento dell'attachInterrupt.
Per il resto ti aiuta Michele che di sensori iR ne sa sicuramente più di me  smiley-wink
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 494
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

figurati Leo, Toti è un bel banco di prova per chi si vuole adoperare per il Forum smiley-sweat
@ Toti: concettualmente avresti ragione, di fatto io non so se deve uscire uno o più 0, certo è che ogni volta dovrebbe uscire una sequenza simile. Prova lo sketch di Leo, l'unico dubbio che ho, ma vado molto indietro con la memoria...., è che ricordo che quella libreria prevede il falling, il rising, il change e uno solo tra HIGH e LOW, quindi non sono certo che il low sia contemplato, verifica. Io però direi di usare il change, così possiamo sequenziare l'intero periodo di variazione dello stato.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

figurati Leo, Toti è un bel banco di prova per chi si vuole adoperare per il Forum smiley-sweat
@ Toti: concettualmente avresti ragione, di fatto io non so se deve uscire uno o più 0, certo è che ogni volta dovrebbe uscire una sequenza simile. Prova lo sketch di Leo, l'unico dubbio che ho, ma vado molto indietro con la memoria...., è che ricordo che quella libreria prevede il falling, il rising, il change e uno solo tra HIGH e LOW, quindi non sono certo che il low sia contemplato, verifica. Io però direi di usare il change, così possiamo sequenziare l'intero periodo di variazione dello stato.
Il segnale LOW è contemplato. E' l'HIGH che non c'è.
Logged


Pages: 1 2 [3] 4   Go Up
Jump to: