Jotta jokin projekti herää eloon, meidän on käytettävä antureita. Anturit toimivat kaikkien sulautettujen sovellusten silminä ja korvina, ja ne auttavat digitaalista mikro-ohjainta ymmärtämään, mitä todellisessa analogisessa maailmassa tapahtuu. Tässä opetusohjelmassa opitaan, kuinka liittää ultraääni-anturi HC-SR04 PIC-mikrokontrolleriin.
HC-SR04 on ultraäänianturi, jota voidaan käyttää mittaamaan etäisyyden missä tahansa välillä 2 cm ja 450cm (teoreettisesti). Tämä anturi on osoittautunut kelvolliseksi sovittamalla moniin projekteihin, joihin kuuluu esteiden havaitseminen, etäisyyden mittaaminen, ympäristön kartoitus jne. Tämän artikkelin lopussa opit kuinka tämä anturi toimii ja miten se voidaan liittää PIC16F877A-mikrokontrolleriin etäisyyden ja näytön mittaamiseksi LCD-näytöllä. Kuulostaa mielenkiintoiselta! Joten aloitetaan…
Tarvittavat materiaalit:
- PIC16F877A MCU ohjelmointiasetuksilla
- LCD 16 * 2 -näyttö
- Ultraäänianturi (HC-SR04)
- Johtojen liittäminen
Kuinka ultraäänianturi toimii?
Ennen kuin pääsemme eteenpäin, meidän tulisi tietää, kuinka ultraäänianturi toimii, jotta voimme ymmärtää tämän opetusohjelman paljon paremmin. Tässä projektissa käytetty ultraäänianturi on esitetty alla.
Kuten näette, siinä on kaksi pyöreää silmää, kuten ulkonemat ja neljä nastaa. Kaksi silmän kaltaista projektiota ovat Ultraääniaallon (jäljempänä Yhdysvaltain aalto) lähetin ja vastaanotin. Lähetin lähettää Yhdysvaltain aallon taajuudella 40 Hz, tämä aalto kulkee ilman läpi ja heijastuu takaisin, kun se havaitsee kohteen. Vastaanotin havaitsee palaavat aallot. Nyt tiedämme, kuinka kauan tämä aalto heijastuu ja palaa, ja Yhdysvaltain aallon nopeus on myös yleinen (3400 cm / s). Näiden tietojen ja alla olevien lukiokaavojen avulla voimme laskea kuljetun matkan.
Etäisyys = nopeus × aika
Nyt kun tiedämme, kuinka yhdysvaltalainen anturi toimii, anna meille, kuinka se voidaan liittää mihin tahansa MCU / CPU: han käyttämällä neljää nastaa. Nämä neljä nastaa ovat Vcc, Trigger, Echo ja Ground. Moduuli toimii + 5 V: n jännitteellä, joten Vcc: tä ja maadoitettua nastaa käytetään moduulin virtalähteeseen. Kaksi muuta nastaa ovat I / O-nastat, joiden avulla kommunikoimme MCU: lle. Laukaisutapista olisi ilmoitettu antonastan ja korkeaksi varten 10US, tämä lähettää Yhdysvaltain aallon ilmaan kuin 8 syklin Sonic räjähtää. Kun aalto on havaittu, kaiun tappi nousee korkealle tarkan ajanjakson ajan, jonka Yhdysvaltain aalto otti palatakseen takaisin anturimoduuliin. Siksi tämä kaiun tappi ilmoitetaan syötteeksija ajastinta käytetään mittaamaan kuinka kauan tappi oli korkea. Tämä voidaan ymmärtää edelleen alla olevasta ajoituskaaviosta.
Toivottavasti olet päässyt alustavaan tapaan liittää tämä anturi PIC: n kanssa. Käytämme ajastinmoduulia ja LCD-moduulia tässä opetusohjelmassa, ja oletan, että tunnet molemmat, ellei ole, palaa takaisin vastaavaan opetusohjelmaan, koska ohitan suurimman osan siihen liittyvistä tiedoista.
- LCD-liitäntä PIC-mikrokontrolleriin
- Ajastimien ymmärtäminen PIC-mikrokontrollerissa
Piirikaavio:
Täydellinen kytkentäkaavio ultraäänianturin ja PIC16F877A: n liittämistä varten on esitetty alla:
Kuten on esitetty, piirissä ei ole muuta kuin LCD-näyttö ja itse ultraäänianturi. Yhdysvaltalainen anturi saa virtaa + 5 V: sta, joten se saa virtaa suoraan 7805-jännitesäätimestä. Anturissa on yksi ulostulotappi (liipaisintappi), joka on kytketty tapiin 34 (RB1) ja tulotappi (kaiutappi) on kytketty tapiin 35 (RB2). Koko nastaliitäntä on esitetty alla olevassa taulukossa.
S. ei: |
PIC-PIN-numero |
PIN-nimi |
Yhdistetty |
1 |
21 |
RD2 |
LCD: n RS |
2 |
22 |
RD3 |
LCD-näytön E-osa |
3 |
27 |
RD4 |
LCD-näytön D4 |
4 |
28 |
RD5 |
LCD-näytön D5 |
5 |
29 |
RD6 |
LCD-näytön D6 |
6 |
30 |
RD7 |
LCD-näytön D7 |
7 |
34 |
RB1 |
Yhdysvaltain laukaisu |
8 |
35 |
RB2 |
Yhdysvaltojen kaiku |
PIC-mikrokontrollerin ohjelmointi:
Tämän opetusohjelman täydellinen ohjelma on tämän sivun lopussa, jäljempänä olen selittänyt koodin pieniksi tarkoiksi kokonaisiksi paloiksi, jotta ymmärrät. Kuten aiemmin mainittiin, ohjelmaan sisältyy LCD-liitännän ja ajastimen käsite, jota ei selitetä yksityiskohtaisesti tässä opetusohjelmassa, koska olemme jo käsitelleet niitä aiemmissa opetusohjelmissa.
Sisällä päätoiminto aloitetaan alustamalla IO-nastat ja muut rekisterit tavalliseen tapaan. Määritämme IO-nastat LCD- ja USA-antureille ja käynnistämme myös Ajastin 1 -rekisterin asettamalla sen toimimaan 1: 4 esiskalaarilla ja käyttämään sisäistä kelloa (Fosc / 4)
TRISD = 0x00; // PORTD ilmoitettu LCD TRISB0 -liitännän lähtöliitännäksi = 1; // Määritä RB0-nasta syötteeksi käytettäväksi keskeytystappina TRISB1 = 0; // Yhdysvaltain anturin liipaisintappi lähetetään lähtönastana TRISB2 = 1; // Yhdysvaltain anturin kaiutappi on asetettu tulotapiksi TRISB3 = 0; // RB3 on LED T1CON: n ulostulotapa = 0x20; // 4 esiskalaaria ja sisäinen kello
Ajastin 1 on 16-bittinen ajastin, jota käytetään PIC16F877A: ssa, T1CON-rekisteri ohjaa ajastinmoduulin parametreja ja tulos tallennetaan TMR1H: een ja TMR1L: ään, koska 16-bittinen tulos, ensimmäiset 8 tallennetaan TMR1H: een ja seuraava 8 TMR1L: ssä. Tämä ajastin voidaan kytkeä päälle tai pois päältä käyttämällä vastaavasti TMR1ON = 0 ja TMR1ON = 1.
Ajastin on nyt käyttövalmis, mutta meidän on lähetettävä Yhdysvaltojen aallot anturista. Tätä varten meidän on pidettävä liipaisimen nasta korkealla 10 uS: n kohdalla, tämä tapahtuu seuraavan koodin avulla.
Trigger = 1; __viive_us (10); Trigger = 0;
Kuten yllä olevasta ajoituskaaviosta käy ilmi, kaiun tappi pysyy matalana, kunnes aalto palaa takaisin, ja sitten menee korkealle ja pysyy korkealla tarkkaa aikaa, jonka aaltojen paluu kestää. Tämä aika on mitattava ajastin 1 -moduulilla, joka voidaan tehdä alla olevalla rivillä
kun (Kaiku == 0); TMR1ON = 1; kun (Kaiku == 1); TMR1ON = 0;
Kun aika on mitattu, tuloksena oleva arvo tallennetaan rekistereihin TMR1H ja TMR1L, nämä rekisterit on yhdistettävä keräämään 16-bittisen arvon saamiseksi. Tämä tehdään käyttämällä alla olevaa viivaa
käytetty aika = (TMR1L - (TMR1H <8));
Tämä time_taken on muodossa tavuja, jotta saat todellisen aika-arvon, jota meidän on käytettävä alla olevaa kaavaa.
Aika = (16-bittinen rekisteriarvo) * (1 / sisäinen kello) * (Pre-scale) Sisäinen kello = Fosc / 4 Missä tapauksessamme Fosc = 20000000Mhz ja Pre-scale = 4 Siksi sisäisen kellon arvo on 5000000Mhz ja ajan arvo on aika = (16-bittinen rekisteriarvo) * (1/5000000) * (4) = (16-bittinen rekisteriarvo) * (4/5000000) = (16-bittinen rekisteriarvo) * 0,0000008 sekuntia (OR) Aika = (16-bittinen rekisteriarvo) * 0,8 mikrosekuntia
Ohjelmassamme 16-bittisen rekisterin arvo tallennetaan muuttujaan time_taken, joten alla olevaa riviä käytetään laskemaan time_taked mikrosekunnissa
aika_aika = käytetty aika * 0,8;
Seuraavaksi meidän on löydettävä, kuinka etäisyys lasketaan. Kuten tiedämme etäisyys = nopeus * aika. Mutta tässä tulos tulisi jakaa 2: lla, koska aalto peittää sekä lähetys- että vastaanottomatkan. Aallon (äänen) nopeus on 34000cm / s.
Etäisyys = (nopeus * aika) / 2 = (34000 * (16-bittinen rekisteriarvo) * 0,0000008) / 2 Etäisyys = (0,0272 * 16-bittinen rekisteriarvo) / 2
Joten etäisyys voidaan laskea senttimetreinä kuten alla:
etäisyys = (0,0272 * käytetty aika) / 2;
Kun olet laskenut kuluneen etäisyyden ja ajan arvon, meidän on vain näytettävä ne LCD-näytöllä.
Etäisyyden mittaaminen PIC- ja ultraäänianturin avulla:
Yhteyksien luomisen ja koodin lataamisen jälkeen kokeellisen kokoonpanosi tulisi näyttää tältä tältä, kuten alla olevassa kuvassa näkyy.
Tässä kuvassa näkyvä PIC Perf -taulu on tehty PIC-opetusohjelmasarjaamme varten, jossa opimme käyttämään PIC-mikrokontrolleria. Haluat ehkä palata niihin PIC-mikrokontrollerioppaisiin, joissa käytetään MPLABX: ää ja XC8: ta, jos et tiedä miten polttaa ohjelmaa Pickit 3: lla, koska ohitan kaikki nämä perustiedot.
Aseta esine nyt anturin eteen ja sen pitäisi näyttää kuinka kaukana esine on anturista. Voit myös huomata, kuinka monta sekuntia näytetään aallon lähettämiselle ja paluulle.
Voit siirtää objektia haluamallesi etäisyydelle ja tarkistaa nestekidenäytössä näkyvän arvon. Pystyin mittaamaan etäisyyden 2 cm - 350 cm 0,5 cm: n tarkkuudella. Tämä on melko tyydyttävä tulos! Toivottavasti pidit opetusohjelmasta ja opit tekemään jotain itse. Jos sinulla on epäilyksiä, pudota ne alla olevaan kommenttiosioon tai käytä foorumeita.
Tarkista myös ultraäänianturin liitäntä muihin mikro-ohjaimiin:
- Arduino- ja ultraäänianturipohjainen etäisyyden mittaus
- Mittaa etäisyys Vadelma Pi- ja HCSR04-ultraäänianturilla
- Etäisyyden mittaus HC-SR04: llä ja AVR-mikrokontrollerilla