Arduino Projekt: Servomotor mit einem Potentiometer steuern: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(191 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino: Projekt]]
[[Kategorie:Arduino: Projekt]]
[[Datei:Vid1.gif|thumb|rigth|600px|Abb. 1: Servomotor mit Potentiometer]]
[[Datei:Poti Motor.gif|thumb|rigth|600px|Abb. 1: Servomotor mit Potentiometer]]


'''Autor:''' Justin Frommberger<br/>
'''Autor:''' Justin Frommberger<br/>


== '''Ablaufplan''' ==
== Ablaufplan ==
Um das Projekt '''"Servomotor mit einem Potentiometer steuern"''' durchzuführen, wird der folgende Ablauf empfohlen einzuhalten.
Um das Projekt '''"Servomotor mit einem Potentiometer steuern"''' durchzuführen, wird der folgende Ablauf empfohlen:
# Betrachten Sie das '''Video''' (Abbildung 1) und lesen Sie die '''Aufgabenstellung''' sorgfältig durch.
# 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 Materiallien von der '''Materialliste''' vorhanden sind.
# Ü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.
# Bevor Sie mit dem Hauptprojekt beginnen, ist es ratsam, das '''"Vorab wichtig zu wissen"''' zu lesen und bei der Durchführung des Projekts zu beachten.
# 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.
# Nachdem die Grundbausteine erklärt wurden, sollten Sie nun mit der Abbildung 2 fortfahren und die '''Schaltung''' des Projekts nachbauen.
# 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, die benötigte Hardware gemäß den Angaben unter '''"Benötigtes Programm"''' herunterzuladen.
# 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 schrittweise Anleitung zur '''Programmierung''' präsentiert. Wichtig ist, dass der Code in der gleichen Position wie in den Lösungen platziert wird.
# 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.
* Viel Freude und Erfolg bei der Umsetzung Ihres zweiten Projektes!
# Um die Aufgaben zu vereinfachen, wird empfohlen, den Code in der gleichen Position wie in der Lösung zu platzieren!


== '''Aufgabenstellung''' ==
== Aufgabenstellung ==
Entwickeln Sie eine Arduino-Schaltung, um einen Servomotor mit einem Potentiometer zu steuern.  
Entwickel eine Arduino-Schaltung, um einen Servomotor mit einem Potentiometer zu steuern (siehe wichtig zu wissen).  
* Der Servomotor soll sich entsprechend der Potentiometerposition drehen.  
* Der Servomotor soll sich entsprechend der Potentiometer-Position drehen.  
* Implementieren Sie eine Funktion, die den Potentiometerwert liest und den Servomotor entsprechend positioniert.  
* Implementiere eine Funktion, die den Potentiometerwert erhält und den Servomotor entsprechend positioniert.  
* Testen Sie die Schaltung, indem Sie den Servomotor durch Drehen des Potentiometers in verschiedene Positionen bringen.
* Teste die Schaltung, indem der Servomotor durch Drehen des Potentiometers in verschiedene Positionen gebracht wird.<br>


== '''Benötigte Materialien''' ==
⇒ 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]]
'''Tabelle 1: Materialliste'''  
 
== Benötigte Materialien ==
{| class="wikitable"
{| class="wikitable"
|+ style = "text-align: left"|
|+ style = "text-align: left"| Tabelle 1: Materialliste
|-
! Nr. !! Anz.    !! Beschreibung !! Bild
|-
|-
! Nr. !! Anz.    !! Beschreibung !! Bild !! Pos. !! Anz.    !! Beschreibung !!Bild
|-
|-
|<big><big>&#9312;</big></big>  || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]]
|<big><big>&#9312;</big></big>  || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]]
|-
|<big><big>&#9313;</big></big>  || 1 || Typ 2 ||[[Datei:Arduino_Kabel.png|ohne|100px|]]
|-
|<big><big>&#9313;</big></big>  || 10 || Jumper Kabel, männlich/männlich||[[Datei:R19-F-2-2.jpg|ohne|100px|]]
|<big><big>&#9313;</big></big>  || 10 || Jumper Kabel, männlich/männlich||[[Datei:R19-F-2-2.jpg|ohne|100px|]]
|-
|-
|<big><big>&#9314;</big></big>  || 1 || [[Steckbrett]] || [[Datei:R12-A-9-1.jpg|ohne|100px|]]
|<big><big>&#9314;</big></big>  || 1 || [[Steckbrett]] || [[Datei:Steckbrett1.png|ohne|100px|]]
|-
|<big><big>&#9315;</big></big>  || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [[Datei:Potentiometer 10K.png|ohne|100px|]]
|<big><big>&#9315;</big></big>  || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [[Datei:Potentiometer 10K.png|ohne|100px|]]
|-
|-
|<big><big>&#9316;</big></big>  || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[[Datei:R19-F-2-1.jpg|ohne|110px|]]
|<big><big>&#9316;</big></big>  || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[[Datei:R19-F-2-1.jpg|ohne|100px|]]
|-
|-
|}
|}


== '''Vorab wichtig zu wissen!''' ==
== Vorab wichtig zu wissen ==
===Arduino Uno R3===
===Arduino Uno R3===
Der Arduino besitzt unterschiedliche [[Arduino_UNO:_Board_Anatomie | Schnittstellen]], weil der Arduino ein digitaler Mikrocontroller ist, kann er nur <nowiki>&thinsp;</nowiki>5&thinsp;Volt ausgeben oder annehmen.
Der Arduino besitzt unterschiedliche [[Arduino_UNO:_Board_Anatomie | Schnittstellen]], weil der Arduino ein digitaler Mikrocontroller ist, kann er nur <nowiki>&thinsp;</nowiki>5&thinsp;Volt ausgeben oder annehmen.
* Deshalb wird für das Projekt 2 eine PWM Schnittstelle benötigt.
* Deshalb 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 (~)
* 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 2.
* 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.


===Servomotor Kabel===
{| class="wikitable"
[[Datei:Servo_farben.png |thumb|rigth|300px|Abb. 2: Servo_Farben]]
|+ style = "text-align: left"| Tabelle 2: Servomotorkabel Farberkennung:
Schwarz oder Braun  Masse (GND)<br>
|-
Rot VCC/+<nowiki>&thinsp;</nowiki>5&thinsp;V<br>
| '''Schwarz oder Braun''' || Masse (GND)<br>
Orange, Gelb oder Weiß PWM-Signal
|-
| '''Rot''' || VCC/+<nowiki>&thinsp;</nowiki>5&thinsp;V<br>
|-
| '''Orange, Gelb oder Weiß''' || PWM-Signal
|}


===Potentiometer===
===Potentiometer===
Ist ein elektronisches Bauteil, das den elektrischen Widerstand in einem Stromkreis verändern kann.
* Potentiometer reguliert den elektrischen Strom
* Es besteht aus einem drehbaren Schleifer, der über einen Widerstand gleitet.
* Besteht aus Widerstand und Schleifer
* Durch Drehen des Schleifers kann der Widerstandswert des Potentiometers verändert werden.
* Schleifer bewegt sich auf dem Widerstand
* Desto höher der Widerstand, desto niedriger der Strom.
* 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===
===Steckbrett===
Erklärung zum Arbeiten mit einem Steckbrett [[Steckbrett | (klicken)]]
Erklärung zum Arbeiten mit einem Steckbrett [[Steckbrett | [klicken]]]


===Taster===
== Aufbau Schaltung ==
Ein Taster verbindet den Stromkreis, sobald er gedrückt wird, und unterbricht ihn, sobald man ihn loslässt.<br>
[[Datei:Schaltung_PotMo.png|400px|thumb|right|Abb.3 Schaltung]]
Meistens ist eine kleine Feder eingebaut, die ihn wieder öffnet.
In Abbildung 3 wird die Schaltung für das Projekt '''"Servomotor mit einem Potentiometer steuern"''' dargestellt.<br>
 
== '''Aufbau Schaltung''' ==
[[Datei:Projekt2_Schlatung.png|450px|thumb|right|Abb.2 Schaltung Poti]]
In Abb. 2 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.
Bevor mit der Programmierung begonnen werden kann, muss die Schaltung des Projekts aufgebaut werden.
* Zu beachten ist, dass die Kabel genau wie in der Abbildung 2 verbunden werden müssen.
* Beachte, dass die Kabel genau wie in '''Abbildung 3''' verbunden werden müssen.
* Achte auf die Vertikalen und Horizontalen Reihen!
* Achte auf die Vertikalen und Horizontalen Reihen!
* Stecke das Potentiometer mit seinen 3 Beinchen in das Steckbrett.
* Stecke das Potentiometer mit seinen 3 Beinchen in das Steckbrett.
** + und - sind beim Anschließen des Potentiometers für das Projekt frei wählbar.
Plus (+) und Minus (-) sind beim Anschließen des Potentiometers für das Projekt frei wählbar.


== '''Programmierung''' ==
== Programmierung ==
=== Benötigtes Programm! ===
=== Benötigtes Programm! ===
Lade Sie die aktuellste Version der '''Arduino IDE''' herunter. [https://www.arduino.cc/en/software/ (klicken)]<br>
Lade die aktuellste Version der '''Arduino IDE''' herunter. [https://www.arduino.cc/en/software/ [klicken]]<br>
Stellen Sie sicher, dass Sie die korrekte Version für Ihren PC oder Laptop herunterladen.
Beachte, die richtige Version für deinen PC auszuwählen (siehe Abbildung 4).
<br>
<br>
[[Datei:ArduinoIDE_download.png|400px|miniatur|center|Abb. 3: ArduinoIDE]]
[[Datei:ArduinoIDE_download.png|500px|miniatur|center|Abb. 4: ArduinoIDE]]
<br>
<br>


==='''1. Erstellen der Arduino Datei'''===
----
Starten Sie das Programm '''Arduino IDE''' mit einem Doppelklick.<br>
 
Sobald das Programm gestartet ist, soll ein neues Projekt geöffnet und anschließend abgespeichert werden.<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>
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.   
*'''Wichtig: ''' Unter jeder Anleitung ist ein Beispiel vorhanden, das durch Klicken auf '''"Ausklappen"''' sichtbar wird.   
Zeile 100: Zeile 118:
|}
|}
⇒ Überprüfe, ob der richtige '''Port''' ausgewählt wurde.<br>
⇒ Überprüfe, ob der richtige '''Port''' ausgewählt wurde.<br>
*Die Port Nummer ist für jede Schnittstelle anderes, beachten Sie den Namen, der in Klammern angegeben ist (Arduino Uno).
*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"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
Zeile 108: Zeile 126:
[[Datei:Port.png|500px]]
[[Datei:Port.png|500px]]
|}
|}
----
=== Aktionsfelder in der Arduino IDE ===


==='''2. Wichtig für die Programmierung'''===
[[Datei:Arduino_Start.png|300px]]<br>
Es ist wichtig, die '''Programmierrichtlinien''' beim Verfassen von Programmiercode zu beachten und einzuhalten.<br>
'''Abb. 5''': Arduino IDE Erklärung <br>
[[Programmierrichtlinien Einsteiger|[Programmierrichtlinien, klicken]]]
{| 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>
<br><br>
Die '''Grundkenntnisse''' dienen als Nachschlagewerk, um während der Programmierung Code zu überprüfen, den man möglicherweise nicht vollständig verstanden hat.<br>
Die Grundkenntnisse dienen als Nachschlagewerk, um während der Programmierung einen Code zu überprüfen.<br>
[[Grundkenntnisse Programmierung (Pulsierende LED) |[Grundkenntnisse pulsierende LED, klicken]]] und [[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) |[Grundkenntnisse Servomotor, klicken]]].
[[Grundkenntnisse Programmierung (Pulsierende LED) |['''Grundkenntnisse pulsierende LED''']]] und [[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) |['''Grundkenntnisse Servomotor''']]].
<br>
<br>


==='''3. Start der Programmierung'''===
----
 
===Start der Programmierung===
'''Wichtig vorab: '''
'''Wichtig vorab: '''
* Unter jedem Programmierabschnitt befindet sich ein '''ausklappbares Element''', das die Teillösung enthält.
* Überprüfe die '''Lösungen''' sorgfältig und stelle sicher, dass dein Code genau wie im Beispiel angeordnet ist.
* Überprüfen Sie Ihre '''Lösungen''' sorgfältig und stellen Sie sicher, dass Ihr Code genau in der gleichen Reihenfolge angeordnet ist wie im Beispiel.
* Beachte die '''Klammer''' vor, hinter oder nach jedem Wort. Diese sind sehr wichtig in der Programmierung.
* 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.
* Ihr Code muss genau so aussehen wie im Beispiel: '''Quelltext 1:  <code>Start.ino</code>'''
['''Quelltext 1: ''' <code>Start.ino</code>]
['''Quelltext 1: ''' <code>Start.ino</code>]
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
Zeile 134: Zeile 173:
}
}
</syntaxhighlight>
</syntaxhighlight>
 
----
===='''Bibliothek hinzufügen'''====
==== Bibliothek hinzufügen====
Für das Projekt wird ein Servomotor verwendet, hierfür wird eine '''Bibliothek''' benötigt.<br>
Für das Projekt wird ein Servomotor verwendet, hierfür wird eine '''Bibliothek''' benötigt.<br>
* Diese wird über den Befehl <code> '''#include <Servo.h>''' </code> hinzugefügt.
* 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.
* Dieser Code wird immer nach ganz oben in dem Programm geschrieben.


Zeile 145: Zeile 184:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
#include <Servo.h>  // ⇐ Bibliothek einbinden
#include <Servo.h>  // ⇐ Bibliothek einbinden
void setup()         
void setup()         
{                     
{                     
//später
 
}
}
void loop()  
void loop()  
{  
{  
//später
 
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}
 
----
===='''Initialisierung (Zuweisung)'''====
====Initialisierung (Zuweisung)====
Im nächsten Schritt werden alle erforderlichen Variablen in der Arduino IDE mit ihrem entsprechenden '''Namen und Datentyp''' versehen.<br>
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 die '''Grundkenntnissen der Initialisierung und Datentypen''' durchzulesen.<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:
Es müssen '''3 Variablen''' angelegt werden:
* Für den verwendeten Motor: '''<code>Servo Motor;</code>'''
* Für den verwendeten Motor: '''<code>Servo servoMotor;</code>'''
* Speichern des Wertes vom Drehpotentiometers: '''<code>unsigned int Regler_Wert;</code>
* Speichern des Wertes vom Drehpotentiometers: '''<code>unsigned int reglerWert;</code>
* Speichern von der Position des Motors: '''<code>unsigned int Position;</code>'''
* Speichern der Position des Motors: '''<code>unsigned int position;</code>'''
Schreiben Sie den Code über, dem '''<code>void setup()</code>''', beachte das jedes Zeichen übernommen werden muss.
* 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>]
Zeile 173: Zeile 212:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden


Servo Motor;                // ⇐ Bezeichnung des Motors
Servo servoMotor;                // ⇐ Bezeichnung des Motors
unsigned int Regler_Wert;  // ⇐ Speichert den analogen Wert des Drehpotentiometers           
unsigned int reglerWert;  // ⇐ Speichert den analogen Wert des Drehpotentiometers           
unsigned int Position;    // ⇐ Position des Motors
unsigned int position;    // ⇐ Position des Motors


void setup()         
void setup()         
{                     
{                     
//später
 
}
}
void loop()  
void loop()  
{  
{  
//später
 
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}


===='''Motor Pin zuweisen'''====
==== Motor Pin zuweisen====
In diesem Schritt wird dem Arduino mitgeteilt, über welche '''PWM'''Schnittstelle der Motor verbunden ist.<br>
In diesem Schritt wird dem Arduino mitgeteilt, über welche '''PWM''' Schnittstelle der Motor verbunden ist.<br>
Dies kann mithilfe der Funktion <code>'''Motor.atach(9);'''</code> zugewiesen werden.<br>
* Dies kann mithilfe der Funktion <code>'''servoMotor.atach(9);'''</code> zugewiesen werden.<br>
Bei Fragen zum Motor, siehe Grundkenntnisse <code>'''Servo.h.'''</code>
* 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>]
['''Quelltext 3: ''' <code>Servo.ino</code>]
Zeile 201: Zeile 241:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden


Servo Motor;                // Bezeichnung des Motors
Servo servoMotor;                // Bezeichnung des Motors
unsigned int Regler_Wert;  // speichert den analogen Wert des Drehpotentiometers           
unsigned int reglerWert;  // Speichert den analogen Wert des Drehpotentiometers           
unsigned int Position;    // Position des Motors
unsigned int position;    // Position des Motors


void setup()         
void setup()         
{                     
{                     
Motor.attach(9);  // ⇐ Motor an Pin 9 angeschlossen (attach)
servoMotor.attach(9);  // ⇐ Motor an Pin 9 angeschlossen (attach)
}
}
void loop()  
void loop()  
{  
{  
//später
 
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}


===='''Potentiometer Wert auslesen'''</code>====
----
Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen werden und in einer Variable gespeichert werden.
 
* Hierfür muss diese Funktion <code>'''Regler_Wert = analogRead(A0);'''</code> verwendet werden.
====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.
* Auf diese Weise kann später mithilfe der Variable überprüft werden, ob das Potentiometer gedreht wurde.
* Dieser Code wird in die Klammern vom <code>'''void loop()'''</code> geschrieben.
* 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>]
['''Quelltext 4: ''' <code>Servo.ino</code>]
Zeile 230: Zeile 273:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden


Servo Motor;   // Bezeichnung des Motors
Servo servoMotor;               // Bezeichnung des Motors
unsigned int Regler_Wert;   // speichert den analogen Wert des Drehpotentiometers           
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers           
unsigned int Position;    // Position des Motors
unsigned int position;    // Potentiometer des Motors


void setup()         
void setup()         
{                     
{                     
// Motor an Pin 9 angeschlossen (attach)
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);                        // Motor Schnittstelle
servoMotor.attach(9);                        // Motor Schnittstelle
}
}
void loop()  
void loop()  
{  
{  
Regler_Wert = analogRead(A0);    //A0 Poti Schnittstelle
reglerWert = analogRead(A0);    // A0 Potentiometer Schnittstelle
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}


===='''Motor und Poti verbinden'''====
----
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpasse.
 
* Dies lässt sich mit der Funktion <code>'''Position = map(Regler_Wert, 0, 1023, 0, 180);'''</code> lösen.
==== Motor und Potentiometer verbinden====
* Dieser Code wird unter dem Code <code>'''Regler_Wert = analogRead(A0);'''</code> geschrieben.
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpassen.
* Wenn der '''Regler_Wert''' kleiner oder größer wird, passt sich die '''Postion''' an.
* Dies lässt sich mit der Funktion <code>'''position = map(reglerWert, 0, 1023, 0, 180);'''</code> lösen.
Zur genauen Erklärung der Funktion schaue in die Grundkenntnisse Funktionen <code>'''map();'''</code>.  
* 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>]
['''Quelltext 5: ''' <code>Servo.ino</code>]
Zeile 261: Zeile 306:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden


Servo Motor;   // Bezeichnung des Motors
Servo servoMotor;               // Bezeichnung des Motors
unsigned int Regler_Wert;   // speichert den analogen Wert des Drehpotentiometers           
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers           
unsigned int Position;    // Position des Motors
unsigned int position;    // Position des Motors


void setup()         
void setup()         
Zeile 272: Zeile 317:
void setup()
void setup()
{
{
Motor.attach(9);  // Motor an Pin 9 angeschlossen (attach)
servoMotor.attach(9);  // Motor an Pin 9 angeschlossen (attach)
}
}
void loop()
void loop()
{
{
Regler_Wert = analogRead(A0);          //A0 Poti Schnittstelle
reglerWert = analogRead(A0);          //A0 Potentiometer Schnittstelle
/*
/*
map -> Umwandlung des gelesenen Wertes
map -> Umwandlung des gelesenen Wertes
Zeile 282: Zeile 327:
auf 0 bis 180 (Drehung des Motors)
auf 0 bis 180 (Drehung des Motors)
*/
*/
Position = map(Regler_Wert, 0, 1023, 0, 180);
position = map(reglerWert, 0, 1023, 0, 180);   // ⇐ Werte abgleichen
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}


===='''Motor positionieren'''====
----
Im letzten Schritt muss dem Motor die seine Postion übergeben werden.
 
* Hierfür benötigt man den Code <code>'''Motor.write(Position);'''</code>
==== Motor positionieren====
* Write schickt die in der Klammer festgelegten Werte zum Motor, siehe Grundkenntnisse.
Im letzten Schritt wird dem Motor seine gewünschte Position übermittelt.
Schreibe den Code unter die Funktion <code>'''Position = map(Regler_Wert, 0, 1023, 0, 180);'''</code>.
* 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>]
['''Quelltext 6: ''' <code>Servo.ino</code>]
Zeile 298: Zeile 346:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden


Servo Motor;   // Bezeichnung des Motors
Servo servoMotor;               // Bezeichnung des Motors
unsigned int Regler_Wert;   // speichert den analogen Wert des Drehpotentiometers           
unsigned int reglerWert; // Speichert den analogen Wert des Drehpotentiometers           
unsigned int Position;    // Position des Motors
unsigned int position;    // Position des Motors


void setup()
void setup()
{
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
servoMotor.attach(9);   // Motor an Pin 9 angeschlossen (attach)
}
}
void loop()
void loop()
{
{
Regler_Wert = analogRead(A0);          //A0 Poti Schnittstelle
reglerWert = analogRead(A0);          //A0 Potentiometer Schnittstelle
/*
/*
map -> Umwandlung des gelesenen Wertes
map -> Umwandlung des gelesenen Wertes
Zeile 317: Zeile 365:
auf 0 bis 180 (Drehung des Motors)
auf 0 bis 180 (Drehung des Motors)
*/
*/
Position = map(Regler_Wert, 0, 1023, 0, 180);
position = map(reglerWert, 0, 1023, 0, 180);   // Werte abgleichen


Motor.write(Position);  // Motor zur Position bewegen
servoMotor.write(Position);  // Motor zur Position bewegen
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}


== '''Musterlösung''' ==
== Musterlösung ==
Sollte Ihr Code nicht ordnungsgemäß funktionieren, empfehle ich Ihnen, ihn anhand der Musterlösung zu überprüfen.
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 &thinsp;</strong>
| <strong>Musterlösung &thinsp;</strong>
|-
|-
|
|
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">


# include <Servo.h>  // Bibliothek einbinden
# include <Servo.h>  // Bibliothek einbinden
Servo Motor;    // Bezeichnung des Motors


/* Variablen deklarieren */
/* Variablen deklarieren */
unsigned int Regler_Wert;    // speichert den analogen Wert des Drehpotentiometers           
Servo servoMotor;                  // Bezeichnung des Motors
unsigned int Position;   // Position des Motors
unsigned int reglerWert;    // Speichert den analogen Wert des Drehpotentiometers           
unsigned int position;     // Position des Motors


void setup()
void setup()
{
{
  Motor.attach(9);  // Motor an Pin 9 angeschlossen (attach)
  servoMotor.attach(9);  // Motor an Pin 9 angeschlossen (attach)
}
}
void loop()
void loop()
{
{
  Regler_Wert = analogRead(A0);         //A0 Poti Schnittstelle
  reglerWert = analogRead(A0);       // A0 Potentiometer Schnittstelle
  /*
  /*
  map -> Umwandlung des gelesenen Wertes
  map -> Umwandlung des gelesenen Wertes
Zeile 352: Zeile 399:
  auf 0 bis 180 (Drehung des Motors)
  auf 0 bis 180 (Drehung des Motors)
  */
  */
  Position = map(Regler_Wert, 0, 1023, 0, 180);
  position = map(reglerWert, 0, 1023, 0, 180);     // Werte abgleichen


  Motor.write(Position);  // Motor zur Position bewegen
  servoMotor.write(position);  // Motor zur Position bewegen
}
}
</syntaxhighlight>
</syntaxhighlight>
|}
|}
Quelle: [https://funduino.de/wp-content/uploads/2021/01/Servomotor.pdf Link]
[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, 06:04 Uhr

Abb. 1: Servomotor mit Potentiometer

Autor: Justin Frommberger

Ablaufplan

Um das Projekt "Servomotor mit einem Potentiometer steuern" durchzuführen, wird der folgende Ablauf empfohlen:

  1. Betrachte das Video (siehe Abbildung 1) und lese die Aufgabenstellung sorgfältig durch.
  2. Überprüfe, ob alle erforderlichen Materialien von der Materialliste vorhanden sind.
  3. Ließ dir das "Vorab wichtig zu wissen" durch.
  4. Fahre mit Abbildung 3 fort und baue die Schaltung des Projekts nach.
  5. Vor der Programmierung ist es wichtig, das benötigte Programm gemäß den Angaben unter "Benötigtes Programm" herunterzuladen.
  6. Abschließend wird eine Anleitung zur Programmierung präsentiert.
  7. 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

Tabelle 1: Materialliste
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

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.
Tabelle 2: Servomotorkabel Farberkennung:
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

Abb.3 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).

Abb. 4: ArduinoIDE



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.

⇒ Überprüfe, ob das richtige Board ausgewählt wurde.

⇒ Ü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).

Aktionsfelder in der Arduino IDE


Abb. 5: Arduino IDE Erklärung

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.
[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]


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 dem void setup(). Beachte, dass jedes Zeichen übernommen werden muss.

[Quelltext 2: Servo.ino]

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]


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]


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]


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]

Musterlösung

Sollte der Code nicht ordnungsgemäß funktionieren, überprüfe ihn anhand der Musterlösung.

Quelle



→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre