- Nepieciešamie materiāli:
- Aprēķināt ātrumu un nobraukto attālumu:
- Shēmas shēma un aparatūras iestatīšana:
- Modelēšana:
- PIC16F877A programmēšana:
- Darba skaidrojums:
Transportlīdzekļa vai motora ātruma / apgr./min mērīšana vienmēr ir bijis mūsu aizraujošais projekts. Tātad šajā projektā mēs to izveidosim, izmantojot rūpnieciski gatavus PIC mikrokontrollerus. Ātruma mērīšanai mēs izmantosim magnēta gabalu un Hall sensoru. Ir arī citi veidi / sensori ātruma mērīšanai, taču halles sensora izmantošana ir lēta, un to var izmantot arī jebkura veida motoram / transportlīdzeklim. Veicot šo projektu, mēs arī uzlabosim savas prasmes PIC16F877A apguvē, jo projektā tiek izmantoti pārtraucēji un taimeri. Šī projekta beigās jūs varēsiet aprēķināt jebkura rotējoša objekta veikto ātrumu un attālumus un parādīt tos 16x2 LCD ekrānā. Sāksim ar šo digitālo spidometru un odometra shēmu ar PIC.
Nepieciešamie materiāli:
- PIC16F877A
- 7805 Sprieguma regulators
- Hall efekta sensors (US1881 / 04E)
- 16 * 2 LCD displejs
- Neliels magnēta gabals
- Savienojošie vadi
- Kondensatori
- Maizes dēlis.
- Enerģijas padeve
Aprēķināt ātrumu un nobraukto attālumu:
Pirms mēs patiešām sākam veidot ķēdi, ļaujiet mums saprast, kā mēs izmantosim Hall sensoru un magnētu, lai aprēķinātu riteņa ātrumu. Iepriekš mēs izmantojām to pašu paņēmienu, lai izveidotu Arduino spidometru, kas parāda rādījumus Android viedtālrunī.
Hall sensors ir ierīce, kas var noteikt magnēta klātbūtni, pamatojoties uz tā polaritāti. Mēs uzlīmējam nelielu riteņa magnēta gabalu un novietojam zāles sensoru tā tuvumā tā, lai katru reizi, kad ritenis pagriežas, zāles sensors to konstatē. Pēc tam mēs izmantojam taimera un pārtraucēja palīdzību mūsu PIC mikrokontrollerī, lai aprēķinātu laiku, kas vajadzīgs pilnīgai riteņa pagriešanai.
Kad būs zināms laiks, mēs varam aprēķināt RPM, izmantojot tālāk norādītās formulas. Kur 1000 / patērētais laiks dos mums RPS un, reizinot to ar 60, jūs saņemsiet RPM
apgr./min = (1000 / plānotais) * 60;
Kur (1000 / timetaken) dod apgriezienus minūtē (apgriezieni sekundē), un tas tiek reizināts ar 60, lai pārvērstu apgriezienus minūtē (apgriezieni minūtē).
Tagad, lai aprēķinātu transportlīdzekļa ātrumu, mums jāzina riteņa rādiuss. Mūsu projektā mēs izmantojām nelielu rotaļlietu riteni, kura rādiuss ir tikai 3 cm. Bet mēs pieņēmām rādiuss riteņa ir būt 30cm (0,3), lai mēs varētu vizualizēt rādījumus.
Vērtība tiek reizināta arī ar 0,37699, jo mēs zinām, ka ātrums = (RPM (diametrs * Pi) / 60). Formulas ir vienkāršotas līdz
v = riteņa rādiuss * apgr./min * 0,37699;
Kad mēs aprēķinām ātrumu, mēs varam aprēķināt arī nobraukto attālumu, izmantojot līdzīgu metodi. Ar mūsu zāles un magnētu izvietojumu mēs zinām, cik reizes ritenis ir pagriezies. Mēs zinām arī riteņa rādiusu, izmantojot kuru mēs varam atrast riteņa apkārtmēru, pieņemot, ka riteņa rādiuss ir 0,3 m (R), apkārtmēra Pi * R * R vērtības būs 0,2827. Tas nozīmē, ka katru reizi, kad zāles sensors saskaras ar magnētu, ritenis pārvar 0,2827 metru attālumu.
Distance_covered = nobrauktais attālums + apļa apkārtmērs
Tā kā tagad mēs zinām, kā šis projekts darbosies, varēsim pāriet uz mūsu shēmu un sākt to veidot.
Shēmas shēma un aparatūras iestatīšana:
Šī spidometra un odometra projekta shēma ir ļoti vienkārša, un to var veidot uz maizes dēļa. Ja esat sekojis PIC apmācībām, varat arī atkārtoti izmantot aparatūru, kuru izmantojām PIC mikrokontrolleru apgūšanai. Šeit mēs izmantojām to pašu perf Board, kuru esam uzbūvējuši LED mirgošanai ar PIC mikrokontrolleru, kā parādīts zemāk:
PIC16F877A MCU tapu savienojumi ir norādīti zemāk esošajā tabulā.
S.Nē: |
PIN kods |
Piespraudes nosaukums |
Savienots ar |
1 |
21 |
RD2 |
LCD LCD |
2 |
22 |
RD3 |
LCD ekrāns |
3 |
27 |
RD4 |
LCD D4 |
4 |
28 |
RD5 |
LCD D5 |
5 |
29 |
RD6 |
LCD D6 |
6 |
30 |
RD7 |
LCD D7 |
7 |
33 |
RB0 / INT |
3 rd pin of Hall sensors |
Kad esat izveidojis savu projektu, tam vajadzētu izskatīties apmēram šādi zemāk esošajā attēlā
Kā redzat, es izmantoju divas kastes, lai motoru un zāles sensoru novietotu tuvumā. Jūs varat piestiprināt magnētu pie rotējošā priekšmeta un neskart halles sensoru tā tuvumā tā, lai tas varētu noteikt magnētu.
Piezīme: Hall sensoram ir polaritāte, tāpēc pārliecinieties, kuru polu tas nosaka, un attiecīgi novietojiet to.
Pārliecinieties arī, vai izmantojat Pull-up rezistoru ar zāles sensora izejas tapu.
Modelēšana:
Šī projekta simulācija tiek veikta, izmantojot Proteus. Tā kā projektā ir iesaistīti objektu kustība, nav iespējams demonstrēt visu projektu, izmantojot simulāciju, bet LCD darbību var pārbaudīt. Vienkārši ielādējiet hex failu simulācijā un simulējiet to. Jūs varēsiet pamanīt, ka LCD darbojas kā parādīts zemāk.
Lai pārbaudītu, vai darbojas spidometrs un odometrs, esmu nomainījis Hall sensoru ar loģikas stāvokļa ierīci. Simulācijas laikā jūs varat noklikšķināt uz loģiskā stāvokļa pogas, lai aktivizētu pārtraukumu un pārbaudītu, vai nobrauktais ātrums un attālums tiek atjaunināts, kā parādīts iepriekš.
PIC16F877A programmēšana:
Kā minēts iepriekš, mēs izmantosim taimeru un pārtraucēju palīdzību PIC16F877A mikrokontrollerī, lai aprēķinātu laiku, kas vajadzīgs vienai pilnīgai riteņa pagriešanai. Mēs jau esam iemācījušies izmantot Taimerus mūsu visaptverošajā apmācībā. Šī raksta beigās esmu norādījis pilnu projekta kodu. Tālāk es paskaidroju dažas svarīgas rindas zemāk.
Zemāk esošās koda rindas inicializē portu D kā izejas tapas LCD saskarnei un RB0 kā ievades kontaktu, lai to izmantotu kā ārējo tapu. Turklāt mēs esam iespējojuši iekšējo pievilkšanas rezistoru, izmantojot OPTION_REG, kā arī esam iestatījuši 64 kā iepriekšēju pārdošanu. Pēc tam MĒS iespējojam globālo un perifēro traucējumu, lai iespējotu taimeri un ārējos traucējumus. Lai definētu RB0 kā ārējo pārtraukuma bitu, INTE ir jāpadara augsts. Pārpildes vērtība ir iestatīta uz 100, lai ik pēc 1 milisekundes tiktu aktivizēts taimera pārtraukuma karodziņš TMR0IF. Tas palīdzēs palaist milisekunžu taimeri, lai noteiktu laiku, kas vajadzīgs milisekundēs:
TRISD = 0x00; // PORTD deklarēts kā izeja LCD TRISB0 saskarnei = 1; // DE definējiet RB0 tapu kā ievadi, ko izmantot kā pārtraukuma tapu OPTION_REG = 0b00000101; // Timer0 64 kā preskalārs // Iespējo arī PULL UPs TMR0 = 100; // Ielādējiet laika vērtību 1 ms; delayValue var būt no 0 līdz 256, tikai TMR0IE = 1; // Iespējot taimera pārtraukuma bitu PIE1 reģistrā GIE = 1; // Iespējot globālo pārtraukumu PEIE = 1; // Iespējot perifēro traucējumu INTE = 1; // Iespējot RB0 kā ārējo pārtraucošo tapu
Zemāk redzamā funkcija tiks izpildīta katru reizi, kad tiek atklāts pārtraukums. Mēs varam nosaukt funkciju atbilstoši mūsu vēlmēm, tāpēc es to nosaucu kā speed_isr (). Šī programma nodarbojas ar diviem pārtraukumiem, viens ir Taimera pārtraukums un otrs - Ārējais pārtraukums. Ikreiz, kad notiek taimera pārtraukums, karodziņš TMR0IF iet uz augšu, lai notīrītu un atiestatītu pārtraukumu, mums tas ir jāpadara zems, nosakot TMR0IF = 0, kā parādīts zemāk esošajā kodā.
void break speed_isr () {if (TMR0IF == 1) // Taimeris ir pārlidojis {TMR0IF = 0; // Notīrīt taimera pārtraukuma karodziņu milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sek) * 60; ātrums = 0,3 * apgr./min * 0,37699; // (pieņemot, ka riteņa rādiuss ir 30 cm) INTF = 0; // notīrīt pārtraukuma karodziņu milli_sec = 0; attālums = attālums + 028,2; }}
Līdzīgi, kad notiek ārējs pārtraukums, karogs INTF iet uz augšu, tas arī jānodzēš, nosakot INTF = 0. Taimera pārtraukums nosaka nepieciešamo laiku, un ārējais pārtraukums nosaka, kad ritenis ir pabeidzis vienu pilnu rotāciju. Izmantojot šos datus, katra ārējā pārtraukuma laikā tiek aprēķināts riteņa veiktais ātrums un attālums.
Kad ātrums un attālums ir aprēķināts, tos var vienkārši parādīt LCD ekrānā, izmantojot mūsu LCD funkcijas. Ja LCD ierīcēs esat jauns, skatiet mūsu saskarnes LCD ar PIC16F877A MCU apmācību.
Darba skaidrojums:
Kad esat sagatavojis aparatūru un programmatūru, vienkārši augšupielādējiet kodu savā PIC16F877A. Ja esat PIC lietotājs pavisam nesen, jums vajadzētu izlasīt dažas apmācības par to, kā zināt, kā programmu augšupielādēt PIC16F877A mikrokontrollerī.
Esmu izmantojis mainīgo POT, lai pielāgotu motora ātrumu demonstrācijas vajadzībām. Varat arī izmantot to pašu, lai atrastu reāllaika lietojumprogrammu. Ja viss darbojas, kā paredzēts, jums vajadzētu būt iespējai nobraukt ātrumu km / h un attālumu metros, kā parādīts zemāk esošajā video.
Ceru, ka jums patika projekts un tas darbojās. Ja nē, varat izmantot komentāru sadaļu zemāk vai forumu, lai paustu šaubas.