Ciao ragazzi. Dopo la mega-diatriba tra me e Astrobeed sulla fattibilità dell'uso della inverse square law per determinare la distanza di una fonte luminosa (http://arduino.cc/forum/index.php/topic,83319.0.html) ho perso decisamente tanto tempo a farmi una cultura su questa roba e soprattutto sulle basi fisiche necessarie a comprendere il funzionamento di questa legge.
Il risultato è un algoritmo che grazie alla percezione dell'intensità di un eventuale riflesso da parte di un ostacolo posto davanti all'emettitore determina la sua distanza in modo perfettamente lineare e scevro dall'iperbolicità insita nella diminuzione dell'intensità luminosa in rapporto alla distanza.
Finalmente chi sarà interessato potra' autocostruirsi un sensore di distanza lineare, a un costo davvero irrisorio (2 LED ir e una schermatura qualsiasi), ma soprattutto potrà mappare l'output dell'algorimo in un valore metrico . A cosa servono i sensori Sharp nella maggiorparte delle applicazioni quando c'è questa possibilità a costi trascurabili?!
Ovviamente, i sensori Sharp, sono piu' liberi dal drift dato dalla luce ambientale e riflettività dell'ostacolo (fino a un certo limite), dato che sfruttano l'angolazione della luce riflessa, e non la sua intensità. Ma credo che questo limite in moltissime applicazioni sia trascurabile, vista anche la differenza di spesa.
Qui trovate il tutorial con la spiegazione completa:
Per tutti quelli che stanno utilizzando i vari algoritmi da me rilasciati per distance sensing con LED, in versione digitale (reverse biasing), consiglio di passare a questa configurazione (se si hanno analogiche disponibili), perchè piu' performante.
Non è strano perchè c'è di mezzo l'ABS... essa è una macro, e quindi ha vari sbattimenti sul fatto che c'è di mezzo una funzione. meglio cambiare
Serial.println(abs(getDistance()));
in
double distance = getDistance();
Serial.println(abs(distance));
Grazie mille non conoscevo questo particolare, che sembra davvero importante, modifico subito il tutorial da Serial.print(abs(getDistance())); in distance = getDistance; Serial.print(distance);
Che range ottieni?
Che LED stai utilizzando?
Sono a luce visibile?
sulla scrivania sembra essere lineare, dovrei provare a mapparlo in base ai millimetri.
Poi sinceramente sto usando i cavi rigidi da bread-board e ogni mezzo movimento si staccano, domani faccio partire l'ordine e mi dovrebbero arrivare quelli a filo intrecciato, molto più morbidi e adatti allo scopo