Izmerimo hitrost in razdaljo
Natančen merilnik hitrosti in/ali razdalje lahko ob hitrem napredku računalniških tehnologij v zadnjem desetletju sorazmerno enostavno sestavimo tudi sami. Katere so njegove prednosti pred serijskimi izdelki? Je dovolj majhen za namestitev na gorsko ali mestno kolo?
Hitrost vozila izračunamo na osnovi prevožene razdalje v izbranem časovnem intervalu, pri čemer razdaljo navadno merimo s štetjem obratov enega izmed koles, medtem ko oddaljenost do stojiščne točke do bližnjih predmetov izmerimo z laserskim, ultrazvočnim ali mehanskim merilnikom. Hitrost in razdaljo lahko merimo tudi prek sprejemnika signalov GPS (angl. Global Positioning System), a z njim ne moremo dovolj natančno izmeriti razdalj, krajših od 10 m, hkrati pa se moramo tudi fizično premakniti med obema točkama, podobno, kot če bi uporabljali mehansko merilo (npr. kovinski trak ali mehanski števec z vrtljivim kolesom), zato je tak merilnik uporaben predvsem kot brzinomer.
Merilnik hitrosti na osnovi sprejemnika GPS.
Kako začeti?
Čeprav v spletnih trgovinah mrgoli že izdelanih merilnikov, nam lastna implementacija omogoča več: poljubno izbiro načina prikaza izmerjenih vrednosti, večjo natančnost, poljubne možnosti shranjevanja meritev, razne statistične obdelave, upoštevanje meritev sekundarnih merilnikov, denimo višinomera in/ali sprejemnika GPS, vgradnjo umetne inteligence itn., s tem pa tudi sprotno preverjanje pravilnosti delovanja posameznih tipal za merjenje razdalje in hitrosti. Nasprotno sta pri serijskih merilnikih za proizvajalca pomembna predvsem cenenost izdelave in z njo povezana stroga optimizacija funkcionalnosti, med katerimi navadno ni možnosti sprotnega prenosa podatkov v osebni računalnik in programskega proženja meritev.
Projekti gradnje merilnikov hitrosti in razdalje na spletu večinoma temeljijo na enem izmed serijskih Arduinovih mikrokrmilniških vezij (večina na Arduinu UNO) z grajeno povezavo USB za komunikacijo z osebnim računalnikom. Za merjenje hitrosti ali razdalje potrebujemo le še ustrezno tipalo (ali tipala), za sproten avtonomen prikaz izmerjenih vrednosti pa tudi prikazovalnik, na katerem grafično ali zgolj številčno prikažemo hitrost in/ali razdaljo. Omislimo si lahko od enostavnih dvobarvnih segmentnih ali grafičnih prikazovalnikov do zmogljivih barvnih v tehnologijah LCD ali OLED, ki jih z mikrokrmilniškim vezjem praviloma, prav tako kot tipala, povežemo prek zaporednega vodila SPI ali I2C.
Standardizacija in homologacija merilnikov
Medtem ko na kolesu slovenska prometna zakonodaja ne predpisuje merilnika hitrosti in imamo zato pri njegovi izbiri proste roke, mora biti v motorna vozila, za katera je predpisan, izdelan po veljavnih predpisih in standardih, njegovo delovanje pa preverjeno s testiranji, ki jih izvede proizvajalec vozila, preden to dobi dovoljenje za uporabo v cestnem prometu. Na osnovi testiranj vozila in merilnika pridobi proizvajalec tudi homologacijo vozila, zato merilnikov v instrumentni plošči takega vozila ne smemo zamenjevati z doma narejenimi ali jih prirejati. Lastne merilnike lahko dodamo kvečjemu tako, da ti delujejo vzporedno, vendar pa je tu vseeno potreben poseg v elektroniko vozila, saj moramo pridobiti signal(e) iz tipal(a), ki merijo hitrost(i) vrtenja posameznih koles. Morda je zato še najbolje, če za natančno alternativno merjenje hitrosti motornega vozila uporabimo kar merilnik na osnovi sprejemnika signalov GPS, lahko pa tudi serijsko navigacijsko napravo.
Natančno številčno izraženo hitrost avtomobila je mogoče pri nekaterih novejših avtomobilih prebrati tudi prek standardnega digitalnega vmesnika (OBD, OBD-II itn.), vendar pri tem nujno potrebujemo tudi ustrezne podatke proizvajalca, o tem kako dostopati od izmerjenih vrednosti (npr. po protokolu CAN). Upoštevati moramo tudi, da vgrajeni merilniki ne kažejo dejanske hitrosti, ampak za okoli 5 % večjo, saj se nikakor ne sme zgoditi, da bi plačali kazen za prehitro vožnjo, če vozimo po omejitvah glede na prikazano hitrost na brzinomeru. Pri tem je vsekakor upoštevana tudi toleranca zaradi mogoče izrabe gum in s tem povezanega skrajševanja obsega koles …
Poleg lastne implementacije se lahko odločimo tudi za predelavo nekaterih maloserijskih merilnikov z nedokumentiranimi (testnimi) priključki, prek katerih jih lahko upravljamo in/ali shranjujemo rezultate meritev neposredno v osebni računalnik. To je smiselno predvsem pri kompleksnejših merilnikih, kot je laserski merilnik razdalje, saj bi jih zaradi nekaterih mehanskih delov (npr. optike pri laserskem merilniku) težko izdelali sami.
Čeprav s povezovanjem strojne opreme navadno ni težav, potrebujemo tudi ustrezno vgrajeno programsko opremo. Ta je na voljo s spleta le, če se lotimo izdelave merilnika natančno po projektu na spletu, sicer pa moramo izvorno kodo prilagoditi svoji konfiguraciji strojne opreme ter lastnim željam in potrebam.
Merjenje hitrosti vozil
Za merjenje lastne hitrosti vozila večinoma uporabljamo magnetna ali optična tipala, ki večinoma omogočajo štetje obratov kolesa, na katerem merimo hitrost, vendar lahko razdaljo merimo tudi natančneje, če tipalo ob vsakem obratu kolesa odda po več impulzov, od katerih vsak predstavlja del zasuka. Na ta način zelo natančno merijo razdaljo (na 0,02 mm oziroma 1200 pik na inč) klasične elektromehanske računalniške miške s kroglico, ki prek valjčkov poganja perforirana kolesca, ta pa prekinjajo svetlobni tok med oddajno in sprejemno diodo ter s tem ustvarjajo impulze, ki ustrezajo zelo majhnim premikom miške.
Krmilna enota kolesarskega merilnika razdalje in hitrosti na osnovi Arduina.
Res pa je, da pri običajni uporabi vozila tako natančnih podatkov o hitrosti in prevoženi razdalji ne potrebujemo, saj že pri hitrosti 7,2 km/h (na primer pri kolesu s 26-colskimi kolesi) vsako sekundo dobimo nov impulz. Mikrokrmilnik merilnika nato z merjenjem časa, ki poteče med dvema impulzoma, natančno izračuna hitrost kolesa ter hkrati skupni prevoženi razdalji prišteje dolžino obsega kolesa.
Če želimo meriti krajše razdalje, lahko na kolo kolesa simetrično dodamo še eno magnetno ploščico, kar pomeni, da bo mikrokrmilnik ob isti hitrosti kolesa naštel dvakrat več impulzov, od katerih bo vsak predstavljal le pol obsega kolesa, zato bomo razdaljo merili dvakrat natančneje, osveževanje prikaza hitrosti pa bo dvakrat hitrejše. Če po obsegu kolesa enakomerno razporedimo še več magnetnih ploščic, lahko natančnost merjenja še nekajkrat povečamo.
Omenjeno lahko poskusimo tudi pri serijskih kolesarskih merilnikih, vendar imajo ti pogosto precej omejene možnosti vnosa premera ali obsega kolesa kolesa, zato je malo verjetno, da bi lahko uporabljali več kot dve magnetni ploščici.
Merjenje oddaljenosti z ultrazvokom in lasersko svetlobo
Razdalje do nekaj metrov lahko sicer merimo z mehanskimi merili do 1 mm natančno, a so elektronski merilniki, s katerimi meritev izvedemo brez pomočnikov kar s svojega stojišča, nemalokrat natančnejša in udobnejša.
Za merjenje oddaljenosti lahko uporabimo standardni ultrazvočni modul HC-SR-04 s štirimi priključki (napajanje +5V, masa, krmilni vhod in merilni izhod), ki je namenjen povezavi z Arduinovo mikrokrmilniško ploščico. Prek krmilnega priključka mikrokrmilnik sproži samodejno zaporedje osmih ultrazvočnih impulzov, prek merilnega priključka pa nato izmeri trajanje logičnega stanja 1, ki traja, dokler ultrazvočni mikrofon (sprejemnik) zaznava odbite impulze. Snovalci modula HC-SR-04 so s tem v največji meri poenostavili pisanje ustrezne programske opreme in domačim razvijalcem omogočili uporabo manj zmogljivih mikrokrmilnikov.
Vendar če bi bil izhod HC-SR-04 alogen in bi vračal zgolj vrednost napetosti iz ultrazvočnega mikrofona, bi morali za zajem signala uporabiti mikrokrmilnik z dovolj hitrim analogno-digitalnim pretvornikom, a bi hkrati lahko uporabljali lastne algoritme za določanje oddaljenosti in morda celo bistveno povečali doseg tipala. Z vgradnjo umetne inteligence bi nemara lahko celo površno zaznavali obliko in površino predmetov, v katere smo usmerili ultrazvočne impulze, še posebej, če bi tipalo obračali v različne smeri. Podobno velja pri ustvarjanju ultrazvočnih impulzov, katerih obliko, število in trajanje bi lahko določili v vgrajeni programski opremi mikrokrmilnika, če bi imeli na razpolago dovolj hiter digitalno-analogni pretvornik.
Po drugi strani si za merjenje zares kratkih razdalj lahko omislimo tudi laserski modul VL53L0X za Arduinove mikrokrmilniška ploščice z lasersko diodo 940 nm, s katerim dokaj natančno merimo razdalje do 125 cm. Povezava z mikrokrmilnikom je izvedena, podobno kot pri ultrazvočnem tipalu HC-SR-04, prek štirih električnih vodnikov (napajanje +5 V, masa, urin signal – SCL, podatkovni signal – SDA), le da je uporabljen komunikacijskih protokol I2C, katerega uporaba zahteva precej več programerskega znanja. K sreči so pri Adafruitu za mikrokrmilniški ploščici Arduino UNO in Genuino UNO pripravili tudi ustrezno programsko knjižnico s primeri uporabe.
Montaža krmilne enote kolesarskega merilnika na gorsko kolo.
Vgrajena programska oprema
Osnovni nalogi v mikrokrmilnik merilnika vgrajene programske opreme sta proženje meritev in merjenje časa, ki poteče med dvema impulzoma tipala za dolžino in/ali hitrost. Boljši mikrokrmilniki imajo vgrajene digitalne časovnike, ki jih lahko s pridom izkoristimo za ustvarjenje vlaka impulzov, s štetjem katerih nato merimo čas med dvema impulzoma. Za štetje impulzov časovnika potrebujemo tudi števec, ki ga lahko implementiramo programsko, veliko enostavneje in natančneje pa to nalogo opravlja namenska funkcionalna enota mikrokrmilnika, če jo ta ima. Pri manj zmogljivih mikrokrmilnikih lahko namesto tega merimo čas med dvema impulzoma tudi z branjem registra procesorske ure, katerega vrednost se enakomerno povečuje s taktom procesorja, pri čemer lahko število impulzov izračunamo kot absolutno vrednost razlike med začetno in končno vrednostjo časovnika. Absolutno vrednost moramo upoštevati zato, ker ima časovnik le omejeno število bitov (npr. 32), in ko jih prekorači, ponovno šteje od 0. Če vsega omenjenega nimamo ni na voljo, lahko merimo trajanje tudi kot število ponovitev določene programske zanke, v kateri med drugim čakamo na nov impulz tipala … Sledi pretvorba števila preštetih impulzov časovnika v dejanski čas trajanja intervala in nato v hitrost, pri čemer moramo upoštevati tako trajanje posameznega impulza časovnika kot tudi obseg kolesa.
Za komunikacijo s kompleksnejšimi tipali, denimo laserskim modulom VL53L0X, moramo uporabiti enega izmed protokolov SPI ali I2C, vendar lahko s spleta navadno prenesemo tudi ustrezne programske knjižnice. Če pa se lotevamo razvoja vgrajene programske opreme za nepodprt mikrokrmilnik, moramo na spletu poiskati ustrezne zglede oziroma dokumentacijo komunikacijskega protokola, ki ga nato implementiramo v programski kodi.
Ostane še tekstovni in/ali grafični prikaz meritev. Številni projekti na spletu vključujejo grafične dvo- ali večbarvne prikazovalnike LCD, s katerimi je mogoče posnemati tudi delovanje analognih prikazovalnikov. Ličnost prikaza je vsekakor odvisna od kakovosti in primerne velikosti prikazovalnika. Vseeno pa programiranje ustrezne grafične podobe z dovolj hitrim prikazovanjem izmerjenih vrednosti ni tako enostavno kot preprost številčni prikaz na segmentnem prikazovalniku, ki ga uporabljajo avtorji manj zahtevnih projektov.
Prototipni ultrazvočni merilnik razdalje na osnovi Arduina in modula HC-SR-04.
Po drugi strani nam nihče ne brani, da ne bi z mikrokrmilnikom krmilili digitalno-analognega pretvornika, z njim pa voltmeter, ki bi mu za prikaz hitrosti zamenjali skalo z izpisanimi vrednostmi. Po tem principu še danes deluje večina avtomobilskih merilnikov hitrosti, saj ni treba programirati grafičnega zaslona. Če pa dodamo še enega preprostejših LCD, lahko na njem sproti izpisujemo tako natančno številčno vrednost hitrosti kot tudi prevoženo razdaljo.
Predelava maloserijskega laserskega merilnika
Pri posegu v že izdelan merilnik razdalje ali hitrosti je potrebno veliko znanja in iznajdljivosti, razen če na spletu najdemo ustrezna navodila kakega računalniškega navdušenca, ki ima prav tak merilnik kot mi in si je vzel dovolj časa, da ga je natančno preučil. Odkrivanje pomena testnih priključkov na tiskanem vezju merilnika je navadno zapleteno in pogosto neuspešno, če ni uporabljen enostaven protokol, kot je RS232, ali pa ne odkrijemo kakega standardnega mikrokrmilnika, ki ga lahko reprogramiramo po svoje in tako neposredno izkoristimo vse možnosti strojne opreme merilnika. Vsekakor pa to zahteva tudi natančno analizo delovanja vseh ostalih elektronskih komponent merilnika in poznavanje postopkov izvedbe meritev.
Laserski merilni modul za merjenje razdalje do 125 cm, VL53LOX.
Ena izmed najzanimivejših uspešnih predelav je opisana na spletu za ceneni laserski merilnik Range finder X-40 kitajske izdelave, ki meri razdalje do 6 m in ga lahko nabavimo v kateri od večjih svetovnih spletnih trgovin s tehničnimi izdelki. Srce merilnika je mikrokrmilnik STM32, ki omogoča do 60 merjenj na sekundo, pri čemer je natančnost posamezne meritve od 1 do 10 mm, odvisno od barve ciljne površine in njene oddaljenosti. Originalne programske kode proizvajalca sicer ni mogoče skopirati, zato pa je avtorju predelave uspelo najti priključke za programiranje STM32 in ob pomoči ustreznega programatorja nadomestiti originalno vgrajeno programsko opremo z novo, ki omogoča proženje merjenja in prenos rezultatov v Arduinov mikrokrmilnik, iz njega pa v PC. Prenos podatkov v Arduino poteka po protokolu RS232 s hitrostjo 25.600 bitov na sekundo.
Predelava cenenega laserskega merilnika, Range Finder X-40, za upravljanje z Arduinom.
Koristne povezave
Digitalni brzinomer za kolo na osnovi Arduina: www.instructables.com/id/arduino-bike-speedometer
Digitalni brzinomer na osnovi modula GPS: www.dfrobot.com/blog-tag-gps%20speedometer.html
Digitalni brzinomer za avtomobil: www.sparkfun.com/tutorials/123
Ultrazvočni merilnik razdalj: learn.adafruit.com/distance-measurement-ultrasound-hcsr04
Predelava laserskega merilnika razdalje Range Finder X-40: www.hackster.io/projects/tags/rangefinder
Analiza laserskega merilnika razdalje PREXISO X2: www.sparkfun.com/tutorials/323