AlphaBot: Servo ansteuern: Unterschied zwischen den Versionen
(60 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino]] | [[Kategorie:Arduino]] | ||
[[Kategorie:AlphaBot]] | [[Kategorie:AlphaBot]] | ||
[[Datei: | [[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 27: | Zeile 27: | ||
== Versuchsdurchführung == | == Versuchsdurchführung == | ||
=== Aufgabe 4.1: Servo ansteuern === | === Aufgabe 4.1: Servo ansteuern === | ||
In dieser Aufgabe soll der Ultraschallkopf mittles Servomotor und Potentiometer geschwenkt werden. | 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 40: | Zeile 42: | ||
* <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. B. <code>D7, D8</code>). | |||
'''Lernzielkontrollfragen:''' | '''Lernzielkontrollfragen:''' | ||
* An | * 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 </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. B. <code>D7, D8</code>). | |||
|- | |||
| Den Schaltplan für die Multisensorerweiterung finden Sie [[Medium:Accessory-Shield-Schematic.pdf|hier]]. | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 2 </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 === | === Aufgabe 4.2: Ultraschall als Umfeldscanner === | ||
# '''Voreinstellungen am AlphaBot''': Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12. | |||
# Machen Sie sich mit dem Demo <code>E25_Servo_Sweep</code> vertraut, so dass Sie jede Zeile erläutern können. | # Machen Sie sich mit dem Demo <code>E25_Servo_Sweep</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. | ||
# Steuern Sie den Servo von 0°..180° an und fahren Sie zurück auf 0°. | # Steuern Sie den Servo schrittweise von 0°..180° an und fahren Sie schrittweise zurück auf 0°. | ||
# Messen Sie pro | # Messen Sie pro 5 ° die Ultraschallentfernung. | ||
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen. | # 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. | # 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. | # Stellen Sie die Messpunkte zyklisch dar (vgl. Abb. 1). | ||
'''Lernzielkontrollfragen:''' | '''Lernzielkontrollfragen:''' | ||
Zeile 63: | Zeile 89: | ||
'''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.ino</code>, <code>zeigeUltraschallScan.m</code> | '''Arbeitsergebnisse''' in SVN: <code>UltraschallScanner.ino</code>, <code>zeigeUltraschallScan.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </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 2 </strong> | |||
|- | |||
|Umrechnung der Koordinaten polar→kartesisch:<br> <math> x = r\cdot cos(\alpha)</math> <br><math> y = r\cdot sin(\alpha)</math> | |||
|} | |||
---- | ---- | ||
=== Aufgabe 4.3: | |||
# | === Aufgabe 4.3: Joystick einlesen === | ||
# | # Voreinstellungen am AlphaBot: Legen Sie keine Akkus ein (Betrieb am USB-Kabel). | ||
# | # Machen Sie sich mit dem Demo <code>E20_Joystick</code> vertraut, so dass Sie jede Zeile erläutern können. | ||
# | # 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 Joystick 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> | '''Arbeitsergebnisse''' in SVN: <code>leseJoystick.ino</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </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 </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. | |||
|} | |||
---- | ---- | ||
Zeile 97: | Zeile 156: | ||
* [[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/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/E18b_spieleTon SVN: <code>E18b_spieleTon</code>] | ||
Zeile 106: | Zeile 167: | ||
* [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/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/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:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[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_SoSe23|Informatik Praktikum 2]] |
Aktuelle Version vom 30. April 2024, 11:11 Uhr
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 4.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 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
E24_Servo_Poti
vertraut, so dass Sie jede Zeile erläutern können. - Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
- Lesen Sie die Stellung des Potentiometers aus.
- Steuern Sie den Servomotor mit dem Potentiometer an. Nutzen Sie hierzu den
map
-Befehl. - 0% ist ganz links und 100% ganz rechts.
- Lagern Sie die Ansteuerung in eine Funktion
dreheUltraschall(Wert)
aus. - Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.
Übertragen Sie folgende Parameter:
fZeit
: ZeitfEntfernung
: Entfernung in cmfWinkel
: Winkel des Servo-Motors in deg
Hardwarevorbereitung:
Die Multisensorerweiterung verursacht gelegentlich Probleme. Nutzen Sie für den Ultraschallsensor ggf. andere Digital-IO (z. B. D7, D8
).
Lernzielkontrollfragen:
- 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: dreheServoMotor.ino
, zeigeUltraschallMesswerte.m
Tipp 1 |
Nutzen Sie das Demo SVN: E24_Servo_Poti. |
Sie können den Potentiometerwinkel mit read() 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. B. D7, D8 ).
|
Den Schaltplan für die Multisensorerweiterung finden Sie hier. |
Tipp 2 |
Ergebnisplot: Abb. 2: Entfernung und Winkel über der Zeit |
Aufgabe 4.2: Ultraschall als Umfeldscanner
- Voreinstellungen am AlphaBot: Entfernen Sie am AlphaBot am F-Port die Brücke D11 & D12.
- Machen Sie sich mit dem Demo
E25_Servo_Sweep
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 ° die Ultraschallentfernung.
- 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 angeschlossen?
Arbeitsergebnisse in SVN: UltraschallScanner.ino
, zeigeUltraschallScan.m
Tipp 1 |
Nutzen Sie das Demo SVN: E25_Servo_Sweep. |
Tipp 2 |
Umrechnung der Koordinaten polar→kartesisch: |
Aufgabe 4.3: Joystick einlesen
- Voreinstellungen am AlphaBot: Legen Sie keine Akkus ein (Betrieb am USB-Kabel).
- Machen Sie sich mit dem Demo
E20_Joystick
vertraut, so dass Sie jede Zeile erläutern können. - Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
- Lesen Sie den Joystick mit der Funktion int
leseJoystickStatus()
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
switch..case
-Verzweigung.
Lernzielkontrollfragen:
- 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: leseJoystick.ino
Tipp 1 |
Nutzen Sie das Demo für den Joystick E20 und den Servo E25 und kombinieren Sie beide. |
Tipp 2 |
|
ACHTUNG: Begrenze ServoPosition_s16 auf 0°...180° vor dem Senden.
|
Aufgabe 4.4: 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
Demos
- SVN:
E05_Ultraschall_Entfernungsmessung
- SVN:
E18b_spieleTon
- SVN:
E20_Joystick
- SVN:
E23_RGB_LED
- SVN:
E24_Servo_Poti
- SVN:
E25_Servo_Sweep
- SVN:
E31_Debug2MATLAB
- SVN:
E34_lesePoti
→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2