|
|
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| [[Datei:Projekt2.jpg|thumb|rigth|350px|Abb. 1: Servo-Motor mit einem Potentiometer steuern]]
| |
| '''Autor:''' Justin Frommberger<br/>
| |
| == '''Aufgabenstellung''' ==
| |
| In diesem Projekt soll ein Servomotor mithilfe eines Arduinos und einem Potentiometer steuerbar sein.
| |
|
| |
|
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Video  </strong>
| |
| |-
| |
| |
| |
| [[Datei:20230621 145037.mp4|800px]]
| |
| |}
| |
|
| |
| == '''Benötigte Software''' ==
| |
| Aktuellste '''Arduino IDE''' mit der Version für ihren PC. [https://www.arduino.cc/en/software/ (Download link)]
| |
|
| |
| == '''Vorab wichtig zu wissen!''' ==
| |
| '''Arduino Uno R3:'''
| |
| * Der Arduino besitzt unterschiedliche [[Arduino_UNO:_Board_Anatomie | Schnittstellen]], weil der Arduino ein digitaler Mikrocontroller ist, kann er nur 5 Volt ausgeben oder annehmen.
| |
| * Darum wird für das Projekt 2 eine PWM Schnittstelle benötigt.
| |
| * Die [[https://de.wikipedia.org/wiki/Pulsdauermodulation PWM]] Schnittstellen sind ganz einfach zu erkennen an diesem Zeichen (~)
| |
| '''Servomotor: '''
| |
| * Schwarz oder Braun = Masse (GND)
| |
| * Rot = +5V
| |
| * Orange, Gelb oder Weiß = PWM-Signal
| |
|
| |
| '''Potentiometer: '''
| |
| * Das Potentiometer greift eine Eingangsspannung auf und gibt verschieden große Mengen davon an einen Schaltkreis weiter.
| |
| * So kann später der Servomotor ein und ausgeschaltet werden, mit dem Potentiometer.
| |
| '''Steckbrett'''
| |
| * Erklärung zum Arbeiten mit einem Steckbrett [[Steckbrett | klicken!]]
| |
|
| |
| '''Taster: '''<br>
| |
| Ein Taster schließt einen Stromkreis, wenn man ihn drückt, lässt man ihn, loswird der Stromkreis unterbrochen.<br>
| |
| Meistens ist eine kleine Feder eingebaut, die ihn wieder öffnet.
| |
|
| |
| == '''Benötigte Materiallien''' ==
| |
|
| |
| {| class="wikitable"
| |
| |+ style = "text-align: left"|
| |
| |-
| |
| ! Nr. !! Anz. !! Beschreibung !! Link !! !! Pos. !! Anz. !! Beschreibung !!Link!!
| |
| |-
| |
| |<big><big>①</big></big> || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[https://funduinoshop.com/elektronische-module/sonstige/mikrocontroller/funduino-uno-r3-mikrocontroller-arduino-kompatibel bestellen] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]]
| |
| |<big><big>②</big></big> || 10 || Jumper Kabel, männlich/männlich||[https://funduinoshop.com/bauelemente/kabelsysteme/jumper-kabel/40-stueck-breadboardkabel-maennlich/maennlich-20cm bestellen]||[[Datei:R19-F-2-2.jpg|ohne|100px|]]
| |
| |-
| |
| |-
| |
| |<big><big>③</big></big> || 1 || [[Steckbrett]] || [https://funduinoshop.com/bauelemente/steckbretter-und-platinen/steckbretter/breadboard-steckbrett-mit-830-kontakten bestellen]||[[Datei:R12-A-9-1.jpg|ohne|100px|]]
| |
| |<big><big>④</big></big> || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [https://de.rs-online.com/web/p/mechanische-drehgeber/7899649?cm_mmc=DE-PLA-DS3A-_-google-_-CSS_DE_DE_Passive_Bauelemente_Whoop-_-(DE:Whoop!)+Mechanische+Drehgeber-_-7899649&matchtype=&pla-341386177139&gclid=EAIaIQobChMIk9DDs8_R_wIVwwGLCh16eAFKEAQYASABEgKiNPD_BwE&gclsrc=aw.ds bestellen]||[[Datei:Potentiometer 10K.png|ohne|100px|]]
| |
| |-
| |
| |-
| |
| |<big><big>⑤</big></big> || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[https://funduinoshop.com/elektronische-module/elektromotoren-und-zubehoer/servomotoren/towerpro-sg90-servomotor bestellen]||[[Datei:R19-F-2-1.jpg|ohne|100px|]]
| |
| |-
| |
| |}
| |
|
| |
| [[Datei:Projekt2_Schlatung.png|300px|thumb|right|Abb.3 Schaltung]]
| |
|
| |
| == '''Aufbau Schaltung''' ==
| |
|
| |
| * Auf dem Bild (Abb.3 Schaltung) wird dargestellt, wie die Schaltung für das Projekt "Servo-Motor mit einem Pogtentiometer steuern" aufgebaut werden kann.
| |
|
| |
| == '''Programmierung''' ==
| |
|
| |
| <big>'''Schritt 1'''</big>
| |
| * Erstellen der ersten '''Arduino Datei''' ([https://wiki.hshl.de/wiki/index.php/Erste_Schritte_mit_der_Arduino_IDE Link zum Tutorial]).
| |
|
| |
| <big>'''Schritt 2'''</big>
| |
| * Grundkenntnisse vom Projekt '''"Pulsierende LED"''' verstanden haben. ([[Grundkenntnisse Programmierung (Pulsierende LED) |Link]]).
| |
| * Grundkenntnisse für das Projekt '''"Servo-Motor mit einem Potentiometer steuern"''' verstehen([[Grundkenntnisse Programmierung (Servo-Motor mit einem Potentiometer steuern) |Link zu den Grundkenntnissen]]).
| |
|
| |
| <big>'''Schritt 3'''</big>
| |
| * Nachdem die Schritte 1 und 2 abgeschlossen sind, kann mit der Programmierung des Projektes gestartet werden.
| |
| <br>
| |
| '''1)''' '''#include''' <br>
| |
| Für das Projekt wird ein Servo-Motor verwendet, hierfür wird eine Bibiolothek benötigt.<br>
| |
| Diese wird über den Befehl <code> #include <Name> </code> hinzugefügt.<br>
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| void setup()
| |
| {
| |
| //später
| |
| }
| |
| void loop()
| |
| {
| |
| //später
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
|
| |
| '''2)''' '''Initialisierung''' <br>
| |
| Der nächste Schritt ist alle Variablen zu initialisieren die später Verwendet werden.<br>
| |
| Es müssen 3 Varialen angelegt werden, für den Motor, Variable um den analogen Wert des Potentiometers zu speicher und eine Variable für die Position des Motors.<br>
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
| void setup()
| |
| {
| |
| //später
| |
| }
| |
| void loop()
| |
| {
| |
| //später
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
| '''3)''' '''attach()''' <br>
| |
| In diesem Schritt soll dem Arduino mitgeteilt werden, mit welcher '''PWM'''Schnittstelle der Motor verbunden ist.<br>
| |
| Dies kann man mit der Funktion <code>'''Variable.atach(Schnittstelle);'''</code> zugewiesen werden.<br>
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
| void setup()
| |
| {
| |
| // Motor an Pin 9 angeschlossen (attach)
| |
| Motor.attach(9); // Motor Schnittstelle
| |
| }
| |
| void loop()
| |
| {
| |
| //später
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
| '''4)''' '''analogRead()''' <br>
| |
| Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen werden und in einer Variable gespeichert werden.<br>
| |
| Dafür muss diese Funktion verwendet werden, <code>int SpeicherVariable = analogRead(Schnittstelle);</code>
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
| void setup()
| |
| {
| |
| // Motor an Pin 9 angeschlossen (attach)
| |
| Motor.attach(9); // Motor Schnittstelle
| |
| }
| |
| void loop()
| |
| {
| |
| int ReglerWert = analogRead(A0); //A0 Poti Schnittstelle
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
| '''5)''' '''map()''' <br>
| |
| Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpasse.<br>
| |
| Dies lässt sich mit der Funktion <code>map(value, fromLow, fromHigh, toLow, toHigh);</code> lösen
| |
| Value ist der Vorgabewert, da mit dem Potentiometer der Motor gesteurt wert braucht man hier den Wert von der Poti Schnittstelle.
| |
| In den anderen Spalten werden die minimalen und maximalen Werte der Hardware eingetragen(siehe Grundkenntnise).
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
| void setup()
| |
| {
| |
| // Motor an Pin 9 angeschlossen (attach)
| |
| Motor.attach(9); // Motor Schnittstelle
| |
| }
| |
| void loop()
| |
| {
| |
| int ReglerWert = analogRead(A0); //A0 Poti Schnittstelle
| |
| /*
| |
| map -> Umwandlung des gelesenen Wertes
| |
| von 0 bis 1023 (analoger Sensorwert)
| |
| auf 0 bis 180 (Drehung des Motors)
| |
| */
| |
| Position = map(ReglerWert, 0, 1023, 0, 180);
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
| '''5)''' '''write()''' <br>
| |
| Der letzte Schritt, damit der Motor sich bewegt und die Postion erhält ist <code> Motor.write(Variable);</code><brb>
| |
| Write übertragt die in der Klammer festgelegten Werte zum Motor.
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Lösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
| |
| #include <Servo.h>
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
| void setup()
| |
| {
| |
| // Motor an Pin 9 angeschlossen (attach)
| |
| Motor.attach(9); // Motor Schnittstelle
| |
| }
| |
| void loop()
| |
| {
| |
| int ReglerWert = analogRead(A0); //A0 Poti Schnittstelle
| |
| /*
| |
| map -> Umwandlung des gelesenen Wertes
| |
| von 0 bis 1023 (analoger Sensorwert)
| |
| auf 0 bis 180 (Drehung des Motors)
| |
| */
| |
| Position = map(ReglerWert, 0, 1023, 0, 180);
| |
| // Motor zur Position bewegen
| |
| Motor.write(Position);
| |
| }
| |
| </syntaxhighlight>
| |
| |}
| |
|
| |
| <big>'''Schritt 4'''</big>
| |
| * Nach dem beenden von Schritt 3, kann nun das Ergebnis mit der Musterlösung verglichen werden.
| |
|
| |
| == '''Musterlösung''' ==
| |
| Quelle: https://funduino.de/wp-content/uploads/2021/01/Servomotor.pdf
| |
|
| |
| {| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| |
| | <strong>Müsterlösung  </strong>
| |
| |-
| |
| |
| |
| <syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
| |
|
| |
| // eingebaute Bibliothek einbinden
| |
| # include <Servo.h>
| |
| // Bezeichnung des Motors
| |
| Servo Motor;
| |
| // speichert den analogen Wert des Drehpotentiometers
| |
| int ReglerWert;
| |
| // Position des Motors
| |
| int Position;
| |
|
| |
| void setup()
| |
| {
| |
| // Motor an Pin 9 angeschlossen (attach)
| |
| Motor.attach(9);
| |
| }
| |
| void loop()
| |
| {
| |
| int ReglerWert = analogRead(A0);
| |
| /*
| |
| map -> Umwandlung des gelesenen Wertes
| |
| von 0 bis 1023 (analoger Sensorwert)
| |
| auf 0 bis 180 (Drehung des Motors)
| |
| */
| |
| Position = map(ReglerWert, 0, 1023, 0, 180);
| |
| // Motor zur Position bewegen
| |
| Motor.write(Position);
| |
| }
| |
|
| |
| </syntaxhighlight>
| |
| |}
| |
|
| |
|
| |
| → zurück zum Hauptartikel: [[Konzipierung_und_Evaluierung_von_Arduino-Projekten_verschiedener_Schwierigkeitsgrade_für_die_Lehre | Klicken!]]
| |