Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

techniken:messen

Dies ist eine alte Version des Dokuments!




Entrauschen eines Sensors

Motivation

Roboter sollen mit ihrer Umgebung interagieren, um das zu tun müssen sie zunächst in der Lage sein ihre Umgebung wahrzunehmen. Ähnlich wie Menschen über sensorische Hilfsmittel verfügen kann auch ein Roboter mit Sensoren ausgestattet werden die ihm Informationen über seine Umgebung liefern. Jedoch sind unsere Sinnesorgane seit Jahren mit uns verwachsen und unser Gehirn hat sich exakt auf sie eingestellt. Würde man seine Ohren austauschen gegen die seines Nachbarn könnten wir zwar noch immer hören aber das Signal würde sich fehlerhaft anhören aufgrund der veränderten Filtereigenschaften des Aussenohres.
Möchte man seinem Roboter also nicht nur irgendwelche Ohren aufsetzen, sondern genau justierte, sollte man wissen wie das Signal aussieht das aus ihnen rauskommt. Im Folgenden betrachten wir dazu den Distanzen-Sensor von Sharp GP2Y0A60SZLF.

Das Datenblatt

Der erste Schritt führt zum Datenblatt des Sensors, alle wichtigen technischen Daten sind dort zu finden: Datenblatt Sharp bzw. auf der Website des Herstellers Pololu: Sharpy. So erfahren wir das der Sensor alle 16.5 ± 3.7 ms ein neues Messergebnis liefert.
Frequenz = 1/Periode ⇒ Wenn man auf Nummer sicher geht also eine Messfrequenz von 50Hz.

Aber was passiert in der Zwischenzeit?

Angenommen wir haben den Sharp-Sensor am Arduino Pin A6 angeschlossen. Nun lesen wir die Spannung aus die an A6 anliegt, diese entspricht unserem Messwert, und eine weitere Messung nach 1ms. Unsere erste Annahme könnte nun sein das die beiden Werte gleich sein müssen bzw. das wir genau vor und nach einem Mess-Update des Sharp-Sensors gemessen haben. Um diese Annahme zu prüfen lassen wir den Arduino so schnell messen wie er kann und speichern die Daten via eines Processing-Sketch in einer Text-Datei um sie anschließend auszuwerten.

Arduino- und Processing-Sketch

Das Arduino Programm sollte so schlank sein wie möglich um sicherzustellen das der Arduino nicht mit anderen Aufgaben beschäftigt ist:

//In dieser Variable wird die momentane Systemzeit gespeichert.
unsigned long currentMicros = 0;
 
void setup() {
    //Serielle Kommunikation (schnellste Baudrate)
    Serial.begin(115200);
}
 
void loop() {
    //aktuelle Zeit
    currentMicros = micros();
    //ausgabe des Messwertes
    Serial.print(analogRead(A6));
    //"tabstop" um den Messwert vom Messzeitpunkt zu trennen
    Serial.print("\t");
    //Messzeitpunkt
    Serial.print(currentMillis);
    //"newline" um die Messungen voneinander zu trennen
    Serial.print("\n");
}
techniken/messen.1438331820.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)