Dit instructable is over een ATtiny84 interfacing met de HC-SR04 ultrasone afstandssensor met behulp van alleen de C code – geen Arduino hardware of bibliotheken.
De HC-SR04 werkt als volgt:
-Stuur een 10us hoge puls op de Trigger-pin.
-De sensor stuurt een "sonic uitbarsting" van 8 cycli.
-Luister naar de Echo-pin en de duur van het volgende hoog signaal krijgt u de tijd genomen door het geluid om heen en weer gaan van sensor naar doel.
Hier, wordt de PB0 pin gebruikt voor het verzenden van de 10 ons puls. Voor het meten van de breedte van de echo-puls, we kunnen het gebruiken van een pin-change-interrupt en een timer. Hier is het idee:
-Instellen pincode wijzigen interrupt PCINT0 zodat elke logische wijziging op pin leiden een interrupt tot zal.
-Stuur een 10 Amerikaanse puls naar de trigger-pin.
-Loop tot de interrupt PCINT0 een vlag om aan te geven stelt dat de meting is verricht.
-In de PCINT0 interrupt, een 8-bits timer te starten wanneer u een stijgende rand – dwz ziet., de echo-puls is gegaan van laag naar hoog. De 8-bits timer is ingesteld de overflow interrupt gebruikt.
-De 8-bit teller loopt over elke keer 255 is bereikt, en dus wanneer die onderbreken branden, we 255 aan een lopende teller van de 32-bits waarde toevoegen.
-In de PCINT0 interrupt, 8-bits timer stoppen wanneer u een dalende rand – dwz ziet., de echo-puls is gegaan van hoog naar laag. 32-bits-telling bijwerken en stel vlag om aan te geven dat de meting wordt gedaan.
-De gemeten pulsbreedte is in termen van de waarde van een teller en wij kunnen omzetten die in seconden, omdat we weten dat de kloksnelheid. Deze tijdwaarde wordt vervolgens gebruikt om de afstand te berekenen.
De afstand wordt vervolgens verzonden via seriële communicatie op pin PB1-ik heb dit deel in een apart artikelbehandeld. Dit is ook de reden dat we niet de 16-bits timer gebruiken om te meten de pulsbreedte – het al wordt gebruikt voor seriële communicatie. Plus het is leuk om te leren hoe het gebruik van de 8-bits timer grote waarden, juiste tellen? ;-)
De foto's voor het schema en de lay-out van de breadboard zijn gekoppeld.
Dit is de Makefile die samen met de bovenstaande code gaat:
https://gist.github.com/electronut/5763929
En hier is de Python-code gebruikt om de gegevens uitzetten:
https://gist.github.com/electronut/5730160
De Python code is een kleine wijziging aan wat ik voordat over dit onderwerp gepost.