Arduino Projekt: Servomotor mit einem Potentiometer steuern: Unterschied zwischen den Versionen
Zeile 113: | Zeile 113: | ||
*Grundkenntnisse vom Projekt '''Pulsierende LED''' verstanden haben. ([[Grundkenntnisse Programmierung (Pulsierende LED) |Link]])<br> | *Grundkenntnisse vom Projekt '''Pulsierende LED''' verstanden haben. ([[Grundkenntnisse Programmierung (Pulsierende LED) |Link]])<br> | ||
*Grundkenntnisse für das Projekt '''Servomotor mit einem Potentiometer steuern''' verstehen.[[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) | (Link)]]. | *Grundkenntnisse für das Projekt '''Servomotor mit einem Potentiometer steuern''' verstehen.[[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) | (Link)]]. | ||
Es ist wichtig, die '''Programmierrichtlinien''' beim Verfassen von Programmiercode zu beachten und einzuhalten.<br> | |||
[[Programmierrichtlinien Einsteiger|[Programmierrichtlinien, klicken]]] | |||
<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> | |||
[[Grundkenntnisse Programmierung (Pulsierende LED) |[Grundkenntnisse pulsierende LED, klicken]]]<br> | |||
[[Grundkenntnisse Programmierung (Servomotor mit einem Potentiometer steuern) |[Grundkenntnisse Servomotor, klicken]]]. | |||
<br> | |||
==='''3. Start der Programmierung'''=== | ==='''3. Start der Programmierung'''=== |
Version vom 7. August 2023, 10:42 Uhr
Autor: Justin Frommberger
Ablaufplan
Um das Projekt "Servomotor mit einem Potentiometer steuern" durchzuführen, wird der folgende Ablauf empfohlen einzuhalten.
- Betrachten Sie das Video (Abbildung 1) und lesen Sie die Aufgabenstellung sorgfältig durch.
- Überprüfe ob alle erforderlichen Materiallien von der 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.
- Nachdem die Grundbausteine erklärt wurden, sollten Sie nun mit der Abbildung 2 fortfahren und die Schaltung des Projekts nachbauen.
- Vor der Programmierung ist es wichtig, die benötigte Hardware gemäß den Angaben unter "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.
- Viel Freude und Erfolg bei der Umsetzung Ihres zweiten Projektes!
Aufgabenstellung
Entwickeln Sie eine Arduino-Schaltung, um einen Servomotor mit einem Potentiometer zu steuern.
- Der Servomotor soll sich entsprechend der Potentiometerposition drehen.
- Implementieren Sie eine Funktion, die den Potentiometerwert liest und den Servomotor entsprechend positioniert.
- Testen Sie die Schaltung, indem Sie den Servomotor durch Drehen des Potentiometers in verschiedene Positionen bringen.
Benötigte Materialien
Tabelle 1: Materialliste
Nr. | Anz. | Beschreibung | Bild | Pos. | Anz. | Beschreibung | Bild |
---|---|---|---|---|---|---|---|
① | 1 | Funduino Arduino UNO R3 | ② | 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 2.
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 2 verbunden werden müssen.
- Achte auf die Vertikalen und Horizontalen Reihen!
- Stecke das Potentiometer mit seinen 3 Beinchen in das Steckbrett.
- + und - sind beim Anschließen des Potentiometers für das Projekt frei wählbar.
Programmierung
Benötigtes Programm!
Lade Sie die aktuellste Version der Arduino IDE herunter. (klicken)
Stellen Sie sicher, dass Sie die korrekte Version für Ihren PC oder Laptop herunterladen.
1. Erstellen der Arduino Datei
Starten Sie das Programm Arduino IDE mit einem Doppelklick.
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, beachten Sie den Namen, der in Klammern angegeben ist (Arduino Uno).
Port check |
2. Wichtig für die Programmierung
- Geringe Kenntnisse in den Programmierrichtlinien für die Erstellung von Software. (Link)
- Grundkenntnisse vom Projekt Pulsierende LED verstanden haben. (Link)
- Grundkenntnisse für das Projekt Servomotor mit einem Potentiometer steuern verstehen. (Link).
Es ist wichtig, die Programmierrichtlinien beim Verfassen von Programmiercode zu beachten und einzuhalten.
[Programmierrichtlinien, klicken]
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, klicken]
[Grundkenntnisse Servomotor, klicken].
3. Start der Programmierung
Nachdem die Schritte 1 und 2 abgeschlossen sind, kann mit der Programmierung des Projektes gestartet werden.
1) #include
Für das Projekt wird ein Servomotor verwendet, hierfür wird eine Bibliothek benötigt.
Diese wird über den Befehl #include <Name>
hinzugefügt.
Quelltext 1: Servo.ino
Lösung |
#include <Servo.h> // Bibliothek einbinden
void setup()
{
//später
}
void loop()
{
//später
}
|
2) Initialisierung
Der nächste Schritt ist, alle Variablen zu initialisieren, die später verwendet werden.
Es müssen 3 Variablen angelegt werden, für den Motor, Variable um den analogen Wert des Potentiometers zu speicher und eine Variable für die Position des Motors.
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()
{
//später
}
void loop()
{
//später
}
|
3) attach()
In diesem Schritt soll dem Arduino mitgeteilt werden, mit welcher PWM Schnittstelle der Motor verbunden ist.
Dies kann man mit der Funktion Variable.atach(Schnittstelle);
zugewiesen werden.
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()
{
//später
}
|
4) analogRead()
Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen werden und in einer Variable gespeichert werden.
Dafür muss diese Funktion verwendet werden, int SpeicherVariable = analogRead(Schnittstelle);
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
}
|
5) map()
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpasse.
Dies lässt sich mit der Funktion map(value, fromLow, fromHigh, toLow, toHigh);
lösen.
Value ist der Vorgabewert, da mit dem Potentiometer der Motor gesteuert wird, braucht man hier den Wert von der Poti Schnittstelle.
In den anderen Spalten werden die minimalen und maximalen Werte der Hardware eingetragen (siehe Grundkenntnisse).
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);
}
|
5) write()
Der letzte Schritt, damit der Motor sich bewegt und die Postion erhält ist Motor.write(Variable);
<brb>
Write übertragt die in der Klammer festgelegten Werte zum Motor.
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);
Motor.write(Position); // Motor zur Position bewegen
}
|
Schritt 4
- Nach dem Beenden von Schritt 3, kann nun das Ergebnis mit der Musterlösung verglichen werden.
Musterlösung
Quelle: Link
Musterlösung |
# include <Servo.h> // Bibliothek einbinden
Servo Motor; // Bezeichnung des Motors
/* Variablen deklarieren */
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);
Motor.write(Position); // Motor zur Position bewegen
}
|
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre