Om elk project tot leven te laten komen, hebben we sensoren nodig. Sensoren fungeren als de ogen en oren voor alle embedded applicaties, het helpt de digitale microcontroller om te begrijpen wat er werkelijk gebeurt in deze echte analoge wereld. In deze tutorial zullen we leren hoe we de ultrasone sensor HC-SR04 kunnen koppelen met de PIC-microcontroller.
De HC-SR04 is een ultrasone sensor die kan worden gebruikt om afstanden te meten tussen 2 cm en 450 cm (theoretisch). Deze sensor heeft zijn waarde bewezen door in veel projecten te passen waarbij obstakels worden gedetecteerd, afstand wordt gemeten, omgeving in kaart wordt gebracht, enz. Aan het einde van dit artikel leert u hoe deze sensor werkt en hoe u hem kunt koppelen met de PIC16F877A microcontroller om de afstand en weergave te meten. het op het LCD-scherm. Klinkt interessant toch !! Dus laten we beginnen…
Vereiste materialen:
- PIC16F877A MCU met programmeeropstelling
- LCD 16 * 2-scherm
- Ultrasone sensor (HC-SR04)
- Draden aansluiten
Hoe werkt een ultrasone sensor?
Voordat we verder gaan, moeten we weten hoe een ultrasone sensor werkt, zodat we deze tutorial veel beter kunnen begrijpen. De ultrasone sensor die in dit project wordt gebruikt, wordt hieronder weergegeven.
Zoals je kunt zien, heeft het twee cirkelvormige ogen zoals uitsteeksels en komen er vier pinnen uit. De twee oogachtige projecties zijn de ultrasone golf (hierna US golf genoemd) zender en ontvanger. De zender zendt een Amerikaanse golf uit met een frequentie van 40Hz, deze golf reist door de lucht en wordt weer teruggekaatst wanneer hij een object waarneemt. De terugkerende golven worden waargenomen door de ontvanger. Nu weten we hoe lang het duurt voordat deze golf wordt gereflecteerd en terugkomt en de snelheid van de Amerikaanse golf is ook universeel (3400 cm / s). Met behulp van deze informatie en onderstaande formules van de middelbare school kunnen we de afgelegde afstand berekenen.
Afstand = Snelheid × Tijd
Nu we weten hoe een Amerikaanse sensor werkt, kunnen we laten zien hoe deze kan worden aangesloten op elke MCU / CPU met behulp van de vier pinnen. Deze vier pinnen zijn respectievelijk Vcc, Trigger, Echo en Ground. De module werkt op + 5V en daarom wordt de Vcc en aardingspin gebruikt om de module van stroom te voorzien. De andere twee pinnen zijn de I / O-pinnen waarmee we communiceren met onze MCU. De trigger-pin moet worden aangegeven als een output-pin en hoog worden gemaakt voor een 10uS, dit zal de Amerikaanse golf de lucht in sturen als een 8-cycli sonische burst. Zodra de golf wordt waargenomen, zal de Echo-pin hoog worden gedurende het exacte tijdsinterval dat door de Amerikaanse golf werd genomen om terug te keren naar de sensormodule. Daarom wordt deze echopin als invoer gedeclareerden een timer wordt gebruikt om te meten hoe lang de pin hoog was. Dit kan verder worden begrepen door het onderstaande timingdiagram.
Ik hoop dat je een voorlopige manier hebt gevonden om deze sensor met PIC te verbinden. We zullen de Timer-module en de LCD-module in deze tutorial gebruiken en ik neem aan dat je bekend bent met beide. Zo niet, ga dan terug naar de respectievelijke tutorial hieronder, aangezien ik de meeste informatie die ermee verband houdt zal overslaan.
- LCD-interface met PIC-microcontroller
- Timers begrijpen in PIC Microcontroller
Schakelschema:
Het volledige schakelschema voor het koppelen van de ultrasone sensor met de PIC16F877A wordt hieronder weergegeven:
Zoals getoond, omvat het circuit niets meer dan een LCD-scherm en de ultrasone sensor zelf. De Amerikaanse sensor kan worden gevoed door + 5V en wordt daarom rechtstreeks gevoed door de 7805-spanningsregelaar. De sensor heeft een output pin (trigger pin) die is verbonden met pin 34 (RB1) en de input pin (Echo pin) is verbonden met pin 35 (RB2). De volledige pinverbinding wordt geïllustreerd in de onderstaande tabel.
S.Nee: |
PIC-pincode |
Pin Naam |
Verbonden met |
1 |
21 |
RD2 |
RS van LCD |
2 |
22 |
RD3 |
E van LCD |
3 |
27 |
RD4 |
D4 van LCD |
4 |
28 |
RD5 |
D5 van LCD |
5 |
29 |
RD6 |
D6 van LCD |
6 |
30 |
RD7 |
D7 van LCD |
7 |
34 |
RB1 |
Trigger van ons |
8 |
35 |
RB2 |
Echo van ons |
Programmering van uw PIC Microcontroller:
Het volledige programma voor deze tutorial wordt aan het einde van deze pagina gegeven, verder hieronder heb ik de code in kleine, betekenisvolle, volledige brokken uitgelegd zodat je ze kunt begrijpen. Zoals eerder gezegd, omvat het programma het concept van LCD-interfacing en Timer, wat in deze tutorial niet in detail zal worden uitgelegd, omdat we ze al hebben behandeld in de vorige tutorials.
Binnenin de hoofdfunctie beginnen we zoals gewoonlijk met het initialiseren van de IO-pinnen en andere registers. We definiëren de IO-pinnen voor LCD en US-sensor en starten ook het Timer 1-register door het in te stellen op 1: 4 pre-scalair en om de interne klok te gebruiken (Fosc / 4)
TRISD = 0x00; // PORTD gedeclareerd als uitvoer voor interfacing LCD TRISB0 = 1; // Definieer de RB0-pin als invoer om te gebruiken als interrupt-pin TRISB1 = 0; // Triggerpin van Amerikaanse sensor wordt verzonden als outputpin TRISB2 = 1; // Echopin van Amerikaanse sensor is ingesteld als invoerpin TRISB3 = 0; // RB3 is output pin voor LED T1CON = 0x20; // 4 pres-scalaire en interne klok
De Timer 1 is een 16-bits timer die wordt gebruikt in PIC16F877A, het T1CON-register bestuurt de parameters van de timermodule en het resultaat wordt opgeslagen in TMR1H en TMR1L aangezien het een 16-bits resultaat is, de eerste 8 worden opgeslagen in TMR1H en de volgende 8 in TMR1L. Deze timer kan worden in- of uitgeschakeld met respectievelijk TMR1ON = 0 en TMR1ON = 1.
Nu is de timer klaar voor gebruik, maar we moeten de US-golven uit de sensor sturen, om dit te doen moeten we de trigger-pin 10uS hoog houden, dit wordt gedaan door de volgende code.
Trigger = 1; __delay_us (10); Trigger = 0;
Zoals te zien is in het bovenstaande timingdiagram, blijft de Echo-pin laag totdat de golf terugkeert en zal dan hoog worden en hoog blijven gedurende de exacte tijd die de golven nodig hebben om terug te keren. Deze tijd moet worden gemeten door de module Timer 1, wat kan worden gedaan met de onderstaande regel
while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
Zodra de tijd is gemeten, wordt de resulterende waarde opgeslagen in de registers TMR1H en TMR1L, deze registers moeten worden geknuppeld om te verzamelen om de 16-bits waarde te krijgen. Dit doet u door de onderstaande regel te gebruiken
time_taken = (TMR1L - (TMR1H << 8));
Deze time_taken zal in vormbytes zijn, om de werkelijke tijdwaarde te krijgen, moeten we de onderstaande formule gebruiken.
Tijd = (16-bits registerwaarde) * (1 / Interne klok) * (Pre-scale) Interne klok = Fosc / 4 Waar in ons geval Fosc = 20000000Mhz en Pre-scale = 4 Daarom zal de waarde van Internal Clock 5000000Mhz en de waarde van de tijd is Tijd = (16-bits registerwaarde) * (1/5000000) * (4) = (16-bits registerwaarde) * (4/5000000) = (16-bits registerwaarde) * 0,0000008 seconden (OF) Tijd = (16-bits registerwaarde) * 0,8 microseconden
In ons programma wordt de waarde van het 16-bits register opgeslagen in de variabele time_taken en daarom wordt de onderstaande regel gebruikt om de time_taken in microseconden te berekenen
time_taken = time_taken * 0.8;
Vervolgens moeten we zien hoe we de afstand kunnen berekenen. Zoals we weten afstand = snelheid * tijd. Maar hier moet het resultaat worden gedeeld door 2, aangezien de golf zowel de zendafstand als de ontvangstafstand bestrijkt. De snelheid van ons golf (geluid) is 34000 cm / s.
Afstand = (Snelheid * Tijd) / 2 = (34000 * (16-bits registerwaarde) * 0,0000008) / 2 Afstand = (0,0272 * 16-bits registerwaarde) / 2
Dus de afstand kan worden berekend in centimeters zoals hieronder:
afstand = (0,0272 * time_taken) / 2;
Nadat we de waarde van de afgelegde afstand en tijd hebben berekend, hoeven we ze alleen maar op het LCD-scherm weer te geven.
Afstand meten met PIC en ultrasone sensor:
Nadat je de verbindingen hebt gemaakt en de code hebt geüpload, zou je experimentele opstelling er ongeveer zo uit moeten zien als in de onderstaande afbeelding.
Het PIC Perf-bord, dat op deze foto te zien is, is gemaakt voor onze PIC-tutorialserie, waarin we hebben geleerd hoe we de PIC-microcontroller moeten gebruiken. Misschien wil je teruggaan naar die PIC Microcontroller-tutorials met MPLABX en XC8 als je niet weet hoe je een programma moet branden met Pickit 3, aangezien ik al die basisinformatie zal overslaan.
Plaats nu een object voor de sensor en het moet aangeven hoe ver het object van de sensor is verwijderd. U kunt ook zien dat de tijd die de golf nodig heeft in microseconden wordt weergegeven om te verzenden en terug te keren.
U kunt het object op de door u gewenste afstand verplaatsen en de waarde controleren die op het LCD-scherm wordt weergegeven. Ik kon afstand meten van 2 cm tot 350 cm met een nauwkeurigheid van 0,5 cm. Dit is een behoorlijk bevredigend resultaat! Ik hoop dat je de tutorial leuk vond en hebt geleerd hoe je zelf iets kunt maken. Als je twijfels hebt, plaats ze dan in de commentaarsectie hieronder of gebruik de forums.
Controleer ook de koppeling van de ultrasone sensor met andere microcontrollers:
- Arduino en ultrasone sensorgebaseerde afstandsmeting
- Meet de afstand met behulp van de Raspberry Pi en HCSR04 ultrasone sensor
- Afstandsmeting met HC-SR04 en AVR Microcontroller