Arduino Entfernungsmessung mit Ton?
Ich muss für die Schule eine Entfernungsmessung machen, die bei 5 cm nähe einen Ton macht? Weiss jemand wie man das programmieren muss?
Danke schon im Voraus für die Antworten :)
Ps: Das auf dem 1. Foto ist das, was ich schon programmiert habe (weiss nicht ob es stimmt) und auf dem 2. Foto das, was ich schon zusammengebaut habe.
1 Antwort
Ich habe diese Anleitung als Basis benutzt:
https://kkg-robotik.blogspot.com/2020/04/tinkercad-ubung-15-ultraschallsensor.html
Unten auf der Seite ist der Lösungsvorschlag.
https://www.tinkercad.com/things/fhfIQtbLM6O-kkg-robotik-ubung-15-pulsein
Dazu musst du dich auf TinkerCAD anmelden. Dort kann man virtuell einen Arduino simulieren. Diesen Code habe ich angepasst.
Ich habe einen Piezo Summer zusätzlich angeschlossen auf GND und Pin 8. Diesen Pulsweitenmonitor kannst du wieder entfernen, da du ihn nicht hast.
Die Entfernung wird gespeichert in der Variabel entfernung_cm.
Diese habe ich genommen und in ein Unterprogramm tonausgeben übergeben. Dort wird dann ein Ton ausgegeben wenn der Abstande zwischen 20 und 40 cm beträgt. Diesen Abstand kannst du anpassen. Eventuell sind bei die die 5 cm zu nah am Sensor und nicht messbar, musst du austesten.
Das hier ist der Code.
const int PIN_ULTRASCHALL = 7;
void setup(){
Serial.begin(9600);
}
long entfernung_lesen()
{
// 1. Trigger:
pinMode(PIN_ULTRASCHALL, OUTPUT); // PIN_ULTRASCHALL im Trigger-Modus (Ausgang)
digitalWrite(PIN_ULTRASCHALL, LOW); // ausschalten
delayMicroseconds(2); // kurz warten, dass das Signal wirklich LOW wird
digitalWrite(PIN_ULTRASCHALL, HIGH); // 10 Millisekunden-Puls erzeugen
delayMicroseconds(10);
digitalWrite(PIN_ULTRASCHALL, LOW);
// 2. Auf Echo warten und messen
pinMode(PIN_ULTRASCHALL, INPUT); // PIN_ULTRASCHALL in Echo-Modus (Eingang)
return pulseIn(PIN_ULTRASCHALL, HIGH); // warte auf Puls uns messe die Breite des Pulses in Millisekunden
}
void loop()
{
// Formel aus dem Datenplatt:
// Pulsbreite in Mikrosekunden / 58 = Abstand in Zentimetern
double entfernung_cm = entfernung_lesen() / 58;
// Abstand in cm im Serial Monitor ausgeben
Serial.println(entfernung_cm);
delay(100);
tonausgeben(entfernung_cm);
}
void tonausgeben(double entfernung_cm){
//ist die Entfernung innerhalb diesem Bereich wird ein Ton abgespielt
if (entfernung_cm > 20 and entfernung_cm < 40){
tone(8, 200); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(100); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
delay(200); // Der Lautsprecher bleibt eine Sekunde aus
}
}
