» » X1 – 10.0 Sonar

X1 – 10.0 Sonar

eingetragen in: X1 | 0

 

Sonar

In diesem Lernkurs wirst du das letzte Bauteil deines X1 in eine Funktion einbinden. Das Sonar nutzt du vor allem dafür, dass dein X1 Kollisionen vermeiden kann. In diesem Lernkurs wirst du dich aber erst einmal mit dem Sonar vertraut machen und dir die Entfernung mit Serial.print ausgeben lassen.

Video-Beispiel:

 

Code-Beispiel:

#define sonarEchoPin 3
#define sonarTriPin 4

void setup() {
Serial.begin(9600);
pinMode(sonarTriPin, OUTPUT); //Trigger ist der Ausgang
pinMode(sonarEchoPin, INPUT); //echo dann der Eingang
}

void loop() {
sonarTest();
}

void sonarTest(){
long dauer, abstand; //long für große Zahlen
digitalWrite(sonarTriPin, LOW); //zur sicherheit aus
delayMicroseconds(2);
digitalWrite(sonarTriPin, HIGH); //10microSekunden an
delayMicroseconds(10);
digitalWrite(sonarTriPin, LOW);
dauer = pulseIn(sonarEchoPin, HIGH);
abstand = (dauer/2) / 29.1; //Durch 2 da doppelter weg, 29,1 auf cm umrechen
if (abstand >= 200 || abstand <= 0){
Serial.println("Out of range");
}
else {
Serial.print("Sonar: ");
Serial.print(abstand);
Serial.println(" cm");
}
delay(100);
}

 
 
 

Step 1

Um das Sonar zu programmieren benötigst du zwei long Variablen, da du mit sehr großen Zahlen arbeitest. Dir ist vielleicht aufgefallen, dass du beide Variablen direkt in einer Zeile benennen. Du musst sie einfach nur mit einem Komma trennen.

 

 

 

void sonarTest(){
  long dauer, abstand;

  ...
}

 

 

 

 
 
 

Step 2

Das Sonar besteht aus einem kleinen Lautsprecher und einem Mikrophon. Daher gibst du zuerst mit digitalWrite einen Ton aus, der genau 10 Mikrosekunden lang ist. Da du hier mit Mikro- und nicht Millisekunden arbeiten, muss der delay angepasst werden. (Mit deinem Handy aufgenommen kannst du das Sonar sogar hören!)

 

 

 

void sonarTest(){
  ...
  digitalWrite(sonarTriPin, LOW);
  delayMicroseconds(2);
  digitalWrite(sonarTriPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(sonarTriPin, LOW);
  ...
}

 

 

 

 
 
 

Step 3

Um die Verzögerung messen zu können, musst du deine Variable: dauer mit dem Befehl pulseIn gleichsetzen. Der Befehl pulseIn misst eine Veränderung an einem PWM Pin vom Arduino und gibt seine Wartezeit aus. In den Klammern musst du ihm den Pin und die Information, ob er auf eine Positive oder Negative Veränderung warten soll, geben.

Im Grunde hast du jetzt in der Variable dauer die Zeit zwischen senden und empfangen des Sonars gespeichert. Du musst jetzt nur ausrechnen, wie weit das Objekt vom Sonar entfernt ist, von dem der Schall reflektiert hat. Du speicherst diesen Wert in der Variable abstand.

 

 

 

void sonarTest(){
  ...
  dauer = pulseIn(sonarEchoPin, HIGH);
  abstand = (dauer/2) / 29.1;
  ...
}

 

 

 

 
 
 

Step 4

In dieser if-Verzweigung solltest dir ein neuer Operator ins Auge springen. "||" bedeutet im Grunde "Oder". Das heißt, dass die if-Verzweigung ausgeführt wird, wenn eins der beiden Dinge zutrifft. Hier gibst du der if-Verzweigung zwei Maximalwerte, da das Sonar bei sehr großen und kleinen Entfernungen ungenau wird. Wenn diese zutreffen, gibt er eine Fehlermeldung aus. Danach sagst du mit else, dass er ansonsten den vorher umgerechnet Abstandswert ausgeben soll.

 

 

 

 

void sonarTest(){

  ...

  if (abstand >= 200 || abstand <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print("Sonar: ");
    Serial.print(abstand);
    Serial.println(" cm");
  }
  delay(100);
}

 

 

 

 

Fazit

Herzlichen Glückwunsch! Du hast jetzt jedes einzelne Bauteil vom X1 mindestens einmal programmiert und solltest dich mit den Grundlagen der Programmierung mit Arduino auskennen. Alles was du jetzt noch brauchst, sind ein paar Ideen und Motivation um deine ganz eigenen Programme zu schreiben.
Wir haben ein eigenes Komplexeres Programm für den X1 geschrieben. Wir nutzen die Taster um verschiedene Modi zu aktivieren. Außerdem haben wir unserem X1 beigebracht Licht zu suchen und Schatten zu vermeiden. Unser X1 Programm kann auch Melodien über den Pieper abspielen oder deiner Hand Folgen.

Wir werden nach und nach auch darüber Lernkurse und Projekte veröffentlichen.

Du kannst hier schon unseren Ganzen Code Downloaden. Wenn du eigene Ideen für Programme oder für den X1 hast, teile sie doch bitte im Projekte Breiche mit der Community oder wende dich an unser Forum. Ausserdem kannst du dich im Projekte Bereich von Projekten und Ideen anderer User der Community inspirieren lassen oder einfach ein wenig umher stöbern.

 
 
 

Bitte hinterlasse eine Antwort