- Mga Materyal na Kinakailangan:
- Kinakalkula ang Bilis at Saklaw ng Distansya:
- Circuit Diagram at Pag-setup ng Hardware:
- Simulation:
- Pag-program ng iyong PIC16F877A:
- Paggawa ng Paliwanag:
Ang pagsukat sa bilis / rpm ng isang Sasakyan o isang motor ay palaging isang kamangha-manghang proyekto para subukan namin. Kaya, sa proyektong ito magtatayo kami ng isa gamit ang Industrial handa na mga PIC microcontroller. Gumagamit kami ng isang piraso ng pang-akit at isang Hall Sensor upang sukatin ang bilis. Mayroong iba pang mga paraan / sensor upang masukat ang bilis ngunit, ang paggamit ng isang sensor ng hall ay mura at maaari ding magamit sa anumang uri ng motor / Sasakyan. Sa pamamagitan ng paggawa ng proyektong ito mapahusay din namin ang aming mga kasanayan sa pag-aaral ng PIC16F877A dahil ang proyekto ay nagsasangkot ng paggamit ng Mga Makagambala at Timer. Sa, pagtatapos ng proyektong ito magagawa mong kalkulahin ang bilis at distansya na sakop ng anumang umiikot na bagay at ipakita ang mga ito sa isang 16x2 LCD screen. Hinahayaan nating magsimula sa Digital Speedometer at Odometer Circuit na may PIC.
Mga Materyal na Kinakailangan:
- PIC16F877A
- 7805 Boltahe Regulator
- Hall Effect Sensor (US1881 / 04E)
- 16 * 2 LCD display
- Isang maliit na piraso ng magnet
- Mga kumokonekta na mga wire
- Mga capacitor
- Breadboard.
- Supply ng kuryente
Kinakalkula ang Bilis at Saklaw ng Distansya:
Bago namin talaga simulang buuin ang circuit, ipaalam sa amin kung paano kami gagamit ng isang sensor ng Hall at isang magnet upang makalkula ang bilis ng isang gulong. Dati nagamit namin ang parehong Diskarte upang mabuo ang Arduino Speedometer na nagpapakita ng mga pagbasa sa Android Smart Phone.
Ang sensor ng Hall ay isang aparato na maaaring makita ang pagkakaroon ng isang magnet na batay sa polarity nito. Nagdidikit kami ng isang maliit na piraso ng pang-akit sa gulong at inilalagay ang sensor ng bulwagan malapit dito sa paraang sa tuwing paikutin ng gulong ay nakikita ito ng sensor ng hall. Ginagamit namin pagkatapos ang tulong ng mga timer at Interrupts sa aming PIC Microcontroller upang makalkula ang oras na kinuha para sa isang kumpletong pag-ikot ng gulong.
Kapag nalalaman ang oras na ginugol maaari naming kalkulahin ang RPM sa pamamagitan ng paggamit ng mga formula sa ibaba, Kung saan bibigyan kami ng 1000 / oras na RPS at karagdagang pagpaparami nito ng 60 ay magbibigay sa iyo ng RPM
rpm = (1000 / timetaken) * 60;
Kung saan (1000 / timetaken) ay nagbibigay ng mga rps (Mga rebolusyon bawat segundo) at pinarami ito ng 60 upang ma-convert ang rps sa rpm (Mga Revolusyon bawat minuto).
Ngayon upang makalkula ang tulin ng sasakyan kailangan nating malaman ang radius ng gulong. Sa aming proyekto ay gumamit kami ng isang maliit na gulong laruang may radius na 3cm lamang. Ngunit, ipinapalagay namin na ang radius ng gulong ay dapat na 30cm (0.3m) upang mailarawan natin ang mga binasa.
Ang halaga ay pinarami rin ng 0.37699 dahil alam natin na Ang bilis = (RPM (diameter * Pi) / 60). Ang mga formula ay pinadali hanggang sa
v = radius_of_wheel * rpm * 0.37699;
Kapag kinakalkula namin ang tulin maaari din nating kalkulahin ang distansya na sakop ng paggamit ng isang katulad na pamamaraan. Sa aming Hall at pag-aayos ng magnet alam namin na kung gaano karaming beses na umiikot ang gulong. Alam din natin ang radius ng gulong, gamit kung saan maaari nating makita ang bilog ng gulong, sa pag-aakalang ang radius ng gulong ay 0.3m (R) ang mga halaga ng kurso na Pi * R * R ay magiging 0.2827. Nangangahulugan ito na para sa bawat oras na natutugunan ng sensor ng hall ang pang-akit sa isang distansya na 0.2827 metro ay sakop ng gulong.
Distance_covered = distance_covered + circumference_of_the_circle
Dahil, ngayon alam namin kung paano gagana ang proyektong ito ay hinahayaan na magpatuloy sa aming circuit diagram at simulang buuin ito.
Circuit Diagram at Pag-setup ng Hardware:
Ang Circuit Diagram ng Speedometer at Odometer Project na ito ay napaka-simple at maaaring maitayo sa isang breadboard. Kung sinusundan mo ang mga tutorial na PIC pagkatapos ay maaari mo ring magamit muli ang hardware na ginamit namin para sa pag-aaral ng mga microcontroller ng PIC. Ginamit namin dito ang parehong perf Board na itinayo namin para sa LED Blinking sa PIC Microcontroller, tulad ng ipinakita sa ibaba:
Ang mga koneksyon ng pin para sa PIC16F877A MCU ay ibinibigay sa talahanayan sa ibaba.
S. Hindi: |
Numero ng Pin |
Pangalan ng Pin |
Nakakonekta sa |
1 |
21 |
RD2 |
RS ng LCD |
2 |
22 |
RD3 |
E ng LCD |
3 |
27 |
RD4 |
D4 ng LCD |
4 |
28 |
RD5 |
D5 ng LCD |
5 |
29 |
RD6 |
D6 ng LCD |
6 |
30 |
RD7 |
D7 ng LCD |
7 |
33 |
RB0 / INT |
3 rd pin ng Hall sensor |
Kapag nabuo mo ang iyong proyekto dapat itong magmukhang ganito sa larawan sa ibaba
Tulad ng nakikita mo Gumamit ako ng dalawang mga kahon upang ilagay ang Motor at isang sensor ng hall sa kalapit na posisyon. Maaari mong ayusin ang pang-akit sa iyong umiikot na bagay at buuin ang sensor ng hall na malapit dito sa isang paraan na maaari nitong makita ang pang-akit.
Tandaan: Ang sensor ng Hall ay may mga polarity, kaya siguraduhin kung aling poste ang nakikita nito at ilagay ito nang naaayon.
Siguraduhin din na gumagamit ka ng isang pull-up risistor na may output pin ng sensor ng hall.
Simulation:
Ang Simulation para sa proyektong ito ay ginagawa gamit ang Proteus. Dahil ang proyekto ay nagsasangkot ng paglipat ng mga bagay hindi posible na ipakita ang kumpletong proyekto gamit ang simulation ngunit ang pagpapatakbo ng LCD ay maaaring mapatunayan. I-load lamang ang hex file sa Simulate at gayahin ito. Mapapansin mo ang LCD na gumagana tulad ng ipinakita sa ibaba.
Upang suriin ang bilis ng takbo at gumagana ang odometer pinalitan ko ang sensor ng Hall ng isang aparato ng estado ng Logic. Sa panahon ng simulation maaari kang mag-click sa pindutan ng estado ng lohika upang ma-trigger ang Makagambala at suriin kung ang bilis at distansya na sakop ay nai-update tulad ng ipinakita sa itaas.
Pag-program ng iyong PIC16F877A:
Tulad ng sinabi kanina ay gagamitin namin ang tulong ng mga timer at pagkagambala sa PIC16F877A Microcontroller upang makalkula ang oras na kinuha para sa isang kumpletong pag-ikot ng gulong. Natutunan na namin kung paano gamitin ang Mga Timer sa aming marunong na tutorial. Ibinigay ko ang kumpletong code ng proyekto sa pagtatapos ng artikulong ito. Dagdag na ipinaliwanag ko ang ilang mahahalagang linya sa ibaba.
Ang mga linya sa ibaba ng code ay nagpapasimula sa Port D bilang mga output pin para sa LCD interfacing at RB0 bilang input pin para sa paggamit nito bilang panlabas na Pin. Dagdag dito pinagana namin ang panloob na pull-up risistor gamit ang OPTION_REG at itinakda din ang 64 bilang presale. Pagkatapos ay Pinapagana namin ang Global at Peripheral Interrupt upang paganahin ang Timer at External Interrupt. Upang tukuyin ang RB0 bilang panlabas na makagambala bit INTE ay dapat gawing mataas. Ang Overflow ay ang halaga ay itinakda upang maging 100 upang sa bawat 1 millisecond ang timer makagambala flag TMR0IF ay ma-trigger. Makakatulong ito upang magpatakbo ng isang millisecond timer upang matukoy ang oras na kinuha sa millisecond:
TRISD = 0x00; // PORTD idineklarang output para sa interfacing ng LCD TRISB0 = 1; // Tukuyin ang RB0 pin bilang input upang magamit bilang makagambala na pin OPTION_REG = 0b00000101; // Timer0 64 bilang prescalar // Pinapagana din ang Pull UPs TMR0 = 100; // Load ang halaga ng oras para sa 1ms; ang delayValue ay maaaring nasa pagitan ng 0-256 lamang TMR0IE = 1; // Paganahin ang timer makagambala nang kaunti sa PIE1 rehistro GIE = 1; // Enable Global Interrupt PEIE = 1; // Paganahin ang Peripheral Interrupt INTE = 1; // Paganahin ang RB0 bilang panlabas na Interrupt pin
Ang pagpapaandar sa ibaba ay papatayin sa tuwing may napansin na isang Nakagambala. Maaari naming pangalanan ang pagpapaandar ayon sa kagustuhan namin kaya pinangalanan ko ito bilang speed_isr (). Ang program na ito ay nakikipag-usap sa dalawang nakakagambala sa isa ay Timer Interrupt at ang isa pa ay External Interrupt. Kailan man maganap ang isang Timer Interrupt ay mataas ang watawat na TMR0IF, upang i-clear at i-reset ang makagambala kailangan naming gawin itong mababa sa pamamagitan ng pagtukoy sa TMR0IF = 0 tulad ng ipinakita sa code sa ibaba.
walang bisa interrupt speed_isr () {if (TMR0IF == 1) // Timer has overflown {TMR0IF = 0; // Clear timer makagambala flag milli_sec ++; } kung (INTF == 1) {rpm = (1000 / milli_sec) * 60; bilis = 0.3 * rpm * 0.37699; // (Ipagpalagay na ang radius ng gulong ay 30cm) INTF = 0; // clear the interrupt flag milli_sec = 0; distansya = distansya + 028.2; }}
Katulad nito kapag naganap ang Panlabas na Pagkagambala ang flag na INTF ay magiging mataas, dapat din itong i-clear sa pamamagitan ng pagtukoy sa INTF = 0. Ang oras na ginugol ay itinatago sa track ng Timer Interrupt at tinutukoy ng External Interrupt kung kailan nakumpleto ng gulong ang isang buong pag-ikot. Sa data na ito ang bilis at distansya na sakop ng gulong ay kinakalkula sa panahon ng bawat panlabas na Makagambala.
Kapag kinalkula ang bilis at distansya maaari lamang silang maipakita sa LCD screen gamit ang aming mga function ng LCD. Kung bago ka sa mga LCD pagkatapos ay mag-refer sa aming interfacing LCD na may tutorial na PIC16F877A MCU.
Paggawa ng Paliwanag:
Matapos mong maihanda ang Hardware at software, i-upload lamang ang code sa iyong PIC16F877A. Kung ganap kang bago sa PIC pagkatapos ay dapat mong basahin ang ilang mga tutorial sa pag-alam kung paano i-upload ang programa sa isang PIC16F877A Microcontroller.
Gumamit ako ng variable na POT upang ayusin ang Bilis ng Motor para sa layunin ng pagpapakita. Maaari mo ring gamitin ang pareho ng makahanap ng isang real time application. Kung ang lahat ay gumagana tulad ng inaasahan pagkatapos ay dapat mong makuha ang Velocity sa Km / Hr at Distansya na sakop sa mga tuntunin ng metro tulad ng ipinakita sa Video sa ibaba.
Inaasahan kong nasiyahan ka sa proyekto at napaandar ito. Kung hindi maaari mong gamitin ang seksyon ng komento sa ibaba o ang forum upang mai-post ang iyong pagdududa.