Arduino Projekt: Servomotor mit einem Potentiometer steuern: Unterschied zwischen den Versionen
Zeile 85: | Zeile 85: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | #include <Servo.h> // Bibliothek einbinden | ||
void setup() | void setup() | ||
{ | { | ||
Zeile 107: | Zeile 107: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | # include <Servo.h> // Bibliothek einbinden | ||
Servo Motor; | |||
// speichert den analogen Wert des Drehpotentiometers | Servo Motor; // Bezeichnung des Motors | ||
int | int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers | ||
// Position des Motors | int position_int; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
Zeile 133: | Zeile 133: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | # include <Servo.h> // Bibliothek einbinden | ||
Servo Motor; | |||
// speichert den analogen Wert des Drehpotentiometers | Servo Motor; // Bezeichnung des Motors | ||
int | int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers | ||
// Position des Motors | int position_int; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
// Motor an Pin 9 angeschlossen (attach) | Motor.attach(9); // Motor an Pin 9 angeschlossen (attach) | ||
} | } | ||
void loop() | void loop() | ||
Zeile 160: | Zeile 159: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | # include <Servo.h> // Bibliothek einbinden | ||
Servo Motor; | |||
// speichert den analogen Wert des Drehpotentiometers | Servo Motor; // Bezeichnung des Motors | ||
int | int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers | ||
// Position des Motors | int position_int; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
Zeile 173: | Zeile 172: | ||
void loop() | void loop() | ||
{ | { | ||
int | int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 189: | Zeile 188: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | # include <Servo.h> // Bibliothek einbinden | ||
Servo Motor; | |||
// speichert den analogen Wert des Drehpotentiometers | Servo Motor; // Bezeichnung des Motors | ||
int | int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers | ||
// Position des Motors | int position_int; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
void setup() | |||
Motor.attach(9); | { | ||
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach) | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
int | int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle | ||
/* | /* | ||
map -> Umwandlung des gelesenen Wertes | map -> Umwandlung des gelesenen Wertes | ||
Zeile 208: | Zeile 208: | ||
auf 0 bis 180 (Drehung des Motors) | auf 0 bis 180 (Drehung des Motors) | ||
*/ | */ | ||
position_int = map(reglerWert_int, 0, 1023, 0, 180); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 222: | Zeile 222: | ||
| | | | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | ||
#include <Servo.h> | # include <Servo.h> // Bibliothek einbinden | ||
Servo Motor; | |||
// speichert den analogen Wert des Drehpotentiometers | Servo Motor; // Bezeichnung des Motors | ||
int | int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers | ||
// Position des Motors | int position_int; // Position des Motors | ||
void setup() | void setup() | ||
{ | { | ||
// Motor an Pin 9 angeschlossen (attach) | Motor.attach(9); // Motor an Pin 9 angeschlossen (attach) | ||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
int | int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle | ||
/* | /* | ||
map -> Umwandlung des gelesenen Wertes | map -> Umwandlung des gelesenen Wertes | ||
Zeile 241: | Zeile 240: | ||
auf 0 bis 180 (Drehung des Motors) | auf 0 bis 180 (Drehung des Motors) | ||
*/ | */ | ||
position_int = map(reglerWert_int, 0, 1023, 0, 180); | |||
Motor.write(Position); | Motor.write(Position); // Motor zur Position bewegen | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Version vom 6. Juli 2023, 17:00 Uhr
Autor: Justin Frommberger
Aufgabenstellung
In diesem Projekt soll ein Servomotor mithilfe eines Arduinos und einem Potentiometer steuerbar sein.
Video vom Projekt [2] |
|
Benötigte Software
Aktuellste Arduino IDE mit der Version für ihren PC. (Download link)
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.
- Darum wird für das Projekt 2 eine PWM Schnittstelle benötigt.
- Die [PWM] Schnittstellen sind ganz einfach zu erkennen an diesem Zeichen (~)
Servomotor:
- Schwarz oder Braun = Masse (GND)
- Rot = + 5 V
- Orange, Gelb oder Weiß = PWM-Signal
Potentiometer:
Das Potentiometer greift eine Eingangsspannung auf und gibt verschieden große Mengen davon an einen Schaltkreis weiter.
So kann später der Servomotor ein und ausgeschaltet werden, mit dem Potentiometer.
Steckbrett:
Erklärung zum Arbeiten mit einem Steckbrett (klicken!)
Taster:
Ein Taster schließt einen Stromkreis, wenn man ihn drückt, lässt man ihn, loswird der Stromkreis unterbrochen.
Meistens ist eine kleine Feder eingebaut, die ihn wieder öffnet.
Benötigte Materialien
Tabelle: Materialliste[3]
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 |
Aufbau Schaltung
- In Abb. 3 wird die Schaltung für das Projekt "Servomotor mit einem Potentiometer steuern" dargestellt.[4]
Programmierung
Schritt 1: Erstellen der ersten Arduino Datei (Link zum Tutorial).
Schritt 2:
Grundkenntnisse vom Projekt "Pulsierende LED" verstanden haben. (Link).
Grundkenntnisse für das Projekt
"Servomotor mit einem Potentiometer steuern" verstehen (Link zu den Grundkenntnissen).
Schritt 3:
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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // 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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // 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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // Position des Motors
void setup()
{
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9); // Motor Schnittstelle
}
void loop()
{
int reglerWert_int = 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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // Position des Motors
void setup()
{
void setup()
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle
/*
map -> Umwandlung des gelesenen Wertes
von 0 bis 1023 (analoger Sensorwert)
auf 0 bis 180 (Drehung des Motors)
*/
position_int = map(reglerWert_int, 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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // Position des Motors
void setup()
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle
/*
map -> Umwandlung des gelesenen Wertes
von 0 bis 1023 (analoger Sensorwert)
auf 0 bis 180 (Drehung des Motors)
*/
position_int = map(reglerWert_int, 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
int reglerWert_int; // speichert den analogen Wert des Drehpotentiometers
int position_int; // Position des Motors
void setup()
{
Motor.attach(9); // Motor an Pin 9 angeschlossen (attach)
}
void loop()
{
int reglerWert_int = analogRead(A0); //A0 Poti Schnittstelle
/*
map -> Umwandlung des gelesenen Wertes
von 0 bis 1023 (analoger Sensorwert)
auf 0 bis 180 (Drehung des Motors)
*/
position_int = map(reglerWert_int, 0, 1023, 0, 180);
Motor.write(Position); // Motor zur Position bewegen
}
|
Literaturverzeichnis
- ↑ Justin Frommberger: Eigenwerk: Servomotor mit einem Potentiometer steuern [Bild] [erstellt am 04.07.2023]
- ↑ Justin Frommberger: Eigenwerk: Servomotor mit einem Potentiometer steuern [Video] [erstellt am 03.07.2023]
- ↑ Prof. Dr.-Ing. Schneider: HSHL: HSHL-Mechatronik-Baukasten [Online] https://wiki.hshl.de/wiki/index.php/HSHL-Mechatronik-Baukasten [abgerufen am 05.07.2023]
- ↑ MS: Arduino Projekte: Die 3 coolsten Projekte für Einsteiger [Online] https://praxistipps.chip.de/arduino-projekte-die-3-coolsten-projekte-fuer-einsteiger_101795 [abgerufen am 06.07.2023]
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre