- LM393 Modul osjetnika brzine (H206)
- Raspored postavljanja senzora H206
- DIY shema kruga robota osjetnika brzine Arduino LM393
- Logika mjerenja brzine s modulom osjetnika brzine LM393
- Logika iza mjerenja udaljenosti koju je prešao kotač
- Logika iza mjerenja kuta bota
- Arduino Robot Code
- Testiranje robota Arduino za mjerenje udaljenosti, brzine i kuta
Roboti su se polako počeli uvlačiti u naše društvo kako bi nam život učinili jednostavnijim. Već možemo pronaći šest robota za dostavu hrane iz Starship-a na cestama u Velikoj Britaniji, pametno se krećući među civilima do cilja. Svaki mobilni robot koji se kreće u okoliš uvijek treba biti svjestan svog položaja i orijentacije u odnosu na stvarni svijet. Postoji mnogo načina da se to postigne korištenjem različitih tehnologija poput GPS-a, RF triangulacije, akcelerometara, žiroskopa itd. Svaka tehnika ima svoju prednost i sama je po sebi jedinstvena. U ovom uputstvu za senzor brzine za Arduino LM393 koristit ćemo jednostavan i lako dostupan modul osjetnika brzine LM393za mjerenje nekih vitalnih parametara kao što su brzina, prijeđena udaljenost i kut robota pomoću Arduina. Pomoću ovih parametara robot će znati svoj status u stvarnom svijetu i može ga koristiti za sigurnu navigaciju.
Arduino je najpopularniji izbor među hobistima za izradu robota, od jednostavnog sljedbenika linija do složenijeg samobalansirajućeg ili robota za čišćenje poda. U odjeljku Robotika možete provjeriti sve vrste robota.
Izgradit ćemo malog robota koji se napaja iz litijeve baterije i voziti ga pomoću džojstika. Tijekom izvođenja možemo izmjeriti brzinu, udaljenost i kut robota i prikazati ga u stvarnom vremenu na LCD zaslonu povezanom s Arduinom. Ovaj vam projekt samo pomaže pri mjerenju ovih parametara, nakon što završite s tim, možete koristiti te parametre za samostalno upravljanje botom prema potrebi. Zvuči zanimljivo zar ne? Pa krenimo.
LM393 Modul osjetnika brzine (H206)
Prije nego što uđemo u shemu spojeva i kod projekta, shvatimo modul osjetnika brzine LM393 jer on igra vitalnu ulogu u projektu. U H206 senzor brzine modul sastoji se od infracrvenog svjetla senzor s integriranim LM393 Voltage komparator IC otuda i naziv LM393 osjetnika brzine. Modul se također sastoji od rešetkaste ploče koja se mora postaviti na rotirajuću osovinu motora. Sve su komponente označene na slici ispod.

Infracrvenog senzora Svjetlo se sastoji od IR LED i foto-tranzistor odvojen mali brbljanje. Cjelokupni raspored senzora smješten je u crno kućište kao što je gore prikazano. Mrežna ploča sastoji se od proreza, ploča je postavljena između zazora infracrvenog svjetlosnog senzora na takav način da senzor može osjetiti praznine u mrežnoj ploči. Svaka šupljina na mrežnoj ploči aktivira IR senzor pri prolasku kroz šupljinu; ti se okidači zatim pomoću usporedbe pretvaraju u naponske signale. Usporednik nije ništa drugo nego LM393 IC iz poluvodiča ON. Modul ima tri zatiča, od kojih se dva koriste za napajanje modula, a jedan izlazni za računanje broja okidača.
Raspored postavljanja senzora H206

Montiranje ovih vrsta senzora pomalo je nezgodno. Može se montirati samo na motore koji imaju osovinu izbočenu s obje strane. Jedna strana osovine povezana je s kotačem, dok se druga strana koristi za postavljanje rešetkaste ploče, kao što je gore prikazano.
Budući da su kotač i ploča povezani s istim vratilom, oba se okreću istom brzinom i tako mjerenjem brzine ploče možemo izmjeriti brzinu kotača. Provjerite prolaze li rešetke na mrežnoj ploči kroz IR senzor, tek tada će senzor moći izbrojati broj praznina kroz koje je prošlo. Također možete smisliti vlastiti mehanički raspored za postavljanje senzora sve dok ispunjava navedeni uvjet. IR senzor se obično koristi u mnogim projektima robotike za vođenje robota o preprekama.
Mreža ploča prikazana gore ima 20 utora (rešetki). To znači da će senzor pronaći 20 praznina za jedno potpuno okretanje kotača. Brojeći broj praznina koje je senzor otkrio, možemo izračunati udaljenost koju je prešao kotač, slično mjerenjem koliko brzo senzor pronalazi praznine u kojima možemo prepoznati brzinu kotača. U našem ćemo robotu ovaj senzor postaviti na oba kotača, a time možemo pronaći i kut robota. Međutim, kut rotacije može se razumnije izračunati pomoću akcelerometra ili žiroskopa, ovdje naučite povezivati akcelerometar i žiroskop s Arduinom i pokušati izmjeriti kut rotacije pomoću njih.
DIY shema kruga robota osjetnika brzine Arduino LM393
Kompletna shema sklopa ovog robota za mjerenje brzine i udaljenosti prikazana je u nastavku. Bot se sastoji od Arduino Nano-a kao mozga, dva istosmjerna motora za kotače pokreće modul L298N H-Bridge Motor Driver. Joystick se koristi za kontrolu brzine i smjera bota, a dva senzora brzine H206 koriste se za mjerenje brzine, udaljenosti i anđela bota. Izmjerene vrijednosti se zatim prikazuju na LCD modulu 16x2. Potenciometar povezan na LCD zaslon može se koristiti za podešavanje kontrasta LCD zaslona, a otpornik služi za ograničavanje struje koja teče na pozadinsko osvjetljenje LCD zaslona.

Potpuni krug napaja 7.4V litij stanice. Ovih 7,4 V napaja se na 12 V pin modula pogonskog motora. Zatim regulator napona na modulu pogonskog motora pretvara 7,4 V u regulirani + 5 V koji se koristi za napajanje Arduina, LCD-a, senzora i džojstika.
Motorom upravljaju digitalni pinovi 8,9,10 i 11 Arduina. Budući da se mora kontrolirati i brzina motora, trebali bismo dovoditi PWM signale na pozitivni priključak motora. Stoga imamo pinove 9 i 10, koji su obje pinove sposobne za PWM. Vrijednosti X i Y iz upravljačke tipke očitavaju se pomoću analognih pinova A2 i A3.
Kao što znamo, senzor H206 generira okidač kada se otkrije razmak na mrežnoj ploči. Budući da ovi okidači ne bi trebali uvijek biti pročitani točno kako bi se izračunala ispravna brzina i udaljenost, oba pina okidača (izlaza) spojena su na vanjski pin 2 i 3 prekida Arduino ploče. Sastavite cijeli krug na šasiju i montirajte senzor brzine kako je objašnjeno, moj bot je izgledao otprilike dolje nakon završetka spajanja. Također možete pogledati videozapis na kraju ove stranice kako biste znali kako je senzor postavljen.

Sad kad je hardverski dio završen, uđimo u logiku kako ćemo mjeriti brzinu, udaljenost i pojedinačni bot, a zatim nastavimo s programskim odjeljkom.
Logika mjerenja brzine s modulom osjetnika brzine LM393
Iz postavki za postavljanje senzora trebali biste biti svjesni da modul osjetnika brzine LM393 (H206) mjeri samo praznine prisutne na mrežnoj ploči. Tijekom montiranja trebao bi osigurati da se kotač (čiju brzinu treba mjeriti) i mrežasta ploča okreću istom brzinom. Kao i ovdje, budući da smo i kotač i ploču postavili na isto vratilo, oba će se očito okretati istom brzinom.
U našoj postavci ugradili smo dva senzora za svaki kotač za mjerenje kuta bota. Ali ako vam je cilj mjeriti samo brzinu i udaljenost, senzor možemo postaviti na bilo koji kotač. Izlaz senzora (okidački signali) najčešće će biti povezan s vanjskim prekidnim pinom mikrokontrolera. Svaki put kad se otkrije praznina u mrežnoj ploči, prekidač će se aktivirati i izvršit će se kôd u ISR (Interrupt service Rutine). Ako uspijemo izračunati vremenski interval između dva takva okidača, možemo izračunati brzinu kotača.
U Arduinu ovaj vremenski interval možemo lako izračunati pomoću funkcije milis () . Ova funkcija milisa nastavit će se povećavati za 1 za svaku milli sekundu od trenutka uključivanja uređaja. Dakle, kad se dogodi prvi prekid, vrijednost milisa () možemo spremiti u lažnu varijablu (poput pevtime u ovom kodu), a zatim kada se dogodi drugi prekid možemo izračunati vrijeme potrebno oduzimanjem vrijednosti pevtime od milisa ().
Vrijeme potrebno = aktualno vrijeme - prethodni put timetaken = milisekundama () - pevtime ; // timetaken u milisek
Nakon što izračunamo potrebno vrijeme, možemo jednostavno izračunati vrijednost okretaja u minuti koristeći dolje navedene formule, gdje (1000 / zauzeto vrijeme) daje RPS (okretaja u sekundi), a on se množi sa 60 za pretvaranje RPS u RPM (okretaja u minuti).
o / min = (1000 / zauzeto vrijeme) * 60;
Nakon izračuna broja okretaja u minuti možemo izračunati brzinu vozila koristeći donje formule pod uvjetom da znamo radijus kotača.
Brzina = 2π × RPS × polumjer kotača. v = radijus_kotača * o / min * 0.104
Napomena, gornja formula služi za izračunavanje brzine u m / s, ako želite izračunati u km / sat, zamijenite 0,0104 s 0,376. Ako vas zanima kako je dobivena vrijednost 0,104, pokušajte pojednostaviti formulu V = 2π × RPS × radijus kotača.
Ista se tehnika koristi čak i ako se za mjerenje brzine rotirajućeg objekta koristi Hall-ov senzor. No, za senzor H206 postoji kvaka, mrežasta ploča ima 20 utora i stoga će za mjerenje vremena između dva razmaka utora preopteretiti mikrokontroler. Stoga mjerimo brzinu samo pri punoj rotaciji kotača. Budući da će se za svaki razmak generirati dva prekida (jedan na početku i drugi na kraju praznine), dobit ćemo ukupno 40 prekida za točak da izvrši jedno potpuno okretanje. Dakle, čekamo 40 prekida prije nego što zapravo izračunamo brzinu kotača. Kôd za isti prikazan je u nastavku
if (rotacija> = 40) { timetaken = milis () - pevtime; // vrijeme snimljeno u milisekima / min = (1000 / vremenski snimljeno) * 60; // formule za izračunavanje o / min pevtime = milis (); rotacija = 0; }
Sljedeći nedostatak ove metode je taj što vrijednost brzine neće pasti na nulu jer će prekid uvijek čekati da kotač izvrši jednu rotaciju za izračunavanje vrijednosti okretaja. Ovaj se nedostatak može lako prevladati dodavanjem jednostavnog koda koji nadzire vremenski interval između dva prekida, a ako premašuje uobičajeno, vrijednost okretaja i brzine možemo prisiliti na nulu. Veza u donjem kodu koristili smo varijablu dtime za provjeru razlike u vremenu i ako ona prelazi 500 mili sekundi, vrijednost brzine i okretaja u minuti prisiljena je na nulu.
/ * Spustiti se na nulu ako se vozilo zaustavilo * / if (milis () - dtime> 500) // nije pronađen nijedan prekid za 500ms { rpm = v = 0; // napravimo broj okretaja u minuti i brzinu kao nulu dtime = milis (); }
Logika iza mjerenja udaljenosti koju je prešao kotač
Već znamo da će Arduino osjetiti 40 prekida kad kotač izvrši jedno potpuno okretanje. Dakle, za svako okretanje kotača očito je da je udaljenost koju je kotač priješao jednaka opsegu kotača. Budući da već znamo radijus kotača, lako možemo izračunati prijeđenu udaljenost koristeći donju formulu
Udaljenost = 2πr * broj okretaja udaljenost = (2 * 3,141 * radijus_kotača) * (left_intr / 40)
Gdje se opseg kotača izračunava pomoću formule 2πr, a zatim se pomnoži s brojem okretaja kotača.
Logika iza mjerenja kuta bota
Postoji mnogo načina za određivanje anđela robota. Za određivanje ovih vrijednosti obično se koriste akcelerometri i žiroskopi. Ali još jedan jeftin pristup je uporaba senzora H206 na oba kotača. Na taj način bismo znali koliko okretaja je napravio svaki kotač. Sljedeća slika ilustrira kako se izračunava kut.

Kad je robot inicijaliziran, kut okrenut prema njemu smatra se 0 °. Odatle se okreće ulijevo, kut se povećava u negativnom, a ako se okreće udesno, anđeo se povećava u pozitivnom. Za razumijevanje uzmimo u obzir raspon od -90 do +90 kako je prikazano na slici. U takvom rasporedu, budući da su oba kotača istog promjera, ako bilo koji od kotača izvrši potpuno okretanje bota koji okrećemo pod kutom od 90 °.
Na primjer, ako lijevi kotač izvrši jednu potpunu rotaciju (80 prekida), tada će se bot okrenuti za 90 ° ulijevo, slično ako desni kotač izvrši jednu potpunu rotaciju (80 prekida), tada će se bot okrenuti za -90 ° udesno. Sada znamo da ako Arduino otkrije 80 prekida na jednom kotaču, bot se okrenuo za 90 ° i na temelju kojeg kotača možemo znati je li se bot okrenuo pozitivno (desno) ili negativno (lijevo). Tako se lijevi i desni kut mogu izračunati pomoću donjih formula
int angle_left = (left_intr% 360) * (90/80); int angle_right = (desno_intr% 360) * (90/80);
Gdje je 90 kut pokriven kada se radi prekid od 80. Rezultirajuća vrijednost pomnoži se brojem prekida. Također smo upotrijebili modul od 360 tako da rezultirajuća vrijednost nikada ne prelazi 36. Nakon što izračunamo i lijevi i desni kut, efektivni kut pod kojim je okrenut bot može se jednostavno dobiti oduzimanjem lijevog kuta od pravog kuta.
kut = kut_desno - kut_lijevo;
Arduino Robot Code
Kompletni Arduino kôd za ovog robota za mjerenje brzine i kuta nalazi se na kraju ove stranice. Cilj programa je izračunati brzinu, udaljenost i kut bota koristeći gornju logiku i prikazati ga na LCD zaslonu. Osim toga, trebao bi pružiti mogućnost upravljanja botom pomoću džojstika.
Program započinjemo definiranjem digitalnih I / O pinova za dva motora. Imajte na umu da također moramo kontrolirati brzinu motora i stoga moramo koristiti PWM pinove na Arduinu za upravljanje motorima. Ovdje smo upotrijebili pin 8,9,10 i 11.
#define LM_pos 9 // lijevi motor #define LM_neg 8 // lijevi motor #define RM_pos 10 // desni motor #define RM_neg 11 // desni motor #define joyX A2 #define joyY A3
Za mjerenje brzine i pređene udaljenosti moramo znati radijus kotača, izmjeriti vrijednost i unijeti je u metre kao što je prikazano dolje. Za mog bota radijus je bio 0,033 metra, ali mogao bi se razlikovati za vas ovisno o vašem botu.
plutajući radijus_kotača = 0,033; // Izmjerite radijus kotača i unesite ga ovdje u cm
Unutar postavljanje funkcije, mi resetirali sve vrijednosti biti nula, a zatim prikazati jedan uvodni tekst na LCD-u. Također smo inicijalizirali serijski monitor u svrhu uklanjanja pogrešaka. Tada smo spomenuli da su senzori brzine H206 spojeni na pin 2 i 3 kao vanjski prekidi. Tu se uvijek otkrije prekid, ISR funkcija Left_ISR i Right_ISR bit će izvršene u skladu s tim.
void setup () { rotacija = rpm = pevtime = 0; // Inicijaliziraj sve varijable na nulu Serial.begin (9600); lcd.begin (16, 2); // Iniciranje 16 * 2 LCD lcd.print ("Bot Monitor"); // Uvodni redak poruke 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Uvod u retku poruke 2 (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0,1); lcd.print ("S: D: A:"); pinMode (LM_pos, IZLAZ); pinMode (LM_neg, IZLAZ); pinMode (RM_pos, IZLAZ); pinMode (RM_neg, IZLAZ); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Lijevi_ISR se poziva kada se aktivira senzor lijevog kotača attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR se poziva kada se aktivira senzor desnog kotača }
Unutar rutine Left_ISR jednostavno povećavamo varijablu koja se naziva left_intr koja će se kasnije koristiti za mjerenje kuta bota. Unutar Right_ISR radimo istu stvar, ali zatim dodatno izračunavamo i brzinu ovdje. Promjenjiva rotacija povećava se za svaki prekid, a zatim se gornja logika koristi za izračunavanje brzine.
void Left_ISR () { left_intr ++; kašnjenje (10); } void Right_ISR () { right_intr ++; kašnjenje (10); rotacija ++; dtime = milis (); if (rotacija> = 40) { timetaken = milis () - pevtime; // vrijeme snimljeno u milisekima / min = (1000 / vremenski snimljeno) * 60; // formule za izračunavanje o / min pevtime = milis (); rotacija = 0; } }
Unutar glavne funkcije beskonačne petlje nadziramo vrijednosti X i Y pomoću džojstika. Na temelju vrijednosti ako se pomiče džojstik, mi u skladu s tim kontroliramo bota. Brzina bota ovisi o tome koliko je dugme pritisnut.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int ubrzanje = karta (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, ubrzanje); analogWrite (RM_pos, ubrzanje); } else { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
To će pomoći korisniku da premjesti bota i provjeri jesu li dobivene vrijednosti očekivane. Napokon možemo izračunati brzinu, udaljenost i kut bota koristeći gornju logiku i prikazati ga na LCD-u koristeći donji kod.
v = radijus_kotača * okretaja u minuti * 0,104; //0.033 je radijus kotača u metrskoj udaljenosti = (2 * 3,141 * radijus_kotača) * (left_intr / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (desno_intr% 360) * (90/80); kut = kut_desno - kut_lijevo; 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 (right_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 (udaljenost); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (kut);
Testiranje robota Arduino za mjerenje udaljenosti, brzine i kuta
Kad je hardver spreman, prenesite kôd u svoj Arduino i pomoću navigacijske tipke premjestite bota. brzina bota, udaljenost koju prelazi i kut bit će prikazani na LCD-u kao što je prikazano dolje.

Na LCD-u pojam Lt i Rt predstavlja brojač lijevog i desnog broja prekida. Možete pronaći ove vrijednosti kako se povećavaju za svaku prazninu koju senzor otkrije. Teme S označavaju brzinu bota u m / sek, a izraz D označava udaljenost prijeđenu u metrima. Kut bota prikazuje se na kraju gdje je 0 ° za ravno, a negativno za rotaciju u smjeru suprotnom od kazaljke na satu i pozitivno za rotaciju u smjeru kazaljke na satu.
Također možete pogledati video na kraju ove stranice da biste razumjeli kako bot radi. Nadam se da ste razumjeli projekt i uživali u njegovoj izradi. Ako imate bilo kakvih nedoumica, ostavite ih u odjeljku za komentare i pokušat ću odgovoriti na najbolji mogući način. Forume možete koristiti i za brzu tehničku pomoć.
