Pages: [1]   Go Down
Author Topic: Tutorial sensore di distanza a LED lineare  (Read 1327 times)
0 Members and 1 Guest are viewing this topic.
Milan
Offline Offline
Edison Member
*
Karma: 2
Posts: 1128
gioblu.com
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-mr-green smiley-mr-green. A cosa servono i sensori Sharp nella maggiorparte delle applicazioni quando c'è questa possibilità a costi trascurabili?!  smiley-mr-green

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:
http://www.gioblu.com/tutorials/sensori/285-sensore-distanza-led-analogico

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.
« Last Edit: January 16, 2012, 01:03:53 am by gbm » Logged

Community robotica / programmazione Arduino
www.gioblu.com

Milan
Offline Offline
Edison Member
*
Karma: 2
Posts: 1128
gioblu.com
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono riuscito ad aumentare il range a + di 5 metri, anche di giorno  smiley-mr-green
Logged

Community robotica / programmazione Arduino
www.gioblu.com

Milan
Offline Offline
Edison Member
*
Karma: 2
Posts: 1128
gioblu.com
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

scusa quali sono i tuoi dubbi  smiley-mr-green!??!
Rencidi partecipi sono curioso, magari non ho considerato qualcosa?!

« Last Edit: January 16, 2012, 11:29:14 am by gbm » Logged

Community robotica / programmazione Arduino
www.gioblu.com

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10463
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

funziona, leggo la distanza della scivania, monito e case del pc, oltre i 30cm non l'ho testato. ma alle volte ottengo numeri negativi.... esempio:

Quote
387.11
6113.67
89294.87
9007.44
-4479.82
57443.30
-14922.34
-13930.00
-37196.26
12856.48
-6227.09
-7666.48
-257.99
1000.00
1149.61
1159.18
1146.77
1053.74
1106.68
1242.95

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));
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Milan
Offline Offline
Edison Member
*
Karma: 2
Posts: 1128
gioblu.com
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Lesto!! Filtravo a posteriori i numeri negativi!!!
Ma senti salvandola in distance smetti di ottenere i numeri negativi?!
Logged

Community robotica / programmazione Arduino
www.gioblu.com

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10463
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

certo, il problema è con le macro. Non vanno d'accordo con le funzioni, in pratica la macro è definita così:
#define abs (x)?(x):-(x);

ed ecco il prblema: ogni occorrenza di x viene sostituita con la parola contenuta nel parametro di abs...

quindi
Serial.println( abs(getDistance()) );

in fase di compilazione diventa;
Serial.println( (getDistance())?(getDistance()):-(getDistance()) );

quindi puoi vedere bene che oltre a non funzionare, chiami 2 volte getDistance()

Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Milan
Offline Offline
Edison Member
*
Karma: 2
Posts: 1128
gioblu.com
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Ottieni un valore lineare?
Logged

Community robotica / programmazione Arduino
www.gioblu.com

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10463
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bravissimo gbm... appena ho un po di tempo lo provo... mi interessa molto!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì interessantissimo, complimenti, mi serviva proprio una cosa del genere, lo proverò anch'io! Ma come si chiama quel porta led doppio che usi?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10463
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eheh robba buona, fatta in casa smiley

http://www.gioblu.com/prodotti?page=shop.product_details&flypage=flypage_images.tpl&product_id=184&category_id=63
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: