- Mga Materyal na Kinakailangan:
- Paano gumagana ang isang Ultrasonic Sensor?
- Pag-program ng iyong PIC Microcontroller:
Para sa anumang proyekto na mabuhay, kailangan naming gumamit ng mga sensor. Ang mga sensor ay gumaganap bilang mga mata at tainga para sa lahat ng naka-embed na application, nakakatulong ito sa digital Microcontroller na maunawaan kung ano ang totoong nangyayari sa totoong mundo ng Analog na ito. Sa tutorial na ito matututunan namin kung paano mag- interface ng Ultrasonic Sensor HC-SR04 sa PIC microcontroller.
Ang HC-SR04 ay isang ultrasonic sensor na maaaring magamit upang sukatin ang distansya kahit saan sa pagitan ng 2cm hanggang 450cm (theoretically). Ang sensor na ito ay nagpatunay na karapat-dapat sa pamamagitan ng paglalagay sa maraming mga proyekto na nagsasangkot ng mga hadlang sa pagtuklas, distansya sa pagsukat, pagmamapa ng kapaligiran atbp Sa pagtatapos ng artikulong ito matututunan mo kung paano gumagana ang sensor na ito at kung paano ito maiugnay sa PIC16F877A microcontroller upang masukat ang distansya at ipakita ito sa LCD screen. Tunog kagiliw-giliw na tama !! Magsimula na tayo…
Mga Materyal na Kinakailangan:
- PIC16F877A MCU na may program set-up
- LCD 16 * 2 display
- Ultrasonic sensor (HC-SR04)
- Mga kumokonekta na mga wire
Paano gumagana ang isang Ultrasonic Sensor?
Bago tayo magpatuloy, dapat nating malaman kung paano gumagana ang isang sensor ng Ultrasonic upang mas maintindihan natin ang tutorial na ito. Ang ultrasonic sensor na ginamit sa proyektong ito ay ipinapakita sa ibaba.
Tulad ng nakikita mong mayroon itong dalawang pabilog na mga mata tulad ng mga pagpapakitang at apat na mga pin na lalabas dito. Ang dalawang mata tulad ng pagpapakita ay ang Ultrasonic alon (pagkatapos ay tinukoy bilang US alon) Transmitter at tatanggap. Ang nagpapadala ay nagpapalabas ng isang alon ng US sa dalas ng 40Hz, ang alon na ito ay naglalakbay sa pamamagitan ng hangin at nasasalamin muli kapag nararamdaman nito ang isang bagay. Ang mga nagbabalik na alon ay sinusunod ng tatanggap. Ngayon alam namin ang oras na ginugol para sa alon na ito upang masasalamin at bumalik at ang bilis ng US wave ay unibersal din (3400cm / s). Gamit ang impormasyong ito at ang mga formula sa ibaba ng high school maaari naming kalkulahin ang saklaw na sakop.
Distansya = Bilis × Oras
Ngayon na alam namin kung paano gumagana ang isang US sensor, ipaalam sa amin kung paano ito maaaring ma-interfaced sa anumang MCU / CPU gamit ang apat na mga pin. Ang apat na mga pin na ito ay Vcc, Trigger, Echo at Ground ayon sa pagkakabanggit. Gumagana ang module sa + 5V at samakatuwid ang Vcc at ground pin ay ginagamit upang paandarin ang module. Ang iba pang dalawang mga pin ay ang mga I / O na pin na ginagamit kung saan nakikipag-usap kami sa aming MCU. Ang trigger pin ay dapat na idineklara bilang isang output pin at ginawang mataas para sa isang 10uS, ililipat nito ang alon ng US sa hangin habang ang 8 cycle sonic ay sumabog. Kapag na-obserbahan ang alon ang Echo pin ay magiging mataas para sa eksaktong agwat ng oras na kinuha ng US wave upang bumalik sa module ng sensor. Samakatuwid ang Echo pin na ito ay idedeklarang inputat isang timer ang gagamitin upang sukatin kung gaano katagal ang taas ng pin. Maaari pa itong maunawaan ng diagram ng tiyempo sa ibaba.
Inaasahan mong nakarating ka sa isang pansamantalang paraan upang mai-interface ang sensor na ito sa PIC. Gagamitin namin ang module ng Timer at module ng LCD sa tutorial na ito at ipinapalagay kong pamilyar ka sa pareho, kung hindi mangyaring bumalik sa kani-kanilang tutorial sa ibaba dahil lalaktawan ko ang karamihan sa impormasyong nauugnay dito.
- LCD Interfacing sa PIC Microcontroller
- Pag-unawa sa Mga Timer sa PIC Microcontroller
Diagram ng Circuit:
Ang kumpletong diagram ng circuit para sa interface ng Ultrasonic Sensor sa PIC16F877A ay ipinapakita sa ibaba:
Tulad ng ipinakita, ang circuit ay nagsasangkot ng hindi hihigit sa isang display sa LCD at ang sensor mismo ng Ultrasonic. Ang US sensor ay maaaring pinalakas ng + 5V at samakatuwid ito ay direktang pinalakas ng 7805 voltage regulator. Ang sensor ay may isang output pin (Trigger pin) na konektado sa pin 34 (RB1) at ang input pin (Echo pin) ay konektado sa pin 35 (RB2). Ang kumpletong koneksyon sa pin ay isinalarawan sa talahanayan sa ibaba.
S. Hindi: |
Numero ng Pin ng PIC |
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 |
34 |
RB1 |
Trigger ng US |
8 |
35 |
RB2 |
Echo ng US |
Pag-program ng iyong PIC Microcontroller:
Ang kumpletong programa para sa tutorial na ito ay ibinibigay sa dulo ng pahinang ito, karagdagang sa ibaba ay ipinaliwanag ko ang code sa maliit na kahulugan ng buong mga chunks para maintindihan mo. Tulad ng sinabi nang mas maaga sa programa ay nagsasangkot ng konsepto ng LCD interfacing at Timer na hindi ipaliwanag sa mga detalye sa tutorial na ito dahil nasakop na namin sila sa mga nakaraang tutorial.
Sa loob, ang pangunahing pagpapaandar ay nagsisimula kami sa pagsisimula ng mga pin ng IO at iba pang mga pagrehistro tulad ng dati. Tinutukoy namin ang mga pin ng IO para sa LCD at sensor ng US at pinasimulan din ang rehistro ng Timer 1 sa pamamagitan ng pagtatakda nito upang gumana sa 1: 4 pre-scalar at upang magamit ang panloob na orasan (Fosc / 4)
TRISD = 0x00; // PORTD idineklarang output para sa interfacing ng LCD TRISB0 = 1; // Define the RB0 pin as input to use as interrupt pin TRISB1 = 0; // Trigger pin ng US sensor ay ipinadala bilang output pin TRISB2 = 1; // Echo pin ng US sensor ay itinakda bilang input pin TRISB3 = 0; // RB3 ay output pin para sa LED T1CON = 0x20; // 4 pres-scalar at panloob na orasan
Ang Timer 1 ay isang 16-bit timer na ginamit sa PIC16F877A, ang rehistro ng T1CON ang kumokontrol sa mga parameter ng module ng timer at ang resulta ay maiimbak sa TMR1H at TMR1L dahil ito ay isang 16-bit na resulta ang unang 8 ay maiimbak sa TMR1H at ang susunod na 8 sa TMR1L. Ang timer na ito ay maaaring i-on o i-off gamit ang TMR1ON = 0 at TMR1ON = 1 ayon sa pagkakabanggit.
Ngayon, handa nang gamitin ang timer, ngunit kailangan naming ipadala ang mga alon ng US mula sa sensor, upang gawin ito kailangan naming panatilihing mataas ang Trigger pin para sa 10uS, ginagawa ito ng sumusunod na code.
Trigger = 1; __delay_us (10); Trigger = 0;
Tulad ng ipinakita sa diagram ng tiyempo sa itaas, ang Echo pin ay mananatiling mababa hanggang sa bumalik ang alon at pagkatapos ay mataas at mananatiling mataas para sa eksaktong oras na kinuha para bumalik ang mga alon. Ang oras na ito ay kailangang sukatin ng module ng Timer 1, na maaaring gawin ng linya sa ibaba
habang (Echo == 0); TMR1ON = 1; habang (Echo == 1); TMR1ON = 0;
Kapag nasusukat ang oras ang nagresultang halaga ay mai-save sa mga rehistro ng TMR1H at TMR1L, ang mga rehistro na ito ay dapat na clubbed upang tipunin upang makuha ang 16-bit na halaga. Ginagawa ito sa pamamagitan ng paggamit ng linya sa ibaba
time_taken = (TMR1L - (TMR1H << 8));
Ang time_taken na ito ay magiging form bytes, upang makuha ang aktwal na halaga ng oras na mayroon kami upang magamit ang formula sa ibaba.
Oras = (16-bit na halaga ng rehistro) * (1 / Panloob na Orasan) * (Pre-scale) Panloob na Orasan = Fosc / 4 Kung saan sa aming kaso, Fosc = 20000000Mhz at Pre-scale = 4 Samakatuwid ang halaga ng Panloob na Orasan ay 5000000Mhz at ang halaga ng oras ay Oras = (16-bit na halaga ng rehistro) * (1/5000000) * (4) = (16-bit na halaga ng rehistro) * (4/5000000) = (16-bit na halaga ng rehistro) * 0.0000008 segundo (O) Oras = (16-bit na halaga ng rehistro) * 0.8 micro segundo
Sa aming programa ang halaga ng 16-bit register ay nakaimbak sa variable time_taken at samakatuwid ang linya sa ibaba ay ginagamit upang makalkula ang time_taken sa micro segundo
time_taken = time_taken * 0.8;
Susunod kailangan nating hanapin kung paano makalkula ang distansya. Tulad ng alam natin distansya = bilis * oras. Ngunit narito ang resulta ay dapat na hinati sa 2 dahil ang alon ay sumasaklaw sa parehong distansya ng paglilipat at pagtanggap ng distansya. Ang bilis nating kumaway (tunog) ay 34000cm / s.
Distansya = (Bilis * Oras) / 2 = (34000 * (16-bit na halaga ng rehistro) * 0.0000008) / 2 Distansya = (0.0272 * 16-bit na halaga ng rehistro) / 2
Kaya't ang distansya ay maaaring kalkulahin sa sentimetro tulad ng sa ibaba:
distansya = (0.0272 * time_taken) / 2;
Matapos kalkulahin ang halaga ng distansya at oras na kinakailangan kailangan lang namin ipakita ang mga ito sa LCD screen.
Pagsukat sa distansya gamit ang PIC at Ultrasonic Sensor:
Matapos gawin ang mga koneksyon at i-upload ang code, ang iyong pang-eksperimentong pag-set-up ay dapat magmukhang tulad nito na ipinakita sa larawan sa ibaba.
Ang board ng PIC Perf, na ipinapakita sa larawang ito, ay ginawa para sa aming serye ng tutorial na PIC, kung saan natutunan namin kung paano gamitin ang PIC microcontroller. Maaaring gusto mong bumalik sa mga tutorial ng PIC Microcontroller gamit ang MPLABX at XC8 kung hindi mo alam kung paano sunugin ang isang programa gamit ang Pickit 3, dahil lalaktawan ko ang lahat ng pangunahing impormasyon.
Ngayon maglagay ng isang bagay sa harap ng sensor at dapat itong ipakita kung gaano kalayo ang object mula sa sensor. Maaari mo ring mapansin ang oras na ginugol na ipinapakita sa mga micro segundo para sa alon na magpadala at bumalik.
Maaari mong ilipat ang bagay sa iyong ginustong distansya at suriin ang halagang ipinapakita sa LCD. Nasusukat ko ang distansya mula 2cm hanggang 350cm na may katumpakan na 0.5cm. Ito ay lubos na isang kasiya-siyang resulta! Inaasahan kong nasiyahan ka sa tutorial at natutunan kung paano gumawa ng isang bagay sa iyong sarili. Kung mayroon kang anumang pagdududa ihulog ang mga ito sa seksyon ng komento sa ibaba o gamitin ang mga forum.
Suriin din ang interfacing ng Ultrasonic sensor sa iba pang mga microcontroller:
- Pagsukat sa Distansya na Batay sa Arduino at Ultrason Sensor
- Sukatin ang Distansya gamit ang Raspberry Pi at HCSR04 Ultrasonic Sensor
- Pagsukat sa Distansya gamit ang HC-SR04 at AVR Microcontroller