AlphaBot: Servo mit MATLAB ansteuern: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 54: Zeile 54:
| <strong>Musterlösung&thinsp;</strong>
| <strong>Musterlösung&thinsp;</strong>
|-
|-
| <source line lang="matlab" style="font-size:medium">clear all; close all; clc; % Initialisierung
| <source line lang="matlab" style="font-size:medium">close all; clc; % Initialisierung
disp('Verbindung wird hergestellt...')
if ~exist('hArduino') % Besteht die Verbindung zum Arduino bereits?
hArduino = arduino('COM5','Uno') % Arduino Objekt erzeugen
    hArduino     = arduino('COM5','Uno','Libraries',{'Ultrasonic','Servo'}); % Arduino Objekt erzeugen
figure % Grafik vorbereiten
    hUltraschall = ultrasonic(hArduino,'D7','D8','OutputFormat','double')
h = plot(0,0)
    hServo      = servo(hArduino, 'D9', 'MinPulseDuration', 1e-3, 'MaxPulseDuration', 2e-3);
tic % Timer starten
else
for i=1:100
    clear x y % Darstellung löschen
     Spannung(i)= readVoltage(hArduino,'A0'); % Spannung messen
end
    Zeit(i)   = toc;                       % Zeit messen
%% Variablen initialisieren
    set(h,'XData',Zeit,'YData',Spannung);       % Werte live anzeigen
nSweeps = 3; % Anzahl Durchläufe
     pause(0.1) % in s
%% Ergebnisdarstellung vorbereiten
figure;
hold on
hPlot = plot(0,0,'r.');
xlabel('x in cm')
ylabel('y in cm')
% xlim([-500 500])
% ylim([0 1000])
%% Messung
for i=1:nSweeps
     disp(['Sweep ',num2str(i),' gestartet.'])
    j=0;
    for Winkel = 0:0.5:180
        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
     end
end
end
clear hArduino
</source>
</source>
|}
|}

Version vom 18. April 2025, 08:49 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

  • 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

  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. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  4. Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°.
  5. Messen Sie pro 5 ° die Ultraschallentfernung.
  6. Filtern Sie die Ultraschallentfernung mit dem vielversprechendsten Filter aus Aufgabe 2.4.
  7. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
  8. Rechnen Sie die Polarkoordinaten (fWinkel, fEntfernung) in kartesische Koordinaten (x, y) um.
  9. 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

Demos



→ Termine 1 2 3 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2