- Potrebni materijali:
- Izračunavanje brzine i pređene udaljenosti:
- Kružni dijagram i postavljanje hardvera:
- Simulacija:
- Programiranje vašeg PIC16F877A:
- Radno objašnjenje:
Mjerenje brzine / okretaja u minuti vozila ili motora uvijek je bio fascinantan projekt za nas. Dakle, u ovom ćemo projektu izgraditi jedan pomoću PIC mikrokontrolera spremnih za industriju. Za mjerenje brzine upotrijebit ćemo komad magneta i Hallov senzor. Postoje i drugi načini / senzori za mjerenje brzine, ali upotreba Hallovog senzora je jeftina i također se može koristiti na bilo kojoj vrsti motora / vozila. Radeći ovaj projekt također ćemo poboljšati svoje vještine u učenju PIC16F877A jer projekt uključuje upotrebu prekida i odbrojavanja. Na kraju ovog projekta moći ćete izračunati brzinu i udaljenost koju prelazi bilo koji rotirajući objekt i prikazati ih na LCD zaslonu 16x2. Krenimo od ovog kruga digitalnog brzinomjera i odometra s PIC-om.
Potrebni materijali:
- PIC16F877A
- 7805 Regulator napona
- Halov senzor učinka (US1881 / 04E)
- LCD zaslon od 16 * 2
- Mali komad magneta
- Spajanje žica
- Kondenzatori
- Breadboard.
- Napajanje
Izračunavanje brzine i pređene udaljenosti:
Prije nego što zapravo započnemo graditi krug, shvatimo kako ćemo koristiti Hall senzor i magnet za izračunavanje brzine kotača. Prije smo koristili istu Tehniku za izradu Arduino brzinomera koji prikazuje očitanja na Android pametnom telefonu.
Hallov senzor je uređaj koji može otkriti prisutnost magneta na temelju njegove polarnosti. Na kotač zalijepimo mali komad magneta i blizu njega postavimo Hall Hall na takav način da ga svaki put kad okrene kotač Hall Hall senzor otkrije. Zatim koristimo pomoć tajmera i prekida na našem PIC mikrokontroleru za izračunavanje vremena potrebnog za jedno potpuno okretanje kotača.

Jednom kada se zna potrebno vrijeme, možemo izračunati RPM koristeći dolje navedene formule, gdje će nam 1000 / potrošeno vrijeme dati RPS, a daljnje množenje sa 60 dobit će RPM
o / min = (1000 / zauzeto vrijeme) * 60;
Gdje (1000 / oduzeto vrijeme) daje broj okretaja u minuti (broj okretaja u sekundi) i pomnožava se s 60 za pretvaranje broja okretaja u minuti (broj okretaja u minuti).
Sada da bismo izračunali brzinu vozila moramo znati radijus kotača. U našem projektu koristili smo mali kotačić za igračke u radijusu od samo 3 cm. Ali, pretpostavili smo da je polumjer kotača 30 cm (0,3 m) kako bismo mogli vizualizirati očitanja.
Vrijednost se također pomnoži s 0,37699 jer znamo da je Brzina = (RPM (promjer * Pi) / 60). Formule su pojednostavljene do
v = radijus_kotača * o / min * 0,37699;
Jednom kada izračunamo brzinu, možemo izračunati i pređenu udaljenost koristeći sličnu metodu. S našim rasporedom dvorane i magneta znamo koliko se puta kotač okrenuo. Također znamo radijus kotača, pomoću kojeg možemo pronaći opseg kotača, pod pretpostavkom da je polumjer kotača 0,3 m (R), vrijednosti opsega Pi * R * R će biti 0,2827. To znači da pri svakom susretu halskog senzora s magnetom kotač pređe udaljenost od 0,2827 metara.
Udaljenost_pokrivena = udaljenost_pokrivena + opseg_okružnog kruga
Budući da sada znamo kako će ovaj projekt funkcionirati, idemo na naš krug i započnite ga graditi.
Kružni dijagram i postavljanje hardvera:

Kružni dijagram ovog Projekta brzinomjera i odometra vrlo je jednostavan i može se graditi na ploči s pločama. Ako ste slijedili PIC upute, tada također možete ponovno upotrijebiti hardver koji smo koristili za učenje PIC mikrokontrolera. Ovdje smo upotrijebili istu perf ploču koju smo izradili za LED treptanje s PIC mikrokontrolerom, kao što je prikazano dolje:

Pin priključci za PIC16F877A MCU dati su u donjoj tablici.
|
S.Ne: |
Pin broj |
Naziv pribadače |
Spojen na |
|
1 |
21 |
RD2 |
RS LCD |
|
2 |
22 |
RD3 |
E od LCD-a |
|
3 |
27 |
RD4 |
D4 LCD-a |
|
4 |
28 |
RD5 |
D5 LCD-a |
|
5 |
29 |
RD6 |
D6 LCD-a |
|
6 |
30 |
RD7 |
D7 LCD-a |
|
7 |
33 |
RB0 / INT |
3 rd pin Hallovog senzora |
Jednom kada izradite svoj projekt, to bi trebalo izgledati ovako na slici ispod

Kao što vidite, upotrijebio sam dvije kutije za postavljanje motora i Hall senzora u obližnji položaj. Možete pričvrstiti magnet na svoj rotirajući objekt i netaknuti Hall senzor blizu njega na takav način da može prepoznati magnet.
Napomena: Hall senzor ima polaritet, pa provjerite koji pol prepoznaje i postavite ga u skladu s tim.
Obavezno upotrijebite pull-up otpornik s izlaznim zatičem Hall senzora.
Simulacija:
Simulacija za ovaj projekt izvedena je pomoću Proteusa. Budući da projekt uključuje pokretne predmete, nije moguće prikazati cjelovit projekt pomoću simulacije, ali rad LCD-a može se provjeriti. Jednostavno učitajte hex datoteku u Simulaciju i simulirajte je. Moći ćete primijetiti kako LCD radi kako je prikazano dolje.

Da bih provjerio rade li brzinomjer i brojač kilometara, zamijenio sam Hall senzor uređajem Logic state. Tijekom simulacije možete kliknuti na gumb logičkog stanja da aktivirate prekid i provjeriti ažuriraju li se brzina i udaljenost kako je gore prikazano.
Programiranje vašeg PIC16F877A:
Kao što je ranije rečeno, koristit ćemo pomoć tajmera i prekida u mikrokontroleru PIC16F877A za izračunavanje vremena potrebnog za jedno potpuno okretanje kotača. Već smo naučili kako koristiti tajmere u našem prethodnom vodiču. Kompletni kod projekta dao sam na kraju ovog članka. Dalje sam objasnio nekoliko važnih redaka u nastavku.
Redovi koda u nastavku inicijaliziraju port D kao izlazne pinove za LCD povezivanje i RB0 kao ulazni pin za upotrebu kao vanjski pin. Dalje smo omogućili unutarnji pull-up otpornik pomoću OPTION_REG i također postavili 64 kao pretprodaju. Zatim omogućujemo globalni i periferni prekid kako bismo omogućili tajmer i vanjski prekid. Da biste definirali RB0 kao vanjski bit prekida, INTE bi trebao biti visok. Vrijednost Preljev je postavljena na 100 tako da će se za svaku 1 milisekundu aktivirati zastavica prekida timera TMR0IF. To će vam pomoći da pokrenete tajmer za milisekunde kako biste odredili vrijeme potrebno u milisekundama:
TRISD = 0x00; // PORTD deklariran kao izlaz za povezivanje LCD TRISB0 = 1; // DEfinirajte pin RB0 kao ulaz koji ćete koristiti kao pin prekida OPTION_REG = 0b00000101; // Timer0 64 kao prescalar // Omogućuje i PULL UPS TMR0 = 100; // Učitavanje vremenske vrijednosti za 1 ms; delayValue može biti između 0-256 samo TMR0IE = 1; // Omogući bit prekida timera u PIE1 registru GIE = 1; // Omogući globalni prekid PEIE = 1; // Omogući periferni prekid INTE = 1; // Omogući RB0 kao vanjski prekidački pin
Funkcija u nastavku izvršit će se svaki put kad se otkrije prekid. Funkciju možemo imenovati prema našoj želji, pa sam je nazvao speed_isr (). Ovaj se program bavi dvama prekidima, jedan je Timer Interrupt, a drugi External Interrupt. Kad god se dogodi tajmerski prekid, zastavica TMR0IF pređe u visinu, da bismo obrisali i resetirali prekid, moramo ga smanjiti definiranjem TMR0IF = 0 kao što je prikazano u donjem kodu.
void interrupt speed_isr () {if (TMR0IF == 1) // Tajmer je prelijetao {TMR0IF = 0; // Očisti zastavicu prekida timera milli_sec ++; } ako (INTF == 1) {o / min = (1000 / mili_sek) * 60; brzina = 0,3 * o / min * 0,37699; // (pod pretpostavkom da je polumjer kotača 30 cm) INTF = 0; // obriši zastavicu prekida milli_sec = 0; udaljenost = udaljenost + 028,2; }}
Slično tome, kada se dogodi vanjski prekid, zastavica INTF ići će visoko, to bi također trebalo ukloniti definiranjem INTF = 0. Prekid odbrojavanja vremena prati vrijeme i vanjski prekid određuje kada je kotač izvršio jedno potpuno okretanje. S tim podacima izračunavaju se brzina i udaljenost koju kotač prelazi tijekom svakog vanjskog prekida.
Jednom kad se izračunaju brzina i udaljenost, oni se mogu jednostavno prikazati na LCD zaslonu pomoću naših LCD funkcija. Ako ste novi u LCD-u, pogledajte naš vodič za povezivanje s Vodičem za PIC16F877A MCU.
Radno objašnjenje:
Nakon što pripremite hardver i softver, jednostavno prenesite kôd na svoj PIC16F877A. Ako ste potpuno novi u PIC-u, trebali biste pročitati nekoliko vodiča o tome kako učitati program na mikrokontroler PIC16F877A.
Koristio sam varijablu POT za podešavanje brzine motora u demonstracijske svrhe. Također možete koristiti isti za pronalaženje programa u stvarnom vremenu. Ako sve funkcionira prema očekivanjima, trebali biste biti u mogućnosti premašiti brzinu u km / h i udaljenost u metrima, kao što je prikazano u videu ispod.

Nadam se da vam se svidio projekt i pokrenuo ga. Ako ne, možete upotrijebiti odjeljak za komentare u nastavku ili forum da biste objavili svoju sumnju.
