Ho quindi provato il sensore VL6180X della ST montato da Pololu su un breakout, un sistema che e' sostanzialmente un piccolo lidar ad infrarossi molto piccolo ed economico (circa 10 euro) con connessione I2C che calcola il tempo di ritorno di un impulso luminoso. Il sensore ha un raggio di azione massimo di 20 cm ma funziona al meglio entro i 10 cm
Per interfacciarsi con Arduino si puo' usare la comoda libreria
Effettuando 1000 misure e mediando il dato e spostando il bersaglio di circa 1mm (non ho la possibilita' di verificare che gli spostamenti siano effettivamente di 1mm, sono piuttosto interessato a vedere il valore della standard deviation)
Nella seconda riga c'e' un errore sul valore della misura. il valore di St.Dev e' corretto |
come si deve il valore della StDev e' circa la meta' di quella ottenuta con il sensore ultrasonico SR-04. Da varie esperienze si puo' dire che un valore di riferimento sulla standard deviation e' di 1.3 mm
Il vantaggio rispetto al SR-04 e' che si tratta di una misura sostanzialmente assoluta perche' e' indipendente dalla riflettanza del bersaglio e non risente dell'illuminazione ambientale perche' ha un altro sensore per la correzione
Di seguito lo sketch utilizzato
-------------------------------------------------------------------
#include <Wire.h>
#include <VL6180X.h>
#include "Statistic.h"
VL6180X sensor;
Statistic myStats;
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.configureDefault();
sensor.setTimeout(500);
myStats.clear();
}
void loop()
{
for (int t=0;t<1000;t++)
{
if (!sensor.timeoutOccurred())
{
myStats.add(sensor.readRangeSingleMillimeters());
}
}
Serial.print(" Count: ");
Serial.println(myStats.count());
Serial.print(" Min: ");
Serial.println(myStats.minimum(),4);
Serial.print(" Max: ");
Serial.println(myStats.maximum(),4);
Serial.print(" Average: ");
Serial.println(myStats.average(), 4);
// uncomment in Statistic.h file to use stdev
#ifdef STAT_USE_STDEV
Serial.print(" pop stdev: ");
Serial.println(myStats.pop_stdev(), 4);
Serial.print(" unbias stdev: ");
Serial.println(myStats.unbiased_stdev(), 4);
#endif
Serial.println("=====================================");
myStats.clear();
delay(10000);
}
Nessun commento:
Posta un commento