Arduino: Infrarotsensor entstören: Unterschied zwischen den Versionen
| Zeile 174: | Zeile 174: | ||
'''Arbeitsergebnisse''' in SVN: <code>IR_Sensorcharakterisierung.pdf</code> | '''Arbeitsergebnisse''' in SVN: <code>IR_Sensorcharakterisierung.pdf</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Messbereich </strong> | |||
|- | |||
| | |||
Sie messen auf ein Ziel in verschiedenen Distanzen und zeichnen auf x die Referenz und auf y die Anzeige Ihres Systems. | |||
Minimalbeispiel: | Minimalbeispiel: | ||
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 195: | Zeile 197: | ||
|} | |} | ||
Mit der Abweichung von einer Ursprungsgraden können wir im Gespräch die Güte bewerten. Gibt es beispielsweise einen Offset oder driften die Werte auseinander? | Mit der Abweichung von einer Ursprungsgraden können wir im Gespräch die Güte bewerten. Gibt es beispielsweise einen Offset oder driften die Werte auseinander? | ||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Auflösung </strong> | |||
|- | |||
| | |||
Wikipedia: [https://de.wikipedia.org/wiki/Aufl%C3%B6sung_(Messtechnik)] | |||
* Welche Auswirkung hat D=700 zu D=699 auf die Ausgangsgröße d? | * Welche Auswirkung hat D=700 zu D=699 auf die Ausgangsgröße d? | ||
* Tragen Sie diese Werte gegeneinander auf ergibt sich eine Kurve. | * Tragen Sie diese Werte gegeneinander auf ergibt sich eine Kurve. | ||
| Zeile 215: | Zeile 222: | ||
|- | |- | ||
|} | |} | ||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Empfindlichkeit </strong> | |||
|- | |||
| | |||
Wikipedia: [https://de.wikipedia.org/wiki/Empfindlichkeit_(Technik)] | |||
* Hier setzen Sie <math>E = \frac{\Delta d}{\Delta U}</math> ins Verhältnis. | * Hier setzen Sie <math>E = \frac{\Delta d}{\Delta U}</math> ins Verhältnis. | ||
* Das sind die partiellen Ableitungen (Steigung) der [[Sharp_GP2Y0A41SK0F|Kennlinie]] in Abb. 8. | * Das sind die partiellen Ableitungen (Steigung) der [[Sharp_GP2Y0A41SK0F|Kennlinie]] in Abb. 8. | ||
---- | ---- | ||
Version vom 19. März 2026, 11:06 Uhr

| Autor: | Prof. Dr.-Ing. Schneider |
| Modul: | Praxismodul I |
| Lektion 6: | Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester |
Inhalt
- Kennlinienuntersuchung und Filterung
- Installation und Nutzung einer Bibliothek
- Programmierung und Anwendung eines Median-Filters
Lernziele
Nach Durchführung dieser Lektion
- können Sie die systematischen Sensorfehler erkennen und behandeln.
- können Sie eine Bibiothek installieren und nutzen.
- können die Messwerte vergleichend anzeigen und bewerten.
- können Sie die Messwerte charakterisieren.
- können Sie ein Median-Filter erläutern und anwenden.
Lernzielkontrolle
- Wie bestimmt man die Größe eines Arrays?
- Wie installiert man in der Arduino IDE eine neuen Bibliothek?
- Wie nutzt man die Bibliothek
ArduinoSort, um ein Array auszugeben und zu sortieren? - Was ist ein Median-Filter? Wie wird der Median berechnet?
- Was ist in C ein Zeiger und wie wird er verwendet?
Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_06.pdf
Tutorials
- Arduino: Using the Serial Plotter Tool
- Arduino Referenz:
analogRead() - Wiki: SHARP IR Abstandsensor
- Arduino Befehlsübersicht
- Wiki: HSHL Bibliothek einbinden
Video Tutorials
| Tutorial Arrays |
|
|
| Tutorial: Lookup Table |
|
|
| Tutorial: Lookup Table programmieren |
|
|
Demos
- DemoSharpIR.ino
- DemoLookupTable.ino
- DemoLookupTableIR.ino
- DemoUnterfunktion.ino
- DemoSizeOfArray.ino
- DemoSortiereArray.ino
- DemoMedianFilter
Vorbereitung
Bereiten Sie sich anhand der nachfolgenden Aufgaben auf den Praktikumstermin vor.
- Studieren Sie die Tutorials und Demos.
- Legen Sie ein Array an und bestimmen Sie dessen Größe. Nutzen Sie das DemoSizeOfArray.ino.
- Sie benötigen die Bibliothek
ArduinoSort-master.zip. Diese ist im HSHL-Library-Ordner bereits für Sie hinterlegt. Hier finden Sie die Anleitung. - Machen Sie sich mit dem
DemoSortiereArrayvertraut. - Geben Sie mit ein Array im seriellen Monitor aus. Machen Sie sich mit der Funktion von Zeigern in C vertraut.
- Recherchieren Sie hier die Bezeichnungen "call by value" und "call by reference".
- Sortieren Sie ein Array mit zufälligen Zahlen. Versuchen Sie das Demo DemoSortiereArray.ino nachzuvollziehen.
- Schauen Sie sich die Videos zum Median Filter sowie das dazugehörige DemoMedianFilter an.
- Planen Sie die Software via PAP.
- Beantworten Sie die Lernzielkontrollfragen.
- Sichern Sie Ihre Unterlagen in SVN.
Vorbereitungsaufgabe: Median-Filter
Ausreißer lassen sich gut mit einem Median-Filter entfernen. Ein Beispielvideo finden Sie in diesem Artikel.
- Schreiben Sie die Funktion
int MedianFilter(int Messwert_s16). Diese Funktion soll über einen statischen 5 Werte Ringspeicher (first in first out, FIFO) verfügen. Der erste Wert wird gelöscht, die nachfolgenden Werte rutschen einen auf und der neue Messwert (Messwert_s32) nimmt Platz 5 ein. - Sortieren Sie die 5 Werte nach Größe z. B.
2,2,4,1,2wird zu1,2,2,2,4. Nutzen Sie hierfür die Funktionen ausDemoSortiereArray - Geben Sie als Rückgabewert die Mitte des Arrays
SortiertesArray[3]zurück. - Testen Sie die Funktion Ihrer Funktion mit Zufallszahlen im
void loop()
Nützliche Befehle: random(), Serial.println(), analogRead(), LookupTable(), analogRead()
Arbeitsergebnis in SVN: testeMedianFilter.ino
| Median - einfach erklärt |
| Tipp 1: |
|
Lösungsansatz: Median-Filter für die Störung |
| Tipp 2: |
|
Ein Demo für die Implementierung eines Median-Filters finden Sie in SVN. |
Video Tutorials
| Median-Filter |
|
|
| Lookup-Table |
|
|
Versuchsdurchführung
Aufgabe 6.1: Besprechung der Versuchsvorbereitung
Diskutieren Sie mit Prof. Schneider die Ergebnis Ihrer Vorbereitung.
Aufgabe 6.2: Messwertanalyse
- Messen Sie die Zeit in Millisekunden (ms) mit dem Befehl
millis() - Geben Sie die Zeit und Messdaten im seriellen Plotter mit 115200 Baud aus (z. B.
Zeit in ms : Entfernung in cm1 : 5). - Analysieren Sie die Messdaten. Was fällt Ihnen auf?
- Diskutieren Sie das Ergebnis mit Prof. Schneider.
- Wie lässt sich der Fehler beheben?
Nützliche Befehle: millis(), Serial.begin(), Serial.println(), analogRead()
Arbeitsergebnisse in SVN: zeigeIRMesswerte.ino
| Demos |
| Tipp |
![]() |
Aufgabe 6.3: IR Sensorcharakterisierung
- Zeichnen Sie die gemessene Entfernung im Verhältnis zu einer Referenz auf. Die Referenz kann ein Gliedermaßstab sein. Welchen Messbereich hat Ihr IR-Sensor?
- Zeichnen Sie die gemessenen Entfernungsschritte über dem Messbereich auf. Welche Auflösung hat Ihr Sensor?
- Zeichnen Sie die Auflösung über dem Messbereich auf. Welche Empfindlichkeit hat Ihr Sensor?
Nützliche Befehle: analogRead(), Serial.println()
Arbeitsergebnisse in SVN: IR_Sensorcharakterisierung.pdf
| Messbereich | ||||||||||||
|
Sie messen auf ein Ziel in verschiedenen Distanzen und zeichnen auf x die Referenz und auf y die Anzeige Ihres Systems. Minimalbeispiel:
Mit der Abweichung von einer Ursprungsgraden können wir im Gespräch die Güte bewerten. Gibt es beispielsweise einen Offset oder driften die Werte auseinander? |
| Auflösung | ||||||||||
|
Wikipedia: [1]
Minimalbeispiel:
|
| Empfindlichkeit |
|
Wikipedia: [2]
Aufgabe 6.4: Median-Filter
Arbeitsergebnisse in SVN: Aufgabe 6.5: Nachhaltige Doku
Arbeitsergebnisse in SVN:
|
