AlphaBot: Hardware Support Package für MATLAB: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(26 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 11: Zeile 11:
|}
|}


 
= Inhalt =
== Inhalt ==
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Inbetriebnahme des AlphaBot
* Inbetriebnahme des AlphaBot
Zeile 29: Zeile 28:
* Messwerte in Echtzeit filtern.
* Messwerte in Echtzeit filtern.
= Versuchsvorbereitung =
= Versuchsvorbereitung =
* Das MATLAB Support Package für Arduino Hardware muss unter MATLAB installiert werden
* Das [https://de.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware MATLAB Support Package für Arduino Hardware] muss unter MATLAB installiert werden
** Starten Sie MATLAB
** Starten Sie MATLAB
** Wählen Sie unter <code>Add-Ons</code> das <code>Get Hardware Support Packages</code> aus.
** Wählen Sie unter <code>Add-Ons</code> das <code>Get Hardware Support Packages</code> aus.
Zeile 36: Zeile 35:
* Bringen Sie mit dem <code>Geräte-Manager</code> den COM-Port des Arduino in Erfahrung.
* Bringen Sie mit dem <code>Geräte-Manager</code> den COM-Port des Arduino in Erfahrung.
* Testen Sie die Verbindung mit <code>>> h = arduino('COM5','Uno')</code> für Ihren COM-Port.
* Testen Sie die Verbindung mit <code>>> h = arduino('COM5','Uno')</code> für Ihren COM-Port.
= Warnung =
[[Datei:Warnung2.png|rahmenlos|50px|links]]<br>
Der AlphaBot verwendet sehr viele Sensoren, daher sind Ports mehrfach verwendet. Es kann somit zu '''Komplikationen''' kommen. Entfernen Sie einfach die Steckbrücken der Mehrfachbelegung.


= Versuchsdurchführung =
= Versuchsdurchführung =
Zeile 66: Zeile 69:
</source>
</source>
|}
|}
----
== Aufgabe 2.2: Inbetriebnahme des AlphaBot ==
== Aufgabe 2.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!'''
# 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.
# 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.
# Machen Sie sich mit der [[AlphaBot_Accessory_Shield|Multisensorerweiterung]] vertraut.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Lesen Sie den Taster des Joysticks ein (<code>A4</code>).
# 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.  
# Zeigen Sie den Spannungswert über der Zeit während der Messung an.
# Stellen Sie den Wert des Potentiometers an <code>A0</code> in MATLAB<sup>®</sup> live dar.
# Lesen Sie das Potentiometer ein (<code>A0</code>).
# Bei Tasterdruck ertönt der Summer an <code>D11</code>.
# Regeln Sie mit dem Potentiometers die Lautstärke des Summers.


'''Lernzielkontrollfragen:'''
'''Arbeitsergebnisse:''' <code>leseJoystick.m</code>
* 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>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
| <strong>Tipp 1&thinsp;</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/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.
* 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.
* Skalieren Sie die Poti-Werte auf die Lautstärke.
 
* Nützliche Befehle: <code>aduino, figure, plot, xlabel, ylabel, tic, toc, readVoltage, set, if..else, playTone</code>
|}
|}
----
== Aufgabe 2.3: AlphaBot Ultraschall ==
== Aufgabe 2.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.
# Messen Sie auf ein ebenes statisches Ziel in ca. 30&thinsp;cm Entfernung.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Lesen Sie für 10&thinsp;s die Messwerte des Ultraschallsensor ein [https://de.mathworks.com/help/matlab/supportpkg/arduinoio.ultrasonic.html?searchHighlight=arduino+matlab+ultrasonic&s_tid=srchtitle_support_results_2_arduino+matlab+ultrasonic].
# Lesen Sie die Messwerte des Ultraschallsensors aus.
# Zeigen Sie die Distanzwerte in cm über der Zeit live während der Messung an.
# Stellen Sie den Wert des Ultraschallsensors in MATLAB<sup>®</sup> live dar.
# Fehlmessungen (<code>inf</code>) dürfen nicht angezeigt werden.
 
# Speichern Sie die Aergebnis-Arrays <code>Zeit</code> und <code>Distanz</code> in der Datei <code>Ultraschall.mat</code>.
'''Lernzielkontrollfragen:'''
* An welchen Pins sind <code>Trigger</code> und <code>Echo</code> angeschlossen? Wie lässt sich das anpassen?


'''Arbeitsergebnisse''' in SVN: <code>messeUltraschall.ino, zeigeUltraschall.m</code>
'''Arbeitsergebnisse''' in SVN: <code>leseUltraschall.m, Ultraschall.mat</code>


* Nützliche Befehle: <code>aduino, figure, plot, xlabel, ylabel, tic, toc, readDistance, set, if..else, isinf, save, clear</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
| <strong>Teillösung&thinsp;</strong>
|-
|-
| Nutzen Sie das Demo E05 sowie Ihre Skripte <code>seriellerMonitor.m</code> und <code>leseArduinoDaten.m</code>.
| <source line lang="matlab" style="font-size:medium">clear all; close all; clc; % Initialisierung
|'''Hilfreiche Links''':
hArduino = arduino('COM8','Uno','Libraries','Ultrasonic'); % Arduino Objekt erzeugen
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]
hUltraschall = ultrasonic(hArduino,'D2','D3','OutputFormat','double')
|-
nMesswerte = 100;
| 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.
%% Messschleife
|-
tic
| 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.
for i=1:nMesswerte
    Distanz(i) = readDistance(hUltraschall);
    Zeit(i)    = toc;
end
 
%% Ergebnisdarstellung
plot(Zeit,Distanz*100,'r.-');
xlabel('Zeit in s')
ylabel('Distanz in cm')
clear hArduino
</source>
|}
|}
== Aufgabe 2.4: Glättung der Ultraschallmessung ==
# Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3 (<code>Ultraschall.mat</code>), um die Messwerte zu glätten.
# Lesen Sie zyklisch die Daten aus der Datei <code>Ultraschall.mat</code>.
# Filtern Sie die Daten zyklisch mit einem gleitenden Mittelwertfilter, einem rekursiven Medianfilter und einem rekursiven Tiefpassfilter.
# Vergleichen Sie die Ergebnisse der Filter in einem Plot mit Achsenbeschriftung und Legende anhand technischer Kriterien (Rauschunterdrückung, Verzögerung, Ausreisserfilterung, Programmieraufwand).


----
== Aufgabe 2.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>
'''Arbeitsergebnisse''' in SVN: <code>filtereUltraschall.m</code>


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
Zeile 149: Zeile 137:
| <strong>Tipp 1&thinsp;</strong>
| <strong>Tipp 1&thinsp;</strong>
|-
|-
| Nutzen Sie Ihre Funktionen <code>GleitendesMittelwertFilter.m</code> und <code>TiefpassFilter.m</code>.
| Nutzen Sie Ihre Funktionen <code>GleitendesMittelwertFilter.m</code>, <code>rekursivesMedianFilter</code> und <code>TiefpassFilter.m</code>.<br>
Diese finden Sie im Demo-Ordner: <code>https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/MATLAB/Filter</code>
|}
|}
----
== Aufgabe 2.5: Nachhaltige Doku ==
== Aufgabe 2.5: Nachhaltige Doku ==
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
Zeile 168: Zeile 155:


= Demos =
= Demos =
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/MATLAB/Filter <code>Rekursive Filter in MATLAB<sup>®</sup></code>]
* [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/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoDebug2MATLAB SVN: <code>DemoDebug2MATLAB</code>]
* [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/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]  
Zeile 175: Zeile 163:


----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|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 SoSe25|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe25|11]]<br>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|1]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|2]] [[AlphaBot: Servo_mit_MATLAB_ansteuern|3]] [[AlphaBot:_Motoren_und_Inkrementalgeber|4]] [[AlphaBot: Programmier-Challenge I SoSe25|5]] [[AlphaBot:_Gesteuerte_Geradeausfahrt|6]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|7]] [[AlphaBot: Parklücke suchen|8]] [[AlphaBot: Autonomes Einparken|9]] [[AlphaBot: Programmier-Challenge II SoSe25|10]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]

Aktuelle Version vom 14. Mai 2025, 20:46 Uhr

Abb. 1: MATLAB® als serieller Monitor
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul II, MTR-B-2-2.11
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.

Versuchsvorbereitung

  • Das MATLAB Support Package für Arduino Hardware muss unter MATLAB installiert werden
    • Starten Sie MATLAB
    • Wählen Sie unter Add-Ons das Get Hardware Support Packages aus.
    • Installieren Sie das MATLAB Support Package für Arduino Hardware.
  • Verbinden Sie Arduino und PC via USB.
  • Bringen Sie mit dem Geräte-Manager den COM-Port des Arduino in Erfahrung.
  • Testen Sie die Verbindung mit >> h = arduino('COM5','Uno') für Ihren COM-Port.

Warnung


Der AlphaBot verwendet sehr viele Sensoren, daher sind Ports mehrfach verwendet. Es kann somit zu Komplikationen kommen. Entfernen Sie einfach die Steckbrücken der Mehrfachbelegung.

Versuchsdurchführung

Aufgabe 2.1: MATLAB® als serieller Monitor

  1. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
  2. Verbinden Sie den Arduino mit dem PC via USB.
  3. Greifen Sie hierzu auf die serielle Schnittstelle zu.
  4. Stellen Sie sicher, das die Multisensorerweiterung auf dem Alphabot steckt.
  5. Drehen Sie, während der Messung am Potentiometer und Visualisieren Sie die Spannung über der Zeit an A0.

Nützlich MATLAB®-Befehle: arduino, tic, toc, readVoltage, plot, xlabel, ylabel, legend

Arbeitsergebnisse in SVN: lesePoti.m

Aufgabe 2.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 der Multisensorerweiterung vertraut.
  4. Lesen Sie den Taster des Joysticks ein (A4).
  5. Zeigen Sie den Spannungswert über der Zeit während der Messung an.
  6. Lesen Sie das Potentiometer ein (A0).
  7. Bei Tasterdruck ertönt der Summer an D11.
  8. Regeln Sie mit dem Potentiometers die Lautstärke des Summers.

Arbeitsergebnisse: leseJoystick.m

Aufgabe 2.3: AlphaBot Ultraschall

  1. Messen Sie auf ein ebenes statisches Ziel in ca. 30 cm Entfernung.
  2. Lesen Sie für 10 s die Messwerte des Ultraschallsensor ein [1].
  3. Zeigen Sie die Distanzwerte in cm über der Zeit live während der Messung an.
  4. Fehlmessungen (inf) dürfen nicht angezeigt werden.
  5. Speichern Sie die Aergebnis-Arrays Zeit und Distanz in der Datei Ultraschall.mat.

Arbeitsergebnisse in SVN: leseUltraschall.m, Ultraschall.mat

  • Nützliche Befehle: aduino, figure, plot, xlabel, ylabel, tic, toc, readDistance, set, if..else, isinf, save, clear

Aufgabe 2.4: Glättung der Ultraschallmessung

  1. Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3 (Ultraschall.mat), um die Messwerte zu glätten.
  2. Lesen Sie zyklisch die Daten aus der Datei Ultraschall.mat.
  3. Filtern Sie die Daten zyklisch mit einem gleitenden Mittelwertfilter, einem rekursiven Medianfilter und einem rekursiven Tiefpassfilter.
  4. Vergleichen Sie die Ergebnisse der Filter in einem Plot mit Achsenbeschriftung und Legende anhand technischer Kriterien (Rauschunterdrückung, Verzögerung, Ausreisserfilterung, Programmieraufwand).


Arbeitsergebnisse in SVN: 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 2.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
→ zurück zum Hauptartikel: Informatik Praktikum 2