Arduino Projekt: Servomotor mit einem Potentiometer steuern
Autor: Justin Frommberger
Ablaufplan
Um das Projekt "Servomotor mit einem Potentiometer steuern" durchzuführen, wird der folgende Ablauf empfohlen.
- Betrachte das Video (Abbildung 1) und lese die Aufgabenstellung sorgfältig durch.
- Überprüfe, ob alle erforderlichen Materialien von der Materialliste vorhanden sind.
- Es ist ratsam, das "Vorab wichtig zu wissen" zu lesen und bei der Durchführung des Projekts zu beachten.
- Fahre mit der Abbildung 3 fort und baue dieSchaltung 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 schrittweise 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.
- Der Servomotor soll sich entsprechend der Potentiometerposition drehen.
- Implementieren eine Funktion, die den Potentiometerwert liest und den Servomotor entsprechend positioniert.
- Testen die Schaltung, indem der Servomotor durch Drehen des Potentiometers in verschiedene Positionen gebacht wird.
⇒ Für den Fall, dass kein Arduino zur Verfügung steht, kann dieser webbasierter Arduino Emulator verwendet werden. [klicken]
Benötigte Materialien
Nr. | Anz. | Beschreibung | Bild |
---|---|---|---|
① | 1 | Funduino Arduino UNO R3 | |
② | 1 | USB A zu USB B | |
② | 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 ganz einfach zu erkennen an diesem Zeichen (~)
- Das Zeichen ist auf dem Arduino bei den digitalen Zahlen zu finden, siehe Abbildung 3.
Servomotor Kabel
Schwarz oder Braun | Masse (GND) |
Rot | VCC/+ 5 V |
Orange, Gelb oder Weiß | PWM-Signal |
Potentiometer
Ist ein elektronisches Bauteil, das den elektrischen Widerstand in einem Stromkreis verändern kann.
- Es besteht aus einem drehbaren Schleifer, der über einen Widerstand gleitet.
- Durch Drehen des Schleifers kann der Widerstandswert des Potentiometers verändert werden.
- Desto höher der Widerstand, desto niedriger der Strom.
Steckbrett
Erklärung zum Arbeiten mit einem Steckbrett [klicken]
Taster
Ein Taster verbindet den Stromkreis, sobald er gedrückt wird, und unterbricht ihn, sobald man ihn loslässt.
Meistens ist eine kleine Feder eingebaut, die ihn wieder öffnet.
Aufbau Schaltung
In Abb. 2 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.
- Zu beachten ist, dass die Kabel genau wie in der 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, soll ein neues Projekt geöffnet und anschließend abgespeichert werden.
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 |
Wichtig für die Programmierung
Es ist wichtig, die Programmierrichtlinien beim Verfassen von Programmiercode zu beachten und einzuhalten.
[Programmierrichtlinien]
Die Grundkenntnisse dienen als Nachschlagewerk, um während der Programmierung Code zu überprüfen, den man möglicherweise nicht vollständig verstanden hat.
[Grundkenntnisse pulsierende LED] und [Grundkenntnisse Servomotor].
Start der Programmierung
Wichtig vorab:
- Überprüfe die Lösungen sorgfältig und stellen 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.
- Ihr Code muss genau so aussehen wie im Beispiel: Quelltext 1:
Start.ino
[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 Motor;
- Speichern des Wertes vom Drehpotentiometers:
unsigned int Regler_Wert;
- Speichern von der Position des Motors:
unsigned int Position;
Schreibe den Code über, dem void setup()
, beachte das jedes Zeichen übernommen werden muss.
[Quelltext 2: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo Motor; // ⇐ Bezeichnung des Motors
unsigned int Regler_Wert; // ⇐ 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 Motor.atach(9);
zugewiesen werden.
Bei Fragen zum Motor, siehe Grundkenntnisse Servo.h
[Quelltext 3: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo Motor; // Bezeichnung des Motors
unsigned int Regler_Wert; // speichert den analogen Wert des Drehpotentiometers
unsigned int Position; // Position des Motors
void setup()
{
Motor.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 werden und in einer Variable gespeichert werden.
Siehe Grundkenntnisse analogRead();
- Hierfür muss diese Funktion
Regler_Wert = 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 Motor; // Bezeichnung des Motors
unsigned int Regler_Wert; // speichert den analogen Wert des Drehpotentiometers
unsigned int Position; // Position des Motors
void setup()
{
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9); // Motor Schnittstelle
}
void loop()
{
Regler_Wert = analogRead(A0); // ⇐ A0 Poti Schnittstelle
}
|
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
Position = map(Regler_Wert, 0, 1023, 0, 180);
lösen. - Dieser Code wird unter dem Code
Regler_Wert = analogRead(A0);
geschrieben. - Wenn der Regler_Wert kleiner oder größer wird, passt sich die Postion an.
Zur genauen Erklärung der Funktion schaue in die Grundkenntnisse Funktionen map();
[Quelltext 5: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo Motor; // Bezeichnung des Motors
unsigned int Regler_Wert; // 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)
}
void loop()
{
Regler_Wert = 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(Regler_Wert, 0, 1023, 0, 180); // ⇐ Werte abgleichen
}
|
Motor positionieren
Im letzten Schritt muss dem Motor seine gewünschte Postion übergeben werden.
- Hierfür benötigt man den Code
Motor.write(Position);
- Write übergibt die in der Klammer festgelegten Werte zum Motor.
- Siehe Grundkenntnisse
write();
Schreibe den Code unter die Funktion Position = map(Regler_Wert, 0, 1023, 0, 180);
.
[Quelltext 6: Servo.ino
]
Lösung |
# include <Servo.h> // Bibliothek einbinden
Servo Motor; // Bezeichnung des Motors
unsigned int Regler_Wert; // speichert den analogen Wert des Drehpotentiometers
unsigned int Position; // Position des Motors
void setup()
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
Regler_Wert = 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(Regler_Wert, 0, 1023, 0, 180); // Werte abgleichen
Motor.write(Position); // ⇐ Motor zur Position bewegen
}
|
Musterlösung
Sollte Ihr Code nicht ordnungsgemäß funktionieren, überprüfe ihn anhand der Musterlösung.
Musterlösung |
# include <Servo.h> // Bibliothek einbinden
/* Variablen deklarieren */
Servo Motor; // Bezeichnung des Motors
unsigned int Regler_Wert; // speichert den analogen Wert des Drehpotentiometers
unsigned int Position; // Position des Motors
void setup()
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
Regler_Wert = 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(Regler_Wert, 0, 1023, 0, 180); // Werte abgleichen
Motor.write(Position); // Motor zur Position bewegen
}
|
Quelle: Link
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre