Tässä opetusohjelmassa aiomme keskustella ja suunnitella piiri etäisyyden mittaamiseksi. Tämä piiri on kehitetty liittämällä ultraäänianturi “HC-SR04” AVR-mikrokontrolleriin. Tämä anturi käyttää tekniikkaa nimeltä "ECHO", joka on jotain, mitä saat, kun ääni heijastuu taaksepäin, kun iski pintaan.
Tiedämme, että äänen värähtelyt eivät pääse tunkeutumaan kiintoaineiden läpi. Joten mitä tapahtuu, kun äänilähde tuottaa tärinää, se kulkee ilman läpi nopeudella 220 metriä sekunnissa. Nämä värähtelyt, kun he kohtaavat korvamme, kuvaamme niitä ääninä. Kuten aiemmin todettiin, nämä värähtelyt eivät voi kulkea kiinteän läpi, joten kun ne lyövät seinän kaltaisella pinnalla, ne heijastuvat takaisin samalla nopeudella lähteelle, jota kutsutaan kaikuksi.
Ultraäänianturi “HC-SR04” tuottaa ulostulosignaalin, joka on verrannollinen etäisyyteen kaiun perusteella. Tällöin anturi tuottaa äänen värähtelyn ultraäänialueella, kun se antaa liipaisun, minkä jälkeen se odottaa äänen värähtelyn palaamista. Nyt se perustuu parametreihin, äänen nopeuteen (220 m / s) ja kaikujen kulumiseen lähteeseen, se antaa lähtöpulssin suhteessa etäisyyteen.
Kuten kuvassa on esitetty, meidän on ensin aloitettava anturi etäisyyden mittaamiseksi, ts. HIGH-logiikkasignaali anturin liipaisintapissa yli 10uS, minkä jälkeen anturi lähettää äänen värähtelyn, kaiun jälkeen anturi antaa signaalin ulostulotapissa, jonka leveys on verrannollinen lähteen ja esteen väliseen etäisyyteen.
Tämä etäisyys lasketaan seuraavasti: etäisyys (cm) = pulssilähdön leveys (uS) / 58.
Tällöin signaalin leveys on otettava uS: n kerrannaisina (mikrosekunti tai 10 ^ -6).
Tarvittavat komponentit
Laitteisto: ATMEGA32, virtalähde (5v), AVR-ISP-OHJELMOINTI, JHD_162ALCD (16x2LCD), 1000uF kondensaattori, 10KΩ vastus (2 kpl), HC-SR04-anturi.
Ohjelmisto: Atmel studio 6.1, progisp tai flash magic.
Piirikaavio ja selitys työstä
Tässä käytämme PORTBia yhteyden muodostamiseksi LCD-dataporttiin (D0-D7). Jokainen, joka ei halua työskennellä ATMEGA32A: n sulakebittien kanssa, ei voi käyttää PORTC: tä, koska PORTC sisältää erityistyyppisen viestinnän, joka voidaan poistaa käytöstä vain muuttamalla FUSEBITS.
Piirissä huomaat, että olen ottanut vain kaksi ohjaintappia, mikä antaa joustavuutta ymmärryksen parantamiseen. Kontrastibittiä ja LUKU / KIRJOITA ei käytetä usein, joten ne voidaan oikosulkea maahan. Tämä asettaa LCD-näytön suurimmalle kontrastille ja lukutilaan. Meidän on vain hallittava ENABLE- ja RS-nastoja merkkien ja tietojen lähettämiseksi vastaavasti.
LCD-liitännät ovat alla:
PIN1 tai VSS maahan
PIN2- tai VDD- tai VCC-jännite + 5 V: n tehoon
PIN3 tai VEE maahan (antaa parhaan kontrastin aloittelijalle)
PIN4 tai RS (Rekisterivalinta) - PD6 uC: lle
PIN5 tai RW (luku / kirjoitus) maahan (asettaa LCD-näytön lukutilaan helpottamaan viestintää käyttäjälle)
PIN6 tai E (käytössä) - u5: n PD5
UC: n PIN7 tai D0 - PB0
U8: n PIN8 tai D1 - PB1
U9: n PIN9 tai D2 - PB2
U10: n PIN10 tai D3 - PB3
UC: n PIN11 tai D4 - PB4
U12: n PIN12 tai D5 - PB5
PIN13 tai D6 - PB6 uC: stä
UC: n PIN14 tai D7 - PB7
Piirissä näet, että olemme käyttäneet 8-bittistä tiedonsiirtoa (D0-D7), mutta tämä ei ole pakollista ja voimme käyttää 4-bittistä tiedonsiirtoa (D4-D7), mutta 4-bittisellä viestintäohjelmalla tulee hieman monimutkainen. Joten, kuten yllä olevassa taulukossa on esitetty, yhdistämme 10 LCD-nastaa ohjaimeen, jossa 8 nastaa on datanastoja ja 2 nastaa ohjausta varten.
Ultraäänianturi on nelinastainen laite, PIN1 - VCC tai + 5 V; PIN2-TRIGGER; PIN3- ECHO; PIN4 - MAA. Liipaisintappi on paikka, jossa annamme liipaisimen sanoa anturin mittaamaan etäisyys. Kaiku on ulostulotappi, josta saamme etäisyyden pulssin leveyden muodossa. Tässä oleva kaiutappi on kytketty ohjaimeen ulkoisena keskeytyslähteenä. Joten signaalin ulostulon leveyden saamiseksi anturin kaiutappi on kytketty INT0: een (keskeytys 0) tai PD2: een.
1. Käynnistä anturi vetämällä vähintään 12uS: n liipaisin.
2. Kun kaiku on korkea, saamme ulkoisen keskeytyksen ja aloitamme laskurin (laskurin käyttöönotto) ISR: ssä (Interrupt Service Routine), joka suoritetaan heti keskeytyksen laukaisun jälkeen.
3. Kun kaiun arvo laskee jälleen, keskeytys syntyy, tällä kertaa aiomme pysäyttää laskurin (poistamalla laskurin käytöstä).
4. Joten pulssin ollessa korkea tai matala kaikutapissa, olemme käynnistäneet laskurin ja pysäyttäneet sen. Tämä määrä päivitetään muistiin etäisyyden saamiseksi, koska kaiku on nyt laskettavissa.
5. Aiomme tehdä lisää laskelmia muistiin saadaksemme etäisyyden senttimetreinä
6. Etäisyys näkyy 16x2 LCD-näytössä.
Yllä olevien ominaisuuksien määrittämiseksi aiomme asettaa seuraavat rekisterit:
Edellä mainitut kolme rekisteriä on määritettävä vastaavasti, jotta asennus toimisi, ja aiomme keskustella niistä lyhyesti, SININEN (INT0): tämä bitti on asetettava korkeaksi, jotta ulkoinen keskeytys0 voidaan ottaa käyttöön, kun tämä tappi on asetettu, aistimme PIND2-nastan loogiset muutokset.
RUSKEA (ISC00, ISC01): nämä kaksi bittiä säädetään PD2: n tarkoituksenmukaisen logiikkamuutoksen mukaan, mikä katsotaan keskeytykseksi.
Joten kuten aiemmin sanoimme, tarvitsemme keskeytyksen laskennan aloittamiseksi ja lopettamiseksi. Joten asetamme ISC00 yhdeksi ja saamme keskeytyksen, kun INT0: lla on logiikka LOW to HIGH; toinen keskeytys, kun logiikkaa on HIGH to LOW.
PUNAINEN (CS10): Tämä bitti on yksinkertaisesti laskurin ottaminen käyttöön ja poistaminen käytöstä. Vaikka se toimii yhdessä muiden bittien CS10, CS12 kanssa. Emme tee mitään esilaajennuksia täällä, joten meidän ei tarvitse huolehtia niistä.
Tässä on joitain tärkeitä asioita, jotka on muistettava:
Käytämme ATMEGA32A: n sisäistä kelloa, joka on 1 MHz. Ei esilaajennusta täällä, emme tee vertailun ottelun keskeytyksen luomisrutiinia, joten ei monimutkaisia rekisteriasetuksia.
Laskenta-arvo laskennan jälkeen tallennetaan 16-bittiseen TCNT1-rekisteriin.
Tarkista myös tämä projekti arduinolla: Etäisyyden mittaus Arduinolla
Ohjelmoinnin selitys
Etäisyysmittausanturin toiminta selitetään vaihe vaiheelta alla olevassa C-ohjelmassa.
#include // otsikko tiedonsiirron mahdollistamiseksi nastoihin #define F_CPU 1000000 // kertovan ohjaimen kide taajuus liitetty #include