I några av dina projekt kommer du att behöva mäta avstånd. Du borde veta att VL53L0X är en enhet som gör det möjligt att mäta dem med hög precision. Dessutom gör dess lilla storlek och låga pris det perfekt för dina DIY-projekt, särskilt för att integrera med Arduino.
Det finns många enheter som kan mäta avstånd, några av dem är avståndsmätare baserade på ultraljud som avger ett ljud och när man studsar med objektet kan man med tillräcklig noggrannhet veta det avstånd som finns. Men om du vill ha högsta precision behöver du en optisk avståndsmätare. Denna typ av mätutrustning är baserad på laser, som är fallet med VL53L0X.
Vad är ToF?
Time of Flight eller ToF (Time-of-Flight) -kamera det är en teknik som används för att mäta avstånd. Den är baserad på optik, som mäter tiden som gått mellan ljusstrålens utstrålning och mottagningen. De kan vara CCD-, CMOS-sensorer och pulserna kan vara infraröda, laser etc. Systemet synkroniseras för att starta tidsmätningen precis när pulsen utlöses och stoppa räknaren när de mottar studsen av sensorn.
På det sättet avståndet kan beräknas ganska exakt. Det krävs bara en extra logisk krets som är integrerad i chipet för att utföra beräkningarna från det att strålen avfyras tills den tas emot och därmed bestämma avståndet. Principen är ganska enkel.
Denna typ av enhet används i robotteknik att låta roboten eller drönaren undvika hinder, att veta hur långt de är från ett mål, att upptäcka rörelse eller närhet, för bilsensorer som används för olika applikationer, att implementera en elektronisk mätare, till exempel en manöverdon så att Arduino gör något när det upptäcker viss närhet till ett objekt etc.
Vad är VL53L0X och datablad
El VL53L0X använder denna princip för att mäta avstånd med laserinfraröd. förra generationen. Tillsammans med en processor, som Arduino, kan det vara ett kraftfullt verktyg för mätning. Specifikt kan chipet fånga avstånd mellan 50 mm och 2000 mm, det vill säga mellan 5 centimeter och 2 meter.
För att mäta närmare avstånd behöver du förmodligen en variant av detta chip som heter VL6180X som låter dig mäta ett intervall mellan 5 och 200 mm, det vill säga mellan en halv centimeter och 20 centimeter. Om du vill hitta en liknande enhet men baserad på ultraljud av någon teknisk anledning bör du titta på HC-SR04, en annan ganska billig modul populär hos tillverkare.
El VL53L0X-chip har utformats för att fungerar även när det omgivande ljuset är ganska högt. Tänk på att ju större ljusföroreningar av miljön är, desto svårare blir det att fånga signalens studsande på ett adekvat sätt. Men i det här fallet är det inte för mycket problem. Dessutom kan kompensationssystemet som det integrerar mäta även om du använder det bakom skyddsglaset.
Det gör det till ett av de bästa avståndssensorerna som du hittar på marknaden. Med mycket högre precision än sensorer baserade på ultraljud eller infraröd (IR). Anledningen till att vara så exakt är att lasern inte påverkas av ekon eller reflektion från föremål som i de andra fallen.
För närvarande kan du hitta den integrerad i mulor med lite extra för cirka 16 € eller i enklare plattor på drygt 1 € eller 3 € i andra fall. Du vet redan att du hittar den i butiker som eBay, AliExpress, Amazon, etc. Det finns flera tillverkare av dessa enheter, så om du behöver veta detaljerna i den modell du har köpt är det bäst att kontrollera tillverkarens datablad som du har valt. Till exempel:
El VL53L0X Det har inuti chipet sändaren för laserpulsen och sensorn för att fånga den återgående strålen. I det här fallet är emittern en 940nm våglängdslaser och VCSEL-typ (Vertical Cavity Surface-Emitting Laser). När det gäller fångssensorn är det en SPAD (Single Photon Avalanche Diodes). Den integrerar också en intern elektronik som heter FlightSenseTM som beräknar avståndet.
El mätvinkel eller FOV (synfält) det är 25º i detta fall. Det motsvarar ett mätområde på 0,44 m i diameter på ett avstånd av 1 m. Även om mätområdet kommer att bero på omgivande förhållanden. Om det görs inomhus är det lite högre än om det görs utomhus. Det beror också på reflektansen för objektet du pekar på:
Målreflektion | Villkor | Interiör | Exteriör |
---|---|---|---|
Vitt mål | typisk | 200cm | 80cm |
Härma | 120cm | 60cm | |
Grått mål | typisk | 80cm | 50cm |
Minimo | 70cm | 40cm |
Dessutom har VL53L0X flera driftlägen som kan variera resultaten. Dessa lägen sammanfattas i följande tabell:
Mode | Tidpunkten | omfattning | Precision |
---|---|---|---|
som standard | 30ms | Ner till 1.2m | Se tabellen nedan |
Hög precision | 200ms | Ner till 1.2m | + / - 3% |
Lång räckvidd | 33ms | 2m | Se tabellen nedan |
Hög hastighet | 20ms | Ner till 1.2m | + / - 5% |
Enligt dessa lägen har vi flera standard- och långdistansnoggrannheter som du har i den här tabellen:
Interiör | Exteriör | |||||
---|---|---|---|---|---|---|
Målreflektion | Avstånd | 33ms | 66ms | Avstånd | 33ms | 66ms |
Vitt mål | en 120 cm | 4% | 3% | en 60 cm | 7% | 6% |
Grått mål | en 70 cm | 7% | 6% | en 40 cm | 12% | 9% |
Pinout och anslutning
För att allt detta ska fungera ordentligt behöver du ett gränssnitt med omvärlden. Och det uppnås genom några stift eller anslutningar. Pinout på VL53L0X är ganska enkelt, det har bara 6 stift. För sin integration med Arduino kan kommunikation ske via I2C.
För att mata det kan du anslut stift Så:
- VCC till 5v från Arduino
- GND till GND av Arduino
- SCL till en Arduino analog pin. Till exempel A5
- SDA till en annan analog stift. Till exempel A4
- GPI01- och XSHUT-stiften behöver inte användas för tillfället.
Integration med Arduino
Som för många andra moduler har du också VL53L0X bibliotek (t.ex. det för Adafruit) av tillgänglig kod som du kan använda för att arbeta med vissa funktioner när du skriver källkoden för att hantera ditt projekt i Arduino IDE. Om det är första gången du använder Arduino rekommenderar jag vår programmeringshandbok.
Ett exempel på Enkel kod för dig att göra mätningar och visa mätvärden genom seriell port så att du kan se det från din PC-skärm medan du har anslutit Arduino-kortet är:
#include "Adafruit_VL53L0X.h" Adafruit_VL53L0X lox = Adafruit_VL53L0X(); void setup() { Serial.begin(9600); // Iniciar sensor Serial.println("VL53L0X test"); if (!lox.begin()) { Serial.println(F("Error al iniciar VL53L0X")); while(1); } } void loop() { VL53L0X_RangingMeasurementData_t measure; Serial.print("Leyendo sensor... "); lox.rangingTest(&measure, false); // si se pasa true como parametro, muestra por puerto serie datos de debug if (measure.RangeStatus != 4) { Serial.print("Distancia (mm): "); Serial.println(measure.RangeMilliMeter); } else { Serial.println(" Fuera de rango "); } delay(100); }
I Adafruits eget bibliotek har du fler exempel på användning om du behöver det ...