In deze tutorial gaan we een circuit voor het meten van afstand bespreken en ontwerpen. Dit circuit is ontwikkeld door de ultrasone sensor "HC-SR04" te koppelen aan de AVR-microcontroller. Deze sensor maakt gebruik van een techniek die "ECHO" wordt genoemd. Dit is iets dat u krijgt wanneer het geluid terugkaatst nadat het met een oppervlak is geraakt.
We weten dat geluidstrillingen niet door vaste stoffen heen kunnen dringen. Dus wat er gebeurt, is dat wanneer een geluidsbron trillingen genereert, ze door de lucht reizen met een snelheid van 220 meter per seconde. Deze trillingen wanneer ze ons oor ontmoeten, beschrijven we ze als geluid. Zoals eerder gezegd kunnen deze trillingen niet door vaste stof gaan, dus als ze met een oppervlak zoals een muur slaan, worden ze met dezelfde snelheid teruggekaatst naar de bron, die echo wordt genoemd.
Ultrasone sensor "HC-SR04" levert een uitgangssignaal evenredig met de afstand op basis van de echo. De sensor genereert hier een geluidstrilling in ultrasoon bereik bij het geven van een trigger, waarna hij wacht tot de geluidstrilling terugkeert. Nu gebaseerd op de parameters, geluidssnelheid (220m / s) en de tijd die de echo nodig heeft om de bron te bereiken, levert het een outputpuls evenredig met de afstand.
Zoals weergegeven in de afbeelding, moeten we eerst de sensor starten om de afstand te meten, dat wil zeggen een HOOG logisch signaal op de triggerpen van de sensor gedurende meer dan 10uS, daarna wordt een geluidstrilling verzonden door de sensor, na een echo levert de sensor een signaal op de uitgangspen waarvan de breedte evenredig is met de afstand tussen bron en obstakel.
Deze afstand wordt berekend als, afstand (in cm) = breedte van pulsuitgang (in uS) / 58.
Hier moet de breedte van het signaal worden genomen in een veelvoud van uS (microseconden of 10 ^ -6).
Componenten vereist
Hardware: ATMEGA32, voeding (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 1000uF condensator, 10KΩ weerstand (2 stuks), HC-SR04 sensor.
Software: Atmel studio 6.1, progisp of flash magie.
Schakelschema en werkuitleg
Hier gebruiken we PORTB om verbinding te maken met de LCD-gegevenspoort (D0-D7). Iedereen die niet met FUSE BITS van ATMEGA32A wil werken, kan PORTC niet gebruiken, aangezien PORTC een speciaal type communicatie bevat dat alleen kan worden uitgeschakeld door FUSEBITS te wijzigen.
In het circuit zie je dat ik maar twee controlepennen heb genomen, dit geeft de flexibiliteit van een beter begrip. Het contrastbit en READ / WRITE worden niet vaak gebruikt, zodat ze kunnen worden kortgesloten naar aarde. Dit plaatst LCD in het hoogste contrast en leesmodus. We hoeven alleen de ENABLE- en RS-pinnen te bedienen om tekens en gegevens dienovereenkomstig te verzenden.
De aansluitingen die zijn gemaakt voor LCD worden hieronder gegeven:
PIN1 of VSS naar aarde
PIN2 of VDD of VCC tot + 5v vermogen
PIN3 of VEE naar aarde (geeft maximaal contrast het beste voor een beginner)
PIN4 of RS (registerselectie) naar PD6 van uC
PIN5 of RW (lezen / schrijven) naar aarde (zet LCD in leesmodus vereenvoudigt de communicatie voor de gebruiker)
PIN6 of E (inschakelen) naar PD5 van uC
PIN7 of D0 tot PB0 van uC
PIN8 of D1 tot PB1 van uC
PIN9 of D2 naar PB2 van uC
PIN10 of D3 naar PB3 van uC
PIN11 of D4 naar PB4 van uC
PIN12 of D5 naar PB5 van uC
PIN13 of D6 naar PB6 van uC
PIN14 of D7 naar PB7 van uC
In het circuit kun je zien dat we 8bit-communicatie (D0-D7) hebben gebruikt, maar dit is niet verplicht en we kunnen 4-bit-communicatie (D4-D7) gebruiken, maar met 4-bits communicatie wordt het programma een beetje ingewikkeld. Zoals te zien is in de bovenstaande tabel, verbinden we 10 pinnen van het LCD-scherm met de controller, waarbij 8 pinnen datapinnen zijn en 2 pinnen voor controle.
De ultrasone sensor is een apparaat met vier pinnen, PIN1-VCC of + 5V; PIN2-TRIGGER; PIN3-ECHO; PIN4- GROND. Trigger pin is waar we een trigger geven om de sensor te vertellen om de afstand te meten. Echo is een uitgangspen waar we de afstand in de vorm van een pulsbreedte krijgen. De echopin is hier verbonden met de controller als een externe interruptbron. Dus om de breedte van de signaaluitvoer te krijgen, wordt de echopin van de sensor verbonden met INT0 (interrupt 0) of PD2.
1. Triggeren van de sensor door de triggerpen minimaal 12uS omhoog te trekken.
2. Zodra de echo hoog wordt, krijgen we een externe interrupt en gaan we een teller starten (een teller inschakelen) in de ISR (Interrupt Service Routine) die wordt uitgevoerd direct nadat een interrupt is geactiveerd.
3. Zodra de echo weer laag wordt, wordt er een interrupt gegenereerd, deze keer gaan we de teller stoppen (de teller uitschakelen).
4. Dus voor een puls van hoog naar laag bij echopin, hebben we een teller gestart en gestopt. Deze telling wordt in het geheugen bijgewerkt om de afstand te krijgen, aangezien we nu de breedte van de echo in de telling hebben.
5. We gaan verdere berekeningen in het geheugen doen om de afstand in cm te krijgen
6. De afstand wordt weergegeven op een 16x2 LCD-scherm.
Voor het instellen van de bovenstaande functies gaan we de volgende registers instellen:
De bovenstaande drie registers moeten dienovereenkomstig worden ingesteld om de installatie te laten werken en we gaan ze kort bespreken, BLAUW (INT0): deze bit moet hoog worden ingesteld om de externe interrupt0 mogelijk te maken, zodra deze pin is ingesteld, kunnen we de logische veranderingen op de PIND2-pin voelen.
BRUIN (ISC00, ISC01): deze twee bits worden aangepast voor de juiste logische verandering op PD2, die als interrupt moet worden beschouwd.
Dus zoals eerder gezegd hebben we een interrupt nodig om een telling te starten en te stoppen. Dus we stellen ISC00 in als één en we krijgen een interrupt als er een logica van LOW tot HIGH is op INT0; nog een onderbreking wanneer er een logische HOOG naar LAAG is.
ROOD (CS10): Deze bit is eenvoudig om de teller in en uit te schakelen. Hoewel het samen met andere bits CS10, CS12. We doen hier geen voorschrijven, dus we hoeven ons daar geen zorgen over te maken.
Enkele belangrijke dingen om te onthouden zijn:
We gebruiken een interne klok van ATMEGA32A die 1 MHz is. Geen voorschaling hier, we doen geen vergelijkingsonderbrekings-genereer routine, dus geen complexe registerinstellingen.
De telwaarde na het tellen wordt opgeslagen in het 16bit TCNT1-register.
Bekijk ook dit project met arduino: afstandsmeting met Arduino
Uitleg over programmeren
De werking van de afstandsmeetsensor wordt stap voor stap uitgelegd in het onderstaande C programma.
#include // header om datastroomcontrole over pinnen in te schakelen #define F_CPU 1000000 // vertellen kristalfrequentie van controller bijgevoegd #include