AlphaBot: Servo mit MATLAB ansteuern: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 27: | Zeile 27: | ||
= Versuchsdurchführung = | |||
== Aufgabe 3.1: Ultraschall als Umfeldscanner == | |||
# '''Voreinstellungen am AlphaBot''': Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12. | # '''Voreinstellungen am AlphaBot''': Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12. | ||
# Machen Sie sich mit dem Demo [https://de.mathworks.com/help/matlab/supportpkg/arduinoio-rotate-a-servo-motor.html Rotate a servo motor] vertraut, so dass Sie jede Zeile erläutern können. | # Machen Sie sich mit dem Demo [https://de.mathworks.com/help/matlab/supportpkg/arduinoio-rotate-a-servo-motor.html Rotate a servo motor] vertraut, so dass Sie jede Zeile erläutern können. | ||
# Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°. | # Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°. | ||
# Messen Sie pro 5 ° die Ultraschallentfernung. | # Messen Sie pro 5 ° die Ultraschallentfernung. | ||
| Zeile 44: | Zeile 43: | ||
'''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.m</code> | '''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.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> | ||
| Zeile 56: | Zeile 49: | ||
|Umrechnung der Koordinaten polar→kartesisch:<br> <math> x = r\cdot cos(\alpha)</math> <br><math> y = r\cdot sin(\alpha)</math> | |Umrechnung der Koordinaten polar→kartesisch:<br> <math> x = r\cdot cos(\alpha)</math> <br><math> y = r\cdot sin(\alpha)</math> | ||
|} | |} | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong> | | <strong>Musterlösung </strong> | ||
|- | |- | ||
| | | <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung | ||
if ~exist('hArduino') % Besteht die Verbindung zum Arduino bereits? | |||
hArduino = arduino('COM5','Uno','Libraries',{'Ultrasonic','Servo'}); % Arduino Objekt erzeugen | |||
hUltraschall = ultrasonic(hArduino,'D7','D8','OutputFormat','double') | |||
hServo = servo(hArduino, 'D9', 'MinPulseDuration', 1e-3, 'MaxPulseDuration', 2e-3); | |||
else | |||
clear x y % Darstellung löschen | |||
end | |||
%% Variablen initialisieren | |||
Winkel = 0; % Winkel in deg | |||
j=0; | |||
%% Ergebnisdarstellung vorbereiten | |||
figure; | |||
hold on | |||
hPlot = plot(0,0,'r.'); | |||
xlabel('x in cm') | |||
ylabel('y in cm') | |||
%% Messung | |||
while 1 % Endlosschleife | |||
writePosition(hServo, Winkel/180); % Servo drehen | |||
Distanz = inf; | |||
while isinf(Distanz) | |||
pause(0.5) % Zeit zum Drehung/Messen | |||
Distanz = readDistance(hUltraschall)*100 % Messung in cm | |||
end | |||
j=j+1; | |||
x(j) = Distanz*cosd(Winkel); % Umrechnung in kartesische Koordinaten | |||
y(j) = Distanz*sind(Winkel); | |||
set(hPlot,'XData',x,'YData',y); % Darstellung | |||
== | if Winkel <=0 % Drehrichtung anpassen | ||
nInkrement = 5; | |||
elseif Winkel >=180 | |||
nInkrement = -5; | |||
end | |||
Winkel = Winkel + nInkrement % Winkel errechnen | |||
end | |||
</source> | |||
|} | |} | ||
== Aufgabe 3.2: 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. | ||
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein. | * Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein. | ||
| Zeile 158: | Zeile 102: | ||
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | '''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | ||
= Tutorials = | |||
* [[AlphaBot|Erste Schritte mit dem AlphaBot]] | * [[AlphaBot|Erste Schritte mit dem AlphaBot]] | ||
* [[Erste_Schritte_mit_der_Arduino_IDE|Erste Schritte mit der Arduino IDE]] | * [[Erste_Schritte_mit_der_Arduino_IDE|Erste Schritte mit der Arduino IDE]] | ||
| Zeile 166: | Zeile 110: | ||
* [[AlphaBot_Accessory_Shield| HSHL-Wiki: AlphaBot Multisensorerweiterung]] | * [[AlphaBot_Accessory_Shield| HSHL-Wiki: AlphaBot Multisensorerweiterung]] | ||
* [[AlphaBot Uno Plus| HSHL-Wiki: Übersicht des AlphaBot Uno Plus]] | * [[AlphaBot Uno Plus| HSHL-Wiki: Übersicht des AlphaBot Uno Plus]] | ||
---- | ---- | ||
→ Termine [[ | → 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

| Autor: | Prof. Dr.-Ing. Schneider |
| Modul: | Praxismodul II, MTR-B-2-2.11 |
| Lehrveranstaltung: | Mechatronik, Informatik Praktikum 2, 2. Semester |
Inhalt
- Nutzung von MATLAB® zur Kommunikation mit dem AlphaBot.
- Ansteuerung des Servomotors
- 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: Ultraschall als Umfeldscanner
- Voreinstellungen am AlphaBot: Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12.
- Machen Sie sich mit dem Demo Rotate a servo motor vertraut, so dass Sie jede Zeile erläutern können.
- Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°.
- Messen Sie pro 5 ° die Ultraschallentfernung.
- Filtern Sie die Ultraschallentfernung mit dem vielversprechendsten Filter aus Aufgabe 2.4.
- Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
- Rechnen Sie die Polarkoordinaten (
fWinkel,fEntfernung) in kartesische Koordinaten (x, y) um. - Stellen Sie die Messpunkte zyklisch dar (vgl. Abb. 1).
Lernzielkontrollfragen:
- An welchen Arduino-Pins ist der Servo (
S1) angeschlossen?
Arbeitsergebnisse in SVN: UltraschallScanner.m
| Tipp 1 |
| Umrechnung der Koordinaten polar→kartesisch: |
| Musterlösung |
close all; clc; % Initialisierung
if ~exist('hArduino') % Besteht die Verbindung zum Arduino bereits?
hArduino = arduino('COM5','Uno','Libraries',{'Ultrasonic','Servo'}); % Arduino Objekt erzeugen
hUltraschall = ultrasonic(hArduino,'D7','D8','OutputFormat','double')
hServo = servo(hArduino, 'D9', 'MinPulseDuration', 1e-3, 'MaxPulseDuration', 2e-3);
else
clear x y % Darstellung löschen
end
%% Variablen initialisieren
Winkel = 0; % Winkel in deg
j=0;
%% Ergebnisdarstellung vorbereiten
figure;
hold on
hPlot = plot(0,0,'r.');
xlabel('x in cm')
ylabel('y in cm')
%% Messung
while 1 % Endlosschleife
writePosition(hServo, Winkel/180); % Servo drehen
Distanz = inf;
while isinf(Distanz)
pause(0.5) % Zeit zum Drehung/Messen
Distanz = readDistance(hUltraschall)*100 % Messung in cm
end
j=j+1;
x(j) = Distanz*cosd(Winkel); % Umrechnung in kartesische Koordinaten
y(j) = Distanz*sind(Winkel);
set(hPlot,'XData',x,'YData',y); % Darstellung
if Winkel <=0 % Drehrichtung anpassen
nInkrement = 5;
elseif Winkel >=180
nInkrement = -5;
end
Winkel = Winkel + nInkrement % Winkel errechnen
end
|
Aufgabe 3.2: 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
- HSHL-Wiki: Servomotor SG90
- HSHL-Wiki: Übersicht der AlphaBot Steckbrücken
- HSHL-Wiki: AlphaBot Multisensorerweiterung
- HSHL-Wiki: Übersicht des AlphaBot Uno Plus
→ Termine 1 2 3 4 5 6 7 8 9 10
→ zurück zum Hauptartikel: Informatik Praktikum 2