Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Propeller 8 Kern Controller - C Programmierung

1 - Ultraschallsensor PING)))

Der PING))) Ultraschallsensor sendet ein Signal aus. Trifft es auf ein Hindernis, wird es im Idealfall reflektiert und direkt an den Sender zurückgesandt. Über die Zeit, die das Signal für Hin- und Rückweg benötigt, lässt sich so die Entfernung bestimmen.

Auf diese Art lassen sich Abstände zwischen 3 cm bis zu 300 cm ausmessen. Für Roboter ist der PING))) ein idealer Abstandsmesser, lässt sich aber auch als Überwachungssystem vielseitig einsetzen.

Ziele

 

Wenn du dieses Kapitel durchgearbeitet hast, bist du in der Lage ...

  • Ultraschall, Hyperschall und Infraschall zu unterscheiden.
  • die Schallgeschwindigkeit in Luft zu berechnen.
  • prozentuale Fehler bei einer Abstandsbestimmung anzugeben.
  • die Wirkungsweise eines Ultraschallsensors anzugeben.
  • die relevanten Daten eines Ultraschallsenders auf Basis eines Datenblatts anzugeben.
  • eine elektronische Schaltung mit einem Ultraschallsensor aufzubauen.
  • einen Ultraschallsensor in der Sprache C über einen Mikrokontroller anzusteuern.

 

Bevor wir uns weiter mit  Abstandsmessungen beschäftigen, muss erst einmal geklärt werden, was Ultraschall ist und wovon die Ausbreitungsgeschwindigkeit von Schall im Medium Luft abhängt.

2 - Ultraschall - Theorieteil

Als Ultraschall bezeichnet man Schall mit Frequenzen oberhalb des menschlichen Hörfre-quenzbereichs. Er umfasst Frequenzen ab etwa 16 kHz bis zu 1 GHz. Oberhalb von 1 GHz spricht man von Hyperschall. Unterhalb der menschlichen Hörgrenze (unterhalb von ca. 20 Hz) spricht man vom Infraschall.

In Gasen und Flüssigkeiten breitet sich Ultraschall vorwiegend als Longitudinalwelle aus. Je nach Material eines Hindernisses wird Ultraschall an ihm reflektiert, in ihm absorbiert, gestreut oder er tritt durch das Material hindurch (transmittiert).

Abhängigkeit der Schallgeschwindigkeit in Luft von der Temperatur

Courtesy of Parallax Inc.

Der PING))) Ultraschallsensor sendet einen hochfrequentes Signalton aus und misst die Zeit, bis das reflektierte Signal wieder bei ihm eintrifft. Diese Zeitmessung ist also abhängig von der Ausbreitungsgeschwindigkeit von Schall in Luft.

 

Die Ausbreitungsgeschwindigkeit von Schall ist abhängig von der Temperatur, der Luftfeuchtigkeit und auch der Luftqualität. Im Gegensatz zur Lufttemperatur gehen die Effekte Luftfeuchtigkeit und Luftqualität nicht signifikant in die Abstandsberechnung des PING))) Sensors ein. Die Ausbreitungsgeschwindigkeit von Schall erhöht sich pro Grad Celsius (°C) um 0,6 Meter pro Sekunde (m/s). Bei 0° C liegt sie bei 331,5 m/s. Mit der folgenden Formel lässt sich die Ausbreitungsgeschwindigkeit von Schall in Abhängigkeit von der Temperatur berechnen:

Abbildung 1 Berechnungsformel Schallausbreitung

In den folgenden beiden Beispielen wird die Ausbreitungsgeschwindigkeit von Schall bei 22,2° C und 25°C berechnet.  

 

Beispiel 1: Berechne die Ausbreitungsgeschwindigkeit von Schall bei 22,2° C.

Abbildung 2 Rechenbeispiel für 22,2° Celsius

Beispiel 2: Berechne die Ausbreitungsgeschwindigkeit von Schall bei 25° C.

Abbildung 3 Rechenbeispiel für 25° Celsius

Die Größe des prozentualen Fehlers, der bei diesen kleinen Temperaturdifferenzen auftritt, berechnet sich über die folgende Formel:

Abbildung 4 Berechnungsformel für den prozentualen Fehler

Wenn die angenommene Raumtemperatur 22,2°C ist, die tatsächliche Temperatur aber bei 25°C liegt, beträgt der Fehler 0,49%. Ein halbes Prozent bedeutet, dass das Objekt bei einer tatsächlichen Entfernung von 100 cm jetzt einen halben Zentimeter weiter entfernt erscheint.

Abbildung 5 Rechenbeispiel

3 - Ultraschallsensor testen

Nach soviel Theorie schauen wir uns jetzt mal den PING))) Ultraschallsensor an. Er verfügt über drei Anschlussleitungen: I/O Pin, 5V und GND. Um ihn in einer ersten Schaltung einsetzen zu können, benötigen wir das folgende Material:

Abbildung 6

Schaltungsaufbau und Schaltskizze

Abbildung 6 - Courtesy of Parallax Inc.

Programm-Code eingeben

Mit diesem Programm wird der Abstand eines Gegenstands bestimmt, der sich vor dem Sensor befindet. Der Abstand wird im Debug Terminal in Zentimetern angegeben.

Material
  • 1x  Prop-BoE oder Prop-AB
  • 1x  PING))) Senso
  • 1x  Widerstand 2kOhm
  • 2x  Steckdraht
Aufgabe
  • Baue die Schaltung nach Abb. 6 auf.
  • Gib das Programm ping1.c über den SimpleIDE Editor ein und speichere es ab.
  • Starte das Programm mit Run with Terminal.
  • Stelle vor den Sensor einen Gegenstand und überprüfe die Entfernungsangaben, wenn der Gegenstand unterschiedliche Abstände vom Sensor hat.

Das Programm ping1.c

Abbildung 8 Programm ping1.c

Wie arbeitet das Programm ping1.c?

Sobald der PING))) Sensor ein LOW-HIGH-LOW Signal vom Propeller empfängt, sendet er kurze Ultraschallsignale aus. Menschen können diese Töne nicht hören. Der Wandler im PING)))-Sensor ist dazu in der Lage und kann die am Gegenstand reflektierten Signale empfangen. 

Sobald der PING))) Sensor ein Signal ausgesandt hat, wird der Ausgangspin auf HIGH gesetzt. Kommt das Signal zurück und wird vom Wandler erkannt, geht der Pin auf LOW.  Der Propeller berechnet die Zeit, die zwischen HIGH und LOW Zustand vergangen ist; es ist die Laufzeit, die der Schall für den Hin- und Rückweg benötigte.

Abbildung 9 - Courtesy of Parallax Inc.

Die Programmbibliothek von SimpleTools enthält eine Datei PING mit Funktionen, die über das Aussenden von Impulsen und die Messung des Echozeitverhaltens wachen. Sie enthält auch Funktionen, die die Geschwindigkeit der Schallausbreitung berücksichtigen und die gemessene Zeit in eine Abstandsgröße umrechnen. Eingebunden wird sie über Project/Add Simple Library und Sensor/libping – Ordner auswählen und im Programm aufgerufen über

  • (#include “ping.h”)
    
    

Im Programm ping1.c wird in einer Endlosschleife (while(1)) mit int cmAbst = ping_cm(15) die Rücklaufzeit beim PING)))-Sensor an P15 gemessen. Die Zeit wird in Mikrosekunden gespeichert und mit Hilfe der Geschwindigkeit von Schall in Luft in eine Abstandsbestimmung in cm umgerechnet.

In Zeile 18 des Programms wird das Ergebnis der Entfernungsbestimmung über ping_cm(15) in der Variablen cmAbst abgelegt und anschließend über die print-Anweisung  (Zeile 19) im Debug Terminal ausgegeben. Dieser Vorgang wiederholt sich alle 200 ms.

4 - Berechnungsformeln zur Schallausbreitung

Was du wissen solltest!

Die Ausbreitungsgeschwindigkeit von Schall in Luft beträgt 344, 8 Meter pro Sekunde bei Raumtemperatur (22,2° C) oder kurz: c = 344,8 m/s, T = 22,2°C.

Die Entfernung s, die der Schall in einer gewissen Zeit t zurücklegt entspricht dem Produkt aus der Zeit t und der Schallausbreitungsgeschwindigkeit c:

in der Zeit t eine Strecke 2s. Daraus ergibt sich für s:

Das Ergebnis muss also durch 2 geteilt werden, um den Wert von s zu erhalten:

Erinnern wir uns: 1 Meter (m) entspricht 100 cm und 1 Sekunde (s) entspricht 1.000.000 Mikrosekunden (µs). Wenn die Rücklaufzeit in Mikrosekunden gemessen wird und die Entfernung in Zentimetern ausgegeben werden soll, dann gilt:

0,01724 entspricht ungefähr 1/58. In der ping-Bibliothek wird folgende Formel benutzt:

Die Division durch eine ganze Zahl spart Speicherplatz und wird vom Prozessor schneller ausgeführt als die Berechnung von Fließkommazahlen.

Versuch mal dies!

Achtung!!! Dieser Versuch funktioniert nur mit dem Prop-Activity Board (AB). In diesem Beispiel wird die Abstandsmessung dazu benutzt die Helligkeit einer LED an P27 zu beeinflussen.

Diesem Versuch wird ein Abstandsbereich zwischen Sensor und Objekt von 25 cm zugrunde gelegt. Je geringer er ist, desto stärker soll das Licht gedimmt werden.

Übung 2

Material Aufbau wie in Übung 1
Aufgabe
  • Gib das Programm ping2.c über den SimpleIDE Editor ein und speicher es ab.
  • Starte das Programm mit Run with Terminal  und überprüfe das Ergebnis.

Das Programm ping2.c

Wie arbeitet das Programm ping2.c?

Zeile 21:          Die Abstandsmessung wird im Programm auf  25cm beschränkt.

Zeile 22:          Der gemessene Abstandswert cmAbst wird mit 10 multipliziert, da die Funktion dac_ctr einen

                        Wert zwischen 0 und 255 erwartet.

Zeile 23:          Mit dem in Zeile 22 neu berechneten Abstandswert cmAbst wird die Helligkeit der LED im

                        Bereich von 0 bis 250 verändert.

Zeile 18:          Mit jedem Schleifendurchlauf wird die Variable cmAbst mit einem Wert aus der

                        Sensormessung neu initialisiert.

Jetzt kommst du!

  • Verändere das Programm so, dass die Blinkrate der LED an P26 in Abhängigkeit von der Entfernungsmessung verändert wird.
  • Verändere das Programm so, dass die LED heller leuchtet, wenn das Objekt dem Sensor näher kommt. Tipp: cmAbst = 25 – cmAbst invertiert die Messung. Dies muss vor der Multiplikation mit 10 erfolgen.

Möchtest du noch mehr über den Ultraschallsensor Ping))) erfahren, dann gehe zur Rubrik BS - Intelligente Sensoren - Ultraschallsensor Ping)) oder BS - Intelligente Sensoren - Mit Ping))) auf Abstand.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf