Diese instructable geht es um Schnittstellen einen ATtiny84 mit der HC-SR04 Ultraschall Distanzsensor mit nur C-Code – keine Hardware Arduino oder Bibliotheken.
Die HC-SR04 funktioniert wie folgt:
-Senden Sie eine 10us HIGH Pulse auf den Trigger-Pins.
-Der Sensor sendet ein "sonic platzen" der 8 Zyklen.
-Hören Sie das Echo-Pin und die Dauer der nächsten HIGH-Signal wird Ihnen die Zeit durch den Klang, hin und her vom Sensor zum Ziel zu gehen.
Hier wird die Pin PB0 verwendet, um die 10 uns Puls aussenden. Um die Breite des Echo-Puls zu messen, können wir einen Pin-Change Interrupt und einen Timer. Hier geht es darum:
-Setup-Pin-Änderung unterbrechen PCINT0, so dass jede logische Änderung auf Pin einen Interrupt auslösen wird.
-Senden Sie 10 US Puls an der Trigger-Pins.
-Schleife bis der PCINT0 Interrupt eine Markierung setzt, die angibt, dass die Messung erfolgt.
-In den PCINT0 Interrupt, einen 8-Bit Timer starten, wenn Sie eine steigende Flanke – dh sehen., der Echo-Puls ist von niedrig zu hoch gegangen. Der 8-Bit Timer ist Setup, um den Überlauf Interrupt verwenden.
-Die 8-Bit-Zähler läuft jedes Mal, wenn sie 255 erreicht, und wenn das Feuer unterbrechen, 255 auf einen laufenden 32-Bit-Zähler-Wert hinzufügen.
-In den PCINT0 Interrupt 8-Bit Timer stoppen, wenn Sie eine fallende Flanke – dh sehen., der Echo-Puls gegangen von hoch zu niedrig. Aktualisieren Sie 32-Bit-Zahl und festlegen Sie Kennzeichen, um anzugeben, dass die Messung beendet ist.
-Die gemessene Pulsbreite ist in Bezug auf einen Zählerwert, und wir können konvertieren, die in Sekunden, da wir wissen, dass die Taktrate. Dieser Zeitwert ist dann verwendet, um die Entfernung zu berechnen.
Der Abstand ist dann über serielle Kommunikation am Pin PB1 gesendet – ich habe diesen Teil in einem gesonderten Artikelbehandelt. Dies ist auch der Grund, wir können die 16-Bit Timer verwenden, um die Impulsbreite – messen es ist bereits für die serielle Kommunikation verwendet wird. Und es macht Spaß zu lernen, wie man den 8-Bit Timer verwenden, um große Werte, richtige zählen? ;-)
Die Bilder für Schaltplan und Layout Steckbrett sind beigefügt.
Dies ist das Makefile, die einhergeht mit dem obigen Code:
https://GIST.github.com/electronut/5763929
Und hier ist der Python-Code verwendet, um die Daten zu zeichnen:
https://GIST.github.com/electronut/5730160
Der Python-Code ist eine geringfügige Änderung, was ich zuvor zu diesem Thema geschrieben.