- LM393 Modul senzorja hitrosti (H206)
- Razpored pritrditve senzorja H206
- Diagram robotskega senzorja hitrosti DIY Arduino LM393
- Logika merjenja hitrosti z modulom senzorja hitrosti LM393
- Logika merjenja razdalje, ki jo je prevozilo kolo
- Logika za merjenjem kota bota
- Koda Arduino Robot
- Testiranje robota Arduino za merjenje razdalje, hitrosti in kota
Roboti so se počasi začeli plaziti v našo družbo, da bi nam poenostavili življenje. Na cestah v Veliki Britaniji že lahko najdemo šest robotov za dostavo hrane iz podjetja Starship, ki pametno plujejo med civilisti in dosežejo cilj. Vsak mobilni robot, ki pluje v okolje, se mora vedno zavedati svojega položaja in usmerjenosti glede na resnični svet. To lahko dosežemo z različnimi tehnologijami, kot so GPS, RF triangulacija, merilniki pospeškov, žiroskopi itd. Vsaka tehnika ima svojo prednost in je sama po sebi edinstvena. V tej vadnici Arduino LM393 o senzorju hitrosti bomo uporabili preprost in lahko dostopen modul LM393 senzorja hitrostiza merjenje nekaterih vitalnih parametrov, kot so hitrost, prevožena razdalja in kot robota z uporabo Arduina. S temi parametri bo robot lahko poznal svoje stanje v resničnem svetu in ga lahko uporablja za varno navigacijo.
Arduino je med hobiji najbolj priljubljena izbira za gradnjo robotov, od preprostega sledilca črte do bolj zapletenega ročnega samo-uravnoteževalnega ali talnega čistilca. Vse vrste robotov lahko preverite v razdelku Robotika.
Izdelali bomo majhnega robota, ki ga poganja litijeva baterija, in ga poganjali s pomočjo krmilne palice. Med izvajanjem lahko izmerimo hitrost, razdaljo in kot robota ter ga prikažemo v realnem času na LCD zaslonu, priključenem na Arduino. Ta projekt vam pomaga le pri merjenju teh parametrov. Ko končate s tem, lahko s temi parametri samodejno upravljate s svojim botom. Sliši se zanimivo, kajne? Začnimo torej.
LM393 Modul senzorja hitrosti (H206)
Preden se spustimo v vezje in kodo projekta, naj razumemo modul senzorja hitrosti LM393, saj ima v projektu ključno vlogo. V H206 senzor za hitrost Modul je sestavljen iz infrardeče svetlobe senzor integriran z LM393 napetostnega primerjalnika IC s tem imenom LM393 hitrosti senzorja. Modul je sestavljen tudi iz mrežne plošče, ki jo je treba namestiti na vrtljivo gred motorja. Vse komponente so označene na spodnji sliki.
Senzor IR svetlobe sestoji iz IR LED in foto-tranzistor ločene z majhno GAB. Celotna razporeditev senzorjev je nameščena v črno ohišje, kot je prikazano zgoraj. Mrežna plošča je sestavljena iz rež, plošča je nameščena med režo senzorja infrardeče svetlobe na tak način, da senzor zazna vrzeli v mrežni plošči. Vsaka reža na mrežni plošči sproži IR senzor, ko gre skozi režo; ti sprožilci se nato s primerjalnikom pretvorijo v napetostne signale. Primerjalnik ni nič drugega kot LM393 IC iz polprevodnikov ON. Modul ima tri zatiče, od katerih dva uporabljamo za napajanje modula, en izhodni zatič pa za štetje števila sprožilcev.
Razpored pritrditve senzorja H206
Montaža tovrstnih senzorjev je nekoliko zapletena. Namestite ga lahko samo na motorje, ki imajo na obeh straneh štrlečo gred. Ena stran gredi je povezana s kolesom, druga stran pa se uporablja za pritrditev mrežne plošče, kot je prikazano zgoraj.
Ker sta kolo in plošča povezana z isto gredjo, se oba vrtita z enako hitrostjo in tako lahko z merjenjem hitrosti plošče izmerimo hitrost kolesa. Prepričajte se, da reže na mrežni plošči prehajajo skozi IR senzor, šele nato bo senzor lahko preštel število vrzeli, ki je šlo skozi. Lahko tudi sami izdelate mehansko ureditev za pritrditev senzorja, če izpolnjuje določene pogoje. IR senzor se običajno uporablja v številnih projektih robotike za vodenje robota o ovirah.
Zgoraj prikazana mrežna plošča ima 20 rež (mrež). To pomeni, da bo senzor našel 20 vrzeli za eno popolno rotacijo kolesa. S štetjem števila vrzeli, ki jih je zaznal senzor, lahko izračunamo razdaljo, ki jo prevozi kolo, podobno z merjenjem, kako hitro senzor najde vrzeli, ki jih lahko zaznava hitrost kolesa. V našem robotu bomo ta senzor namestili na obe kolesi in tako lahko najdemo tudi kot robota. Vendar pa je kot vrtenja bolj smiselno izračunati kot vrtenja z merilnikom pospeška ali žiroskopa, tukaj se naučite povezovati merilnik pospeška in žiroskopa z Arduinom in poskusiti z njimi izmeriti kot vrtenja.
Diagram robotskega senzorja hitrosti DIY Arduino LM393
Celoten diagram vezja tega robota za zaznavanje hitrosti in razdalje je prikazan spodaj. Bot je sestavljen iz Arduino Nano kot njegovih možganov, dva enosmerna motorja za kolesa poganja modul L298N H-Bridge Motor Driver. Joystick se uporablja za nadzor hitrosti in smeri bota, dva senzorja hitrosti H206 pa za merjenje hitrosti, razdalje in angela bota. Nato se izmerjene vrednosti prikažejo na 16x2 LCD modulu. Potenciometer, priključen na LCD, se lahko uporablja za nastavitev kontrasta LCD, upor pa za omejevanje toka, ki teče na osvetlitev LCD zaslona.
Popoln krog se napaja z 7,4 litijevo celico. Ta 7,4V se napaja na 12V zatič modula gonilnika motorja. Nato regulator napetosti na pogonskem modulu motorja pretvori 7,4 V v regulirano + 5 V, ki se uporablja za napajanje Arduina, LCD-ja, senzorjev in igralne palice.
Motor krmilijo digitalni zatiči 8,9,10 in 11 Arduino. Ker je treba nadzorovati tudi hitrost motorja, moramo na pozitivni priključek motorja dovajati PWM signale. Zato imamo pin 9 in 10, ki sta oba PWM zatiča. Vrednosti X in Y iz krmilne palice se berejo z analognima nožicama A2 oziroma A3.
Kot poznamo senzor H206 z generiranjem sprožilca, ko se zazna reža na mrežni plošči. Ker teh sprožilcev ni treba vedno natančno prebrati za izračun pravilne hitrosti in razdalje, sta oba zatiča sprožilca (izhoda) priključena na zunanji prekinitveni zatič 2 in 3 plošče Arduino. Sestavite celotno vezje na šasijo in namestite senzor hitrosti, kot je razloženo, moj bot je bil po končanih povezavah videti nekako takole spodaj. Videoposnetek si lahko ogledate tudi na koncu te strani, če želite vedeti, kako je bil senzor nameščen.
Zdaj, ko je del strojne opreme končan, pojdimo v logiko, kako bomo merili hitrost, razdaljo in enojno vrednost bota, nato pa nadaljujmo s programskim odsekom.
Logika merjenja hitrosti z modulom senzorja hitrosti LM393
V nastavitvah pritrditve senzorja se zavedajte, da modul senzorja hitrosti LM393 (H206) meri samo reže, ki so prisotne na mrežni plošči. Med namestitvijo se prepričajte, da se kolo (katerega hitrost je treba izmeriti) in mrežna plošča vrtita z enako hitrostjo. Tako kot tukaj, ker smo kolo in ploščo namestili na isto gred, se bosta oba očitno vrtela z enako hitrostjo.
V naši postavitvi smo za vsako kolo namestili dva senzorja za merjenje kota bota. Če pa želite izmeriti samo hitrost in razdaljo, lahko senzor pritrdimo na katero koli kolo. Izhod senzorja (sprožilni signali) bo najpogosteje povezan z zunanjim prekinitvenim zatičem mikrokrmilnika. Vsakič, ko je zaznana vrzel na mrežni plošči, se sproži prekinitev in izvede se koda v ISR (Interrupt service Routine). Če lahko izračunamo časovni interval med dvema takšnima sprožilcema, lahko izračunamo hitrost kolesa.
V Arduinu lahko ta časovni interval enostavno izračunamo s pomočjo funkcije milis () . Ta funkcija v milisu se bo od trenutka vklopa naprave še naprej povečevala za 1 za vsako milli sekundo. Torej, ko pride do prve prekinitve, lahko vrednost milis () shranimo v navidezno spremenljivko (kot je pevtime v tej kodi), nato pa, ko pride do druge prekinitve, izračunamo čas, ki ga potrebujemo, tako da odštejemo vrednost pevtime od milis ().
Čas, potreben = trenutni čas - predhodni čas timetaken = milisekundah () - pevtime ; // merjeno v milisekundah
Ko izračunamo čas, ki ga potrebujemo, lahko preprosto izračunamo vrednost vrtljajev na minuto z uporabo spodnjih formul, kjer (1000 / zavzeti čas) daje RPS (vrtljajev na sekundo) in se pomnoži s 60 za pretvorbo RPS v vrtljajev na minuto (vrtljajev na minuto).
vrt / min = (1000 / zajeti čas) * 60;
Po izračunu vrtljajev lahko izračunamo hitrost vozila po spodnjih formulah, če poznamo polmer kolesa.
Hitrost = 2π × RPS × polmer kolesa. v = polmer_kolesa * vrt / min * 0.104
Upoštevajte, da je zgornja formula namenjena izračunu hitrosti v m / s, če želite izračunati v km / h, nato 0,0104 zamenjajte z 0,376. Če vas zanima, kako je bila pridobljena vrednost 0,104, poskusite poenostaviti formulo V = 2π × RPS × polmer kolesa.
Ista tehnika se uporablja tudi, če se za merjenje hitrosti vrtečega se predmeta uporablja dvoranski senzor. Toda za senzor H206 obstaja ulov, mrežna plošča ima 20 rež, zato bo merjenje časa med dvema režama preobremenilo mikrokrmilnik. Zato merimo hitrost le pri popolnem vrtenju kolesa. Ker bosta za vsako režo nastali dve prekinitvi (ena na začetku in druga na koncu reže), bomo dobili skupno 40 prekinitev, da bo kolo izvedlo eno popolno vrtenje. Tako počakamo 40 prekinitev, preden dejansko izračunamo hitrost kolesa. Koda za isto je prikazana spodaj
if (rotacija> = 40) { timetaken = milis () - pevtime; // čas, zajet v milisekundah na minuto = (1000 / zajet čas) * 60; // formule za izračun vrt / min pevtime = milis (); vrtenje = 0; }
Druga pomanjkljivost te metode je, da vrednost hitrosti ne pade na nič, ker bo prekinitev vedno čakala, da kolo za izračun vrednosti vrtljajev zaključi eno vrtenje. To pomanjkljivost je mogoče enostavno odpraviti z dodajanjem preproste kode, ki nadzira časovni interval med dvema prekinitvama in če preseže normalno vrednost, lahko vrednost vrtljajev in hitrosti prisilimo na nič. Povezava v spodnji kodi smo uporabili spremenljivko dtime za preverjanje časovne razlike in če ta preseže 500 milli sekund, je vrednost hitrosti in vrtljajev na minuto enaka nič.
/ * Če se vozilo ustavi, pade na nič * / if (milis () - dtime> 500) // za 500 ms { rpm = v = 0 ni najden noben prekinitev // naredimo število vrtljajev v minuti in hitrost kot nič dtime = milis (); }
Logika merjenja razdalje, ki jo je prevozilo kolo
Že vemo, da bo Arduino zaznal 40 prekinitev, ko bo kolo popolnoma zavrtelo. Torej je za vsako vrtenje kolesa razvidno, da je pot, ki jo prevozi kolo, enaka obodu kolesa. Ker polmer kolesa že poznamo, lahko prevoženo razdaljo enostavno izračunamo s spodnjo formulo
Razdalja = 2πr * število vrtilnih razdalj = (2 * 3,141 * polmer_kolesa) * (left_intr / 40)
Kjer se obseg kolesa izračuna po formuli 2πr, nato pa se pomnoži s številom vrtenj koles.
Logika za merjenjem kota bota
Obstaja veliko načinov za določitev angela robota. Za določanje teh vrednosti se običajno uporabljajo merilniki pospeška in žiroskopi. Toda še en poceni pristop je uporaba senzorja H206 na obeh kolesih. Tako bi vedeli, koliko zavojev je opravilo posamezno kolo. Spodnja slika prikazuje, kako se izračuna kot.
Ko je robot inicializiran, se kot, na katerega je obrnjen, šteje kot 0 °. Od tam se vrti v levo, kot se poveča v minus, če pa v desno, se angel poveča v pozitivnem. Za razumevanje upoštevajmo razpon od -90 do +90, kot je prikazano na sliki. V takšni ureditvi, ker sta kolesi enakega premera, če katero koli kolo popolnoma zavrti bot, ki ga zasučemo pod kotom 90 °.
Na primer, če levo kolo naredi eno popolno rotacijo (80 prekinitev), se bo bot obrnil za 90 ° v levo in podobno, če desno kolo izvede eno popolno rotacijo (80 prekinitev), bo bot zavil -90 ° v desno. Zdaj vemo, da če Arduino zazna 80 prekinitev na enem kolesu, se je bot obrnil za 90 ° in na podlagi katerega kolesa lahko ugotovimo, ali se je bot obrnil pozitivno (desno) ali negativno (levo). Tako lahko levi in desni kot izračunamo s spodnjimi formulami
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Kjer je 90 pokrit kot pri prekinitvi 80. Nastala vrednost se pomnoži s številom prekinitev. Uporabili smo tudi modul 360, tako da dobljena vrednost nikoli ne preseže 36. Ko smo izračunali tako levi kot desni kot, lahko efektivni kot, pod katerim je obrnjena bota, preprosto dobimo tako, da levi kot odštejemo od pravega kota.
kot = kot_desno - kot_levo;
Koda Arduino Robot
Popolno kodo Arduino za tega robota za merjenje hitrosti in kota najdete na koncu te strani. Cilj programa je izračunati hitrost, razdaljo in kot bota z uporabo zgornjih logik in ga prikazati na LCD zaslonu. Poleg tega bi moral nuditi možnost nadzora nad botom s pomočjo igralne palice.
Program začnemo z definiranjem digitalnih V / I zatičev za dva motorja. Upoštevajte, da moramo nadzorovati tudi hitrost motorja, zato moramo za nadzor motorjev uporabljati zatiče PWM na Arduinu. Tu smo uporabili zatiča 8,9,10 in 11.
#define LM_pos 9 // levega motorja #define LM_neg 8 // levega motorja #define RM_pos 10 // igralec motorja #define RM_neg 11 // igralec motorno #define joyX A2 #define joyY A3
Za merjenje prevožene hitrosti in razdalje moramo poznati polmer kolesa, izmeriti vrednost in jo vnesti v metre, kot je prikazano spodaj. Pri mojem botu je bil polmer 0,033 metra, vendar se lahko razlikuje glede na vašega bota.
plavajoči polmer_kolesa = 0,033; // Izmerite polmer kolesa in ga vnesite sem v cm
Znotraj nastavitvene funkcije vse vrednosti inicializiramo na nič in nato na LCD-prikazovalniku prikažemo uvodno besedilo. Za odpravljanje napak smo inicializirali tudi serijski monitor. Nato smo omenili, da so senzorji hitrosti H206 priključeni na nožici 2 in 3 kot zunanji prekinitvi. Tam se kdaj zazna prekinitev, funkciji ISR Left_ISR in Right_ISR se bosta ustrezno izvedli.
void setup () { rotacija = rpm = pevtime = 0; // Inicializiramo vse spremenljivke na nič Serial.begin (9600); lcd.begin (16, 2); // Inicializiramo 16 * 2 LCD lcd.print ("Bot Monitor"); // Uvodna vrstica sporočila 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Zakasnitev uvodne vrstice sporočila 2 (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, IZHOD); pinMode (LM_neg, IZHOD); pinMode (RM_pos, IZHOD); pinMode (RM_neg, IZHOD); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Left_ISR se pokliče, ko se sproži senzor levega kolesa attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR se pokliče, ko se sproži senzor desnega kolesa }
Znotraj rutine Left_ISR preprosto povečamo spremenljivko, imenovano left_intr, ki bo kasneje uporabljena pri merjenju kota bota. Znotraj Right_ISR naredimo isto, nato pa tukaj izračunamo tudi hitrost. Spremenljivka rotacije se poveča za vsako prekinitev, nato pa se za izračun hitrosti uporabi zgornja logika.
void Left_ISR () { left_intr ++; delay (10); } void Right_ISR () { right_intr ++; zamuda (10); vrtenje ++; dtime = milis (); if (rotacija> = 40) { timetaken = milis () - pevtime; // čas, zajet v milisekundah na minuto = (1000 / zajet čas) * 60; // formule za izračun vrt / min pevtime = milis (); vrtenje = 0; } }
Znotraj glavne funkcije neskončne zanke nadzorujemo vrednosti X in Y s krmilno palčko. Glede na vrednost, če je krmilna palica premaknjena, ustrezno nadzorujemo bota. Hitrost bota je odvisna od tega, kako daleč je potisnjena krmilna palica.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int pospešek = zemljevid (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, pospešek); analogWrite (RM_pos, pospešek); } else { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
To bo uporabniku pomagalo premakniti bota in preveriti, ali so pridobljene vrednosti v skladu s pričakovanji. Končno lahko izračunamo hitrost, razdaljo in kot bota z uporabo zgornjih logik in jih prikažemo na LCD-ju z uporabo spodnje kode.
v = polmer_kolesa * vrt / min * 0.104; //0.033 je polmer kolesa v metrski razdalji = (2 * 3,141 * polmer_kolesa) * (left_intr / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); kot = kot_desno - kot_levo; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (desno_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (razdalja); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (kot);
Testiranje robota Arduino za merjenje razdalje, hitrosti in kota
Ko je vaša strojna oprema pripravljena, naložite kodo v svoj Arduino in s krmilno palčko premikajte bota. hitrost bota, prevožena razdalja in kot bodo prikazani na LCD-prikazovalniku, kot je prikazano spodaj.
Na LCD-ju izraz Lt in Rt predstavljata število prekinitev levo oziroma desno število prekinitev. Najdete jih, kako te vrednosti naraščajo za vsako vrzel, ki jo zazna senzor. Teme S označuje hitrost bota v m / sek, izraz D pa razdaljo v metrih. Kot bota je prikazan na koncu, kjer je 0 ° za ravno, pri vrtenju v nasprotni smeri urnega kazalca pa postane negativno, pri vrtenju v smeri urinega kazalca pa pozitivno.
Video si lahko ogledate tudi na koncu te strani, da razumete, kako bot deluje. Upam, da ste projekt razumeli in ste ga radi zgradili. Če imate kakršne koli pomisleke, jih pustite v oddelku za komentarje in po najboljših močeh bom odgovoril nazaj. Za hitro tehnično pomoč lahko uporabite tudi forume.