VIDI Project X #66: Alarm s VL53L1X laserskim senzorom udaljenosti - 5.0 out of 5 based on 1 vote
VIDI Project X #66: Alarm s VL53L1X laserskim senzorom udaljenosti

VIDI Project X #66: Alarm s VL53L1X laserskim senzorom udaljenosti

Alarm sa senzorom udaljenosti

Jeste li ikada poželjeli imati alarm koji bi vam rekao je li netko narušio vašu privatnost, prešao granicu koju nije trebao prijeći ili pomaknuo predmet koji nije smio dirati?

Alarmni sustav moguće je izvesti na razne načine. Za taj zadatak odlučili smo iskoristiti VL53L1X laserski senzor udaljenosti.

Ovaj alarm otkrit će je li netko prešao granicu koju nije trebao prijeći, pomaknuo predmet koji nije smio dirati ili je na neki drugi način narušio vašu privatnost.

Spomenuti senzor može se koristiti u raznim namjenama. Koristi se kao senzor za otkrivanje gesti, nerijetko u kombinaciji s dva ili više takvih senzora, kako bi detektirali i smjer kretanja ruku pri gestikulaciji, no njime možete isto tako i mjeriti brzinu kretanja nekih manjih objekata. Manjih kažemo jer je ograničen na mjerenje udaljenosti do 4 metra.

 

Princip rada VL53L1X laserskog senzora udaljenosti

VL53L1X laserski senzor udaljenosti radi na principu mjerenja vremena koje je potrebno svjetlosti da prijeđe od senzora do objekta te se odbije od objekta i dođe natrag do senzora. Kako bi svjetlost prešla 1 mm potrebno joj je 3,336 ps (pikosekundi). Pretvoreno u sekunde to iznosi 3,336 * 10-12 (deset na minus dvanaestu) sekundi. Dakle, potrebno je mjeriti vrijeme na 10-13 (deset na minus trinaestu) decimalu kako bi s preciznošću mogli mjeriti udaljenost uz pomoć brzine svjetlosti koja iznosi 299792 km/s. Dakle, radi se o brzini svjetlosti u vakuumu. U zemljinoj atmosferi svjetlost se kreće nešto sporije, a brzina joj je 299709 km/s.

 

 speedOfLight.jpg

Galileo Galilei prvi je pokušao izmjeriti brzinu svjetlosti uz pomoć fenjera i dva promatrača na brdima udaljenim kilometar i pol, no preciznije mjerenje izveo je Albert Abraham Michelson uz pomoć rotirajućih zrcala te refleksije svjetlosti s brda na brdo udaljeno oko 35 kilometara. Danas znamo kako je njegov rezultat imao pogrešku od samo 0.001%, što je iznimna točnost za tehnologiju dostupnu 1927. godine.
 

Što je gustoća veća, svjetlost će se sporije kretati. Tako se svietlost u staklu kreće brzinom od 224901 km/s, prema izvoru informacija sa stranice wolframalpha.com.

Treba imati na umu i lomove svjetlosti. Sjetite se “lokvi vode” na cesti koje vidite u daljini za vrućega ljetnoga dana. Te “lokve vode” nastaju uslijed loma svjetlosti kod promjene temperature zraka koji je topliji u blizini asfalta, a hladi se uzdizanjem u zrak. Rezultat koji vidi naše oko je crna fleka koja se pomalo pomiče uslijed promijene temperature zraka tj. rekli bismo - kako vjetar puše.
Takve pojave nazivaju se fatamorgana i upravo zbog njih teško je na većim udaljenostima precizno odrediti udaljenost koristeći brzinu svjetlosti. Mjerite li udaljenost s brežuljka na brežuljak trebali biste ukalkulirati promjenu temperature zraka uslijed razlike u relativnoj visini svjetlosne zrake od mjesta na brežuljku s kojeg mjerite te razlike u relativnoj visini svjetlosne zrake od udoline iznad koje prolazi vaša zraka kako ne biste dobili efekt mjerenja duljine uz pomoć labavo nategnute, da ne kažemo viseće špage.

 

Ponešto o valnim duljinama infracrvene svjetlosti

Sada kada znate mane i prednosti mjerenja udaljenosti uz pomoć svjetlosti i kako ne biste morali previše razbijati glavu “visi” li vaše svjetlo, odabrali smo VL53L1X senzor, koji je u stanju mjeriti udaljenosti od 4 cm do 4 metra.

VL53L1X senzor koristi svjetlost valne duljine 940 nm koja je nevidljiva ljudskom oku. Radi se o Class1 laserskoj zraci, koja se nalazi pri rubu infracrvenog spektra svjetlosti.

 

 IMG_20210323_114751.jpg

 Udaljenost izmjerena metrom poklapa se s udaljenosti dobivenom senzorom
 

 

Za one koji žele znati više:

U kamerama za noćno snimanje najčešće se koristi infracrveno svjetlo valne duljine 850 nm, koje će pružiti veću udaljenost i jasniju sliku noćnog vida.

VL53L1X senzor je kao takav pogodan za korištenje u situacijama kada ga želite sakriti iza raznih staklenih materijala, a ima i programabilnu širinu snopa laserske zrake.

Često se primjenjuje u izradi 2D linijskog radara (lidar). Kako bi mogli napraviti takav radar potrebno je senzor rotirati u 360°, za što vam je osim mehanizma za rotaciju potreban i elektromehanički dio koji može prenositi električnu struju i signal podataka s fiksnog uređaja na rotirajući uređaj.

U DIY izvedbi često vidimo slične uređaje koji su napravljeni od nekoliko VL53L1X senzora te se kao takvi ne rotiraju u 360°, nego uz korištenje, recimo, 4 komada možete uređaj rotirati za 90° i postići efekt 2D linijskog radara koji “vidi” 360°.

U ovoj radionici koristit ćemo VL53L1X senzor za kreiranje alarma.

Alarm će se sastojati samo od VL53L1X senzora i VIDI X mikroračunala. Tako ćemo senzor moći postaviti gdje god je potrebno, a time možemo pokriti liniju u dužini 4 metra. Kada netko prekine lasersku zraku senzora, senzor će VIDI X mikroračunalu javiti udaljenost koju je izmjerio te će zvučnim signalom upozoriti o narušenoj privatnosti.

Alarm možete usmjeriti i na vrata ili neki drugi predmet koji će ga, ukoliko se pomakne, aktivirati. Treba imati na umu kako laserska zraka ima svoju širinu te ukoliko ju usmjerite prema neravnoj površini, npr. prema zidu ali pod kutom, dobit ćete različita očitanja udaljenosti. Jednom će to biti ona kraća udaljenost do zida, dok će drugi puta biti ona duža.

 

 Senzor.jpg

 Kamera mobitela može vidjeti svijetlost senzora valne duljine 940 nm jer se koristi za kamere s noćnim snimanjem.
 

Shema spajanja

Senzor VL53L1X koristi I2C komunikaciju s VIDI X-om te je stoga potrebno saznati njegovu I2C (I kvadrat C) adresu.

I2C komunikacijski protokol koristi dvije žice za razmjenu informacija. Jedan se koristi za signal takta (SCL), a drugi za slanje i primanje podataka (SDA). Na mnogim pločama linija SDA također može biti označena kao SDI, a linija SCL kao SCK.

SDA i SCL vodovi su aktivni kada je njihovo stanje 0 (LOW) pa ih treba spajati putem pull-up otpornika. Pull-up otpornik je otpornik koji je spojen s +3 V vodom, za razliku od pull-down otpornika koji je spojen GND žicom.

Tipične vrijednosti otpornika za uređaje od 5 V su 4,7 KOhma tj. 2,4 KOhma za uređaje koji koriste 3,3 V. Duljina kabela će utjecati na kvalitetu veze te tako i na vrijednosti otpornika.

Sam senzor ima ugrađene otpornike na SCL i SDA vodovima, no kako očitanja nisu bila stabilna dodali smo još po jedan otpornik od 10 KOhma. Sada je stanje bilo bolje, no veza je bila iznimno spora te smo dodali po još jedan otpornik od 10 KOhma kako bismo dobili vrijednosti otpora od 5 KOhma zbog njihovog paralelnog spoja. Tako smo dobili stabilniju I2C komunikaciju.

Ako su otpornici povezani u nizu jedan za drugim, kažemo da su spojeni serijski. U tom slučaju jakost struje kroz svaki otpornik ima jednaku vrijednost. Kao primjer uzmimo dva otpornika, s otporima R1 i R2, koji su spojeni u seriju.

Dva serijski spojena otpornika s otporima R1 i R2 djeluju u strujnom krugu na isti način kao da je umjesto njih u strujni krug uključen jedan otpornik s otporom R=R1+R2, koji nazivamo ukupni ili ekvivalentni otpor.

Dakle, otpornici se mogu spajati na različite načine. Svi načini spajanja mogu se svesti na kombinacije dvaju osnovnih načina spajanja: serijski i paralelni način spajanja otpornika u strujni krug.

U paralelnom spoju dvaju otpornika recipročna vrijednost ukupnog otpora jednaka je zbroju recipročnih vrijednosti pojedinih otpornika spojenih paralelno.

1 / R = (1 / R1) + (1 / R2)

 

 Shema-spajanja.jpg

 

I2C komunikacija

Prisjetimo se, pretkonfigurirani pinovi za I2C komunikaciju kod ESP32 čipa su GPIO21 i GPIO22 te je tako postavljeno za gotovo sve biblioteke koje ćete pronaći na internetu.

Spomenuti SDA pin kod VIDI X mikrokontrolera je GPIO21, dok je SCL postavljen na GPIO22, no kako je na GPIO21 postavljen DC (data clock) pin LCD-a, a na GPIO22 spojen je CS (chip select) pin za SD karticu potrebno je koristiti neke druge pinove za I2C komunikaciju ukoliko želite koristiti LCD VIDI X-a. Kao zamjenski pinovi bit će dostatni bilo koji PWM pinovi. Dakle, ukoliko želite koristiti ekran kao što ga koristimo u ovoj radionici te pretkonfigurirane pinove je potrebno postaviti na neke druge. Mi smo odabrali GPIO32 i GPIO33, iako smo mogli odabrati bilo koji ulazno izlazni pin s PWM (Power With Modulation) sposobnostima.

Kako bi komunicirali sa senzorima putem I2C veze potrebno je znati njihovu adresu. Adresu ćete saznati uz pomoć i2c_scan.ino skice, koju možete preuzeti sa Vidilabovog GitHub repozitorija

https://github.com/VidiLAB-com/Vidi-X/tree/master/i2c_scan

 

U spomenutoj skici definirali smo pinove za I2C komunikaciju naredbama

#define I2C_SDA 33
#define I2C_SCL 32

Sada I2C senzor spajate umjesto gumbiju A i B VIDI X mikroračunala prema priloženoj shemi na pinove GPIO32 i GPIO33. Svakako ne zaboravite spojiti GND pin te pin 3V3 napajanja.

Adresu senzora koju dobijemo na serijsku konzolu treba zapisati kako biste ju mogli koristiti za komunikaciju s našim VL53L1X senzorom.

 

 Senzor_I2C_scaning.jpg

 

Programski kod

Osim adrese senzora trebamo i biblioteku za korištenje VL53L1X senzora.

Library koji trebate instalirati u Arduino IDE pronaći ćete tako da odete u Library Manager i u tražilicu upišete VL53L1X, nakon čega ćete dobiti popis od nekoliko libraryja na izbor. Među gomilom prepoznajemo SparkFun te odabiremo upravu tu biblioteku smatrajući kako će najbolje obaviti traženi posao.

 

 Library.jpg

 

Sada možete promijeniti adresu za komunikaciju sa senzorom u adresu dobivenu iz I2C_scan skice. Mi smo dobili 0x29 adresu te smo ju promijeniti u kodu biblioteke na 115 liniji koda u

int _i2cAddress = 0x29;

u datoteci koja se nalazi u mapi biblioteke, u našem slučaju na putanji

C:\Users\Podrska\Documents\Arduino\libraries\SparkFun_VL53L1X_4m_Laser_Distance_Sensor\src \ SparkFun_VL53L1X.h

 

Library_editiran.jpg

 

Uvjerite se da su mikro prekidači u poziciji za upload koda kao na slici.

 

s1.jpg

 

Sada smo spremni kompajlirati i flashati VIDI X s kodom koji ste preuzeli s linka https://github.com/VidiLAB-com/Vidi-X/tree/master/VIDI-X-Alarm

Ne zaboravite postaviti mikro prekidače na S2 panelu oznaka BTN_A i BTN_B u poziciju USE EXP.

 

s2.jpg

 Ne zaboravite postaviti mikro prekidače na S2 panelu oznaka BTN_A i BTN_B u poziciju USE EXP.

 

Kod radi tako da pritiskom Select gumba određujete udaljenost koja, ukoliko se promijeni, pali alarm.
Ovaj postupak možete ponoviti više puta. Kada ste zadovoljni, možete aktivirati alarm pritiskom gumba Menu, koji će zvučnim signalom upozoriti kako je alarm aktiviran ili deaktiviran ponovnim pritiskom istog gumba.

Sada se prati promjena očitanja udaljenosti.

S obzirom na to da laserska zraka ima određenu širinu te je stoga prisutna i pogreška očitanja ovisno o kutu pod kojim zraka pada na površinu koja se prati, u if uvjetu pratimo promjenu udaljenosti ukoliko se ona promijeni za 300 milimetara.

Eksperimentirajte sa spomenutim if uvjetom i otkrijte koliko je vaš primjerak senzora uistinu precizan te može li se umjesto 300 milimetara postaviti razlika od 10 milimetara.

Samo da znate, može, no to uvelike ovisi o načinu postavljanja senzora, kao i o materijalu i reljefu objekta u koji je laserski senzor usmjeren.

 

Zadatak 1:

U ovome kodu ostavili smo jednu grešku koju morate ispraviti. Dakle obratite pozornost na zadnji if uvjet u kodu koji glasi

if ( distance < ( Udaljenost - 300 ) ) {  //Ukoliko se udaljenost smanjila za 30 centimetara

Taj uvjet provjerava je li objekt smanjio udaljenost što je dobra opcija za nadzor kada laserski senzor uperite u zid pa prođe li netko hodnikom, smanjila se udaljenost do objekta i alarm će se aktivirati.
No, uperite li laserski senzor u neki predmet koji osiguravate alarmom, a predmet se počne udaljavati od senzora, ovako postavljen if uvjet neće aktivirati alarm.
Prilagodite kod kako bi alarm radio u oba slučaja.

 

IMG_20210322_094648.jpg

 

Zadatak 2:

Popravite kod tako da se alarm nakon aktivacije pokrene nakon 30 sekundi, kako bi još jednom mogli proći kroz njegovu lasersku zraku prije nego što zaista postane aktivan.

Ocijeni sadržaj
(1 Glasaj)

Vezani sadržaj:

  • VIDI Project X #48: VIDI X mikroračunalo i MySQL server

    VIDI X kao tihi alarm

    U ovom projektu koristit ćemo ultrazvučni senzor udaljenosti i VIDI X mikroračunalo te ćemo pod određenim uvjetima dobivena očitanja zapisati u MySQL bazu podataka za kasniju analizu.

  • VIDI Project X #50: ESP32 Prekidi (engl. Interrupts)

    Prekidi su funkcije koje se izvršavaju odmah nakon što je okidač (pritisak gumba ili drugi događaj) signalizirao da se funkcija prekida mora izvršiti. Najčešće se koriste za pokretanje debug procedure, no mogu služiti i u druge svrhe.

    Prekide ima gotovo svaki mikroprocesor. Oni služe kako bi se za određenu akciju program, ili neki njegov dio, pokrenuo, zaustavio ili preusmjerio. Primjer prekida kod vašeg mobitela je čekanje akcije pritiska gumba kako bi se upalio ekran mobitela. Sve dok gumb nije stisnut, mobitel je u „sleep modu“ kako bi uštedio bateriju. Njegovo buđenje i paljenje ekrana uzrokovano je hardverskim prekidom pritiska gumba.

  • Zaštita stakla mobitela

    Kucni o drvo

    Kupnja novog mobitela premium klase, posebno onog sa zaobljenim ekranom, može vas ispuniti anksioznošću. Dok standardne ravne zaslone možete lagano zaštititi, zakrivljena stakla su posve druga priča jer su izloženija direktnim udarcima

  • Zamašćeno računalo

    Pozdrav kompletnoj redakciji,

    Redovito čitam časopis VIDI, no nisam vidio jeste li u nekom broju možda imali rješenje mog problema. Možda mi je promaklo :)

  • Računalo za 6000 kn

    Pozdrav doktore,

    Trebao bih savjet oko kupovine računala. Na raspolaganju imam 6.000 kn. Nisam siguran bih li za to kupio laptop, desktop (uz tipkovnicu + monitor) ili All-in-One računalo.

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.