AlphaBot: Servo ansteuern: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(76 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Kategorie:AlphaBot]]
[[Kategorie:AlphaBot]]
[[Datei:Work-98936 960 720.png|thumb|rigth|450px|Abb. 1: MATLAB<sup>®</sup> als serieller Monitor]]
[[Datei:Inf2P A4 1.gif|thumb|rigth|450px|Abb. 1: Ultraschall zur Objekterkennung ]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Modul:''' Praxismodul I<br>
'''Modul:''' Praxismodul I<br>
Zeile 10: Zeile 10:
== Inhalt ==
== Inhalt ==
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Nutzung von MATLAB<sup>®</sup> als seriellen Monitor.
* Inbetriebnahme des AlphaBot
* Ansteuerung des Servomotors
* Einbindung der Bibliotheken für den AlphaBot
* Auslesen eine Potentiometers
* Auslesen eine Potentiometers
* Ansteuern einer RGB-LED
* Ansteuern eines Summers
* Statische und dynamische Messung mit dem Ultraschallsensor
* Statische und dynamische Messung mit dem Ultraschallsensor
* Anwendung rekursiver Filter auf Echtzeitdaten
* Anwendung rekursiver Filter auf Echtzeitdaten
Zeile 27: Zeile 26:


== Versuchsdurchführung ==
== Versuchsdurchführung ==
=== Aufgabe 4.1: Servo ansteuern ===
 
In dieser Aufgabe soll der Ultraschallkopf mittles Servomotor und Potentiometer geschwenkt werden.
=== 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 [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°.
# Messen Sie pro 5&thinsp;° die Ultraschallentfernung.
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen.
# Rechnen Sie die Polarkoordinaten (<code>fWinkel</code>, <code>fEntfernung</code>) in kartesische Koordinaten (<code>x, y</code>) um.
# Stellen Sie die Messpunkte zyklisch dar (vgl. Abb. 1).
 
'''Lernzielkontrollfragen:'''
* An welchen Arduino-Pins ist der Servo angeschlossen?
 
'''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.m</code>
<!--
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E25_Servo_Sweep SVN: E25_Servo_Sweep].
|}
-->
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
|Umrechnung der Koordinaten polar→kartesisch:<br> <math> x = r\cdot cos(\alpha)</math> <br><math> y = r\cdot sin(\alpha)</math>
|}
----
<!--
=== Aufgabe 3.1: Servo ansteuern ===
In dieser Aufgabe soll der Ultraschallkopf mittles Servomotor und Potentiometer geschwenkt werden und die Messwerte des Ultraschall-Sensors übergeben werden.
# Voreinstellungen am AlphaBot nicht alle Sensoren funktionieren [https://wiki.hshl.de/wiki/index.php/AlphaBot_Sensorbr%C3%BCcken#Sensor_Pinbelegung_Kolisionsliste gleichzeitig], da sie den gleichen Arduino Pin benutzen. Entfernen Sie bitte dazu am AlphaBot einzelne gelbe Brücken.  Am F-Port die Brücke D10 und das Dual-Mode Bluetooth Modul auf dem Sensor-Shield.
# Aktualisieren Sie die Arduino Bibliothek.
# Machen Sie sich mit dem Demo <code>E24_Servo_Poti</code> vertraut, so dass Sie jede Zeile erläutern können.
# Machen Sie sich mit dem Demo <code>E24_Servo_Poti</code> vertraut, so dass Sie jede Zeile erläutern können.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
Zeile 41: Zeile 71:
* <code>fEntfernung</code>: Entfernung in cm
* <code>fEntfernung</code>: Entfernung in cm
* <code>fWinkel</code>: Winkel des Servo-Motors in deg  
* <code>fWinkel</code>: Winkel des Servo-Motors in deg  
'''Hardwarevorbereitung:'''
Die Multisensorerweiterung verursacht gelegentlich Probleme. Nutzen Sie für den Ultraschallsensor ggf. andere Digital-IO (z.&thinsp;B. <code>D7, D8</code>).


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
* An welchen Arduino-Pins ist der Servo angeschlossen?
* Wie funktioniert ein Potentiometer (Poti)?
* An welchem Arduino-Pins ist das Poti angeschlossen? Welche Spannungsversorgung hat das Poti? Welchen Widerstand hat das Poti?
* Welche theoretischen Werte liefert das Potentiometer an A0? Welche Werte messen Sie praktisch? Nutzen sie die realen minimal und Maximalwerte in Ihrem Quelltext.
* An welchem Arduino-Pins ist der Servo angeschlossen?
 
'''Arbeitsergebnisse''' in SVN: <code>dreheServoMotor.ino</code>, <code>zeigeUltraschallMesswerte.m</code>


'''Arbeitsergebnisse''' in SVN: <code>dreheServoMotor.ino</code> <code>zeigeUltraschallMesswerte.m</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E24_Servo_Poti SVN: E24_Servo_Poti].
|-
| Sie können den Potentiometerwinkel mit <code>read()</code> auslesen.
|-
| Je nachdem, ob Akkus eingelegt sind oder nicht, hat das Poti leicht andere Werte.
|-
| Die Multisensorerweiterung verursacht gelegentlich Probleme. Nutzen Sie für den Ultraschallsensor ggf. andere Digital-IO (z.&thinsp;B. <code>D7, D8</code>).
|-
| Den Schaltplan für die Multisensorerweiterung finden Sie [[Medium:Accessory-Shield-Schematic.pdf|hier]].


<div class="mw-collapsible mw-collapsed">
|}
'''Demo''': [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E24_Servo_Poti SVN: E24_Servo_Poti]
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
</div>
| <strong>Tipp 2&thinsp;</strong>
|-
| Ergebnisplot:<br>[[Datei:Inf2P_4_1.jpg|left|350px|Abb. 4: Ergebnisdarstellung CNTL vs. CNTR]]<br> Abb. 2: Entfernung und Winkel über der Zeit
|}
----
----
=== Aufgabe 4.2: Ultraschall als Umfeldscanner ===
# Steuern Sie den Servo von 0°..180° an und fahren Sie zurück auf 0°.
# Messen Sie pro 1° die Ultraschallentfernung.
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen.
# Rechnen Sie die Polarkoordinaten (<code>fWinkel</code>, <code>fEntfernung</code>) in kartesische Koordinaten (<code>x, y</code>) um.
# Stellen Sie die Messpunkte zyklisch dar (vgl. Abb. 2).


'''Lernzielkontrollfragen:'''
* An welchen Arduino-Pins ist der Servo angeschlossen?


'''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.ino</code> <code>zeigeUltraschallScan.m</code>
----
----
=== Aufgabe 4.3: Ultraschall als Umfeldscanner ===
 
# Der AlphaBot soll ortsfest seine Umgebung durch die Drehung des Ultraschall-Sensors absuchen.
=== Aufgabe 3.3: Joystick einlesen ===
# Wenn er ein Hindernis im Umkreis von 30 cm gefunden hat soll er eine Melodie spielen.
# Voreinstellungen am AlphaBot: Legen Sie keine Akkus ein (Betrieb am USB-Kabel).
# Planen Sie als ersten Schritt das Arduino-Programm als PAP.
# Machen Sie sich mit dem Demo <code>E20_Joystick</code> vertraut, so dass Sie jede Zeile erläutern können.
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen.  
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Lesen Sie den Joystick mit der Funktion int <code>leseJoystickStatus()</code> ein.
# Entprellen Sie darin das Joystick-Signal.
# Steuert den US-Servo mit dem Joystick im Bereich 0°-180° an.
# LINKS: Drehung nach Links (180°).
# RECHTS: Drehung nach Rechts (0°).
# EINGABE: Drehung auf die Mitte (90°).
# Geben Sie den Joystick-Status im seriellen Monitor aus. Nutzen Sie hierzu die <code>switch..case</code>-Verzweigung.  


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
* An welchen Arduino-Pins ist der Servo angeschlossen?
* An welchen Arduino-Pins ist der Joystick angeschlossen?
* Werden diese Pins noch von einem anderen System genutzt?
* Kann der Joystick via Interrupt entprellt werden?


'''Arbeitsergebnisse''' in SVN: <code>sucheHindernis.pap</code> <code>sucheHindernis.ino</code> <code>zeigeUltraschallScan.m</code>  
'''Arbeitsergebnisse''' in SVN: <code>leseJoystick.ino</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie das Demo für den Joystick E20 und den Servo E25 und kombinieren Sie beide.
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 2&thinsp;</strong>
|-
|
* Lesen Die die notwendigen Joystick-Bewegungen aus (L, R, Eingabe).
* Initialisiere einen <code>static</code> Variable für die Position des Servo <code>ServoPosition_s16</code>.
* Inkrementiere bei Joystick-Eingabe <code>LINKS</code> um 5°.
* Dekrementiere bei Joystick-Eingabe <code>RECHTS</code> um -5°.
* Initialisiere <code>ServoPosition_s16</code> bei Joystick-Eingabe <code>EINGABE</code> mit 90°.
* Sende <code>ServoPosition_s16</code> an den Servo (<code>usServo.write(ServoPosition_s16);</code>).
|-
| '''ACHTUNG:''' Begrenze <code>ServoPosition_s16</code> auf 0°...180° vor dem Senden.
|}


'''Hinweise:'''
-->
* Nutzen Sie die Demos E05, E18b im SVN-Verzeichnis.
* Wenn Sie den Summer verwenden möochten, entfernen Sie den Jumper D1, da der Summer auf dem digitalen Eingang D11 eingelesen wird.
 
----


=== Aufgabe 4.4: 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 94: Zeile 160:
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [[Ultraschallsensor_HC-SR04| HSHL-Wiki: Ultraschallsensor HC-SR04]]
* [[Servomotor SG90| HSHL-Wiki: Servomotor SG90]]
* [[Servomotor SG90| HSHL-Wiki: Servomotor SG90]]
* [[AlphaBot:_Steckbrücken| HSHL-Wiki: Übersicht der AlphaBot Steckbrücken]]
* [[AlphaBot_Accessory_Shield| HSHL-Wiki: AlphaBot Multisensorerweiterung]]
* [[AlphaBot Uno Plus| HSHL-Wiki: Übersicht des AlphaBot Uno Plus]]


== Demos ==
== Demos ==
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebug2MATLAB SVN: <code>DemoDebug2MATLAB</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]  
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E05_Ultraschall_Entfernungsmessung SVN: <code>E05_Ultraschall_Entfernungsmessung</code>]  
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E18b_spieleTon  SVN: <code>E18b_spieleTon</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E20_Joystick  SVN: <code>E20_Joystick</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED  SVN: <code>E23_RGB_LED</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E23_RGB_LED  SVN: <code>E23_RGB_LED</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E24_Servo_Poti  SVN: <code>E24_Servo_Poti</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E25_Servo_Sweep  SVN: <code>E25_Servo_Sweep</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E31_Debug2MATLAB SVN: <code>E31_Debug2MATLAB</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E34_lesePoti SVN: <code>E34_lesePoti</code>]




----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]]<br>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|2]] [[AlphaBot: Servo ansteuern|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>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]

Aktuelle Version vom 10. April 2025, 15:37 Uhr

Abb. 1: Ultraschall zur Objekterkennung

Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester

Aufgabenstatus: In Bearbeitung

Inhalt

  • Nutzung von MATLAB® als seriellen Monitor.
  • Ansteuerung des Servomotors
  • Auslesen eine Potentiometers
  • Ansteuern eines Summers
  • 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. 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 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