For at ethvert prosjekt skal bli levende, må vi bruke sensorer. Sensorer fungerer som øynene og ørene for alle innebygde applikasjoner, det hjelper den digitale mikrokontrolleren å forstå hva som faktisk skjer i denne virkelige analoge verdenen. I denne opplæringen vil vi lære å grensesnitt Ultralydssensor HC-SR04 med PIC-mikrokontroller.
Den HC-SR04 er en ultrasonisk sensor som kan brukes til å måle avstand hvor som helst mellom 2 cm til 450cm (teoretisk). Denne sensoren har vist seg å være verdig ved å passe inn i mange prosjekter som involverer gjenkjenning av hindringer, måling av avstand, miljøkartlegging osv. På slutten av denne artikkelen vil du lære hvordan denne sensoren fungerer og hvordan du kan grensesnitt den med PIC16F877A mikrokontroller for å måle avstanden og displayet det på LCD-skjermen. Høres interessant ut !! Så la oss komme i gang…
Nødvendige materialer:
- PIC16F877A MCU med programmeringsoppsett
- LCD 16 * 2-skjerm
- Ultralydssensor (HC-SR04)
- Koble ledninger
Hvordan fungerer en ultralydssensor?
Før vi kommer videre, bør vi vite hvordan en ultralydssensor fungerer slik at vi kan forstå denne opplæringen mye bedre. Ultralydssensoren som brukes i dette prosjektet er vist nedenfor.
Som du ser har den to sirkulære øyne som projeksjoner og fire pinner som kommer ut av den. De to øyelignende projeksjonene er ultralydbølgen (heretter referert til som den amerikanske bølgen) sender og mottaker. Senderen avgir en amerikansk bølge med en frekvens på 40Hz, denne bølgen beveger seg gjennom luften og reflekteres tilbake når den registrerer en gjenstand. Returbølgene observeres av mottakeren. Nå vet vi tiden det tok for denne bølgen å reflekteres og komme tilbake, og hastigheten til den amerikanske bølgen er også universell (3400cm / s). Ved hjelp av denne informasjonen og nedenstående videregående formler kan vi beregne avstanden som tilbakelegges.
Avstand = Hastighet × Tid
Nå som vi vet hvordan en amerikansk sensor fungerer, la oss hvordan den kan grensesnittes med hvilken som helst MCU / CPU ved hjelp av de fire pinnene. Disse fire pinnene er henholdsvis Vcc, Trigger, Echo og Ground. Modulen fungerer på + 5V, og derfor brukes Vcc og jordpinnen til å drive modulen. De to andre pinnene er I / O-pinnene som vi kommuniserer til MCU-en vår. Den utløsningstappen må deklareres som en utgang tapp og gjort høy for en 10us, vil denne sende USA bølge i luften som 8 syklus sonisk briste. Når bølgen er observert, vil Echo pin gå høyt i det nøyaktige tidsintervallet som ble tatt av den amerikanske bølgen for å gå tilbake til sensormodulen. Derfor blir denne ekkopinnen erklært som inputog en timer vil bli brukt til å måle hvor lenge pinnen var høy. Dette kan videre forstås av tidsskjemaet nedenfor.
Håper du har kommet til en foreløpig måte å grensesnitt denne sensoren med PIC. Vi bruker Timer-modulen og LCD-modulen i denne opplæringen, og jeg antar at du er kjent med begge deler, hvis ikke, vær så snill å falle tilbake til den respektive opplæringen nedenfor, siden jeg vil hoppe over det meste av informasjonen relatert til den.
- LCD-grensesnitt med PIC-mikrokontroller
- Forstå timere i PIC Microcontroller
Kretsdiagram:
Det komplette kretsskjemaet for grensesnitt Ultralydssensor med PIC16F877A er vist nedenfor:
Som vist involverer kretsen ingenting mer enn en LCD-skjerm og selve ultralydsensoren. Den amerikanske sensoren kan drives av + 5V, og den drives dermed direkte av 7805 spenningsregulator. Sensoren har en utgangsstift (Trigger pin) som er koblet til pin 34 (RB1) og inngangsstiftet (Echo pin) er koblet til pin 35 (RB2). Den komplette stiftforbindelsen er illustrert i tabellen nedenfor.
S. nei: |
PIC-pin nummer |
Pin-navn |
Koblet til |
1 |
21 |
RD2 |
RS på LCD |
2 |
22 |
RD3 |
E av LCD |
3 |
27 |
RD4 |
D4 av LCD |
4 |
28 |
RD5 |
D5 av LCD |
5 |
29 |
RD6 |
D6 av LCD |
6 |
30 |
RD7 |
D7 av LCD |
7 |
34 |
RB1 |
Utløser av USA |
8 |
35 |
RB2 |
Ekko fra USA |
Programmering av PIC Microcontroller:
Det komplette programmet for denne veiledningen er gitt på slutten av denne siden, lenger nedenfor har jeg forklart koden i små betydninger fulle biter for deg å forstå. Som sagt tidligere involverer programmet konseptet med LCD-grensesnitt og Timer, som ikke vil bli forklart i detaljer i denne opplæringen, siden vi allerede har dekket dem i forrige opplæring.
Innvendig begynner hovedfunksjonen med å initialisere IO-pinnene og andre registre som vanlig. Vi definerer IO-pinnene for LCD- og US-sensor og starter også Timer 1-registeret ved å stille det til å fungere på 1: 4 pre-skalar og bruke intern klokke (Fosc / 4)
TRISD = 0x00; // PORTD erklært som utgang for grensesnitt LCD TRISB0 = 1; // Definer RB0-pinnen som inngang som skal brukes som avbruddsstift TRISB1 = 0; // Trigger pin of US sensor is sent as output pin TRISB2 = 1; // Ekko pin av US sensor er satt som inngang pin TRISB3 = 0; // RB3 er utgangsstift for LED T1CON = 0x20; // 4 pres-skalar og intern klokke
Timer 1 er en 16-bits timer som brukes i PIC16F877A, T1CON-registeret styrer parametrene til timermodulen, og resultatet vil bli lagret i TMR1H og TMR1L, siden det er et 16-biters resultat, de første 8 vil bli lagret i TMR1H og neste 8 i TMR1L. Denne tidtakeren kan slås på eller av med henholdsvis TMR1ON = 0 og TMR1ON = 1.
Nå er timeren klar til bruk, men vi må sende de amerikanske bølgene ut av sensoren. For å gjøre dette må vi holde utløseren pin høy i 10uS, dette gjøres med følgende kode.
Utløser = 1; __forsink_us (10); Utløser = 0;
Som vist i tidsskjemaet ovenfor, vil ekko-pinnen forbli lav til bølgen kommer tilbake, og vil deretter gå høyt og holde seg høy for den nøyaktige tiden det tar for bølgene å komme tilbake. Denne tiden må måles av Timer 1-modulen, noe som kan gjøres med linjen nedenfor
mens (Echo == 0); TMR1ON = 1; mens (Echo == 1); TMR1ON = 0;
Når tiden er målt vil den resulterende verdien bli lagret i registerene TMR1H og TMR1L, disse registerene må klubbes for å samles for å få 16-bitersverdien. Dette gjøres ved å bruke linjen nedenfor
time_taken = (TMR1L - (TMR1H << 8));
Denne tidstaken vil være i formbyte , for å få den faktiske tidsverdien vi må bruke formelen nedenfor.
Tid = (16-biters registerverdi) * (1 / Intern klokke) * (Forskala) Intern klokke = Fosc / 4 Hvor i vårt tilfelle, Fosc = 20000000Mhz og Forskala = 4 Derfor vil verdien av Intern klokke være 5000000Mhz og verdien av tiden vil være Time = (16-biters registerverdi) * (1/5000000) * (4) = (16-biters registerverdi) * (4/5000000) = (16-biters registerverdi) * 0.0000008 sekunder (OR) Tid = (16-biters registerverdi) * 0,8 mikrosekunder
I vårt program lagres verdien av 16-biters registeret i variabelen time_taken, og følgelig brukes nedenstående linje for å beregne time_taken i mikrosekunder
time_taken = time_taken * 0,8;
Deretter må vi finne ut hvordan vi kan beregne avstanden. Som vi vet avstand = hastighet * tid. Men her skal resultatet deles med 2 siden bølgen dekker både sendeavstand og mottaksavstand. Hastigheten på oss bølger (lyd) er 34000 cm / s.
Avstand = (Hastighet * Tid) / 2 = (34000 * (16-biters registerverdi) * 0,0000008) / 2 Avstand = (0,0272 * 16-biters registerverdi) / 2
Så avstanden kan beregnes i centimeter som nedenfor:
avstand = (0,0272 * tid) / 2;
Etter å ha beregnet verdien av avstand og tid, må vi bare vise dem på LCD-skjermen.
Måle avstand ved hjelp av PIC og ultralydssensor:
Etter å ha koblet til og lastet opp koden, bør den eksperimentelle konfigurasjonen din se slik ut som vist på bildet nedenfor.
PIC Perf-kortet, som vises på dette bildet, ble laget for vår PIC-opplæringsserie, der vi lærte hvordan vi bruker PIC-mikrokontroller. Det kan være lurt å gå tilbake til disse PIC Microcontroller-opplæringene ved hjelp av MPLABX og XC8 hvis du ikke vet hvordan du skal brenne et program ved hjelp av Pickit 3, siden jeg vil hoppe over all den grunnleggende informasjonen.
Plasser nå et objekt foran sensoren, og det skal vise hvor langt objektet er fra sensoren. Du kan også legge merke til at tiden det tar vises i mikrosekunder for bølgen å overføre og returnere tilbake.
Du kan flytte objektet på ønsket avstand og sjekke verdien som vises på LCD-skjermen. Jeg var i stand til å måle avstand fra 2 cm til 350 cm med en nøyaktighet på 0,5 cm. Dette er ganske tilfredsstillende resultat! Håper du likte opplæringen og lærte å lage noe på egen hånd. Hvis du er i tvil, kan du slippe dem i kommentarfeltet nedenfor eller bruke forumene.
Sjekk også grensesnittet mellom ultralydsensoren og andre mikrokontrollere:
- Arduino og ultralydsensorbasert avstandsmåling
- Mål avstand ved hjelp av Raspberry Pi og HCSR04 ultralydssensor
- Avstandsmåling ved bruk av HC-SR04 og AVR Microcontroller