AlphaBot: MATLAB als serieller Monitor: Unterschied zwischen den Versionen
(→Demos) |
|||
(63 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino]] | [[Kategorie:Arduino]] | ||
[[Datei: | [[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> | ||
== 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 | ||
* | * Anwendung rekursiver Filter auf Echtzeitdaten | ||
== Lernziele== | == Lernziele== | ||
Nach Durchführung dieser Lektion | Nach Durchführung dieser Lektion können Sie | ||
* | * Debug-Daten speichern und via MATLAB<sup>®</sup> visualisieren. | ||
* | * direkt MATLAB<sup>®</sup> 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 == | == Versuchsdurchführung == | ||
=== Aufgabe 3.1: MATLAB<sup>®</sup> als serieller Monitor === | === Aufgabe 3.1: MATLAB<sup>®</sup> als serieller Monitor === | ||
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen. | # Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen. | ||
# | # Starten Sie als Datenquelle <code>messeEntfernung.ino</code> aus Aufgabe 1.2. | ||
# 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. | ||
# Nutzen Sie das Demo <code>DemoDebug2MATLAB</code> im [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/ | # Nutzen Sie das Demo <code>DemoDebug2MATLAB.m</code> im [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebug2MATLAB 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> | '''Arbeitsergebnisse''' in SVN: <code>seriellerMonitor.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </strong> | |||
|- | |||
| Nutzen Sie das Demo <code>DemoDebug2MATLAB</code> und passen Sie dieses an. | |||
|} | |||
== | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
# | | <strong>Tipp 2 </strong> | ||
# | |- | ||
# | | # Behandeln Sie <code>readline(src)</code> für Header und Daten getrennt. | ||
# Lesen Sie den Header ein und speichern Sie diesen in <code>src.UserData.stXLabel, src.UserData.stYLabel</code>. | |||
# | # Trennen Sie die Daten am Semikolon mit <code>split(stText,";")</code>. | ||
# Initialisieren Sie den Plot einmalig und füllen Sie die neuen Daten mit <code>set</code>. | |||
# Sichern Sie die Daten einmalig mit <code>save</code> in <code>Messdaten.mat</code>. | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Musterlösung </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> | |||
|} | |||
---- | |||
=== Aufgabe 3. | === Aufgabe 3.2: Inbetriebnahme des AlphaBot === | ||
# Arbeiten Sie sich anhand des [[AlphaBot|Wiki-Artikels]] in den AlphaBot ein. Beachten Sie besonders die Ausrichtung der Akkus. '''ACHTUNG BRANDGEFAHR!''' | |||
# | # Binden Sie die AlphaBot Bibliothek nach [[Erste_Schritte_mit_der_Arduino_IDE|Anleitung]] in die Arduino IDE ein. | ||
# | # Machen Sie sich mit dem Demo <code>E23_RGB_LED.ino</code> vertraut, so dass Sie jede Zeile erläutern können. | ||
# | # Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es. | ||
# Am Analogport <code>A0</code> 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. | |||
# | # Stellen Sie den Wert des Potentiometers an <code>A0</code> in MATLAB<sup>®</sup> live dar. | ||
''' | '''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? | |||
''' | '''Arbeitsergebnisse:''' <code>steuereRGBLED.ino, zeigePotiWert.m</code> | ||
* Nutzen Sie das | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
* | | <strong>Tipp 1 </strong> | ||
< | |- | ||
| | |||
* 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/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED SVN: <code>E23_RGB_LED</code>] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>] | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 2 </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. | |||
|} | |||
---- | |||
=== Aufgabe 3.3: AlphaBot Ultraschall === | |||
</ | # 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. | |||
'''Lernzielkontrollfragen:''' | |||
* An welchen Pins sind <code>Trigger</code> und <code>Echo</code> angeschlossen? Wie lässt sich das anpassen? | |||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, zeigeUltraschall.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </strong> | |||
|- | |||
| 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/AlphaBot/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. | |||
|} | |||
---- | |||
=== Aufgabe | === Aufgabe 3.4: Glättung der Ultraschallmessung === | ||
# Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3, um die Messwerte in Echtzeit zu glätten. | |||
# Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters in einem Plot mit Achsenbeschriftung und Legende. | |||
''' | '''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, filtereUltraschall.m</code> | ||
'''Lernzielkontrollfragen:''' | |||
# Wurde das Signalrauschen geglättet? | |||
# Ist das gefilterte Signal verzögert? | |||
# Welchen Einfluss haben die Filterparameter? | |||
# Wie verhalten sich die gefilterten Signal bei Ausreißern? | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </strong> | |||
|- | |||
| | |||
|- | |- | ||
| 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 == | ||
* [ | * [[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]] | ||
== Demos == | == Demos == | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/ | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebug2MATLAB SVN: <code>DemoDebug2MATLAB</code>] | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/ | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>] | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED SVN: <code>E23_RGB_LED</code>] | |||
< | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>] | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/ | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/ | |||
---- | ---- | ||
→ 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 28. April 2023, 11:02 Uhr
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
- Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
- Starten Sie als Datenquelle
messeEntfernung.ino
aus Aufgabe 1.2. - Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
- Nutzen Sie das Demo
DemoDebug2MATLAB.m
im SVN. - 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
Tipp 1 |
Nutzen Sie das Demo DemoDebug2MATLAB und passen Sie dieses an.
|
Tipp 2 |
# Behandeln Sie readline(src) für Header und Daten getrennt.
|
Musterlösung |
Aufgabe 3.2: Inbetriebnahme des AlphaBot
- Arbeiten Sie sich anhand des Wiki-Artikels in den AlphaBot ein. Beachten Sie besonders die Ausrichtung der Akkus. ACHTUNG BRANDGEFAHR!
- Binden Sie die AlphaBot Bibliothek nach Anleitung in die Arduino IDE ein.
- Machen Sie sich mit dem Demo
E23_RGB_LED.ino
vertraut, so dass Sie jede Zeile erläutern können. - Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
- 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. - 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
Tipp 1 | |
|
Hilfreiche Links: |
Tipp 2 |
|
Aufgabe 3.3: AlphaBot Ultraschall
- Machen Sie sich mit dem Demo
E05_Ultraschall_Entfernungsmessung.ino
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® live dar.
Lernzielkontrollfragen:
- An welchen Pins sind
Trigger
undEcho
angeschlossen? Wie lässt sich das anpassen?
Arbeitsergebnisse in SVN: messeUltraschall.ino, zeigeUltraschall.m
Tipp 1 | |
Nutzen Sie das Demo E05 sowie Ihre Skripte seriellerMonitor.m und leseArduinoDaten.m .
|
Hilfreiche Links: |
Beachten Sie bitte die Jumper A-G. Dieser verbinden die Sensoren und Aktoren mit dem Arduino. Die 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. |
Aufgabe 3.4: Glättung der Ultraschallmessung
- Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3, um die Messwerte in Echtzeit zu glätten.
- 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:
- Wurde das Signalrauschen geglättet?
- Ist das gefilterte Signal verzögert?
- Welchen Einfluss haben die Filterparameter?
- Wie verhalten sich die gefilterten Signal bei Ausreißern?
Tipp 1 |
Nutzen Sie Ihre Funktionen GleitendesMittelwertFilter.m und TiefpassFilter.m .
|
Aufgabe 3.5: Nachhaltige Doku
Sichern Sie alle Ergebnisse mit beschreibendem Text (message
) in SVN.
- Halten Sie die Regeln für den Umgang mit SVN ein.
- Halten Sie die Programmierrichtlinie für C und die Programmierrichtlinien für MATLAB® 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: SVN Log
Tutorials
- Erste Schritte mit dem AlphaBot
- Erste Schritte mit der Arduino IDE
- HSHL-Wiki: Ultraschallsensor HC-SR04
Demos
→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2