AlphaBot: MATLAB als serieller Monitor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(67 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Datei:Lernset - Einsteiger Kit für Arduino.jpg|thumb|rigth|450px|Abb. 1: Lernset - Einsteiger Kit für Arduino]]
[[Kategorie:AlphaBot]]
[[Datei:Inf2P T2 AnimatedGif.gif|thumb|rigth|450px|Abb. 1: MATLAB<sup>®</sup> als serieller Monitor]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Modul:''' Praxismodul I<br>
'''Modul:''' Praxismodul I<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
'''Aufgabenstatus:''' In Bearbeitung


== Inhalt ==
== Inhalt ==
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Inbetriebnahme des AlphaBot
* Einbindung der Bibliotheken für den AlphaBot
* Auslesen eine Potentiometers
* Ansteuern einer RGB-LED
* Statische und dynamische Messung mit dem Ultraschallsensor
* Statische und dynamische Messung mit dem Ultraschallsensor
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Anwendung rekursiver Filter auf Echtzeitdaten
* Programmierung und Anwendung eines gleitenden Mittelwertfilters


== Lernziele==
== Lernziele==
Nach Durchführung dieser Lektion
Nach Durchführung dieser Lektion können Sie
* können Sie Debug-Daten speichern und via MATLAB® visualisieren.
* Debug-Daten speichern und via MATLAB<sup>®</sup> visualisieren.
* können Sie direkt MATLAB® als seriellen Monitor nutzen.
* direkt MATLAB<sup>®</sup> als seriellen Monitor nutzen.
* können Sie Entfernungen mit dem Ultraschall-Sensor messen.
* den AlphaBot sicher in Betrieb nehmen, das Potentiometer auslesen und eine RGB-LED ansteuern.
* können Sie Messwerte in Echtzeit filtern.
* Entfernungen mit dem Ultraschall-Sensor messen.
* können Sie Software mit einem PAP planen.
* Messwerte in Echtzeit filtern.
<!--
== Lernzielkontrolle ==
# Welchen Messbereich hat Ihr Ultraschallsensor?
# Welche Auflösung (t, s) hat Ihr Sensor?
# Welche Empfindlichkeit hat Ihr Sensor?
# Welche Messunsicherheit hat Ihr Sensor bei den Entfernungen 10 cm, 20 cm, 50 cm, 1 m, 2 m, 3 m und 4 m.
# Was ist ein gleitendes Mittelwertfilter? Wie wird es berechnet?
# Was ist ein rekursives Tiefpassfilter? Wie wird es berechnet?
# Wurde der Quelltext durch Header und Kommentare aufgewertet?
# Wurden jedes Programm mittels PAP geplant?
# Wurde auf <code>magic numbers</code> verzichtet?
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?


== Vorbereitung ==
Bereiten Sie sich anhand der nachfolgenden Aufgaben auf den Praktikumstermin vor.
# Bereiten Sie Anhand der [[Arduino:_Ultraschallsensor_entstören#Tutorials|Tutorials]] und [[Arduino:_Ultraschallsensor_entstören#Demos|Demos]]  Aufgabe 11.1 vor.
# Schreiben und testen Sie die Funktion <code>GleitendesMittelwertFilter()</code>.
# Schreiben und testen Sie die Funktion <code>TiefpasstFilter()</code>.
# Planen Sie alle Programme mit PAP.


'''Arbeitsergebnisse''' in SVN: <code>PAP, charakterisiereUltraschaschallsensor.ino, USMessung.txt, charakterisiereUltraschallSensor.m, Lernzielkontrolle_Termin_11.pdf, GleitendesMittelwertFilter(), TiefpasstFilter()</code>
-->
== Versuchsdurchführung ==
== Versuchsdurchführung ==
=== Aufgabe 2.1: MATLAB<sup>®</sup> als serieller Monitor ===
=== Aufgabe 3.1: MATLAB<sup>®</sup> als serieller Monitor ===
1. Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen.
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen.
2. Planen Sie als ersten Schritt das MATLAB<sup>®</sup>-Programm als PAP.
# Starten Sie als Datenquelle <code>messeEntfernung.ino</code> aus Aufgabe 1.2.
3. Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
# Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
4. Nutzen Sie das Demo <code>DemoDebug2MATLAB</code> im [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebugTxt2MATLAB SVN-Verzeichnis].
# Nutzen Sie das Demo <code>DemoDebug2MATLAB.m</code> im [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDebug2MATLAB/DemoDebug2MATLAB.ino SVN].
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.


'''Nützlich MATLAB<sup>®</sup>-Befehle:''' <code>fopen, feof, fgetl, strfind, isempty, plot, xlabel, ylabel, legend</code>
'''Nützlich MATLAB<sup>®</sup>-Befehle:''' <code>fopen, feof, fgetl, strfind, isempty, plot, xlabel, ylabel, legend</code>


'''Arbeitsergebnisse''' in SVN: <code>zeigeArduinoDaten.pap, zeigeArduinoDaten.m</code>
'''Arbeitsergebnisse''' in SVN: <code>seriellerMonitor.m</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie das Demo <code>DemoDebug2MATLAB</code> und passen Sie dieses an.
|}


=== Aufgabe 2.2: Datensimulation mit MATLAB<sup>®</sup> ===
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
# 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.
| <strong>Tipp 2&thinsp;</strong>
# Nutzen Sie das Programm <code>Putty</code>, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>Ultraschallmessung.txt</code> zu speichern.  
|-
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
| # Behandeln Sie <code>readline(src)</code> für Header und Daten getrennt.
# Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
# Lesen Sie den Header ein und speichern Sie diesen in <code>src.UserData.stXLabel, src.UserData.stYLabel</code>.
# Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit dar.
# Trennen Sie die Daten am Semikolon mit <code>split(stText,";")</code>.
# Berechnen Sie Mittelwert und Standardabweichung und stellen Sie diese dar,
# Initialisieren Sie den Plot einmalig und füllen Sie die neuen Daten mit <code>set</code>.
# Beschriften Sie die Graphen.
# Sichern Sie die Daten einmalig mit <code>save</code> in <code>Messdaten.mat</code>.
|}


'''Nützlich MATLAB®-Befehle:''' <code>mean, std, xline</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung&thinsp;</strong>
|-
| <iframe key="panopto" path="/Panopto/Pages/Embed.aspx?id=e1bdcb99-4590-4636-8226-afd400e8b3e2&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>
|}


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


=== Aufgabe 2.3: Gleitendes Mittelwertfilter in mit MATLAB<sup>®</sup> ===
=== Aufgabe 3.2: Inbetriebnahme des AlphaBot ===
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
# Arbeiten Sie sich anhand des [[AlphaBot|Wiki-Artikels]] in den AlphaBot ein. Beachten Sie besonders die Ausrichtung der Akkus. '''ACHTUNG BRANDGEFAHR!'''
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter()</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
# Binden Sie die AlphaBot Bibliothek nach [[Erste_Schritte_mit_der_Arduino_IDE|Anleitung]] in die Arduino IDE ein.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
# Machen Sie sich mit dem Demo <code>E23_RGB_LED.ino</code> vertraut, so dass Sie jede Zeile erläutern können.
# Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
# Am Analogport <code>A0</code> ist das Potentiometer des Erweiterungsborts angeschlossen. Nutzen Sie das Potentiometer, um die Blinkfrequenz der RGB-LED im Bereich 0&thinsp;s..1&thinsp;s zu verändern.  
# Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
# Stellen Sie den Wert des Potentiometers an <code>A0</code> in MATLAB<sup>®</sup> live dar.


'''Arbeitsergebnisse''' in SVN: <code>testeGleitendesMittelwert.ino</code>
'''Lernzielkontrollfragen:'''
* Wie funktioniert eine RGB-LED?
* Welches sind die Parameter des [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraums]?
* Wie stellt man bei einer RGB-LED die Farbe ein?
* Wie bekommt man eine RGB-LED zum Blinken?
* Wie funktioniert ein Potentiometer?
* Wie liest man die Stellung eines Potentiometers aus?


'''Hinweis:'''
'''Arbeitsergebnisse:''' <code>steuereRGBLED.ino, zeigePotiWert.m</code>
* Nutzen Sie das FIFO aus Aufgabe 6.4.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
* 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
| <strong>Tipp 1&thinsp;</strong>
<div class="mw-collapsible mw-collapsed">
|-
|
* Nutzen Sie das Demos E23 und E34 und fassen Sie diese zusammen.
* Nutzen Sie Ihr Programm <code>seriellerMonitor.m</code>, um die Daten anzuzeigen.
|'''Hilfreiche Links''':
* [https://de.wikipedia.org/wiki/Leuchtdiode#RGB-LED Wikipedia: RGB-LED]
* [https://de.wikipedia.org/wiki/HSV-Farbraum Wikipedia: HSV-Farbraum]
* [https://de.wikipedia.org/wiki/Potentiometer Wikipedia: Potentiometer]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED  SVN: <code>E23_RGB_LED</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>]
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 2&thinsp;</strong>
|-
|
* Messen Sie den Arbeitsbereich des Potis aus.
* Nutzen Sie den <code>map</code>-Befehl und skalieren Sie die Poti-Werte auf die Helligheit 0..1.


Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.<br>
|}
* 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>


----


'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert]
=== Aufgabe 3.3: AlphaBot Ultraschall ===
</div>
# Machen Sie sich mit dem Demo <code>E05_Ultraschall_Entfernungsmessung.ino</code> vertraut, so dass Sie jede Zeile erläutern können.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Lesen Sie die Messwerte des Ultraschallsensors aus.
# Stellen Sie den Wert des Ultraschallsensors in MATLAB<sup>®</sup> live dar.


=== Aufgabe 11.4: Rekursives Tiefpassfilter in MATLAB<sup>®</sup> ===
'''Lernzielkontrollfragen:'''
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
* An welchen Pins sind <code>Trigger</code> und <code>Echo</code> angeschlossen? Wie lässt sich das anpassen?
# 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>
'''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, zeigeUltraschall.m</code>


'''Hinweis:'''
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
* 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>.
| <strong>Tipp 1&thinsp;</strong>
* <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>.
|-
<div class="mw-collapsible mw-collapsed">
| Nutzen Sie das Demo E05 sowie Ihre Skripte <code>seriellerMonitor.m</code> und <code>leseArduinoDaten.m</code>.
|'''Hilfreiche Links''':
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]
|-
| Beachten Sie bitte die Jumper A-G. Dieser verbinden die Sensoren und Aktoren mit dem Arduino. Die [[AlphaBot_Accessory_Shield|Multisensorerweiterung]] nutzt ggf. dieselben IO-Anschlüsse. Für diese Aufgabe können Sie bei Doppeltbelegung die Multisensorerweiterung abziehen und vorsichtig zur Seite legen.
|-
| Wenn der serielle Monitor offen ist, kann der Arduino Uno nicht mit der Arduino IDE 2.0.4 programmiert werden. Schließen Sie zum Hochladen den Monitor.
|}


'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
----
</div>


=== Aufgabe 11.5: Dynamische Messunsicherheit ===
=== Aufgabe 3.4: Glättung der Ultraschallmessung ===
* 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). 
# Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3, um die Messwerte in Echtzeit zu glätten.
* Wurde das Signalrauschen geglättet?
# Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters in einem Plot mit Achsenbeschriftung und Legende.
* 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>
'''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, filtereUltraschall.m</code>


== Bewertung ==
'''Lernzielkontrollfragen:'''
{| class="wikitable"
# Wurde das Signalrauschen geglättet?
|-
# Ist das gefilterte Signal verzögert?
| '''Aufgabe'''|| '''Punkte'''
# Welchen Einfluss haben die Filterparameter?
|-
# Wie verhalten sich die gefilterten Signal bei Ausreißern?
| 11.1|| 2
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
|-
| <strong>Tipp 1&thinsp;</strong>
| 11.2|| 2
|-
| 11.3|| 2
|-
| 11.4|| 2
|-
| 11.5|| 2
|-
|-
| Nutzen Sie Ihre Funktionen <code>GleitendesMittelwertFilter.m</code> und <code>TiefpassFilter.m</code>.
|}
|}
----
=== Aufgabe 3.5: 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.
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>


== Tutorials ==
== Tutorials ==
* [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter Arduino: Using the Serial Plotter Tool]
* [[AlphaBot|Erste Schritte mit dem AlphaBot]]
* [[Erste_Schritte_mit_der_Arduino_IDE|Erste Schritte mit der Arduino IDE]]
* [[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/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDebug2MATLAB SVN: <code>DemoDebug2MATLAB</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]  
 
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED  SVN: <code>E23_RGB_LED</code>]
<!--
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>]
* [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)]]




----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]

Aktuelle Version vom 23. April 2024, 06:27 Uhr

Abb. 1: MATLAB® als serieller Monitor

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

Inhalt

  • Nutzung von MATLAB® als seriellen Monitor.
  • Inbetriebnahme des AlphaBot
  • Einbindung der Bibliotheken für den AlphaBot
  • Auslesen eine Potentiometers
  • Ansteuern einer RGB-LED
  • Statische und dynamische Messung mit dem Ultraschallsensor
  • Anwendung rekursiver Filter auf Echtzeitdaten

Lernziele

Nach Durchführung dieser Lektion können Sie

  • Debug-Daten speichern und via MATLAB® visualisieren.
  • direkt MATLAB® als seriellen Monitor nutzen.
  • den AlphaBot sicher in Betrieb nehmen, das Potentiometer auslesen und eine RGB-LED ansteuern.
  • Entfernungen mit dem Ultraschall-Sensor messen.
  • Messwerte in Echtzeit filtern.


Versuchsdurchführung

Aufgabe 3.1: MATLAB® als serieller Monitor

  1. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
  2. Starten Sie als Datenquelle messeEntfernung.ino aus Aufgabe 1.2.
  3. Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
  4. Nutzen Sie das Demo DemoDebug2MATLAB.m im SVN.
  5. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.

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

Arbeitsergebnisse in SVN: seriellerMonitor.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 dem Demo E23_RGB_LED.ino 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 im Bereich 0 s..1 s zu verändern.
  6. Stellen Sie den Wert des Potentiometers an A0 in MATLAB® live dar.

Lernzielkontrollfragen:

  • Wie funktioniert eine RGB-LED?
  • Welches sind die Parameter des HSV-Farbraums?
  • Wie stellt man bei einer RGB-LED die Farbe ein?
  • Wie bekommt man eine RGB-LED zum Blinken?
  • Wie funktioniert ein Potentiometer?
  • Wie liest man die Stellung eines Potentiometers aus?

Arbeitsergebnisse: steuereRGBLED.ino, zeigePotiWert.m


Aufgabe 3.3: AlphaBot Ultraschall

  1. Machen Sie sich mit dem Demo E05_Ultraschall_Entfernungsmessung.ino 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 Ultraschallsensors 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?

Arbeitsergebnisse in SVN: messeUltraschall.ino, zeigeUltraschall.m


Aufgabe 3.4: Glättung der Ultraschallmessung

  1. Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3, um die Messwerte in Echtzeit zu glätten.
  2. Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters in einem Plot mit Achsenbeschriftung und Legende.

Arbeitsergebnisse in SVN: messeUltraschall.ino, filtereUltraschall.m

Lernzielkontrollfragen:

  1. Wurde das Signalrauschen geglättet?
  2. Ist das gefilterte Signal verzögert?
  3. Welchen Einfluss haben die Filterparameter?
  4. Wie verhalten sich die gefilterten Signal bei Ausreißern?

Aufgabe 3.5: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos



→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2