» » X1 – 10.0 Sonar

X1 – 10.0 Sonar

eingetragen in: X1 | 0

 

Sonar

In diesem Lernkurs wollen wir das letzte Bauteil vom X1 in eine Funktion einbinden. Das Sonar nutzen wir vor allem damit der X1 Kollisionen vermeidet. In diesem Lernkurs werden wir uns aber erst einmal mit dem Sonar vertraut machen, und uns die Entfernung mit Serial.print ausgeben lassen.

Viceo-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);
}

 

 

 

void sonarTest(){
  long dauer, abstand;

  ...
}

 

 

 

 
 
 

Step 1

Um das Sonar zu Programmieren benötigen wir zwei long Variablen, da wir mit sehr großen Zahlen arbeiten. Euch ist vielleicht aufgefallen das wir beide Variablen direkt in einer Zeile benennen, wir müssen sie einfach nur mit einem Komma trennen.

 

 

 

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

 

 

 

 
 
 

Step 2

Das Sonar besteht aus einem kleinem Lautsprecher und Mikrophon. Daher geben wir zuerst mit digitalWrite einen Ton aus, Der Genau 10 Mikrosekunden lang ist. Da wir hier mit Mikro- und nicht Millisekunden arbeiten muss der delay angepasst werden.

 

 

 

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

 

 

 

 
 
 

Step 3

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

Im Grunde haben wir jetzt in der Variable dauer die Zeit zwischen senden und empfangen des Sonars gespeichert. Wir müssen jetzt nur mit ein wenig mathe ausrechnen, wie weit das Objekt vom Sonar entfernt ist, von dem sich der Schall Reflektiert hat. Wir Speichern diesen wert in der Variable Abstand.

 

 

 

void sonarTest(){

  ...

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

 

 

 

 
 
 

Step 4

In Dieser if-Verzweigung sollte euch direkt ein neuer Operator ins Auge Springen. "||" bedeutet im Grunde "Oder". Das bedeutet das die if-Verzweigung ausgeführt wird wenn eins der beiden Dinge zutrifft. Hier geben wir der if-Verzweigung zwei Maximalwerte, da das Sonar bei sehr großen und kleinen Zahlen ungenau wird. Wenn diese zutreffen geben eine Fehlermeldung aus. Danach sagen wir mit else, dass er ansonsten den vorher umgerechneten Abstandswert ausgeben soll.

 

 

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 par Ideen und Motivation um deine Ganz eigenen Programme zu schreiben.

Wir haben ein eigenes Komplexeres Programm für den X1 Geschrieben. Wir nutzen beispielsweise die Taster um verschieden Modi zu aktivieren. Ausserdem 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 X1 generell hast, teile sie doch bitte im Projekte Bereich mit der Community. Dort kannst du auch andere Community Projekte durchstöbern und dich inspirieren lassen.
 
 
 

Bitte hinterlasse eine Antwort