KY-050 Ultraschallabstandssensor: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Codebeispiel Arduino)
(Codebeispiel Arduino)
Zeile 30: Zeile 30:
 
Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe der Arduino Funktion [https://www.arduino.cc/en/Reference/PulseIn 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.
 
Das Beispielprogramm aktiviert nach o.g. Prinzip die Abstandsmessung und misst mit Hilfe der Arduino Funktion [https://www.arduino.cc/en/Reference/PulseIn 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.
  
<pre class="brush:cpp"> 
+
<pre class="brush:cpp">#define Echo_EingangsPin 7 // Echo Eingangs-Pin
/*
+
#define Trigger_AusgangsPin 8 // Trigger Ausgangs-Pin
HC-SR04 Ping distance sensor:
+
VCC to arduino 5v
+
GND to arduino GND
+
Echo to Arduino pin 7
+
Trig to Arduino pin 8
+
This sketch originates from Virtualmix: http://goo.gl/kJ8Gl
+
Has been modified by Winkle ink here: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
+
And modified further by ScottC here: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
+
on 10 Nov 2012
+
Further modified by Peter Takacs on 04/02/04 https://patakacs.wordpress.com/2014/02/04/ultrasonic-sensor-hc-sr04-and-piezo-speakers-measuring-distance-and-playing-a-tone-with-piezo/
+
*/
+
  
int echoPin =  7;
+
// Benoetigte Variablen werden definiert
int trigPin =  8;
+
int maximumRange = 300;  
int LEDPinYellow = 2; // Yellow LED
+
int minimumRange = 2;  
int LEDPinGreen = 4; // Green LED
+
long Abstand;
int soundPin = 12; // Piezo
+
long Dauer;
 
+
int maximumRange = 100;
+
int minimumRange = 0;
+
long duration, distance;
+
  
 
void setup() {
 
void setup() {
Serial.begin (9600); // Init communications to serial monitor
+
pinMode(Trigger_AusgangsPin, OUTPUT);
pinMode(trigPin, OUTPUT);
+
pinMode(Echo_EingangsPin, INPUT);
pinMode(echoPin, INPUT);
+
Serial.begin (9600);
pinMode(LEDPinYellow, OUTPUT);
+
pinMode(LEDPinGreen, OUTPUT);
+
 
}
 
}
  
 
void loop() {
 
void loop() {
/* The following trigPin/echoPin cycle is used to determine the
 
distance of the nearest object by bouncing soundwaves off of it. */
 
digitalWrite(trigPin, LOW);
 
delayMicroseconds(2);
 
 
digitalWrite(trigPin, HIGH);
 
delayMicroseconds(10);
 
 
digitalWrite(trigPin, LOW);
 
duration = pulseIn(echoPin, HIGH);
 
 
//Calculate the distance (in cm) based on the speed of sound.
 
distance = duration/58.2;
 
 
if (distance >= maximumRange || distance <= minimumRange){// Yellow led indicated out of maximumRange. Prints “Out Of Range” to serial if target is outside maximumRange.Serial.println(“Out Of Range”);digitalWrite(LEDPinYellow, HIGH);digitalWrite(LEDPinGreen, LOW);}else {
 
// When ultasonic sensor picks up a signal _within_ maximumRange, print distance in cm to serial monitor, turn off YellowLed and turn on GreenLED.
 
Serial.print(“Distance = ” );
 
Serial.print(distance);
 
Serial.println(” cm” );
 
digitalWrite(LEDPinYellow, LOW);
 
digitalWrite(LEDPinGreen, HIGH);
 
tone(soundPin, 800, 300);
 
delay(distance); // Distance is the delay in ms between tones, ie Near maxRange -> Long tones, Near minimumRange -> Rapid tones.
 
noTone(soundPin);
 
  
 +
// 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);
 
}
 
}
 +
</pre>
  
// Mandatory delay
+
'''Anschlussbelegung Arduino:'''
delay(50);
+
}
+
 
+
</pre>
+
  
Quelle: https://patakacs.wordpress.com/2014/02/04/ultrasonic-sensor-hc-sr04-and-piezo-speakers-measuring-distance-and-playing-a-tone-with-piezo/
+
{| style="height: 58px; padding-left: 30px;" width="228"
 +
|-
 +
||VCC
 +
||=
 +
||[Pin 5V]
 +
|-
 +
||Echo
 +
||=
 +
||[Pin 7]
 +
|-
 +
||Trigger
 +
||=
 +
||[Pin 8]
 +
|-
 +
||Sensor GND
 +
||=
 +
||[Pin GND]
 +
|}
  
 +
'''Beispielprogramm Download'''
  
“This document can be copied and modified under the conditions of GNU General Public License. [http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html]
+
[[Medium:KY-050-UltraschallabstandSensor.zip|KY-050-UltraschallabstandSensor.zip]]

Version vom 28. April 2016, 13:38 Uhr

Bild

KY-0050.png


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

4 G S T V.png

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.

ky-050-Senden+Empfangen.jpg

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.


KY-050-Ultraschall.jpg

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