Ciao ragazzi, sto cercando disperatamente in rete una soluzione al mio problema, senza risultati. Allora mi servirebbe capire come poter realizzare una specie di sensore di presenza utilizzando dei led infrarossi, per rilevare un movimento ad una distanza max di 10/15 cm.
Il progetto consiste nel realizzare una specie di modulo octolively della EMSL. Sul sito è riportato anche lo schema di funzionamento, magari voi riuscite a capirci di più :
la scheda è formata da 6 coppie di 2 led: uno emettitore e uno ricevitore.
l'emettitore genera luce ad una determinata frequenza(di onda) ed ad una determinata frequenza(di tempo).
Il ricevitore funziona come una sorta di pannello solare: tu lo carichi, e lui si scarica più velocemente se viene colpito da pochi IR.
Quindi se un corpo si mette davanti all'emettitore, riflette la luce sul ricevitore, aumentando il tempo impiegato per la scarica, in base a quanto tempo impiega il ricevitore a scaricarsi ottieni la distanza del corpo rilevato.
Si, il tutorial sull'algoritmo ERER, ma con il variare della luce funziona si e no. Almeno, quando provai, non funzionò alla grande, domani lo riprovo e vi faccio sapere. Grazie
esatto, quando vari la luce che colpisce il sensore, specialmente se è luce del sole, dovresti ricalibrare il sensore. Però il tutoria che ti ho linkato prima di ogni lettura effettua una tara in base alla luce ambientale esterna.
ho provato, funziona MA, anche in condizioni stabili, owero senza passare la mano, e senza variare la luce, i valori, variano da 0 fino a 1200... con una resistenza, non si potrebbe bloccare il valore in condizioni "stabili"? non so se mi sono spiegato
Ciao la variabilità del dato dipende dal LED che stai utilizzando.
In qualsiasi caso ti consiglio di seguire questo tutorial:
Contiene una versione piu' recente dell'algoritmo che ti restituisce una distanza in cm dell'ostacolo.
Io riesco ad avere range fino a 2 metri con una stabilità del dato piu' che accettabile.
Facci sapere!
Vista l'applicazione un'altro possibile uso del LED come ricevitore è + LED -> analog 0 | - LED -> GND
La tensione prodotta dal LED (esattamente come un pannello solare) è dipendente dalla quantità di luce riflessa.
Molto utile per rilevazioni short range che necessitano una discreta precisione
Un esempio?
Questo robot sta in piedi solo grazie a 4 LED usati in due coppie come sensori di distanza.
Come puoi vedere il dato è piuttosto stabile su varie superfici.
Non ho avuto tempo di scrivere un articolo su questa questione, a questo punto lo scrivo oggi...
Lo posto appena è finito.
Ok, allora ho fatto delle prove, collegando in questo modo :
ANALOG IN 1 >>> ANODO RICEVITORE GND >>> CATODO RICEVITORE 5V >>> CATODO EMETTITORE GND >>> ANODO EMETTITORE
e ho lanciato il seguente sketch :
int ir = 1;
int value;
void setup()
{
Serial.begin(9600);
}
void loop()
{
value = analogRead(ir);
Serial.println(value);
delay(50);
}
Allora, riesco a rilevare la presenza da ben 20 cm di distanza, MA :
QUESITO 1 : tutto funziona correttamente solamente utilizzando come ricevitore un led infrarosso scuro (quasi nero), altrimenti ritorna valori instabili QUESITO 2 : tutto funziona correttamente solamente se il ricevitore non incontra i raggi ultravioletti di una luce ad esempio alogena. Come posso rilevare la distanza anche in presenza di una luce alogena?
LED emettitore + -> digitale qualsiasi
LED emettitore - -> GND
LED ricevitore + -> analog
LED ricevitore - -> GND
int ir = 1;
int ambient = 0;
int distance = 0;
int value;
void setup()
{
Serial.begin(9600);
}
void loop()
{
ambient = analogRead(ir);
digitalWrite(portadigitaleemettitore, HIGH);
value = analogRead(ir);
digitalWrite(portadigitaleemettitore, LOW);
distance = value - ambient;
Serial.println(distance);
delay(50);
}
In poche parole spegnamo il LED percepiamo, accendiamo il LED percepiamo.
Per ridurre il noise ambientale semplicemente sottraiamo il valore di luce ambientale a emettitore spento a quello con emettitore acceso, ottenendo SOLO i riflessi di eventuali oggetti posti davanti.
Spero possa esserti utile... lo so devo ancora scrivere il tutorial!!