- Nødvendige materialer:
- Hvordan fungerer en ultralydssensor?
- Programmering af din PIC Microcontroller:
For at ethvert projekt skal blive levende, skal vi bruge sensorer. Sensorer fungerer som øjne og ører for alle indlejrede applikationer, det hjælper den digitale mikrocontroller med at forstå, hvad der faktisk sker i denne rigtige analoge verden. I denne vejledning lærer vi, hvordan man interagerer ultralydssensor HC-SR04 med PIC-mikrocontroller.
Den HC-SR04 er en ultralydssensor, som kan anvendes til at måle afstand sted mellem 2 cm til 450cm (teoretisk). Denne sensor har vist sig værdig ved at passe ind i mange projekter, der involverer detektion af forhindringer, afstandsmåling, kortlægning af miljø osv. I slutningen af denne artikel lærer du, hvordan denne sensor fungerer, og hvordan man bruger den til PIC16F877A mikrocontroller for at måle afstanden og displayet det på LCD-skærmen. Lyder interessant lige !! Så lad os komme i gang…
Nødvendige materialer:
- PIC16F877A MCU med programmeringsopsætning
- LCD 16 * 2-skærm
- Ultralydssensor (HC-SR04)
- Tilslutning af ledninger
Hvordan fungerer en ultralydssensor?
Før vi kommer videre, skal vi vide, hvordan en ultralydssensor fungerer, så vi kan forstå denne tutorial meget bedre. Ultralydssensoren anvendt i dette projekt er vist nedenfor.
Som du kan se, har den to cirkulære øjne som fremspring og fire stifter, der kommer ud af den. De to øjenlignende fremspring er ultralydsbølgen (herefter benævnt amerikansk bølge) sender og modtager. Senderen udsender en amerikansk bølge med en frekvens på 40Hz, denne bølge bevæger sig gennem luften og reflekteres tilbage, når den registrerer en genstand. De tilbagevendende bølger observeres af modtageren. Nu ved vi, hvor lang tid det tager for denne bølge at blive reflekteret og komme tilbage, og hastigheden på den amerikanske bølge er også universel (3400cm / s). Ved hjælp af disse oplysninger og nedenstående gymnasieformler kan vi beregne den tilbagelagte afstand.
Distance = Hastighed × Tid
Nu hvor vi ved, hvordan en amerikansk sensor fungerer, lad os, hvordan den kan grænseflade til enhver MCU / CPU ved hjælp af de fire ben. Disse fire ben er henholdsvis Vcc, Trigger, Echo og Ground. Modulet fungerer på + 5V, og derfor bruges Vcc og jordstiften til at drive modulet. De to andre ben er I / O-benene, som vi kommunikerer til vores MCU. Den udløserstiften bør erklæres som et output pin og gjort høj for en 10US, vil dette transmittere den amerikanske bølge i luften som 8 cyklus sonisk burst. Når bølgen er observeret, vil Echo pin gå højt i det nøjagtige tidsinterval, som den amerikanske bølge tog for at vende tilbage til sensormodulet. Derfor vil denne Echo pin blive erklæret som inputog en timer bruges til at måle, hvor længe stiften var høj. Dette kunne yderligere forstås ved hjælp af tidsdiagrammet nedenfor.
Håber du er ankommet til en foreløbig måde at interface denne sensor med PIC på. Vi bruger timermodulet og LCD-modulet i denne vejledning, og jeg antager, at du er bekendt med begge dele, hvis ikke, skal du falde tilbage til den respektive vejledning nedenfor, da jeg springer over det meste af informationen relateret til det.
- LCD-grænseflade med PIC-mikrocontroller
- Forståelse af timere i PIC Microcontroller
Kredsløbsdiagram:
Det komplette kredsløbsdiagram til interfacering af ultralydssensor med PIC16F877A er vist nedenfor:
Som vist involverer kredsløbet intet andet end en LCD-skærm og selve ultralydssensoren. Den amerikanske sensor kan drives af + 5V, og den drives derfor direkte af 7805 spændingsregulatoren. Sensoren har en udgangsstift (Trigger pin), der er forbundet til pin 34 (RB1), og input pin (Echo pin) er forbundet til pin 35 (RB2). Den komplette stiftforbindelse er illustreret i nedenstående tabel.
S. nej: |
PIC-pin nummer |
Pin-navn |
Forbundet til |
1 |
21 |
RD2 |
RS på LCD |
2 |
22 |
RD3 |
E af LCD |
3 |
27 |
RD4 |
D4 af LCD |
4 |
28 |
RD5 |
D5 af LCD |
5 |
29 |
RD6 |
D6 af LCD |
6 |
30 |
RD7 |
D7 af LCD |
7 |
34 |
RB1 |
Trigger of US |
8 |
35 |
RB2 |
Ekko fra USA |
Programmering af din PIC Microcontroller:
Det komplette program til denne tutorial gives i slutningen af denne side, længere nedenfor har jeg forklaret koden i små betydningsfulde fyldte stykker, som du kan forstå. Som tidligere nævnt involverer programmet begrebet LCD-interface og Timer, som ikke forklares detaljeret i denne tutorial, da vi allerede har dækket dem i de tidligere tutorials.
Inde i hovedfunktionen starter vi med at initialisere IO-benene og andre registre som normalt. Vi definerer IO-benene til LCD- og US-sensoren og indleder også Timer 1-registeret ved at indstille det til at arbejde på 1: 4 præ-skalar og bruge internt ur (Fosc / 4)
TRISD = 0x00; // PORTD deklareret som output til grænseflade mellem LCD TRISB0 = 1; // Definer RB0-stiften som input til brug som afbrydestift TRISB1 = 0; // Trigger pin af US sensor sendes som output pin TRISB2 = 1; // Ekko-pin på US-sensor er indstillet som input-pin TRISB3 = 0; // RB3 er udgangsstift til LED T1CON = 0x20; // 4 pres-skalar og internt ur
Timer 1 er en 16-bit timer, der bruges i PIC16F877A, T1CON-registeret styrer parametrene for timermodulet, og resultatet gemmes i TMR1H og TMR1L, da det er et 16-bit resultat, de første 8 vil blive gemt i TMR1H og næste 8 i TMR1L. Denne timer kan tændes eller slukkes ved hjælp af henholdsvis TMR1ON = 0 og TMR1ON = 1.
Nu er timeren klar til brug, men vi er nødt til at sende de amerikanske bølger ud af sensoren. For at gøre dette skal vi holde udløserstiften høj i 10uS, dette gøres ved hjælp af følgende kode.
Trigger = 1; __forsinkelse (10); Trigger = 0;
Som vist i tidsdiagrammet ovenfor vil ekko-stiften forblive lav indtil bølgen vender tilbage og derefter gå høj og forblive høj i den nøjagtige tid, det tager for bølgerne at vende tilbage. Denne tid skal måles ved hjælp af Timer 1-modulet, hvilket kan gøres ved nedenstående linje
mens (Echo == 0); TMR1ON = 1; mens (Echo == 1); TMR1ON = 0;
Når tiden er målt, gemmes den resulterende værdi i registerene TMR1H og TMR1L, disse registre skal samles for at samle for at få 16-bitværdien. Dette gøres ved hjælp af nedenstående linje
time_taken = (TMR1L - (TMR1H << 8));
Denne time_taken vil være i form bytes for at få den aktuelle tidsværdi, vi har brug for nedenstående formel.
Tid = (16-bit registerværdi) * (1 / Internt ur) * (Forskala) Internt ur = Fosc / 4 Hvor i vores tilfælde er Fosc = 20000000 MHz og Forskala = 4 Derfor vil værdien af Internt ur være 5000000Mhz, og tidsværdien er Time = (16-bit registerværdi) * (1/5000000) * (4) = (16-bit registerværdi) * (4/5000000) = (16-bit registerværdi) * 0.0000008 sekunder (ELLER) Tid = (16-bit registerværdi) * 0,8 mikrosekunder
I vores program er værdien af 16-bit registeret gemt i variablen time_taken, og derfor bruges nedenstående linje til at beregne time_taken i mikrosekunder
time_taken = time_taken * 0,8;
Derefter skal vi finde ud af, hvordan afstanden beregnes. Som vi kender afstand = hastighed * tid. Men her skal resultatet deles med 2, da bølgen dækker både sendeafstand og modtageafstand. Hastigheden på os bølger (lyd) er 34000 cm / s.
Distance = (Hastighed * Tid) / 2 = (34000 * (16-bit registerværdi) * 0,0000008) / 2 Distance = (0,0272 * 16-bit registerværdi) / 2
Så afstanden kan beregnes i centimeter som nedenfor:
distance = (0,0272 * time_taken) / 2;
Efter at have beregnet værdien af afstanden og den tid, det tager, skal vi blot vise dem på LCD-skærmen.
Måling af afstand ved hjælp af PIC og ultralydssensor:
Efter oprettelse af forbindelserne og upload af koden, skal din eksperimentelle opsætning se sådan ud som vist på nedenstående billede.
PIC Perf-kortet, der vises på dette billede, blev lavet til vores PIC-tutorials-serie, hvor vi lærte at bruge PIC-mikrocontroller. Du vil måske gå tilbage til disse PIC Microcontroller-tutorials ved hjælp af MPLABX og XC8, hvis du ikke ved, hvordan man brænder et program ved hjælp af Pickit 3, da jeg vil springe over alle disse grundlæggende oplysninger.
Anbring nu et objekt foran sensoren, og det skal vise, hvor langt objektet er fra sensoren. Du kan også bemærke, at det tager den tid, der vises i mikrosekunder for bølgen at transmittere og vende tilbage.
Du kan flytte objektet på din foretrukne afstand og kontrollere den værdi, der vises på LCD'et. Jeg var i stand til at måle afstanden fra 2 cm til 350 cm med en nøjagtighed på 0,5 cm. Dette er et ganske tilfredsstillende resultat! Håber du nød tutorialen og lærte at lave noget på egen hånd. Hvis du er i tvivl, skal du slippe dem i kommentarfeltet nedenfor eller bruge foraene.
Kontroller også grænsefladen mellem ultralydssensoren og andre mikrocontrollere:
- Arduino og ultralydssensorbaseret afstandsmåling
- Mål afstand ved hjælp af Raspberry Pi og HCSR04 ultralydssensor
- Afstandsmåling ved hjælp af HC-SR04 og AVR Microcontroller