AlphaBot: Servo ansteuern: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(50 dazwischenliegende Versionen von 2 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 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.&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>


<div class="mw-collapsible mw-collapsed">
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
'''Demo''': [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E24_Servo_Poti SVN: E24_Servo_Poti]
| <strong>Tipp 1&thinsp;</strong>
</div>
|-
| 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]].
 
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <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 ===
=== 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 die Ultraschallentfernung.  
# Messen Sie pro 5&thinsp;° 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. 2).
# 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&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 2&thinsp;</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: Joystick einlesen ===
=== 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.
# 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.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Lesen Sie den Joystick ein.
# Lesen Sie den Joystick mit der Funktion int <code>leseJoystickStatus()</code> ein.
# Entprellen Sie das Joystick-Signal.
# Entprellen Sie darin das Joystick-Signal.
# Steuert den US-Servo mit dem Joystick im Bereich 0°-180° an.
# Steuert den US-Servo mit dem Joystick im Bereich 0°-180° an.
# LINKS: Drehung nach Links (180°).
# LINKS: Drehung nach Links (180°).
# RECHTS: Drehung nach Rechts (0°).
# RECHTS: Drehung nach Rechts (0°).
# EINGABE: Grehung auf die Mitte (90°).
# EINGABE: Drehung auf die Mitte (90°).
# Geben Sie den Joystick-Status im seriellen Monitor aus.
# Geben Sie den Joystick-Status im seriellen Monitor aus. Nutzen Sie hierzu die <code>switch..case</code>-Verzweigung.  


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
Zeile 90: Zeile 129:
|-
|-
|  
|  
* Lies die notwendigen Joystick-Bewegungen aus (L, R, Eingabe).
* Lesen Die die notwendigen Joystick-Bewegungen aus (L, R, Eingabe).
* Initialisiere einen globale Variable für die Position des Servo <code>ServoPosition_s16</code>.
* 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°.
* Inkrementiere bei Joystick-Eingabe <code>LINKS</code> um 5°.
* Dekrementiere bei Joystick-Eingabe <code>RECHTS</code> um -5°.
* Dekrementiere bei Joystick-Eingabe <code>RECHTS</code> um -5°.
Zeile 103: Zeile 142:
----
----


=== Aufgabe 4.4: Ultraschall zur Objekterkennung ===
=== Aufgabe 4.4: Nachhaltige Doku ===
# Der AlphaBot soll ortsfest seine Umgebung durch die Drehung des Ultraschall-Sensors absuchen.
# Wenn ein Hindernis im Umkreis von 30&thinsp;cm detektiert wird, ertönt einen Warnton/eine Melodie.
# Bei Druck auf den Joystick verstummt der Warnton und dafür leuchtet die LED rot auf.
# Entfernt sich das Hindernis, verstummt der Alarm.
# Planen Sie als ersten Schritt das Arduino-Programm als PAP.
# Nutzen Sie MATLAB<sup>®</sup> um die Messdaten direkt (live) darzustellen. Objekte werden als gelbe Punkte und Hindernisse (<30&thinsp;cm) als rote Punkte dargestellt.
 
'''Lernzielkontrollfragen:'''
* An welchen Arduino-Pins ist der Joystick angeschlossen?
 
'''Arbeitsergebnisse''' in SVN: <code>sucheHindernis.pap</code>, <code>sucheHindernis.ino</code>, <code>zeigeUltraschallScan.m</code>
 
'''Hinweise:'''
* Nutzen Sie die Demos E05, E18b im SVN-Verzeichnis.
* Wenn Sie den Summer verwenden möchten, entfernen Sie den Jumper D1, da der Summer auf dem digitalen Eingang D11 eingelesen wird.
 
----
 
=== Aufgabe 4.5: 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 136: 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/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/E18b_spieleTon  SVN: <code>E18b_spieleTon</code>]
Zeile 145: 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

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 4.1: Servo ansteuern

In dieser Aufgabe soll der Ultraschallkopf mittles Servomotor und Potentiometer geschwenkt werden und die Messwerte des Ultraschall-Sensors übergeben werden.

  1. 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.
  2. Aktualisieren Sie die Arduino Bibliothek.
  3. Machen Sie sich mit dem Demo E24_Servo_Poti vertraut, so dass Sie jede Zeile erläutern können.
  4. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  5. Lesen Sie die Stellung des Potentiometers aus.
  6. Steuern Sie den Servomotor mit dem Potentiometer an. Nutzen Sie hierzu den map-Befehl.
  7. 0% ist ganz links und 100% ganz rechts.
  8. Lagern Sie die Ansteuerung in eine Funktion dreheUltraschall(Wert) aus.
  9. Nutzen Sie MATLAB® um die Messdaten direkt (live) darzustellen.

Übertragen Sie folgende Parameter:

  • fZeit: Zeit
  • fEntfernung: Entfernung in cm
  • fWinkel: 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


Aufgabe 4.2: 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 E25_Servo_Sweep 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.ino, zeigeUltraschallScan.m


Aufgabe 4.3: Joystick einlesen

  1. Voreinstellungen am AlphaBot: Legen Sie keine Akkus ein (Betrieb am USB-Kabel).
  2. Machen Sie sich mit dem Demo E20_Joystick vertraut, so dass Sie jede Zeile erläutern können.
  3. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  4. Lesen Sie den Joystick mit der Funktion int leseJoystickStatus() ein.
  5. Entprellen Sie darin das Joystick-Signal.
  6. Steuert den US-Servo mit dem Joystick im Bereich 0°-180° an.
  7. LINKS: Drehung nach Links (180°).
  8. RECHTS: Drehung nach Rechts (0°).
  9. EINGABE: Drehung auf die Mitte (90°).
  10. 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



Aufgabe 4.4: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos



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