Sa tutorial na ito tatalakayin namin at magdisenyo ng isang circuit para sa pagsukat ng distansya. Ang circuit na ito ay binuo ng interfacing ultrasonic sensor na "HC-SR04" sa AVR microcontroller. Gumagamit ang sensor na ito ng diskarteng tinatawag na "ECHO" na kung saan ay makukuha mo kapag ang tunog ay sumasalamin pabalik pagkatapos na magwelga sa isang ibabaw.
Alam namin na ang mga tunog na panginginig ay hindi maaaring tumagos sa pamamagitan ng mga solido. Kaya kung ano ang mangyayari ay, kapag ang isang mapagkukunan ng tunog ay bumubuo ng mga panginginig ay naglalakbay sila sa pamamagitan ng hangin sa bilis na 220 metro bawat segundo. Ang mga panginginig na tunog kapag nakilala nila ang aming tainga inilalarawan namin ang mga ito bilang tunog. Tulad ng sinabi nang mas maaga ang mga panginginig na ito ay hindi maaaring dumaan sa solid, kaya kapag nag-welga sila na may ibabaw na tulad ng dingding, makikita ang mga ito sa parehong bilis sa pinagmulan, na tinatawag na echo.
Ang sensor ng ultrasonic na "HC-SR04" ay nagbibigay ng isang output signal na proporsyonal sa distansya batay sa echo. Ang sensor dito ay bumubuo ng isang tunog panginginig ng tunog sa saklaw ng ultrasonic sa pagbibigay ng isang gatilyo, pagkatapos nito naghihintay para sa tunog panginginig ng boses upang bumalik. Batay ngayon sa mga parameter, bilis ng tunog (220m / s) at oras na ginugol para maabot ang echo sa pinagmulan, nagbibigay ito ng output ng pulso na proporsyonal sa distansya.
Tulad ng ipinakita sa pigura, sa una kailangan naming simulan ang sensor para sa pagsukat ng distansya, iyon ay isang HINDI signal ng lohika sa trigger pin ng sensor nang higit sa 10uS, pagkatapos nito ang isang tunog na panginginig ay ipinadala ng sensor, pagkatapos ng isang echo, nagbibigay ang sensor isang senyas sa output pin na ang lapad ay proporsyonal sa distansya sa pagitan ng mapagkukunan at balakid.
Ang distansya na ito ay kinakalkula bilang, distansya (sa cm) = lapad ng output ng pulso (sa uS) / 58.
Dito ang lapad ng signal ay dapat gawin sa maraming uS (micro segundo o 10 ^ -6).
Kinakailangan ang Mga Bahagi
Hardware: ATMEGA32, Power supply (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF capacitor, 10KΩ resistor (2 piraso), HC-SR04 sensor.
Software: Atmel studio 6.1, progisp o flash magic.
Circuit Diagram at Paggawa ng Paliwanag
Narito ginagamit namin ang PORTB upang kumonekta sa LCD data port (D0-D7). Ang sinumang hindi nais na gumana sa FUSE BITS ng ATMEGA32A ay hindi maaaring gumamit ng PORTC, dahil ang PORTC ay naglalaman ng isang espesyal na uri ng komunikasyon na maaari lamang hindi paganahin sa pamamagitan ng pagbabago ng FUSEBITS.
Sa circuit, napagmasdan mo na kumuha lamang ako ng dalawang control pin, ito ay nagbibigay ng kakayahang umangkop ng mas mahusay na pagkaunawa. Ang kaibahan ng kaunti at BASAHIN / Sumulat ay hindi madalas na ginagamit upang maaari silang maiksi sa lupa. Inilalagay nito ang LCD sa pinakamataas na kaibahan at mode na basahin. Kailangan lang naming makontrol ang Mga PIN na INABAYAHAN at RS upang magpadala ng mga character at data nang naaayon.
Ang mga koneksyon na tapos para sa LCD ay ibinibigay sa ibaba:
PIN1 o VSS sa lupa
Ang PIN2 o VDD o VCC sa + 5v na lakas
PIN3 o VEE sa lupa (nagbibigay ng pinakamataas na maximum na kaibahan para sa isang nagsisimula)
PIN4 o RS (Pagpili ng Rehistro) sa PD6 ng uC
Ang PIN5 o RW (Basahin / Isulat) sa ground (inilalagay ang LCD sa read mode ay pinapagaan ang komunikasyon para sa gumagamit)
PIN6 o E (Paganahin) sa PD5 ng uC
PIN7 o D0 hanggang PB0 ng uC
PIN8 o D1 hanggang PB1 ng uC
PIN9 o D2 hanggang PB2 ng uC
PIN10 o D3 hanggang PB3 ng uC
PIN11 o D4 hanggang PB4 ng uC
PIN12 o D5 hanggang PB5 ng uC
PIN13 o D6 hanggang PB6 ng uC
PIN14 o D7 hanggang PB7 ng uC
Sa circuit maaari mong makita na ginamit namin ang 8bit na komunikasyon (D0-D7) subalit hindi ito isang sapilitan at maaari naming gamitin ang 4bit na komunikasyon (D4-D7) ngunit sa 4 bit na programa sa komunikasyon ay medyo kumplikado. Kaya't tulad ng ipinakita sa talahanayan sa itaas ay kumokonekta kami ng 10 mga pin ng LCD sa controller kung saan ang 8 mga pin ay mga pin ng data at 2 mga pin para sa kontrol.
Ang sensor ng ultrasonic ay isang aparatong apat na pin, PIN1- VCC o + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- GROUND. Ang Trigger pin ay kung saan nagbibigay kami ng trigger upang sabihin sa sensor na sukatin ang distansya. Ang echo ay output pin kung saan nakukuha natin ang distansya sa anyo ng lapad ng pulso. Ang echo pin dito ay nakakonekta sa controller bilang isang panlabas na mapagkukunan ng nakakagambala. Kaya upang makuha ang lapad ng output signal, ang echo pin ng sensor ay konektado sa INT0 (makagambala 0) o PD2.
1. Pag-trigger ng sensor sa pamamagitan ng paghila ng gat ng pin para sa atleast 12uS.
2. Kapag mataas ang echo nakakakuha kami ng isang panlabas na makagambala at magsisimula kami ng isang counter (pagpapagana ng isang counter) sa ISR (Interrupt Service Routine) na naisakatuparan pagkatapos ng isang nagagambala na nag-trigger.
3. Sa sandaling ang echo ay bumaba muli muli ang isang nakakagambala ay nabuo, sa oras na ito ay ititigil namin ang counter (hindi pagpapagana ng counter).
4. Kaya para sa isang pulso na mataas hanggang mababa sa echo pin, nagsimula kaming isang counter at pinahinto ito. Ang bilang na ito ay na-update sa memorya para sa pagkuha ng distansya, dahil mayroon kaming lapad ng echo sa bilang ngayon.
5. Gagawa kami ng karagdagang mga kalkulasyon sa memorya upang makuha ang distansya sa cm
6. Ang distansya ay ipinapakita sa 16x2 LCD display.
Para sa pag-set up ng mga tampok sa itaas ay itatakda namin ang mga sumusunod na rehistro:
Ang tatlong mga rehistro sa itaas ay itatakda nang naaayon para gumana ang pag-set up at tatalakayin namin ito nang maikli, BLUE (INT0): ang bit na ito ay dapat itakda nang mataas upang paganahin ang panlabas na interrupt0, sa sandaling maitakda ang pin na ito ay maunawaan natin ang mga pagbabago sa lohika sa PIND2 pin.
BROWN (ISC00, ISC01): ang dalawang piraso na ito ay nababagay para sa naaangkop na pagbabago ng lohika sa PD2, na maituturing na nakakagambala.
Kaya't tulad ng sinabi nang maaga kailangan namin ng isang nakakagambala upang simulan ang isang bilang at upang ihinto ito. Kaya't itinakda namin ang ISC00 bilang isa at nakakagambala kami kapag mayroong isang lohika na LOW to HIGH sa INT0; ang iba pang nakakagambala kapag mayroong isang lohika MATAAS na mababa.
PULA (CS10): Ang bit na ito ay upang paganahin at huwag paganahin ang counter. Bagaman gumagana ito kasama ang iba pang mga piraso ng CS10, CS12. Hindi kami gumagawa ng anumang prescaling dito, kaya't hindi kami dapat magalala tungkol sa kanila.
Ang ilang mahahalagang bagay na dapat tandaan dito ay:
Gumagamit kami ng panloob na orasan ng ATMEGA32A na kung saan ay 1MHz. Walang prescaling dito, hindi kami gumagawa ng paghahambing ng tugma makagambala makabuo ng gawain, kaya walang mga setting ng kumplikadong rehistro.
Ang halaga ng bilang pagkatapos ng pagbibilang ay nakaimbak sa 16bit TCNT1 register.
Suriin din ang proyektong ito sa arduino: Pagsukat sa distansya gamit ang Arduino
Paliwanag sa Programming
Ang sensor ng Paggawa ng Distansya ng Pagsukat ay ipinapaliwanag hakbang-hakbang sa ibaba ng C program.
#include // header upang paganahin ang kontrol ng daloy ng data sa mga pin # tukuyin ang F_CPU 1000000 // na nagsasabi sa dalas ng kristal na controller na nakakabit # isama