AlphaBot: Hardware Support Package für MATLAB: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „Kategorie:Arduino Kategorie:AlphaBot thumb|rigth|450px|Abb. 1: MATLAB<sup>®</sup> als serieller Monitor {|class="wikitable" |- | '''Autor:''' || Prof. Dr.-Ing. Schneider |- | '''Modul:''' || Praxismodul II, MTR-B-2-2.11 |- | '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester |} == Inhalt == * Nutzung von MATLAB<sup>®</sup> als seriellen Monitor. * In…“ |
|||
| (24 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 28: | Zeile 28: | ||
* Entfernungen mit dem Ultraschall-Sensor messen. | * Entfernungen mit dem Ultraschall-Sensor messen. | ||
* Messwerte in Echtzeit filtern. | * 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 <code>Add-Ons</code> das <code>Get Hardware Support Packages</code> aus. | |||
** Installieren Sie das <code>MATLAB Support Package für Arduino Hardware</code>. | |||
* Verbinden Sie Arduino und PC via USB. | |||
* 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. | |||
== 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 = | ||
== Aufgabe 2.1: MATLAB<sup>®</sup> als serieller Monitor == | == Aufgabe 2.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. | ||
# | # Verbinden Sie den Arduino mit dem PC via USB. | ||
# Greifen Sie hierzu auf die serielle Schnittstelle zu | # Greifen Sie hierzu auf die serielle Schnittstelle zu. | ||
# | # Stellen Sie sicher, das die [[AlphaBot_Accessory_Shield|Multisensorerweiterung]] auf dem Alphabot steckt. | ||
# | # Drehen Sie, während der Messung am Potentiometer und Visualisieren Sie die Spannung über der Zeit an <code>A0</code>. | ||
'''Nützlich MATLAB<sup>®</sup>-Befehle:''' <code> | '''Nützlich MATLAB<sup>®</sup>-Befehle:''' <code>arduino, tic, toc, readVoltage, plot, xlabel, ylabel, legend</code> | ||
'''Arbeitsergebnisse''' in SVN: <code>lesePoti.m</code> | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Musterlösung </strong> | | <strong>Musterlösung </strong> | ||
|- | |- | ||
| < | | <source line lang="matlab" style="font-size:medium">clear all; close all; clc; % Initialisierung | ||
disp('Verbindung wird hergestellt...') | |||
hArduino = arduino('COM5','Uno') % Arduino Objekt erzeugen | |||
figure % Grafik vorbereiten | |||
h = plot(0,0) | |||
tic % Timer starten | |||
for i=1:100 | |||
Spannung(i)= readVoltage(hArduino,'A0'); % Spannung messen | |||
Zeit(i) = toc; % Zeit messen | |||
set(h,'XData',Zeit,'YData',Spannung); % Werte live anzeigen | |||
pause(0.1) % in s | |||
end | |||
clear hArduino | |||
</source> | |||
|} | |} | ||
| Zeile 68: | Zeile 76: | ||
# 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 | # Machen Sie sich mit der [[AlphaBot_Accessory_Shield|Multisensorerweiterung]] vertraut. | ||
# | # Lesen Sie den Taster des Joysticks ein (<code>A4</code>). | ||
# | # Zeigen Sie den Spannungswert über der Zeit während der Messung an. | ||
# | # 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. | |||
''' | '''Arbeitsergebnisse:''' <code>leseJoystick.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Tipp 1 </strong> | | <strong>Tipp 1 </strong> | ||
|- | |- | ||
| | | | ||
* Messen Sie den Arbeitsbereich des Potis aus. | * Messen Sie den Arbeitsbereich des Potis aus. | ||
* | * 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> | |||
|} | |} | ||
| Zeile 107: | Zeile 97: | ||
== Aufgabe 2.3: AlphaBot Ultraschall == | == Aufgabe 2.3: AlphaBot Ultraschall == | ||
# | # Messen Sie auf ein ebenes statisches Ziel in ca. 30 cm Entfernung. | ||
# Lesen Sie für 10 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 | # Zeigen Sie die Distanzwerte in cm über der Zeit live während der Messung an. | ||
# | # 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>. | |||
'''Arbeitsergebnisse''' in SVN: <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> | | <strong>Teillösung </strong> | ||
|- | |- | ||
| | | <source line lang="matlab" style="font-size:medium">clear all; close all; clc; % Initialisierung | ||
hArduino = arduino('COM8','Uno','Libraries','Ultrasonic'); % Arduino Objekt erzeugen | |||
hUltraschall = ultrasonic(hArduino,'D2','D3','OutputFormat','double') | |||
nMesswerte = 100; | |||
%% Messschleife | |||
tic | |||
writeDigitalPin(hArduino, 'D13', 1); | |||
for i=1:nMesswerte | |||
Distanz(i) = readDistance(hUltraschall); | |||
Zeit(i) = toc; | |||
end | |||
writeDigitalPin(hArduino, 'D13', 0); | |||
%% Ergebnisdarstellung | |||
plot(Zeit,Distanz*100,'r.-'); | |||
xlabel('Zeit in s') | |||
ylabel('Distanz in cm') | |||
clear hArduino | |||
</source> | |||
|} | |} | ||
---- | ---- | ||
== Aufgabe 2.4: Glättung der Ultraschallmessung == | == Aufgabe 2.4: Glättung der Ultraschallmessung == | ||
# Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3, um die Messwerte | # Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3 (<code>Ultraschall.mat</code>), um die Messwerte zu glätten. | ||
# Vergleichen Sie die Ergebnisse | # 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). | |||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>filtereUltraschall.m</code> | ||
'''Lernzielkontrollfragen:''' | '''Lernzielkontrollfragen:''' | ||
| Zeile 145: | Zeile 147: | ||
| <strong>Tipp 1 </strong> | | <strong>Tipp 1 </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> | |||
|} | |} | ||
---- | ---- | ||
| Zeile 164: | Zeile 167: | ||
= 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 171: | Zeile 175: | ||
---- | ---- | ||
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|1]] [[AlphaBot: | → Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|1]] [[AlphaBot:_Hardware_Support_Package_für_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> | ||
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]] | → zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]] | ||
Version vom 3. April 2025, 16:53 Uhr

| 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-OnsdasGet Hardware Support Packagesaus. - Installieren Sie das
MATLAB Support Package für Arduino Hardware.
- Verbinden Sie Arduino und PC via USB.
- Bringen Sie mit dem
Geräte-Managerden 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
- Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
- Verbinden Sie den Arduino mit dem PC via USB.
- Greifen Sie hierzu auf die serielle Schnittstelle zu.
- Stellen Sie sicher, das die Multisensorerweiterung auf dem Alphabot steckt.
- 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
| Musterlösung |
clear all; close all; clc; % Initialisierung
disp('Verbindung wird hergestellt...')
hArduino = arduino('COM5','Uno') % Arduino Objekt erzeugen
figure % Grafik vorbereiten
h = plot(0,0)
tic % Timer starten
for i=1:100
Spannung(i)= readVoltage(hArduino,'A0'); % Spannung messen
Zeit(i) = toc; % Zeit messen
set(h,'XData',Zeit,'YData',Spannung); % Werte live anzeigen
pause(0.1) % in s
end
clear hArduino
|
Aufgabe 2.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 der Multisensorerweiterung vertraut.
- Lesen Sie den Taster des Joysticks ein (
A4). - Zeigen Sie den Spannungswert über der Zeit während der Messung an.
- Lesen Sie das Potentiometer ein (
A0). - Bei Tasterdruck ertönt der Summer an
D11. - Regeln Sie mit dem Potentiometers die Lautstärke des Summers.
Arbeitsergebnisse: leseJoystick.m
| Tipp 1 |
|
Aufgabe 2.3: AlphaBot Ultraschall
- Messen Sie auf ein ebenes statisches Ziel in ca. 30 cm Entfernung.
- Lesen Sie für 10 s die Messwerte des Ultraschallsensor ein [1].
- Zeigen Sie die Distanzwerte in cm über der Zeit live während der Messung an.
- Fehlmessungen (
inf) dürfen nicht angezeigt werden. - Speichern Sie die Aergebnis-Arrays
ZeitundDistanzin der DateiUltraschall.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
| Teillösung |
clear all; close all; clc; % Initialisierung
hArduino = arduino('COM8','Uno','Libraries','Ultrasonic'); % Arduino Objekt erzeugen
hUltraschall = ultrasonic(hArduino,'D2','D3','OutputFormat','double')
nMesswerte = 100;
%% Messschleife
tic
writeDigitalPin(hArduino, 'D13', 1);
for i=1:nMesswerte
Distanz(i) = readDistance(hUltraschall);
Zeit(i) = toc;
end
writeDigitalPin(hArduino, 'D13', 0);
%% Ergebnisdarstellung
plot(Zeit,Distanz*100,'r.-');
xlabel('Zeit in s')
ylabel('Distanz in cm')
clear hArduino
|
Aufgabe 2.4: Glättung der Ultraschallmessung
- Nutzen Sie Ihre Ergebnisse aus Aufgabe 2.3 (
Ultraschall.mat), um die Messwerte zu glätten. - Lesen Sie zyklisch die Daten aus der Datei
Ultraschall.mat. - 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).
Arbeitsergebnisse in SVN: 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, rekursivesMedianFilter und TiefpassFilter.m.Diese finden Sie im Demo-Ordner: |
Aufgabe 2.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
Rekursive Filter in MATLAB®- SVN:
DemoDebug2MATLAB - SVN:
E05_Ultraschall_Entfernungsmessung - SVN:
E23_RGB_LED - SVN:
E34_lesePoti
→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2