Arduino: Ultraschallsensor entstören: Unterschied zwischen den Versionen
Zeile 20: | Zeile 20: | ||
== Lernzielkontrolle == | == Lernzielkontrolle == | ||
# | # Welchen Messbereich hat Ihr Ultraschallsensor? | ||
# | # Welche Auflösung (t, s) hat Ihr Sensor? | ||
# Welche Messunsicherheit hat Ihr Sensor bei den Entfernungen | |||
# Wie nutzt man die Bibliothek <code>ArduinoSort</code>, um ein Array auszugeben und zu sortieren? | # 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 ein Median-Filter? Wie wird der Median berechnet? | ||
Zeile 29: | Zeile 30: | ||
# Wurde auf <code>magic numbers</code> verzichtet? | # Wurde auf <code>magic numbers</code> verzichtet? | ||
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | # Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | ||
== Vorbereitung == | == Vorbereitung == |
Version vom 5. Dezember 2022, 16:05 Uhr
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatikpraktikum 1, 1. Semester, Wintersemester
Inhalt
- Statische und dynamische Messung
- Kennlinienuntersuchung und Filterung
- Programmierung und Anwendung eines gleitenden Mittelwertfilters
- Programmierung und Anwendung eines gleitenden Tiefpassfilters
Lernziele
Nach Durchführung dieser Lektion
- können Sie die zufällige Sensorfehler erkennen und behandeln.
- können die Messwerte vergleichend anzeigen und bewerten.
- können Sie die Messwerte charakterisieren.
- können Sie ein gleitendes Mittelwertfilters erläutern und anwenden.
- können Sie ein Tiefpassfilter erläutern und anwenden.
Lernzielkontrolle
- Welchen Messbereich hat Ihr Ultraschallsensor?
- Welche Auflösung (t, s) hat Ihr Sensor?
- Welche Messunsicherheit hat Ihr Sensor bei den Entfernungen
- 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?
Vorbereitung
Bereiten Sie sich anhand der nachfolgenden Aufgaben auf den Praktikumstermin vor.
- Bereiten Sie Aufgabe 11.1 vor.
- Schreiben und testen Sie die Funktion
GleitendesMittelwertFilter()
. - Schreiben und testen Sie die Funktion
TiefpasstFilter()
. - Planen Sie alle Programme mit PAP.
Arbeitsergebnisse in SVN: PAP, charakterisiereUltraschaschallsensor.ino, USMessung.txt, charakterisiereUltraschallSensor.m, Lernzielkontrolle_Termin_11.pdf, GleitendesMittelwertFilter(), TiefpasstFilter()
Versuchsdurchführung
Aufgabe 11.1: Charakterisierung des Ultraschallsensors
- Schreiben Sie die Funktion
float messeUltraschallAbstand()
, welche eine Messung mit dem Ultraschallsensor durchführt und die Strecke in cm zurück gibt. - Zeichnen Sie die den Zeitstempel in s, die Signallaufzeit t in s und berechnete Entfernung s in cm in der Datei
Ultraschallmessung.txt
auf. Nutzen Sie hierzuPutty
. - Laden und visualisieren Sie die Messdaten in
Ultraschallmessung.txt
mit MATLAB®. - Stellen Sie in MATLAB® Entfernung s über der Laufzeit t dar. Beschriften Sie den Graphen.
- Bestimmen Sie messtechnisch die Empfindlichkeit E, die Auflösung von t und die daraus resultierende Auflösung von s.
- Dokumentieren Sie Ihre Ergebnisse
Lernzielkontrolle_Termin_11.pdf
Nützlich MATLAB®-Befehle: plot, xlabel, ylabel, legend, disp
Arbeitsergebnisse in SVN: charakterisiereUltraschaschallsensor.ino, USMessung.txt, charakterisiereUltraschallSensor.m, Lernzielkontrolle_Termin_11.pdf
Aufgabe 11.2: Statische Messunsicherheit
- Lesen Sie die Messwerte des Ultraschall-Sensors auf statische Ziele im gesamten Messbereich aus (10 cm, 20 cm, 50 cm, 1 m, 2 m, 3 m, 4 m). Schreiben Sie hierzu ein Arduino-Programm
statische Messunsicherheit.ino
. Jeder Messsatz sollte >100 Messwerte umfassen. - Nutzen Sie das Programm
Putty
, um die Daten der seriellen Schnittstelle in der ASCII-DateiUltraschallmessung.txt
zu speichern. - Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
- Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
- Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit dar.
- Berechnen Sie Mittelwert und Standardabweichung und stellen Sie diese dar,
- Beschriften Sie die Graphen.
Nützlich MATLAB®-Befehle: mean, std, xline
Arbeitsergebnisse in SVN: statische Messunsicherheit.ino, Ultraschallmessung.txt, zeigeUltraschallMessung.m
Aufgabe 11.3: Gleitendes Mittelwertfilter
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
- Schreiben Sie die Funktion
GleitendesMittelwertFilter()
, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet. - Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
- Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
- Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
- Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
Arbeitsergebnisse in SVN: testeGleitendesMittelwert.ino
Hinweis:
- Nutzen Sie das FIFO aus Aufgabe 6.4.
- Die Formel für das gleitende Mittelwertfilter lautet: für k Messwerte
Aufgabe 11.4: Rekursives Tiefpass-Filter
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
- Schreiben Sie die Funktion
TiefpassFilter()
, welches die Eingangswerte zyklisch filtert. Hier bei wird der Tiefpass berechnet. - Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
- Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
- Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
- Wählen Sie anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
Arbeitsergebnisse in SVN: testeTiefpassFilter.ino
Hinweis:
- Die Formel für das Tiefpassfilter lautet: für den aktuellen Messwert x(k).
- ist hierbei ein Filterparameter .
Aufgabe 11.5: Dynamische Messunsicherheit
- Zeigen Sie das ungefilterte und das Tiefpass-gefilterte Signal in MATLAB® an.
- Wurde das Signalrauschen geglättet?
- 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
, USTiefpassFilter.ino
, Ergebnisbewertung.pdf
Bewertung
Aufgabe | Punkte |
11.1 | 2 |
11.2 | 2 |
11.3 | 2 |
11.4 | 2 |
11.5 | 2 |
Tutorials
- Arduino: Using the Serial Plotter Tool
- HSHL-Wiki: Ultraschallsensor HC-SR04
- Funduino: Entfernungen mit einem HC-SR04 Ultraschallsensor am Arduino messen
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: [1]. Datenblatt (858 kb)
→ zurück zum Hauptartikel: Arduino Praxiseinstieg