AlphaBot: MATLAB als serieller Monitor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 52: Zeile 52:
'''Arbeitsergebnisse''' in SVN: <code>zeigeArduinoDaten.pap, zeigeArduinoDaten.m</code>
'''Arbeitsergebnisse''' in SVN: <code>zeigeArduinoDaten.pap, zeigeArduinoDaten.m</code>


=== Aufgabe 3.2: Datensimulation mit MATLAB<sup>®</sup> ===
=== Aufgabe 3.2: Inbetriebnahme des AlphaBot ===
# 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 <code>statische Messunsicherheit.ino</code>. Jeder Messsatz sollte >100 Messwerte umfassen.
# Arbeiten Sie sich anhand des [[AlphaBot|Wiki-Artikels]] in den AlphaBot ein. Beachten Sie besonders die Ausrichtung der Akkus. '''ACHTUNG BRANDGEFAHR!'''
# Nutzen Sie das Programm <code>Putty</code>, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>Ultraschallmessung.txt</code> zu speichern.
# Binden Sie die AlphaBot Bibliothek nach [[Erste_Schritte_mit_der_Arduino_IDE|Anleitung]] in die Arduino IDE ein.
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
# Machen Sie sich mit <code>E23_RGB_LED</code> vertraut, so dass Sie jede Zeile erläutern können.
# Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit dar.
# Am Analogport <code>A0</code> ist das Potentiometer des Erweiterungsborts angeschlossen. Nutzen Sie das Potentiometer, um die Blinkfrequenz der RGB LED zu verändern.
# Berechnen Sie Mittelwert und Standardabweichung und stellen Sie diese dar,
# Stellen Sie den Wert des Potentiometers an <code>A0</code> in MATLAB<sup>®</sup> live dar.
# Beschriften Sie die Graphen.


'''Nützlich MATLAB®-Befehle:''' <code>mean, std, xline</code>
'''Arbeitsergebnisse:''' <code>testeLichtschranke.ino, zeigePotiWert.m</code>


'''Arbeitsergebnisse''' in SVN: <code>statische Messunsicherheit.ino, Ultraschallmessung.txt, zeigeUltraschallMessung.m</code>
'''Demos:''' E23, E24


=== Aufgabe 3.3: Gleitendes Mittelwertfilter in mit MATLAB<sup>®</sup> ===
=== Aufgabe 3.3: AlphaBot Ultraschall ===
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
# Machen Sie sich mit dem Demon <code>E05_Ultraschall_Entfernungsmessung<code> vertraut, so dass Sie jede Zeile erläutern können.
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter()</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
# Lesen Sie die Messwerte des Ulrtraschallsensors aus.
# Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
# Stellen Sie den Wert des Ultraschallsensors in MATLAB<sup>®</sup> live dar.
# 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: <code>testeGleitendesMittelwert.ino</code>
'''Lernzielkontrollfragen:'''
* An welchen Pins sind <code>Trigger</code> und <code>Echo</code> angeschlossen? Wie lässt sich das anpassen?
* Was ist ein Interrupt und wozu dient er?
* Wozu dient die Funktion attachInterrupt()?
* Was ist bei der Verwendung von Interrupts zu beachten?


'''Hinweis:'''
'''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, zeigeUltraschall.m</code>
* Nutzen Sie das FIFO aus Aufgabe 6.4.
* Die Formel für das gleitende Mittelwertfilter lautet: <math>\bar{x}(k)=\frac{x(1)+x(2)+\ldots+x(k)}{k}</math> für k Messwerte
<div class="mw-collapsible mw-collapsed">


Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.<br>
'''Demo:''' E05
* Gleitendes Mittelwertfilter: 19&thinsp;m 52&thinsp;s
* Tiefpassfilter: 29&thinsp;m
<iframe key="panopto" path="/Panopto/Pages/Viewer.aspx?id=fce4a806-dcbf-4e92-b10d-ac69013d7cb1&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>


=== Aufgabe 3.4: Nachhaltige Doku ===
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* Halten Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] und die [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]] ein.
* Versehen Sie jedes Programm mit einem Header ([[Header Beispiel für MATLAB]], [[Header Beispiel für C]]).
* Kommentiere Sie den Quelltext umfangreich.


'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert]
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
</div>


=== Aufgabe 11.4: Rekursives Tiefpassfilter in MATLAB<sup>®</sup> ===
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 <code>TiefpassFilter().m</code>, 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 <math>\alpha</math> anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
'''Arbeitsergebnisse''' in SVN: <code>testeTiefpassFilter.m</code>
'''Hinweis:'''
* Die Formel für das Tiefpassfilter lautet: <math>\bar{x}(k)=\alpha \cdot \bar{x}(k-1)+ (1-\alpha)\cdot x(k)</math> für den aktuellen Messwert <math>x(k)</math>.
* <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>.
<div class="mw-collapsible mw-collapsed">
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
</div>
=== Aufgabe 11.5: Dynamische Messunsicherheit ===
* Zeigen Sie das ungefilterte und das Tiefpass-gefilterte Signal in MATLAB® an. Messen Sie auf ein Ziel im gesamten Messbereich (2 cm - 4 m - 2 cm). 
* Wurde das Signalrauschen geglättet?
* Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Wurden die Regeln für den Umgang mit SVN eingehalten?
* Wurde die [[Medium:Programmierrichtlinie.pdf|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: <code>SVN Log</code>, <code>USTiefpassFilter.ino</code>, <code>Ergebnisbewertung.pdf</code>
== Bewertung ==
{| class="wikitable"
|-
| '''Aufgabe'''|| '''Punkte'''
|-
| 11.1|| 2
|-
| 11.2|| 2
|-
| 11.3|| 2
|-
| 11.4|| 2
|-
| 11.5|| 2
|-
|}


== Tutorials ==
== Tutorials ==
* [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Arduino: Using the Serial Plotter Tool]
* [[Erste_Schritte_mit_der_Arduino_IDE|Erste Schritte mit der Arduino IDE]]
* [[https://wiki.hshl.de/wiki/index.php/Arduino:_Interrupts|Arduino: Interrupts]]
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [https://funduino.de/nr-10-entfernung-messen Funduino: Entfernungen mit einem HC-SR04 Ultraschallsensor am Arduino messen]




== Demos ==
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert/DemoGleitenderMittelwert.ino SVN: DemoGleitenderMittelwert.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: E05_Ultraschall_Entfernungsmessung]  
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED  SVN: E23_RGB_LED]
 
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E24_Servo_Knop E24_Servo_Knop]
<!--
* [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/DemoLookupTable/DemoLookupTable.ino DemoLookupTable.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoLookupTable/DemoLookupTableIR.ino DemoLookupTableIR.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoUnterfunktion/DemoUnterfunktion.ino DemoUnterfunktion.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSizeOfArray/DemoSizeOfArray.ino DemoSizeOfArray.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoSortiereArray/DemoSortiereArray.ino DemoSortiereArray.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoMedianFilter/DemoMedianFilter.ino DemoMedianFilter]
-->
 
== Literatur ==
# Brühlmann, T.: ''Arduino Praxiseinstieg''. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=125816&query_desc=kw%2Cwrdl%3A%20arduino HSHL-Bib], [https://learning.oreilly.com/library/view/arduino-praxiseinstieg/9783747500569/ O'Reilly-URL]
# Brühlmann, T.: ''Sensoren im Einsatz mit Arduino''. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=130719&query_desc=kw%2Cwrdl%3A%20Br%C3%BChlmann HSHL-Bib], [https://learning.oreilly.com/library/view/sensoren-im-einsatz/9783958451520/?ar O'Reilly]
# Snieders, R.: ''ARDUINO lernen''. Nordhorn: 8. Auflage 2022. URL: [https://funduino.de/vorwort https://funduino.de/vorwort]
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212&thinsp;kb)]]




----
----
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]

Version vom 24. März 2023, 09:34 Uhr

Abb. 1: Lernset - Einsteiger Kit für Arduino

Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester

Aufgabenstatus: In Bearbeitung

Inhalt

  • Statische und dynamische Messung mit dem Ultraschallsensor
  • Nutzung von MATLAB® als seriellen Monitor.
  • Programmierung und Anwendung eines gleitenden Mittelwertfilters

Lernziele

Nach Durchführung dieser Lektion

  • können Sie Debug-Daten speichern und via MATLAB® visualisieren.
  • können Sie direkt MATLAB® als seriellen Monitor nutzen.
  • können Sie Entfernungen mit dem Ultraschall-Sensor messen.
  • können Sie Messwerte in Echtzeit filtern.
  • können Sie Software mit einem PAP planen.

Versuchsdurchführung

Aufgabe 3.1: MATLAB® als serieller Monitor

  1. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
  2. Planen Sie als ersten Schritt das MATLAB®-Programm als PAP.
  3. Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
  4. Nutzen Sie das Demo DemoDebug2MATLAB im SVN-Verzeichnis.

Nützlich MATLAB®-Befehle: fopen, feof, fgetl, strfind, isempty, plot, xlabel, ylabel, legend

Arbeitsergebnisse in SVN: zeigeArduinoDaten.pap, zeigeArduinoDaten.m

Aufgabe 3.2: Inbetriebnahme des AlphaBot

  1. Arbeiten Sie sich anhand des Wiki-Artikels in den AlphaBot ein. Beachten Sie besonders die Ausrichtung der Akkus. ACHTUNG BRANDGEFAHR!
  2. Binden Sie die AlphaBot Bibliothek nach Anleitung in die Arduino IDE ein.
  3. Machen Sie sich mit E23_RGB_LED vertraut, so dass Sie jede Zeile erläutern können.
  4. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  5. Am Analogport A0 ist das Potentiometer des Erweiterungsborts angeschlossen. Nutzen Sie das Potentiometer, um die Blinkfrequenz der RGB LED zu verändern.
  6. Stellen Sie den Wert des Potentiometers an A0 in MATLAB® live dar.

Arbeitsergebnisse: testeLichtschranke.ino, zeigePotiWert.m

Demos: E23, E24

Aufgabe 3.3: AlphaBot Ultraschall

  1. Machen Sie sich mit dem Demon E05_Ultraschall_Entfernungsmessung vertraut, so dass Sie jede Zeile erläutern können.
  2. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  3. Lesen Sie die Messwerte des Ulrtraschallsensors aus.
  4. Stellen Sie den Wert des Ultraschallsensors in MATLAB® live dar.

Lernzielkontrollfragen:

  • An welchen Pins sind Trigger und Echo angeschlossen? Wie lässt sich das anpassen?
  • Was ist ein Interrupt und wozu dient er?
  • Wozu dient die Funktion attachInterrupt()?
  • Was ist bei der Verwendung von Interrupts zu beachten?

Arbeitsergebnisse in SVN: messeUltraschall.ino, zeigeUltraschall.m

Demo: E05

Aufgabe 3.4: Nachhaltige Doku

Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.

Arbeitsergebnis in SVN: SVN Log


Tutorials


Demos



→ zurück zum Hauptartikel: Informatik Praktikum 2