Servo-Motor mit einem Potentiometer steuern (Projekt 2): Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
(Die Seite wurde geleert.)
Markierung: Geleert
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:Projekt2.jpg|thumb|rigth|300px|Abb. 1: Servo-Motor mit einem Potentiometer steuern]]


== '''Aufgabenstellung''' ==
In diesem Projekt soll ein Servo-Motor mithilfe eines Arduinos und einem Potentiometer steuerbar sein.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Video &thinsp;</strong>
|-
|
[[Datei:20230621 145037.mp4|800px]]
|}
== '''Vorab wichtig zu Wissen!''' ==
'''Arduino'''
* Der Arduino besitzt unterschiedliche [[Arduino_UNO:_Board_Anatomie | 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 [[https://de.wikipedia.org/wiki/Pulsdauermodulation PWM]] Schnittstellen sind ganz einfach zu erkennen an diesem Zeichen (~)
'''Servo-Motor'''
* Schwarz oder Braun = Masse (GND)
* Rot = +5V
* 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 Servo-Motor ein und ausgeschaltet werden, mit dem Potentiometer.
'''Steckbrett'''
* Erklärung zum arbeiten mit einem Steckbrett [[Steckbrett | klicken!]]
== '''Benötigte Materiallien''' ==
{| class="wikitable"
|+ style = "text-align: left"|
|-
! Nr. !! Anz.    !! Beschreibung !! Link !! !! Pos. !! Anz.    !! Beschreibung !!Link!!
|-
|<big><big>&#9312;</big></big>  || 1 || [[Arduino|Funduino Arduino UNO R3]] ||[https://funduinoshop.com/elektronische-module/sonstige/mikrocontroller/funduino-uno-r3-mikrocontroller-arduino-kompatibel  kaufen] ||[[Datei:Arduino Uno R3.jpg|ohne|100px|]]
|<big><big>&#9313;</big></big>  || 10 || Jumper Kabel, männlich/männlich||[https://funduinoshop.com/bauelemente/kabelsysteme/jumper-kabel/40-stueck-breadboardkabel-maennlich/maennlich-20cm kaufen]||[[Datei:R19-F-2-2.jpg|ohne|100px|]]
|-
|-
|<big><big>&#9314;</big></big>  || 1 || [[Steckbrett]] || [https://funduinoshop.com/bauelemente/steckbretter-und-platinen/steckbretter/breadboard-steckbrett-mit-830-kontakten  kaufen]||[[Datei:R12-A-9-1.jpg|ohne|100px|]]
|<big><big>&#9315;</big></big>  || 1 || [[Potentiometer_B_50K| Potentiometer 10k]]|| [https://de.rs-online.com/web/p/mechanische-drehgeber/7899649?cm_mmc=DE-PLA-DS3A-_-google-_-CSS_DE_DE_Passive_Bauelemente_Whoop-_-(DE:Whoop!)+Mechanische+Drehgeber-_-7899649&matchtype=&pla-341386177139&gclid=EAIaIQobChMIk9DDs8_R_wIVwwGLCh16eAFKEAQYASABEgKiNPD_BwE&gclsrc=aw.ds kaufen]||[[Datei:Potentiometer 10K.png|ohne|100px|]]
|-
|-
|<big><big>&#9316;</big></big>  || 1 || [[Servomotor SG90|TowerPro SG90 Servomotor]]||[https://funduinoshop.com/elektronische-module/elektromotoren-und-zubehoer/servomotoren/towerpro-sg90-servomotor  kaufen]||[[Datei:R19-F-2-1.jpg|ohne|100px|]]
|-
|}
[[Datei:Projekt2_Schlatung.png|300px|thumb|right|Abb.3 Schaltung]]
== '''Aufbau Schaltung''' ==
* Auf dem Bild (Abb.3 Schaltung) wird dargestellt, wie die Schaltung für das Projekt "Servo-Motor mit einem Pogtentiometer steuern" aufgebaut werden kann.
== '''Programmierung''' ==
<big>'''Schritt 1'''</big>
* Erstellen der ersten '''Arduino Datei''' ([https://wiki.hshl.de/wiki/index.php/Erste_Schritte_mit_der_Arduino_IDE Link zum Tutorial]).
<big>'''Schritt 2'''</big>
* Grundkenntnisse vom Projekt '''"Pulsierende LED"''' verstanden haben. ([[Grundkenntnisse Programmierung (Pulsierende LED) |Link]]).
* Grundkenntnisse für das Projekt '''"Servo-Motor mit einem Potentiometer steuern"''' verstehen([[Grundkenntnisse Programmierung (Servo-Motor mit einem Potentiometer steuern) |Link zu den Grundkenntnissen]]).
<big>'''Schritt 3'''</big>
* Nachdem die Schritte 1 und 2 abgeschlossen sind, kann mit der Programmierung des Projektes gestartet werden.
'''1)''' '''#include''' <br>
Für das Projekt wird ein Servo-Motor verwendet, hierfür wird eine Bibiolothek benötigt.<br>
Diese wird über den Befehl <code> #include <Name> </code> hinzugefügt.<br>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
void setup()       
{                   
//später
}
void loop()
{
//später
}
</syntaxhighlight>
|}
'''2)''' '''Initialisierung''' <br>
Der nächste Schritt ist alle Variablen zu initialisieren die später Verwendet werden.<br>
Es müssen 3 Varialen angelegt werden, für den Motor, Variable um den analogen Wert des Potentiometers zu speicher und eine Variable für die Position des Motors.<br>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()       
{                   
//später
}
void loop()
{
//später
}
</syntaxhighlight>
|}
'''3)''' '''attach()''' <br>
In diesem Schritt soll dem Arduino mitgeteilt werden, mit welcher '''PWM'''Schnittstelle der Motor verbunden ist.<br>
Dies kann man mit der Funktion <code>'''Variable.atach(Schnittstelle);'''</code> zugewiesen werden.<br>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()       
{                   
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);                        // Motor Schnittstelle
}
void loop()
{
//später
}
</syntaxhighlight>
|}
'''4)''' '''analogRead()''' <br>
Um den Motor mit dem Potentiometer steuern zu können, müssen seine Werte ausgelesen werden und in einer Variable gespeichert werden.<br>
Dafür muss diese Funktion verwendet werden, <code>int SpeicherVariable = analogRead(Schnittstelle);</code>
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()       
{                   
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);                        // Motor Schnittstelle
}
void loop()
{
int ReglerWert = analogRead(A0);    //A0 Poti Schnittstelle
}
</syntaxhighlight>
|}
'''5)''' '''map()''' <br>
Um mit dem Potentiometer den Motor drehen zu können, müssen ihre Werte sich aneinander anpasse.<br>
Dies lässt sich mit der Funktion <code>map(value, fromLow, fromHigh, toLow, toHigh);</code> lösen
Value ist der Vorgabewert, da mit dem Potentiometer der Motor gesteurt wert braucht man hier den Wert von der Poti Schnittstelle.
In den anderen Spalten werden die minimalen und maximalen Werte der Hardware eingetragen(siehe Grundkenntnise).
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()       
{                   
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);                        // Motor Schnittstelle
}
void loop()
{
int ReglerWert = 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(ReglerWert, 0, 1023, 0, 180);
}
</syntaxhighlight>
|}
'''5)''' '''write()''' <br>
Der letzte Schritt, damit der Motor sich bewegt und die Postion erhält ist <code> Motor.write(Variable);</code><brb>
Write übertragt die in der Klammer festgelegten Werte zum Motor.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Lösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
#include <Servo.h>
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()       
{                   
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);                        // Motor Schnittstelle
}
void loop()
{
int ReglerWert = 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(ReglerWert, 0, 1023, 0, 180);
// Motor zur Position bewegen
Motor.write(Position);
}
</syntaxhighlight>
|}
<big>'''Schritt 4'''</big>
* Nach dem beenden von Schritt 3, kann nun das Ergebnis mit der Munsterlösung verglichen werden.
== '''Musterlösung''' ==
Quelle: https://funduino.de/wp-content/uploads/2021/01/Servomotor.pdf
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Müsterlösung &thinsp;</strong>
|-
|
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
// eingebaute Bibliothek einbinden
# include <Servo.h>
// Bezeichnung des Motors
Servo Motor;
// speichert den analogen Wert des Drehpotentiometers
int ReglerWert;
// Position des Motors
int Position;
void setup()
{
// Motor an Pin 9 angeschlossen (attach)
Motor.attach(9);
}
void loop()
{
int ReglerWert = analogRead(A0);
/*
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);
// Motor zur Position bewegen
Motor.write(Position);
}
</syntaxhighlight>
|}
----
<br>
→ zurück zum Hauptartikel: [[Konzipierung_und_Evaluierung_von_Arduino-Projekten_verschiedener_Schwierigkeitsgrade_für_die_Lehre | Klicken!]]

Aktuelle Version vom 14. Juli 2023, 10:20 Uhr