KY-050 Ultraschallabstandssensor: Unterschied zwischen den Versionen
Aus Linkerkit.de
(→Codebeispiel Raspberry Pi) |
(→Codebeispiel Raspberry Pi) |
||
Zeile 106: | Zeile 106: | ||
==Codebeispiel Raspberry Pi== | ==Codebeispiel Raspberry Pi== | ||
− | !! Achtung !! | + | <span style="color: #ff6600;">!! <span style="color: #ff0000;">Achtung</span> !! <span style="color: #99cc00;">Analoger Sensor</span> !! <span style="color: #ff0000;">Achtung</span> !!</span> |
Der Raspberry Pi arbeitet mit seinem ARM-Prozessorkern, anders als der auf Atmel Atmega basierende Arduino, mit 3,3V Spannungslevel, anstatt mit 5V - dieser Sensor funktioniert jedoch nur mit dem höheren Spannungslevel. Würde man den Sensor uneingeschränkt am Raspberry Pi ohne Vorsichtsmaßnahmen betreiben, könnten dies bei den Eingängen des Raspberry Pi's permanente Schäden hervorrufen. | Der Raspberry Pi arbeitet mit seinem ARM-Prozessorkern, anders als der auf Atmel Atmega basierende Arduino, mit 3,3V Spannungslevel, anstatt mit 5V - dieser Sensor funktioniert jedoch nur mit dem höheren Spannungslevel. Würde man den Sensor uneingeschränkt am Raspberry Pi ohne Vorsichtsmaßnahmen betreiben, könnten dies bei den Eingängen des Raspberry Pi's permanente Schäden hervorrufen. | ||
− | Für solche Fälle Grund besitzt dieses Sensorkit-Set mit dem KY-051 einen Voltage-Translator, welcher die Spannungslevel anpasst und somit einen sicheren Betrieb gewährleistet. Dieser muss bei diesem Sensor zwischen den Rasperry Pi und dem Sensor zwischengeschaltet sein. | + | Für solche Fälle Grund besitzt dieses Sensorkit-Set mit dem KY-051 einen Voltage-Translator, welcher die Spannungslevel anpasst und somit einen sicheren Betrieb gewährleistet. <u>Dieser muss bei diesem Sensor zwischen den Rasperry Pi und dem Sensor zwischengeschaltet sein</u>. |
− | Nähere Informationen entnehmen Sie der Informationsseite zum [[ | + | Nähere Informationen entnehmen Sie der Informationsseite zum [[KY-051 Voltage Translator / Level Shifter]] |
− | + | ||
− | + | ||
+ | <span style="color: #ff6600;">!! <span style="color: #ff0000;">Achtung</span> !! <span style="color: #99cc00;">Analoger Sensor</span> !! <span style="color: #ff0000;">Achtung</span> !!</span> | ||
Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe einer Art Stoppuhr die Zeit, wie lang das Ultraschallsignal in der Luft ist. Diese Stoppuhr wird realisiert, indem beim Zeitpunkt des Umschaltens des Echosignals, die aktuelle Systemzeit aus time.time() herausgelesen wird; die Differenz zwischen der Einschaltzeit und der Ausschaltzeit ist die gesuchte Zeit wie lang das Signal unterwegs ist. Diese Zeit wird dann für die Umrechnung des Abstands als Basis genommen - das Ergebnis wird danach in der Kosnole ausgegeben. Sollte das Signal außerhalb des Messbereichs sein, wird eine entsprechende Fehlermeldung ausgegeben. | Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe einer Art Stoppuhr die Zeit, wie lang das Ultraschallsignal in der Luft ist. Diese Stoppuhr wird realisiert, indem beim Zeitpunkt des Umschaltens des Echosignals, die aktuelle Systemzeit aus time.time() herausgelesen wird; die Differenz zwischen der Einschaltzeit und der Ausschaltzeit ist die gesuchte Zeit wie lang das Signal unterwegs ist. Diese Zeit wird dann für die Umrechnung des Abstands als Basis genommen - das Ergebnis wird danach in der Kosnole ausgegeben. Sollte das Signal außerhalb des Messbereichs sein, wird eine entsprechende Fehlermeldung ausgegeben. | ||
Zeile 148: | Zeile 147: | ||
</pre> | </pre> | ||
+ | |||
'''Anschlussbelegung Raspberry Pi:''' | '''Anschlussbelegung Raspberry Pi:''' | ||
− | {| style="height: | + | Sensor KY-050 |
+ | |||
+ | {| style="height: 85px; padding-left: 30px;" width="441" | ||
|- | |- | ||
− | || | + | ||VCC |
||= | ||= | ||
− | || | + | ||5V |
− | ||[Pin | + | ||[Pin 2 (RPi)] |
|- | |- | ||
− | || | + | ||Trigger |
||= | ||= | ||
− | || | + | ||Pin B1 |
− | ||[Pin | + | ||[KY-051-Voltage Translator] |
+ | |- | ||
+ | ||Echo | ||
+ | ||= | ||
+ | ||Pin B2 | ||
+ | ||[KY-051-Voltage Translator] | ||
|- | |- | ||
||GND | ||GND | ||
||= | ||= | ||
||Masse | ||Masse | ||
− | ||[Pin 6] | + | ||[Pin 6 (RPi)] |
|} | |} | ||
+ | |||
+ | KY-053- Voltage Translator: | ||
+ | |||
+ | {| style="height: 127px; padding-left: 30px;" width="436" | ||
+ | |- | ||
+ | ||VCCb | ||
+ | ||= | ||
+ | ||5V | ||
+ | ||[Pin 04(RPi)] | ||
+ | |- | ||
+ | ||Pin B1 | ||
+ | ||= | ||
+ | ||Trigger | ||
+ | ||[KY-050-UltraschallSensor] | ||
+ | |- | ||
+ | ||Pin B2 | ||
+ | ||= | ||
+ | ||Echo | ||
+ | ||[KY-050-UltraschallSensor] | ||
+ | |- | ||
+ | ||VCCa | ||
+ | ||= | ||
+ | ||3,3V | ||
+ | ||[Pin 01(RPi)] | ||
+ | |- | ||
+ | ||Pin A1 | ||
+ | ||= | ||
+ | ||GPIO17 | ||
+ | ||[Pin 11(RPi)] | ||
+ | |- | ||
+ | ||Pin A2 | ||
+ | ||= | ||
+ | ||GPIO27 | ||
+ | ||[Pin 13(RPi)] | ||
+ | |- | ||
+ | ||GND | ||
+ | ||= | ||
+ | ||Masse | ||
+ | ||[Pin 06(RPi)] | ||
+ | |-} | ||
'''Beispielprogramm Download''' | '''Beispielprogramm Download''' |
Version vom 28. April 2016, 14:53 Uhr
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
Wird am Trigger-Eingang ein Signal (fallende Flanke) eingegeben, so wird eine Abstandsmessung durchgeführt und am Echo-Ausgang als PWM-TTL Signal ausgegeben
messbare Distanz: 2cm—300cm Messauflösung: 3mm
min. Zeit zwischen den Messungen 50µs
Pin-Belegung
Funktionsprinzip
Dieses Modul zeigt auf, wie man mittels eines Ultraschalllautsprechers und eines Mikrofons den Abstand berührungslos zu einem Objekt messen kann. Das Prinzip basiert darauf, dass die Schallgeschwindigkeit in der Luft bei gleichbleibender Temperatur nahezu konstant bleibt - bei 20°C beträgt sie 343,2m/s.
Aus diesem Fakt kann man die Abstandsmessung in eine Zeitmessung überführen, welche dann von Mikrokontrollern einfach übernommen werden kann.
Im hier vorgestellten Sensormodul sendet der Ultraschalllautsprecher acht 40KHz Signale aus, welche dann von einem Gegenstand reflektiert und vom Mikrofon aufgenommen werden können. Ultraschall wird verwendet, da es sich außerhalb des Hörbereiches des menschlichen Gehörsinns befindet (grob 20Hz-22.000Hz).
Das Aussenden des Ultraschallsignals wird gestartet, in dem am "Trigger Eingangs-Pin" ein 10µs langes Startsignal (ActiveHigh) empfangen wird. Nach dem Aussenden wird am "Echo Ausgang-Signal Pin" das Signal aktiviert (ActiveHigh). Wird nun am Mikrofon das reflektierte Signal wieder aufgenommen, so wird nach der Detektion das Echo-Signal wieder deaktiviert. Die Zeit zwischen der Aktivierung und der Deaktivierung des Echosignals kann gemessen und in den Abstand umgerechnet werden, da dies auch der Zeit entspricht, wie lang das Ultraschallsignal gebraucht hat um in der Luft die Strecke zwischen Lautsprecher->reflektierende Wand -> Mikrofon zu überwinden. Die Umrechnung erfolgt dann über die Annäherung einer konstanten Luftgeschwindigkeit - der Abstand ist dann folglich die Hälfte der zurückgelegten Strecke.
Codebeispiel Arduino
Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe der Arduino Funktion pulseIn die Zeit, wie lang das Ultraschallsignal in der Luft ist. Diese Zeit wird dann für die Umrechnung des Abstands als Basis genommen - das Ergebnis wird danach in der seriellen Ausgabe ausgegeben. Sollte das Signal außerhalb des Messbereichs sein, wird eine entsprechende Fehlermeldung ausgegeben.
#define Echo_EingangsPin 7 // Echo Eingangs-Pin #define Trigger_AusgangsPin 8 // Trigger Ausgangs-Pin // Benoetigte Variablen werden definiert int maximumRange = 300; int minimumRange = 2; long Abstand; long Dauer; void setup() { pinMode(Trigger_AusgangsPin, OUTPUT); pinMode(Echo_EingangsPin, INPUT); Serial.begin (9600); } void loop() { // Abstandsmessung wird mittels des 10us langen Triggersignals gestartet digitalWrite(Trigger_AusgangsPin, HIGH); delayMicroseconds(10); digitalWrite(Trigger_AusgangsPin, LOW); // Nun wird am Echo-Eingang gewartet, bis das Signal aktiviert wurde // und danach die Zeit gemessen, wie lang es aktiviert bleibt Dauer = pulseIn(Echo_EingangsPin, HIGH); // Nun wird der Abstand mittels der aufgenommenen Zeit berechnet Abstand = Dauer/58.2; // Überprüfung ob gemessener Wert innerhalb der zulässingen Entfernung liegt if (Abstand >= maximumRange || Abstand <= minimumRange) { // Falls nicht wird eine Fehlermeldung ausgegeben. Serial.println("Abstand außerhalb des Messbereichs"); Serial.println("-----------------------------------"); } else { // Der berechnete Abstand wird in der seriellen Ausgabe ausgegeben Serial.print("Der Abstand betraegt:"); Serial.print(Abstand); Serial.println("cm"); Serial.println("-----------------------------------"); } // Pause zwischen den einzelnen Messungen delay(500); }
Anschlussbelegung Arduino:
VCC | = | [Pin 5V] |
Echo | = | [Pin 7] |
Trigger | = | [Pin 8] |
Sensor GND | = | [Pin GND] |
Beispielprogramm Download
KY-050-UltraschallabstandSensor.zip
Codebeispiel Raspberry Pi
!! Achtung !! Analoger Sensor !! Achtung !!
Der Raspberry Pi arbeitet mit seinem ARM-Prozessorkern, anders als der auf Atmel Atmega basierende Arduino, mit 3,3V Spannungslevel, anstatt mit 5V - dieser Sensor funktioniert jedoch nur mit dem höheren Spannungslevel. Würde man den Sensor uneingeschränkt am Raspberry Pi ohne Vorsichtsmaßnahmen betreiben, könnten dies bei den Eingängen des Raspberry Pi's permanente Schäden hervorrufen.
Für solche Fälle Grund besitzt dieses Sensorkit-Set mit dem KY-051 einen Voltage-Translator, welcher die Spannungslevel anpasst und somit einen sicheren Betrieb gewährleistet. Dieser muss bei diesem Sensor zwischen den Rasperry Pi und dem Sensor zwischengeschaltet sein.
Nähere Informationen entnehmen Sie der Informationsseite zum KY-051 Voltage Translator / Level Shifter
!! Achtung !! Analoger Sensor !! Achtung !!
Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe einer Art Stoppuhr die Zeit, wie lang das Ultraschallsignal in der Luft ist. Diese Stoppuhr wird realisiert, indem beim Zeitpunkt des Umschaltens des Echosignals, die aktuelle Systemzeit aus time.time() herausgelesen wird; die Differenz zwischen der Einschaltzeit und der Ausschaltzeit ist die gesuchte Zeit wie lang das Signal unterwegs ist. Diese Zeit wird dann für die Umrechnung des Abstands als Basis genommen - das Ergebnis wird danach in der Kosnole ausgegeben. Sollte das Signal außerhalb des Messbereichs sein, wird eine entsprechende Fehlermeldung ausgegeben.
# Benoetigte Module werden importiert und eingerichtet import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # Hier wird der Eingangs-Pin deklariert, an dem der Sensor angeschlossen ist. Zusaetzlich wird auch der PullUP Widerstand am Eingang aktiviert GPIO_PIN = 24 GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP) print "Sensor-Test [druecken Sie STRG+C, um den Test zu beenden]" # Diese AusgabeFunktion wird bei Signaldetektion ausgefuehrt def ausgabeFunktion(null): print("Signal erkannt") # Beim Detektieren eines Signals (fallende Signalflanke) wird die Ausgabefunktion ausgeloest GPIO.add_event_detect(GPIO_PIN, GPIO.FALLING, callback=ausgabeFunktion, bouncetime=100) # Hauptprogrammschleife try: while True: time.sleep(1) # Aufraeumarbeiten nachdem das Programm beendet wurde except KeyboardInterrupt: GPIO.cleanup()
Anschlussbelegung Raspberry Pi:
Sensor KY-050
VCC | = | 5V | [Pin 2 (RPi)] |
Trigger | = | Pin B1 | [KY-051-Voltage Translator] |
Echo | = | Pin B2 | [KY-051-Voltage Translator] |
GND | = | Masse | [Pin 6 (RPi)] |
KY-053- Voltage Translator:
VCCb | = | 5V | [Pin 04(RPi)] |
Pin B1 | = | Trigger | [KY-050-UltraschallSensor] |
Pin B2 | = | Echo | [KY-050-UltraschallSensor] |
VCCa | = | 3,3V | [Pin 01(RPi)] |
Pin A1 | = | GPIO17 | [Pin 11(RPi)] |
Pin A2 | = | GPIO27 | [Pin 13(RPi)] |
GND | = | Masse | [Pin 06(RPi)] |