Arduino Projekt: Servomotor mit einem Potentiometer steuern: Unterschied zwischen den Versionen
(288 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino: Projekt]] | [[Kategorie:Arduino: Projekt]] | ||
[[Datei: | [[Datei:Poti Motor.gif|thumb|rigth|600px|Abb. 1: Servomotor mit Potentiometer]] | ||
'''Autor:''' Justin Frommberger<br/> | '''Autor:''' Justin Frommberger<br/> | ||
== ''' | == Ablaufplan == | ||
Um das Projekt '''"Servomotor mit einem Potentiometer steuern"''' durchzuführen, wird der folgende Ablauf empfohlen: | |||
# Betrachte das '''[https://wiki.hshl.de/wiki/index.php/Datei:Poti_Motor.gif Video]''' (siehe Abbildung 1) und lese die [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Aufgabenstellung '''Aufgabenstellung'''] sorgfältig durch. | |||
# Überprüfe, ob alle erforderlichen Materialien von der [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Ben%C3%B6tigte_Materialien '''Materialliste'''] vorhanden sind. | |||
# Ließ dir das [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Vorab_wichtig_zu_wissen '''"Vorab wichtig zu wissen"'''] durch. | |||
# Fahre mit Abbildung 3 fort und baue die [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Aufbau_Schaltung '''Schaltung'''] des Projekts nach. | |||
# Vor der Programmierung ist es wichtig, das benötigte Programm gemäß den Angaben unter [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Programmierung '''"Benötigtes Programm"'''] herunterzuladen. | |||
# Abschließend wird eine Anleitung zur [https://wiki.hshl.de/wiki/index.php/Arduino_Projekt:_Servomotor_mit_einem_Potentiometer_steuern#Start_der_Programmierung '''Programmierung'''] präsentiert. | |||
# Um die Aufgaben zu vereinfachen, wird empfohlen, den Code in der gleichen Position wie in der Lösung zu platzieren! | |||
== ''' | == Aufgabenstellung == | ||
''' | Entwickel eine Arduino-Schaltung, um einen Servomotor mit einem Potentiometer zu steuern (siehe wichtig zu wissen). | ||
* Der Servomotor soll sich entsprechend der Potentiometer-Position drehen. | |||
* Implementiere eine Funktion, die den Potentiometerwert erhält und den Servomotor entsprechend positioniert. | |||
* Teste die Schaltung, indem der Servomotor durch Drehen des Potentiometers in verschiedene Positionen gebracht wird.<br> | |||
⇒ Für den Fall, dass '''kein Arduino''' zur Verfügung steht oder '''Materialien''' nicht vorhanden sind. Kann dieser '''webbasierter Arduino Emulator''' verwendet werden. [https://wokwi.com/projects/new/arduino-uno [klicken]] | |||
== Benötigte Materialien == | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"| | |+ style = "text-align: left"| Tabelle 1: Materialliste | ||
|- | |||
! Nr. !! Anz. !! Beschreibung !! Bild | |||
|- | |- | ||
|- | |- | ||
|<big><big>①</big></big> || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]] | |<big><big>①</big></big> || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]] | ||
|- | |||
|<big><big>②</big></big> || 1 || Typ 2 ||[[Datei:Arduino_Kabel.png|ohne|100px|]] | |||
|- | |||
|<big><big>②</big></big> || 10 || Jumper Kabel, männlich/männlich||[[Datei:R19-F-2-2.jpg|ohne|100px|]] | |<big><big>②</big></big> || 10 || Jumper Kabel, männlich/männlich||[[Datei:R19-F-2-2.jpg|ohne|100px|]] | ||
|- | |- | ||
|<big><big>③</big></big> || 1 || [[Steckbrett]] || [[Datei:Steckbrett1.png|ohne|100px|]] | |||
|- | |- | ||
|<big><big>④</big></big> || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [[Datei:Potentiometer 10K.png|ohne|100px|]] | |<big><big>④</big></big> || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [[Datei:Potentiometer 10K.png|ohne|100px|]] | ||
|- | |- | ||
|<big><big>⑤</big></big> || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[[Datei:R19-F-2-1.jpg|ohne|100px|]] | |<big><big>⑤</big></big> || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[[Datei:R19-F-2-1.jpg|ohne|100px|]] | ||
Zeile 28: | Zeile 43: | ||
|} | |} | ||
== | == 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 <nowiki> </nowiki>5 Volt ausgeben oder annehmen. | |||
* | * Deshalb wird für das Projekt 2 eine PWM Schnittstelle benötigt. | ||
* Die [[ | * Die [[Pulsweitenmodulation (PWM) |PWM]] Schnittstellen sind an diesem Zeichen (~) zu erkennen. | ||
* Das Zeichen ist auf dem Arduino bei den digitalen Zahlen zu finden (siehe Abbildung 3). | |||
===Servomotor=== | |||
* | [[Datei:Servo_farben.png |thumb|rigth|400px|Abb. 2: Servo_Farben]] | ||
* | * Ein Servomotor ist ein elektrischer Motor für präzise Steuerungsaufgaben. | ||
* | * Er besteht aus einem Motor und einem integrierten Regelungssystem. | ||
* Durch Rückmeldungen wie einen Encoder kann der Servomotor seine Position in Echtzeit überwachen und anpassen. | |||
* Ein Encoder ist ein Gerät oder eine Software, die eine Eingabe in eine bestimmte Form oder ein bestimmtes Format umwandelt | |||
* Dadurch kann er sehr präzise Bewegungen ausführen und an bestimmte Positionen gelangen. | |||
''' | {| class="wikitable" | ||
|+ style = "text-align: left"| Tabelle 2: Servomotorkabel Farberkennung: | |||
|- | |||
| '''Schwarz oder Braun''' || Masse (GND)<br> | |||
|- | |||
| '''Rot''' || VCC/+<nowiki> </nowiki>5 V<br> | |||
|- | |||
| '''Orange, Gelb oder Weiß''' || PWM-Signal | |||
|} | |||
===Potentiometer=== | |||
* Potentiometer reguliert den elektrischen Strom | |||
* Besteht aus Widerstand und Schleifer | |||
* Schleifer bewegt sich auf dem Widerstand | |||
* Stromfluss wird blockiert, je weiter der Schleifer bewegt wird | |||
* Ähnlich wie eine Wasserleitung, bei der der Wasserfluss blockiert wird | |||
* Einstellung von Lautstärke oder Helligkeit durch Bewegung des Schleifers | |||
===Steckbrett=== | |||
Erklärung zum Arbeiten mit einem Steckbrett [[Steckbrett | [klicken]]] | |||
[[Datei: | == Aufbau Schaltung == | ||
[[Datei:Schaltung_PotMo.png|400px|thumb|right|Abb.3 Schaltung]] | |||
In Abbildung 3 wird die Schaltung für das Projekt '''"Servomotor mit einem Potentiometer steuern"''' dargestellt.<br> | |||
Bevor mit der Programmierung begonnen werden kann, muss die Schaltung des Projekts aufgebaut werden. | |||
* Beachte, dass die Kabel genau wie in '''Abbildung 3''' verbunden werden müssen. | |||
* Achte auf die Vertikalen und Horizontalen Reihen! | |||
* Stecke das Potentiometer mit seinen 3 Beinchen in das Steckbrett. | |||
Plus (+) und Minus (-) sind beim Anschließen des Potentiometers für das Projekt frei wählbar. | |||
== ''' | == Programmierung == | ||
=== Benötigtes Programm! === | |||
Lade die aktuellste Version der '''Arduino IDE''' herunter. [https://www.arduino.cc/en/software/ [klicken]]<br> | |||
Beachte, die richtige Version für deinen PC auszuwählen (siehe Abbildung 4). | |||
<br> | |||
[[Datei:ArduinoIDE_download.png|500px|miniatur|center|Abb. 4: ArduinoIDE]] | |||
<br> | |||
---- | |||
== ''' | ===Erstellen der Arduino Datei=== | ||
Starte das Programm '''Arduino IDE'''.<br> | |||
Sobald das Programm gestartet ist, öffne ein neues Projekt und speichere es anschließend.<br> | |||
Stelle sicher, dass dein Arduino über ein Kabel mit dem Computer verbunden ist.<br> | |||
*'''Wichtig: ''' Unter jeder Anleitung ist ein Beispiel vorhanden, das durch Klicken auf '''"Ausklappen"''' sichtbar wird. | |||
< | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Neues Projekt & Speichern  </strong> | |||
|- | |||
| | |||
[[Datei:Neu_Speichern.png|250px]] | |||
|} | |||
⇒ Überprüfe, ob das richtige '''Board''' ausgewählt wurde. | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Board check  </strong> | |||
|- | |||
| | |||
[[Datei:Board.png|500px]] | |||
|} | |||
⇒ Überprüfe, ob der richtige '''Port''' ausgewählt wurde.<br> | |||
*Die Port Nummer ist für jede Schnittstelle anderes. Beachte den Namen, der in Klammern angegeben ist (Arduino Uno). | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Port check  </strong> | |||
|- | |||
| | |||
[[Datei:Port.png|500px]] | |||
|} | |||
---- | |||
=== Aktionsfelder in der Arduino IDE === | |||
< | [[Datei:Arduino_Start.png|300px]]<br> | ||
'''Abb. 5''': Arduino IDE Erklärung <br> | |||
{| class="wikitable" | |||
|+ style = "text-align: left"| Tabelle 2: Aktionsfelder | |||
|- | |||
| Gelb || Programmcode auf Fehler überprüfen | |||
|- | |||
| Rot || Starten/Hochladen vom Programmcode | |||
|- | |||
| Blau || Neues Fenster öffnen | |||
|- | |||
| Grün|| Öffnen von Beispielen oder eigenem Programmcode | |||
|- | |||
| Lila || Speichern vom Programmcode | |||
|} | |||
⇒ Um das Programm zu beenden, muss der Arduino ausgeschaltet werden. | |||
---- | |||
''' | ===Wichtig für die Programmierung=== | ||
Es ist wichtig, die '''Programmierrichtlinien''' beim Verfassen des Programmcodes zu beachten und einzuhalten.<br> | |||
[[Programmierrichtlinien Einsteiger|['''Programmierrichtlinien''']]] | |||
<br><br> | |||
Die Grundkenntnisse dienen als Nachschlagewerk, um während der Programmierung einen Code zu überprüfen.<br> | |||
[[Grundkenntnisse Programmierung (Pulsierende LED) |['''Grundkenntnisse pulsierende LED''']]] und [[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) |['''Grundkenntnisse Servomotor''']]]. | |||
<br> | |||
'''Quelltext 1:''' <code>Servo.ino</code> | ---- | ||
===Start der Programmierung=== | |||
'''Wichtig vorab: ''' | |||
* Überprüfe die '''Lösungen''' sorgfältig und stelle sicher, dass dein Code genau wie im Beispiel angeordnet ist. | |||
* Beachte die '''Klammer''' vor, hinter oder nach jedem Wort. Diese sind sehr wichtig in der Programmierung. | |||
* Dein Code muss wie im Beispiel: '''Quelltext 1: <code>Start.ino</code>''' aussehen. | |||
['''Quelltext 1: ''' <code>Start.ino</code>] | |||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | |||
void setup() | |||
{ | |||
} | |||
void loop() | |||
{ | |||
} | |||
</syntaxhighlight> | |||
---- | |||
==== Bibliothek hinzufügen==== | |||
Für das Projekt wird ein Servomotor verwendet, hierfür wird eine '''Bibliothek''' benötigt.<br> | |||
* Diese wird über den Befehl [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)##include <code>'''#include <Servo.h>'''</code>] hinzugefügt. | |||
* Dieser Code wird immer nach ganz oben in dem Programm geschrieben. | |||
['''Quelltext 1: ''' <code>Servo.ino</code>] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
#include <Servo.h> // Bibliothek einbinden | #include <Servo.h> // ⇐ Bibliothek einbinden | ||
void setup() | void setup() | ||
{ | { | ||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
---- | |||
====Initialisierung (Zuweisung)==== | |||
Im nächsten Schritt werden alle erforderlichen Variablen in der Arduino IDE mit ihrem entsprechenden '''Namen und Datentyp''' versehen.<br> | |||
Um das Verständnis zu wiederholen, wird empfohlen, sich erneut mit den Grundkenntnissen der [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Initialisierung_(Zuweisung) '''Initialisierung'''] und [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Datentypen_(const_byte) '''Datentypen'''] vertraut zu machen.<br> | |||
''' | Es müssen '''3 Variablen''' angelegt werden: | ||
* Für den verwendeten Motor: '''<code>Servo servoMotor;</code>''' | |||
* Speichern des Wertes vom Drehpotentiometers: '''<code>unsigned int reglerWert;</code> | |||
* Speichern der Position des Motors: '''<code>unsigned int position;</code>''' | |||
* Schreibe den Code zwischen [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)##include <code>'''#include <Servo.h>'''</code>] und dem [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Void_loop_und_void_setup <code>'''void setup()'''</code>]. Beachte, dass jedes Zeichen übernommen werden muss. | |||
'''Quelltext 2:''' <code>Servo.ino</code> | ['''Quelltext 2: ''' <code>Servo.ino</code>] | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
Servo | Servo servoMotor; // ⇐ Bezeichnung des Motors | ||
int | unsigned int reglerWert; // ⇐ Speichert den analogen Wert des Drehpotentiometers | ||
int | unsigned int position; // ⇐ Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
'''Quelltext 3:''' <code>Servo.ino</code> | ==== Motor Pin zuweisen==== | ||
In diesem Schritt wird dem Arduino mitgeteilt, über welche '''PWM''' Schnittstelle der Motor verbunden ist.<br> | |||
* Dies kann mithilfe der Funktion <code>'''servoMotor.atach(9);'''</code> zugewiesen werden.<br> | |||
* Bei Fragen zum Motor, siehe Grundkenntnisse [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)#Servo.h <code>'''Servo.h'''</code>]<br> | |||
* Der Befehl wird ins [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Void_loop_und_void_setup <code>'''void setup()'''</code>] geschrieben. | |||
['''Quelltext 3: ''' <code>Servo.ino</code>] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
Servo | Servo servoMotor; // Bezeichnung des Motors | ||
int | unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers | ||
int | unsigned int position; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
servoMotor.attach(9); // ⇐ Motor an Pin 9 angeschlossen (attach) | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
'''Quelltext 4:''' <code>Servo.ino</code> | ---- | ||
====Potentiometer Wert auslesen</code>==== | |||
Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen und in einer Variable gespeichert werden | |||
<br>(siehe Grundkenntnisse [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)#analogRead() <code>'''analogRead();'''</code>]). | |||
* Hierfür muss diese Funktion <code>'''reglerWert = analogRead(A0);'''</code> verwendet werden. | |||
* Auf diese Weise kann später mithilfe der Variable überprüft werden, ob das Potentiometer gedreht wurde. | |||
* Dieser Code wird in die Klammern vom [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Pulsierende_LED)#Void_loop_und_void_setup <code>'''void loop()'''</code>] geschrieben. | |||
['''Quelltext 4: ''' <code>Servo.ino</code>] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
Servo | Servo servoMotor; // Bezeichnung des Motors | ||
int | unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers | ||
int | unsigned int position; // Potentiometer des Motors | ||
void setup() | void setup() | ||
{ | { | ||
// Motor an Pin 9 angeschlossen (attach) | // Motor an Pin 9 angeschlossen (attach) | ||
servoMotor.attach(9); // Motor Schnittstelle | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
reglerWert = analogRead(A0); // ⇐ A0 Potentiometer Schnittstelle | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
'''Quelltext 5:''' <code>Servo.ino</code> | ---- | ||
==== Motor und Potentiometer verbinden==== | |||
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpassen. | |||
* Dies lässt sich mit der Funktion <code>'''position = map(reglerWert, 0, 1023, 0, 180);'''</code> lösen. | |||
* Wenn der '''reglerWert''' kleiner oder größer wird, passt sich die '''Position''' an. | |||
* Dieser Code wird unter dem Code <code>'''reglerWert = analogRead(A0);'''</code> geschrieben. | |||
Zur genauen Erklärung der Funktion, siehe Grundkenntnisse [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)#map() <code>'''map();'''</code>] | |||
['''Quelltext 5: ''' <code>Servo.ino</code>] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
Servo | Servo servoMotor; // Bezeichnung des Motors | ||
int | unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers | ||
int | unsigned int position; // Position des Motors | ||
void setup() | void setup() | ||
Zeile 190: | Zeile 317: | ||
void setup() | void setup() | ||
{ | { | ||
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach) | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
reglerWert = analogRead(A0); //A0 Potentiometer Schnittstelle | |||
/* | /* | ||
map -> Umwandlung des gelesenen Wertes | map -> Umwandlung des gelesenen Wertes | ||
Zeile 200: | Zeile 327: | ||
auf 0 bis 180 (Drehung des Motors) | auf 0 bis 180 (Drehung des Motors) | ||
*/ | */ | ||
position = map(reglerWert, 0, 1023, 0, 180); // ⇐ Werte abgleichen | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
'''Quelltext 6:''' <code>Servo.ino</code> | ---- | ||
==== Motor positionieren==== | |||
Im letzten Schritt wird dem Motor seine gewünschte Position übermittelt. | |||
* Hierfür benötigt man den Code <code>'''servoMotor.write(position);'''</code> | |||
* Der Code <code>'''write();'''</code> übergibt die in der Klammer festgelegten Werte zum Motor. | |||
* Schreibe den Code unter die Funktion <code>'''position = map(reglerWert, 0, 1023, 0, 180);'''</code>. | |||
Zur genauen Erklärung der Funktion, siehe Grundkenntnisse [https://wiki.hshl.de/wiki/index.php/Grundkenntnisse_Programmierung_(Servomotor_mit_einem_Potentiometer_steuern)#write() <code>'''write();'''</code>] | |||
['''Quelltext 6: ''' <code>Servo.ino</code>] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Lösung  </strong> | | <strong>Lösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size: | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
Servo | Servo servoMotor; // Bezeichnung des Motors | ||
int | unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers | ||
int | unsigned int position; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach) | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
reglerWert = analogRead(A0); //A0 Potentiometer Schnittstelle | |||
/* | /* | ||
map -> Umwandlung des gelesenen Wertes | map -> Umwandlung des gelesenen Wertes | ||
Zeile 232: | Zeile 365: | ||
auf 0 bis 180 (Drehung des Motors) | auf 0 bis 180 (Drehung des Motors) | ||
*/ | */ | ||
position = map(reglerWert, 0, 1023, 0, 180); // Werte abgleichen | |||
servoMotor.write(Position); // ⇐ Motor zur Position bewegen | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
== Musterlösung == | |||
Sollte der Code nicht ordnungsgemäß funktionieren, überprüfe ihn anhand der Musterlösung. | |||
== | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Musterlösung  </strong> | | <strong>Musterlösung  </strong> | ||
|- | |- | ||
| | | | ||
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size: | <syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small"> | ||
# include <Servo.h> // Bibliothek einbinden | # include <Servo.h> // Bibliothek einbinden | ||
/* Variablen deklarieren */ | /* Variablen deklarieren */ | ||
int | Servo servoMotor; // Bezeichnung des Motors | ||
int | unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers | ||
unsigned int position; // Position des Motors | |||
void setup() | void setup() | ||
{ | { | ||
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach) | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
reglerWert = analogRead(A0); // A0 Potentiometer Schnittstelle | |||
/* | /* | ||
map -> Umwandlung des gelesenen Wertes | map -> Umwandlung des gelesenen Wertes | ||
von 0 bis 1023 (analoger Sensorwert) | von 0 bis 1023 (analoger Sensorwert) | ||
auf 0 bis 180 (Drehung des Motors) | auf 0 bis 180 (Drehung des Motors) | ||
*/ | */ | ||
position = map(reglerWert, 0, 1023, 0, 180); // Werte abgleichen | |||
servoMotor.write(position); // Motor zur Position bewegen | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
[https://funduino.de/wp-content/uploads/2021/01/Servomotor.pdf Quelle] | |||
<br> | <br> | ||
---- | ---- | ||
→ zurück zum Hauptartikel: [[Konzipierung_und_Evaluierung_von_Arduino-Projekten_verschiedener_Schwierigkeitsgrade_für_die_Lehre | BA: Arduino-Projekte für die Lehre]] | '''→ zurück zum Hauptartikel: [[Konzipierung_und_Evaluierung_von_Arduino-Projekten_verschiedener_Schwierigkeitsgrade_für_die_Lehre | BA: Arduino-Projekte für die Lehre]]''' |
Aktuelle Version vom 12. September 2023, 07:04 Uhr
Autor: Justin Frommberger
Ablaufplan
Um das Projekt "Servomotor mit einem Potentiometer steuern" durchzuführen, wird der folgende Ablauf empfohlen:
- Betrachte das Video (siehe Abbildung 1) und lese die Aufgabenstellung sorgfältig durch.
- Überprüfe, ob alle erforderlichen Materialien von der Materialliste vorhanden sind.
- Ließ dir das "Vorab wichtig zu wissen" durch.
- Fahre mit Abbildung 3 fort und baue die Schaltung des Projekts nach.
- Vor der Programmierung ist es wichtig, das benötigte Programm gemäß den Angaben unter "Benötigtes Programm" herunterzuladen.
- Abschließend wird eine Anleitung zur Programmierung präsentiert.
- Um die Aufgaben zu vereinfachen, wird empfohlen, den Code in der gleichen Position wie in der Lösung zu platzieren!
Aufgabenstellung
Entwickel eine Arduino-Schaltung, um einen Servomotor mit einem Potentiometer zu steuern (siehe wichtig zu wissen).
- Der Servomotor soll sich entsprechend der Potentiometer-Position drehen.
- Implementiere eine Funktion, die den Potentiometerwert erhält und den Servomotor entsprechend positioniert.
- Teste die Schaltung, indem der Servomotor durch Drehen des Potentiometers in verschiedene Positionen gebracht wird.
⇒ Für den Fall, dass kein Arduino zur Verfügung steht oder Materialien nicht vorhanden sind. Kann dieser webbasierter Arduino Emulator verwendet werden. [klicken]
Benötigte Materialien
Nr. | Anz. | Beschreibung | Bild |
---|---|---|---|
① | 1 | Funduino Arduino UNO R3 | |
② | 1 | Typ 2 | |
② | 10 | Jumper Kabel, männlich/männlich | |
③ | 1 | Steckbrett | |
④ | 1 | Potentiometer 10k | |
⑤ | 1 | TowerPro SG90 Servomotor |
Vorab wichtig zu wissen
Arduino Uno R3
Der Arduino besitzt unterschiedliche Schnittstellen, weil der Arduino ein digitaler Mikrocontroller ist, kann er nur 5 Volt ausgeben oder annehmen.
- Deshalb wird für das Projekt 2 eine PWM Schnittstelle benötigt.
- Die PWM Schnittstellen sind an diesem Zeichen (~) zu erkennen.
- Das Zeichen ist auf dem Arduino bei den digitalen Zahlen zu finden (siehe Abbildung 3).
Servomotor
- Ein Servomotor ist ein elektrischer Motor für präzise Steuerungsaufgaben.
- Er besteht aus einem Motor und einem integrierten Regelungssystem.
- Durch Rückmeldungen wie einen Encoder kann der Servomotor seine Position in Echtzeit überwachen und anpassen.
- Ein Encoder ist ein Gerät oder eine Software, die eine Eingabe in eine bestimmte Form oder ein bestimmtes Format umwandelt
- Dadurch kann er sehr präzise Bewegungen ausführen und an bestimmte Positionen gelangen.
Schwarz oder Braun | Masse (GND) |
Rot | VCC/+ 5 V |
Orange, Gelb oder Weiß | PWM-Signal |
Potentiometer
- Potentiometer reguliert den elektrischen Strom
- Besteht aus Widerstand und Schleifer
- Schleifer bewegt sich auf dem Widerstand
- Stromfluss wird blockiert, je weiter der Schleifer bewegt wird
- Ähnlich wie eine Wasserleitung, bei der der Wasserfluss blockiert wird
- Einstellung von Lautstärke oder Helligkeit durch Bewegung des Schleifers
Steckbrett
Erklärung zum Arbeiten mit einem Steckbrett [klicken]
Aufbau Schaltung
In Abbildung 3 wird die Schaltung für das Projekt "Servomotor mit einem Potentiometer steuern" dargestellt.
Bevor mit der Programmierung begonnen werden kann, muss die Schaltung des Projekts aufgebaut werden.
- Beachte, dass die Kabel genau wie in Abbildung 3 verbunden werden müssen.
- Achte auf die Vertikalen und Horizontalen Reihen!
- Stecke das Potentiometer mit seinen 3 Beinchen in das Steckbrett.
Plus (+) und Minus (-) sind beim Anschließen des Potentiometers für das Projekt frei wählbar.
Programmierung
Benötigtes Programm!
Lade die aktuellste Version der Arduino IDE herunter. [klicken]
Beachte, die richtige Version für deinen PC auszuwählen (siehe Abbildung 4).
Erstellen der Arduino Datei
Starte das Programm Arduino IDE.
Sobald das Programm gestartet ist, öffne ein neues Projekt und speichere es anschließend.
Stelle sicher, dass dein Arduino über ein Kabel mit dem Computer verbunden ist.
- Wichtig: Unter jeder Anleitung ist ein Beispiel vorhanden, das durch Klicken auf "Ausklappen" sichtbar wird.
Neues Projekt & Speichern |
⇒ Überprüfe, ob das richtige Board ausgewählt wurde.
Board check |
⇒ Überprüfe, ob der richtige Port ausgewählt wurde.
- Die Port Nummer ist für jede Schnittstelle anderes. Beachte den Namen, der in Klammern angegeben ist (Arduino Uno).
Port check |
Aktionsfelder in der Arduino IDE
Gelb | Programmcode auf Fehler überprüfen |
Rot | Starten/Hochladen vom Programmcode |
Blau | Neues Fenster öffnen |
Grün | Öffnen von Beispielen oder eigenem Programmcode |
Lila | Speichern vom Programmcode |
⇒ Um das Programm zu beenden, muss der Arduino ausgeschaltet werden.
Wichtig für die Programmierung
Es ist wichtig, die Programmierrichtlinien beim Verfassen des Programmcodes zu beachten und einzuhalten.
[Programmierrichtlinien]
Die Grundkenntnisse dienen als Nachschlagewerk, um während der Programmierung einen Code zu überprüfen.
[Grundkenntnisse pulsierende LED] und [Grundkenntnisse Servomotor].
Start der Programmierung
Wichtig vorab:
- Überprüfe die Lösungen sorgfältig und stelle sicher, dass dein Code genau wie im Beispiel angeordnet ist.
- Beachte die Klammer vor, hinter oder nach jedem Wort. Diese sind sehr wichtig in der Programmierung.
- Dein Code muss wie im Beispiel: Quelltext 1:
Start.ino
aussehen.
[Quelltext 1: Start.ino
]
void setup()
{
}
void loop()
{
}
Bibliothek hinzufügen
Für das Projekt wird ein Servomotor verwendet, hierfür wird eine Bibliothek benötigt.
- Diese wird über den Befehl
#include <Servo.h>
hinzugefügt. - Dieser Code wird immer nach ganz oben in dem Programm geschrieben.
[Quelltext 1: Servo.ino
]
Lösung |
#include <Servo.h> // ⇐ Bibliothek einbinden
void setup()
{
}
void loop()
{
}
|
Initialisierung (Zuweisung)
Im nächsten Schritt werden alle erforderlichen Variablen in der Arduino IDE mit ihrem entsprechenden Namen und Datentyp versehen.
Um das Verständnis zu wiederholen, wird empfohlen, sich erneut mit den Grundkenntnissen der Initialisierung und Datentypen vertraut zu machen.
Es müssen 3 Variablen angelegt werden:
- Für den verwendeten Motor:
Servo servoMotor;
- Speichern des Wertes vom Drehpotentiometers:
unsigned int reglerWert;
- Speichern der Position des Motors:
unsigned int position;
- Schreibe den Code zwischen
#include <Servo.h>
und demvoid setup()
. Beachte, dass jedes Zeichen übernommen werden muss.
[Quelltext 2: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo servoMotor; // ⇐ Bezeichnung des Motors
unsigned int reglerWert; // ⇐ Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // ⇐ Position des Motors
void setup()
{
}
void loop()
{
}
|
Motor Pin zuweisen
In diesem Schritt wird dem Arduino mitgeteilt, über welche PWM Schnittstelle der Motor verbunden ist.
- Dies kann mithilfe der Funktion
servoMotor.atach(9);
zugewiesen werden. - Bei Fragen zum Motor, siehe Grundkenntnisse
Servo.h
- Der Befehl wird ins
void setup()
geschrieben.
[Quelltext 3: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo servoMotor; // Bezeichnung des Motors
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // Position des Motors
void setup()
{
servoMotor.attach(9); // ⇐ Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
}
|
Potentiometer Wert auslesen
Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen und in einer Variable gespeichert werden
(siehe Grundkenntnisse analogRead();
).
- Hierfür muss diese Funktion
reglerWert = analogRead(A0);
verwendet werden. - Auf diese Weise kann später mithilfe der Variable überprüft werden, ob das Potentiometer gedreht wurde.
- Dieser Code wird in die Klammern vom
void loop()
geschrieben.
[Quelltext 4: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo servoMotor; // Bezeichnung des Motors
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // Potentiometer des Motors
void setup()
{
// Motor an Pin 9 angeschlossen (attach)
servoMotor.attach(9); // Motor Schnittstelle
}
void loop()
{
reglerWert = analogRead(A0); // ⇐ A0 Potentiometer Schnittstelle
}
|
Motor und Potentiometer verbinden
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpassen.
- Dies lässt sich mit der Funktion
position = map(reglerWert, 0, 1023, 0, 180);
lösen. - Wenn der reglerWert kleiner oder größer wird, passt sich die Position an.
- Dieser Code wird unter dem Code
reglerWert = analogRead(A0);
geschrieben.
Zur genauen Erklärung der Funktion, siehe Grundkenntnisse map();
[Quelltext 5: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo servoMotor; // Bezeichnung des Motors
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // Position des Motors
void setup()
{
void setup()
{
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
reglerWert = analogRead(A0); //A0 Potentiometer 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); // ⇐ Werte abgleichen
}
|
Motor positionieren
Im letzten Schritt wird dem Motor seine gewünschte Position übermittelt.
- Hierfür benötigt man den Code
servoMotor.write(position);
- Der Code
write();
übergibt die in der Klammer festgelegten Werte zum Motor. - Schreibe den Code unter die Funktion
position = map(reglerWert, 0, 1023, 0, 180);
.
Zur genauen Erklärung der Funktion, siehe Grundkenntnisse write();
[Quelltext 6: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo servoMotor; // Bezeichnung des Motors
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // Position des Motors
void setup()
{
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
reglerWert = analogRead(A0); //A0 Potentiometer 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); // Werte abgleichen
servoMotor.write(Position); // ⇐ Motor zur Position bewegen
}
|
Musterlösung
Sollte der Code nicht ordnungsgemäß funktionieren, überprüfe ihn anhand der Musterlösung.
Musterlösung |
# include <Servo.h> // Bibliothek einbinden
/* Variablen deklarieren */
Servo servoMotor; // Bezeichnung des Motors
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers
unsigned int position; // Position des Motors
void setup()
{
servoMotor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
reglerWert = analogRead(A0); // A0 Potentiometer 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); // Werte abgleichen
servoMotor.write(position); // Motor zur Position bewegen
}
|
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre