AlphaBot: Servo mit MATLAB ansteuern: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 20: Zeile 20:
== Lernziele==
== Lernziele==
Nach Durchführung dieser Lektion können Sie
Nach Durchführung dieser Lektion können Sie
* Debug-Daten speichern und via MATLAB<sup>®</sup> visualisieren.
* den Servo des AlphaBot mit MATLAB<sup>®</sup> ansteuern.
* direkt MATLAB<sup>®</sup> als seriellen Monitor nutzen.
* Entfernungen mit dem Ultraschall-Sensor mit MATLAB<sup>®</sup> messen.
* den AlphaBot sicher in Betrieb nehmen, das Potentiometer auslesen und eine RGB-LED ansteuern.
* Entfernungen mit dem Ultraschall-Sensor messen.
* Messwerte in Echtzeit filtern.
* Messwerte in Echtzeit filtern.
* Messwerte und Filterergebnisse in MATLAB<sup>®</sup> visualisieren.
* Polarkoordinaten in karthesische Koordinaten transformieren.
* Messwerten (x-y) räumlich anzeigen.


== Lernzielkontrolle ==
* Wie stecke ich den Ultraschallsensor ein?
* Welche Messfehler weist ein Ultraschallsensor auf?
* Wie funktioniert ein Ultraschallsensor technisch?
* Wieso ist nach Ansteuern einer Servo-Position eine Pause hilfreich?
* Wieso "zappelt" der Servo manchmal?


== Versuchsdurchführung ==
= Versuchsvorbereitung =
* Arbeiten Sie sich anhand der Tutorials mit der Hardware [[AlphaBot|Alphabot]], [[Servomotor_SG90|Servo]] und [[Ultraschallsensor_HC-SR04|Ultraschall]] vertraut.
* Beachten Sie besonders die Ausrichtung der Akkus. '''ACHTUNG BRANDGEFAHR!'''
* Machen Sie sich mit den [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/MATLAB/Filter MATLAB<sup>®</sup>-Demos] vertraut.
* Umrechnung der Koordinaten polar→kartesisch vertraut.


=== Aufgabe 3.1: Ultraschall als Umfeldscanner ===
= Warnung =
{|
|-
| [[Datei:Warnung2.png|rahmenlos|50px|links]] ||
* 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.
* Schützen Sie den Ultraschallsensor vor Verpolung! Beachten Sie die Beschriftung.
* Falls der Ultraschallsensor keine vernünftigen Werte liefert, versorgen Sie diesen zusätzlich über die Akkus.
|}
 
= 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.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# 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&thinsp;° die Ultraschallentfernung.  
# Messen Sie pro 5&thinsp;° die Ultraschallentfernung.  
Zeile 55: Zeile 76:
|-
|-
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
fMinPulsDauer = 0.5e-3; % 0,5 ms für SG-90 Linksanschlag -90°
fMaxPulsDauer = 2.5e-3; % 2,5 ms für SG-90 Rechtsanschlag +90°
if ~exist('hArduino') % Besteht die Verbindung zum Arduino bereits?
if ~exist('hArduino') % Besteht die Verbindung zum Arduino bereits?
     hArduino    = arduino('COM5','Uno','Libraries',{'Ultrasonic','Servo'}); % Arduino Objekt erzeugen
     hArduino    = arduino('COM5','Uno','Libraries',{'Ultrasonic','Servo'}); % Arduino Objekt erzeugen
     hUltraschall = ultrasonic(hArduino,'D7','D8','OutputFormat','double')
     hUltraschall = ultrasonic(hArduino,'D11','D12','OutputFormat','double')
     hServo      = servo(hArduino, 'D9', 'MinPulseDuration', 1e-3, 'MaxPulseDuration', 2e-3);
     hServo      = servo(hArduino, 'D9', 'MinPulseDuration', fMinPulsDauer , 'MaxPulseDuration', fMaxPulsDauer);
else
else
     clear x y % Darstellung löschen
     clear x y % Darstellung löschen
end
end
%% Variablen initialisieren
%% Variablen initialisieren
nSweeps = 3; % Anzahl Durchläufe
Winkel = 0; % Winkel in deg
j=0;
%% Ergebnisdarstellung vorbereiten
%% Ergebnisdarstellung vorbereiten
figure;
figure;
Zeile 71: Zeile 95:
ylabel('y in cm')
ylabel('y in cm')
%% Messung
%% Messung
for i=1:nSweeps
while 1 % Endlosschleife
     disp(['Sweep ',num2str(i),' gestartet.'])
     writePosition(hServo, Winkel/180);           % Servo drehen
    j=0;
    Distanz = inf;
    for Winkel = 0:0.5:180
    while isinf(Distanz)
        writePosition(hServo, Winkel/180);       % Servo drehen      
        pause(0.5)                              % Zeit zum Drehung/Messen
        Distanz = inf;
        Distanz = readDistance(hUltraschall)*100 % Messung in cm
        while isinf(Distanz)
    end
            pause(0.5)                              % Zeit zum Drehung/Messen
    j=j+1;
            Distanz = readDistance(hUltraschall)*100 % Messung in cm
    x(j) = Distanz*cosd(Winkel);                 % Umrechnung in kartesische Koordinaten
        end
    y(j) = Distanz*sind(Winkel);
        j=j+1;
    set(hPlot,'XData',x,'YData',y);             % Darstellung
        x(j) = Distanz*cosd(Winkel);             % Umrechnung in kartesische Koordinaten
 
        y(j) = Distanz*sind(Winkel);
    if Winkel <=0                                % Drehrichtung anpassen
        set(hPlot,'XData',x,'YData',y);           % Darstellung
        nInkrement = 5;
    elseif Winkel >=180
        nInkrement = -5;
     end
     end
    Winkel = Winkel + nInkrement                % Winkel errechnen
end
end
</source>
</source>
|}
|}


=== Aufgabe 3.2: Nachhaltige Doku ===
== 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 99: Zeile 126:
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>


== Tutorials ==
= 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 107: Zeile 134:
* [[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]]
== [[Datei:Lektionen.jpg|60px]] Ausblick zur nächsten Lektion ==
In der nächsten Lektion werden die Antriebsmotoren des AlphaBot angesteuert und die Inkrementalgeber ausgelesen.




----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|2]] [[AlphaBot: Servo_mit_MATLAB_ansteuernn|3]] [[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>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2026|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|3]] [[AlphaBot: Servo_mit_MATLAB_ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe26|6]] [[AlphaBot:_Gesteuerte_Geradeausfahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|10]] [[AlphaBot: Autonomes Einparken|11]] [[AlphaBot: Programmier-Challenge II SoSe26|12]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe26|Informatik Praktikum 2]]<br>
→ Haben Sie Fragen? [[Informatik Praktikum FAQ]]

Aktuelle Version vom 30. April 2026, 14:48 Uhr

Abb. 1: Ultraschall zur Objekterkennung
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

  • den Servo des AlphaBot mit MATLAB® ansteuern.
  • Entfernungen mit dem Ultraschall-Sensor mit MATLAB® messen.
  • Messwerte in Echtzeit filtern.
  • Messwerte und Filterergebnisse in MATLAB® visualisieren.
  • Polarkoordinaten in karthesische Koordinaten transformieren.
  • Messwerten (x-y) räumlich anzeigen.

Lernzielkontrolle

  • Wie stecke ich den Ultraschallsensor ein?
  • Welche Messfehler weist ein Ultraschallsensor auf?
  • Wie funktioniert ein Ultraschallsensor technisch?
  • Wieso ist nach Ansteuern einer Servo-Position eine Pause hilfreich?
  • Wieso "zappelt" der Servo manchmal?

Versuchsvorbereitung

  • Arbeiten Sie sich anhand der Tutorials mit der Hardware Alphabot, Servo und Ultraschall vertraut.
  • Beachten Sie besonders die Ausrichtung der Akkus. ACHTUNG BRANDGEFAHR!
  • Machen Sie sich mit den MATLAB®-Demos vertraut.
  • Umrechnung der Koordinaten polar→kartesisch vertraut.

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.
  • Schützen Sie den Ultraschallsensor vor Verpolung! Beachten Sie die Beschriftung.
  • Falls der Ultraschallsensor keine vernünftigen Werte liefert, versorgen Sie diesen zusätzlich über die Akkus.

Versuchsdurchführung

Aufgabe 3.1: Ultraschall als Umfeldscanner

  1. Voreinstellungen am AlphaBot: Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12.
  2. Machen Sie sich mit dem Demo Rotate a servo motor vertraut, so dass Sie jede Zeile erläutern können.
  3. Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°.
  4. Messen Sie pro 5 ° die Ultraschallentfernung.
  5. Filtern Sie die Ultraschallentfernung mit dem vielversprechendsten Filter aus Aufgabe 2.4.
  6. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
  7. Rechnen Sie die Polarkoordinaten (fWinkel, fEntfernung) in kartesische Koordinaten (x, y) um.
  8. Stellen Sie die Messpunkte zyklisch dar (vgl. Abb. 1).

Lernzielkontrollfragen:

  • An welchen Arduino-Pins ist der Servo (S1) angeschlossen?

Arbeitsergebnisse in SVN: UltraschallScanner.m

Aufgabe 3.2: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Ausblick zur nächsten Lektion

In der nächsten Lektion werden die Antriebsmotoren des AlphaBot angesteuert und die Inkrementalgeber ausgelesen.



→ Termine 1 2 3 4 5 6 7 8 10 11 12
→ zurück zum Hauptartikel: Informatik Praktikum 2
→ Haben Sie Fragen? Informatik Praktikum FAQ