I denne vejledning skal vi diskutere og designe et kredsløb til måling af afstand. Dette kredsløb er udviklet ved at forbinde ultralydssensor “HC-SR04” med AVR-mikrocontroller. Denne sensor bruger en teknik kaldet "ECHO", hvilket er noget, du får, når lyden reflekteres tilbage efter at have ramt med en overflade.
Vi ved, at lydvibrationer ikke kan trænge igennem faste stoffer. Så hvad der sker er, når en lydkilde genererer vibrationer, rejser de gennem luften med en hastighed på 220 meter i sekundet. Disse vibrationer, når de møder vores øre, beskriver vi dem som lyd. Som sagt tidligere kan disse vibrationer ikke gå gennem faste, så når de rammer med en overflade som en væg, reflekteres de tilbage med samme hastighed til kilden, som kaldes ekko.
Ultralydssensor “HC-SR04” giver et udgangssignal, der er proportionalt med afstanden baseret på ekkoet. Sensoren genererer her en lydvibration i ultralydsområdet, når den giver en trigger, derefter venter den på, at lydvibrationen vender tilbage. Baseret på parametrene, lydhastigheden (220m / s) og den tid, det tager for ekkoet at nå kilden, giver det nu outputpulsen proportional med afstanden.
Som vist i figuren er vi først nødt til at starte sensoren til måling af afstand, det vil sige et HØJT logisk signal ved udløserstiften af sensoren i mere end 10uS, efter at en lydvibration sendes af sensoren, efter et ekko giver sensoren et signal ved udgangsstiften, hvis bredde er proportional med afstanden mellem kilde og forhindring.
Denne afstand beregnes som, afstand (i cm) = impulsudgangens bredde (i us) / 58.
Her skal bredden af signalet tages i multiple af us (mikrosekund eller 10 ^ -6).
Komponenter, der kræves
Hardware: ATMEGA32, Strømforsyning (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF kondensator, 10KΩ modstand (2 stk.), HC-SR04 sensor.
Software: Atmel studio 6.1, progisp eller flash-magi.
Kredsløbsdiagram og arbejdsforklaring
Her bruger vi PORTB til at oprette forbindelse til LCD-dataport (D0-D7). Enhver, der ikke ønsker at arbejde med FUSE BITS af ATMEGA32A, kan ikke bruge PORTC, da PORTC indeholder en speciel type kommunikation, som kun kan deaktiveres ved at ændre FUSEBITS.
I kredsløbet observerer du, at jeg kun har taget to kontrolben, dette giver fleksibiliteten til bedre forståelse. Kontrastbit og LÆS / SKRIV bruges ikke ofte, så de kan kortsluttes til jorden. Dette sætter LCD i højeste kontrast og læsetilstand. Vi skal bare kontrollere ENABLE og RS-ben for at sende tegn og data i overensstemmelse hermed.
Forbindelserne, der foretages for LCD, er angivet nedenfor:
PIN1 eller VSS til jord
PIN2 eller VDD eller VCC til + 5v strøm
PIN3 eller VEE til jorden (giver maksimal kontrast bedst for en nybegynder)
PIN4 eller RS (Registrer valg) til PD6 i uC
PIN5 eller RW (læse / skrive) til jorden (sætter LCD i læsefunktion letter kommunikationen for brugeren)
PIN6 eller E (Aktivér) til PD5 i uC
PIN7 eller D0 til PB0 i uC
PIN8 eller D1 til PB1 i uC
PIN9 eller D2 til PB2 i uC
PIN10 eller D3 til PB3 af uC
PIN11 eller D4 til PB4 i uC
PIN12 eller D5 til PB5 af uC
PIN13 eller D6 til PB6 i uC
PIN14 eller D7 til PB7 i uC
I kredsløbet kan du se, at vi har brugt 8bit-kommunikation (D0-D7), men dette er ikke obligatorisk, og vi kan bruge 4bit-kommunikation (D4-D7), men med 4-bit kommunikationsprogram bliver lidt komplekst. Så som vist i ovenstående tabel forbinder vi 10 ben på LCD til controller, hvor 8 ben er datapinde og 2 ben til kontrol.
Ultralydssensoren er en firestiftet enhed, PIN1- VCC eller + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- JORD. Trigger pin er hvor vi giver trigger for at fortælle sensoren at måle afstanden. Ekko er outputnål, hvor vi får afstanden i form af pulsbredden. Ekko-stiften her er forbundet til controlleren som en ekstern afbrydelseskilde. Så for at få bredden af signaloutputtet er sensorens ekko-pin forbundet til INT0 (interrupt 0) eller PD2.
1. Udløs sensoren ved at trække aftrækkerstiften op til mindst 12uS.
2. Når ekkoet går højt, får vi en ekstern afbrydelse, og vi starter en tæller (muliggør en tæller) i ISR (Interrupt Service Routine), der udføres lige efter en afbrydelse udløst.
3. Når ekkoet igen er lavt, genereres der en afbrydelse, denne gang stopper vi tælleren (deaktivering af tælleren).
4. Så for en puls høj til lav ved ekko-pin, har vi startet en tæller og stoppet den. Denne optælling opdateres til hukommelse for at få afstanden, da vi har bredden af ekko i optælling nu.
5. Vi skal lave yderligere beregninger i hukommelsen for at få afstanden i cm
6. Afstanden vises på 16x2 LCD-display.
Til opsætning af ovenstående funktioner vil vi indstille følgende registre:
Ovenstående tre registre skal indstilles i overensstemmelse hermed, så opsætningen fungerer, og vi vil diskutere dem kort, BLÅ (INT0): denne bit skal indstilles højt for at muliggøre den eksterne interrupt0, når denne pin er indstillet, får vi mærke, at logikændringerne ved PIND2-pin.
BRUN (ISC00, ISC01): disse to bits justeres til den passende logiske ændring ved PD2, som skal betragtes som afbrydelse.
Så som tidligere sagt har vi brug for et afbrydelse for at starte en optælling og stoppe den. Så vi indstiller ISC00 som en, og vi får et afbrydelse, når der er en logik LAV til HØJ ved INT0; en anden afbrydelse, når der er en logik HIGH to LOW.
RØD (CS10): Denne bit er simpelthen for at aktivere og deaktivere tæller. Selvom det fungerer sammen med andre bits CS10, CS12. Vi foretager ingen forudskalning her, så vi behøver ikke bekymre os om dem.
Nogle vigtige ting at huske her er:
Vi bruger internt ur af ATMEGA32A, som er 1MHz. Ingen forhåndsskalering her, vi laver ikke rutine for sammenligning af afbrydelse af kamp, så ingen komplekse registerindstillinger.
Tællingsværdien efter tælling lagres i 16bit TCNT1-register.
Tjek også dette projekt med arduino: Afstandsmåling ved hjælp af Arduino
Programmering Forklaring
Arbejdet med afstandsmålesensor forklares trin for trin i nedenstående C-program.
#include // header for at aktivere datastrømskontrol over pins #define F_CPU 1000000 // fortæller controller krystalfrekvens vedhæftet #include