Arduino: Infrarotsensor entstören: Unterschied zwischen den Versionen
(58 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino]] | [[Kategorie:Arduino]] | ||
[[Datei: | [[Datei:Inf1P L06.jpg|thumb|rigth|450px|Abb. 1: Systematischer Sensorfehler des Sharp IR]] | ||
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | {|class="wikitable" | ||
'''Modul:''' Praxismodul I | |- | ||
''' | | '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | ||
|- | |||
| '''Modul:''' || Praxismodul I | |||
|- | |||
| '''Lektion 6:''' || Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester | |||
|} | |||
== Inhalt == | == Inhalt == | ||
Zeile 14: | Zeile 19: | ||
* können Sie die systematischen Sensorfehler erkennen und behandeln. | * können Sie die systematischen Sensorfehler erkennen und behandeln. | ||
* können Sie eine Bibiothek installieren und nutzen. | * können Sie eine Bibiothek installieren und nutzen. | ||
* können die Messwerte | * können die Messwerte vergleichend anzeigen und bewerten. | ||
* können Sie die Messwerte charakterisieren. | * können Sie die Messwerte charakterisieren. | ||
* können Sie ein Median-Filter erläutern und anwenden. | |||
== Lernzielkontrolle == | == Lernzielkontrolle == | ||
# | # Wie bestimmt man die Größe eines Arrays? | ||
# | # Wie installiert man in der Arduino IDE eine neuen Bibliothek? | ||
# Wie nutzt man die Bibliothek <code>ArduinoSort</code>, 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? | |||
# Wurde der Quelltext durch Header und Kommentare aufgewertet? | # Wurde der Quelltext durch Header und Kommentare aufgewertet? | ||
# Wurden jedes Programm mittels PAP geplant? | # Wurden jedes Programm mittels PAP geplant? | ||
Zeile 25: | Zeile 34: | ||
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | # Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | ||
== | == Tutorials == | ||
* [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Arduino: Using the Serial Plotter Tool] | |||
* [https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ Arduino Referenz: <code>analogRead()</code>] | |||
* [[Sharp_GP2Y0A41SK0F| Wiki: SHARP IR Abstandsensor]] | |||
* [https://www.arduino.cc/reference/de/ Arduino Befehlsübersicht] | |||
* [[Arduino:_Bibliothek_einbinden|Wiki: HSHL Bibliothek einbinden]] | |||
== Video Tutorials== | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tutorial Arrays </strong> | |||
{| | |||
|- | |- | ||
| | | | ||
<iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=52d1eee9-b0f9-455a-80db-af3f00f2529b&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe> | |||
|- | |- | ||
| | |} | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tutorial: Lookup Table </strong> | |||
|- | |- | ||
| | | | ||
<iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=98958e23-9c36-48cf-b912-af3c00601ce1&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe> | |||
|- | |- | ||
| | |} | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tutorial: Lookup Table programmieren </strong> | |||
|- | |- | ||
| . | | | ||
<iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=3b45bf84-7d4e-49e5-bc0c-af4600ef47ee&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe> | |||
|- | |- | ||
|} | |} | ||
* | |||
* Sie | == Demos == | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoLookupTable/DemoLookupTableIR.ino DemoLookupTableIR.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoUnterfunktion/DemoUnterfunktion.ino DemoUnterfunktion.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSizeOfArray/DemoSizeOfArray.ino DemoSizeOfArray.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSortiereArray/DemoSortiereArray.ino DemoSortiereArray.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoMedianFilter/DemoMedianFilter.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 [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSizeOfArray/DemoSizeOfArray.ino DemoSizeOfArray.ino]. | |||
# Sie benötigen die Bibliothek <code>ArduinoSort-master.zip</code>. Diese ist im HSHL-Library-Ordner bereits für Sie hinterlegt. [https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries Hier] finden Sie die Anleitung. | |||
# Machen Sie sich mit dem <code>DemoSortiereArray</code> vertraut. | |||
# Geben Sie mit ein Array im seriellen Monitor aus. Machen Sie sich mit der [https://www.c-howto.de/tutorial/zeiger/ Funktion von Zeigern] in C vertraut. | |||
# Recherchieren Sie [https://lerneprogrammieren.com/call-by-value-und-call-by-reference-bei-der-parameteruebergabe/ hier] die Bezeichnungen "call by value" und "call by reference". | |||
# Sortieren Sie ein Array mit zufälligen Zahlen. Versuchen Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSortiereArray/DemoSortiereArray.ino DemoSortiereArray.ino] nachzuvollziehen. | |||
# Schauen Sie sich die Videos zum Median Filter sowie das dazugehörige [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoMedianFilter/DemoMedianFilter.ino DemoMedianFilter] an. | |||
#Planen Sie die Software via PAP. | |||
#Beantworten Sie die Lernzielkontrollfragen. | |||
#Sichern Sie Ihre Unterlagen in SVN. | |||
'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_06.pdf</code> | |||
== Versuchsdurchführung == | == Versuchsdurchführung == | ||
Zeile 87: | Zeile 96: | ||
'''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_06.pdf</code> | '''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_06.pdf</code> | ||
---- | |||
=== Aufgabe 6.2: Messwertanalyse === | === Aufgabe 6.2: Messwertanalyse === | ||
# Messen Sie die Zeit in Millisekunden mit dem Befehl <code>millis()</code> | # Messen Sie die Zeit in Millisekunden (ms) mit dem Befehl <code>millis()</code> | ||
# Geben Sie die Zeit und Messdaten im seriellen Monitor aus (z. B. <code>Zeit in ms : Entfernung in cm</code>). | # Geben Sie die Zeit und Messdaten im seriellen Monitor mit 115200 Baud aus (z. B. <code>Zeit in ms : Entfernung in cm</code> 1 : 5). | ||
# Analysieren Sie die Messdaten. Was fällt Ihnen auf? | # Analysieren Sie die Messdaten. Was fällt Ihnen auf? | ||
# Diskutieren Sie das Ergebnis mit Prof. Schneider. | # Diskutieren Sie das Ergebnis mit Prof. Schneider. | ||
Zeile 101: | Zeile 111: | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
''' | '''Demos:''' | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSharpIR/DemoSharpIR.ino DemoSharpIR.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTableIR/DemoLookupTableIR.ino DemoLookupTableIR.ino | |||
] | |||
[[Datei:Inf1P L6 Messwerte.jpg|thumb|left|450px|Abb. 2: Ausgabe der Entfernungswerte im seriellen Monitor]] | [[Datei:Inf1P L6 Messwerte.jpg|thumb|left|450px|Abb. 2: Ausgabe der Entfernungswerte im seriellen Monitor]] | ||
<iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=98958e23-9c36-48cf-b912-af3c00601ce1&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe> | |||
</div> | </div> | ||
---- | |||
=== Aufgabe 6.3: IR Sensorcharakterisierung === | === Aufgabe 6.3: IR Sensorcharakterisierung === | ||
# Zeichnen Sie die gemessene Entfernung im Verhältnis zu einer Referenz auf. Die | # 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 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? | # Zeichnen Sie die Auflösung über dem Messbereich auf. Welche Empfindlichkeit hat Ihr Sensor? | ||
'''Nützliche Befehle''': <code> | '''Nützliche Befehle''': <code>analogRead(), Serial.println()</code> | ||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>IR_Sensorcharakterisierung.pdf</code> | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
'''Tipps:''' | '''Tipps:''' | ||
'''Messbereich:''' Sie messen auf ein Ziel in verschiedenen Distanzen und zeichnen auf x die Referenz und auf y die Anzeige Ihres Systems. | |||
Minimalbeispiel: | |||
{| class="wikitable" | |||
|- | |||
| '''WW/cm'''|| '''MW/cm''' | |||
|- | |||
| 3|| 3,2 | |||
|- | |||
| 10|| 9,7 | |||
|- | |||
| 15|| 14,9 | |||
|- | |||
| 20|| 20,1 | |||
|- | |||
| 80|| 79,0 | |||
|- | |||
|} | |||
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:''' [https://de.wikipedia.org/wiki/Aufl%C3%B6sung_(Messtechnik)] | |||
* Welche Auswirkung hat D=700 zu D=699 auf die Ausgangsgröße d? | |||
* Tragen Sie diese Werte gegeneinander auf ergibt sich eine Kurve. | |||
* Im Nachbereich haben wir eine Auflösung von weniger als 1 mm und bei 70 cm Entfernung macht ein Inkrement 3 cm aus. Die Kurve beschreibt alle Zwischengrößen. | |||
* Erkenntnis: Mit der Entfernung sinkt die Auflösung und somit steigt die Messunsicherheit. | |||
Minimalbeispiel: | |||
{| class="wikitable" | |||
|- | |||
| '''<math>a_D</math>'''|| '''<math>a_d</math>/cm''' | |||
|- | |||
| 700 - 699|| 0,02 | |||
|- | |||
| 699 - 698|| 0,02 | |||
|- | |||
| ..|| .. | |||
|- | |||
| 21-20|| 2,5 | |||
|- | |||
|} | |||
'''Empfindlichkeit:''' [https://de.wikipedia.org/wiki/Empfindlichkeit_(Technik)] | |||
* 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. | |||
</div> | </div> | ||
---- | |||
=== Aufgabe 6.4: Median-Filter === | === Aufgabe 6.4: Median-Filter === | ||
# Ausreißer lassen sich gut mit einem Median-Filter entfernen. Ein Beispielvideo finden Sie in diesem [Sharp_GP2Y0A41SK0F#Median-Filter_f%C3%BCr_die_St%C3%B6rungen|Artikel | # Ausreißer lassen sich gut mit einem Median-Filter entfernen. Ein Beispielvideo finden Sie in diesem [[Sharp_GP2Y0A41SK0F#Median-Filter_f%C3%BCr_die_St%C3%B6rungen|Artikel]]. | ||
# Schreiben Sie die Funktion <code> | # Schreiben Sie die Funktion <code>int MedianFilter(int Messwert_s16)</code>. Diese Funktion soll über einen statischen 5 Werte Ringspeicher ([https://de.wikipedia.org/wiki/First_In_%E2%80%93_First_Out first in first out, FIFO]) verfügen. Der erste Wert wird gelöscht, die nachfolgenden Werte rutschen einen auf und der neue Messwert (<code>Messwert_s32</code>) nimmt Platz 5 ein. | ||
# Sortieren Sie die 5 Werte nach Größe z. B. <code>2,2,4,1,2</code> wird zu <code>1,2,2,2,4</code>. Nutzen Sie hierfür die Funktionen aus <code>DemoSortiereArray</code> | # Sortieren Sie die 5 Werte nach Größe z. B. <code>2,2,4,1,2</code> wird zu <code>1,2,2,2,4</code>. Nutzen Sie hierfür die Funktionen aus <code>DemoSortiereArray</code> | ||
# Geben Sie als Rückgabewert <code>SortiertesArray[3]</code> zurück. | # Geben Sie als Rückgabewert die Mitte des Arrays <code>SortiertesArray[3]</code> zurück. | ||
# Testen Sie die Funktion Ihrer Funktion mit Zufallszahlen im <code>void loop()</code> | # Testen Sie die Funktion Ihrer Funktion mit Zufallszahlen im <code>void loop()</code> | ||
Zeile 131: | Zeile 189: | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
''' | '''Lösungsansatz:''' [[Sharp_GP2Y0A41SK0F#Median-Filter_f%C3%BCr_die_St%C3%B6rungen| Median-Filter für die Störung]] | ||
{{#ev:youtube|https://youtu.be/6Nn4JlWXW0g | 720 | | Median - einfach erklärt - Lehrerschmidt |frame}} | |||
Ein '''Demo''' für die Implementierung eines Median-Filters finden Sie in [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoMedianFilter/DemoMedianFilter.ino SVN].<br> | |||
<iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=9a191917-b30a-4c06-a62c-af4300a369d4&autoplay=false&offerviewer=true&showtitle=true&showbrand=true&captions=false&interactivity=all" height="405" width="720" style="border: 1px solid #464646;" allowfullscreen allow="autoplay"></iframe> | |||
</div> | |||
---- | |||
=== Aufgabe 6.5: | === Aufgabe 6.5: Ergebnisbewertung und nachhaltige Doku === | ||
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | # Zeigen Sie das ungefilterte und das Median-gefilterte Signal im seriellen Plotter an. | ||
# Wurden die Messfehler entfernt? | |||
# Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | |||
* Wurden die Regeln für den Umgang mit SVN eingehalten? | * Wurden die Regeln für den Umgang mit SVN eingehalten? | ||
* Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | * Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | ||
Zeile 145: | Zeile 209: | ||
* Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm? | * Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm? | ||
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | '''Arbeitsergebnis''' in SVN: <code>SVN Log</code>, <code>IRMedianFilter.ino</code>, <code>Ergebnisbewertung.pdf</code> | ||
== Literatur == | == Literatur == | ||
Zeile 188: | Zeile 217: | ||
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212 kb)]] | # Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212 kb)]] | ||
# Sharp: ''GP2Y0A41SK0F''. URL: [https://de.farnell.com/sharp/gp2y0a41sk0f/distanzmesssensor/dp/1618431]. [[Medium:GP2Y0A41SK0F.pdf|Datenblatt (858 kb)]] | # Sharp: ''GP2Y0A41SK0F''. URL: [https://de.farnell.com/sharp/gp2y0a41sk0f/distanzmesssensor/dp/1618431]. [[Medium:GP2Y0A41SK0F.pdf|Datenblatt (858 kb)]] | ||
---- | ---- | ||
→ zurück zum Hauptartikel: [[ | → Termine [[Einführungsveranstaltung Informatikpraktikum 1|0]] [[Einarbeitung_in_die_Versionsverwaltung_SVN|1]] [[Einstieg_in_die_Welt_des_Arduino|2]] [[Arduino: Taster auswerten und LEDs ansteuern|3]] [[Arduino:_Sensoren_einlesen|4]] [[Arduino:_Infrarotsensor_einlesen|5]] [[Arduino:_Infrarotsensor_entstören|6]] [[Arduino:_Programmier-Challenge_I_WS_WS_24/25|7]] [[Arduino:_IR-Theremin|8]] [[Arduino:_Aktoren|9]] [[Arduino:_LCD_Display_mit_I2C_Schnittstelle|10]] [[Arduino:_Ultraschall_Entfernungsmessung|11]] [[Arduino:_Ultraschallsensor_entstören|12]] [[Arduino:_Temperaturmessung_mit_NTC_und_PTC|13]] [[Arduino:_Programmier-Challenge_II_WS_WS_24/25|14]]<br> | ||
→ zurück zum Hauptartikel: [[Arduino_Praxiseinstieg_WS_24/25|Arduino Praxiseinstieg]] |
Aktuelle Version vom 30. Oktober 2024, 12:08 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?
- Wurde der Quelltext durch Header und Kommentare aufgewertet?
- Wurden jedes Programm mittels PAP geplant?
- Wurde auf
magic numbers
verzichtet? - Wurde die Programmierrichtlinie eingehalten?
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
DemoSortiereArray
vertraut. - 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.
Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_06.pdf
Versuchsdurchführung
Aufgabe 6.1: Lernzielkontrolle
Präsentieren Sie Prof. Schneider das Ergebnis der Lernzielkontrolle.
Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_06.pdf
Aufgabe 6.2: Messwertanalyse
- Messen Sie die Zeit in Millisekunden (ms) mit dem Befehl
millis()
- Geben Sie die Zeit und Messdaten im seriellen Monitor mit 115200 Baud aus (z. B.
Zeit in ms : Entfernung in cm
1 : 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:
- DemoSharpIR.ino
- [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTableIR/DemoLookupTableIR.ino DemoLookupTableIR.ino
]
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
Tipps: Messbereich: Sie messen auf ein Ziel in verschiedenen Distanzen und zeichnen auf x die Referenz und auf y die Anzeige Ihres Systems. Minimalbeispiel:
WW/cm | MW/cm |
3 | 3,2 |
10 | 9,7 |
15 | 14,9 |
20 | 20,1 |
80 | 79,0 |
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: [1]
- Welche Auswirkung hat D=700 zu D=699 auf die Ausgangsgröße d?
- Tragen Sie diese Werte gegeneinander auf ergibt sich eine Kurve.
- Im Nachbereich haben wir eine Auflösung von weniger als 1 mm und bei 70 cm Entfernung macht ein Inkrement 3 cm aus. Die Kurve beschreibt alle Zwischengrößen.
- Erkenntnis: Mit der Entfernung sinkt die Auflösung und somit steigt die Messunsicherheit.
Minimalbeispiel:
/cm | |
700 - 699 | 0,02 |
699 - 698 | 0,02 |
.. | .. |
21-20 | 2,5 |
Empfindlichkeit: [2]
- Hier setzen Sie ins Verhältnis.
- Das sind die partiellen Ableitungen (Steigung) der Kennlinie in Abb. 8.
Aufgabe 6.4: 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,2
wird 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()
Arbeitsergebnisse in SVN: testeMedianFilter.ino
Lösungsansatz: Median-Filter für die Störung
Ein Demo für die Implementierung eines Median-Filters finden Sie in SVN.
Aufgabe 6.5: Ergebnisbewertung und nachhaltige Doku
- Zeigen Sie das ungefilterte und das Median-gefilterte Signal im seriellen Plotter an.
- Wurden die Messfehler entfernt?
- Sichern Sie alle Ergebnisse mit beschreibendem Text (
message
) in SVN.
- Wurden die Regeln für den Umgang mit SVN eingehalten?
- Wurde die Programmierrichtlinie eingehalten?
- Wurde nachhaltig dokumentiert?
- Haben die Programme einen Header?
- Wurden der Quelltext umfangreich kommentiert?
- Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm?
Arbeitsergebnis in SVN: SVN Log
, IRMedianFilter.ino
, Ergebnisbewertung.pdf
Literatur
- Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: HSHL-Bib, O'Reilly-URL
- Brühlmann, T.: Sensoren im Einsatz mit Arduino. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: HSHL-Bib, O'Reilly
- Snieders, R.: ARDUINO lernen. Nordhorn: 8. Auflage 2022. URL: https://funduino.de/vorwort
- Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)
- Sharp: GP2Y0A41SK0F. URL: [3]. Datenblatt (858 kb)
→ Termine 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
→ zurück zum Hauptartikel: Arduino Praxiseinstieg