Ich fang gerad erst an mit der Elektronik und muss agen, das hier ist für mich eines der besten Einführungen in das Thema Arduino und technische Wissen. Danke dafür!
Tolles Video! Eine Frage hätte ich allerdings. Wenn ich das Potentiometer durch eine MESA 7i96s ersetzte, kann ich diesen auch mit einem analogen Signal steuern oder brauche ich ein Potentiometer, um die Spannung zu steuern, da der Winkel in Abhängigkeit der Spannung am Servo eingestellt wird?
Arduino: 1.6.0 (Windows 8), Board: "Arduino Uno" servocontrol1.0.ino:1:20: error: missing terminating > character servocontrol1.0.ino:1:20: fatal error: Servo.ha: No such file or directory compilation terminated. Error compiling. This report would have more information with "Show verbose output during compilation" enabled in File > Preferences. Was heißt das? Und was hab ich falsch gemacht?
tolles Video, habe das Programm übernommen, Hab aber ein Problem mit der Drehrichtungsänderung (val = -map(val, 0, 1023, 0, 180); ich hab Änderungen vorgenommen,aber ohne Erfolg. Was kann man noch tun?
Super Video. Reicht dem Servo die 5 V die der Arduino abgibt? Oder sollte man die Servos mit einen extra 5 Volt Netzteil betreiben? Ich frag nur weil mein Arduino gerade anscheinden wegen sowas durchgebrannt ist... der Servos ging 5 mal und dann ist es durch gebrannt. Hat er vllt zu viel Strom gezogen?
Die Miniservos, die vielen Starterkits beiliegen, können eigentlich problemlos über den Arduino versorgt werden. Größere Servos brauchen eine eigene Stromversorgung. Welchen Servo hast du angeschlossen und wie wurde der Arduino zu dem Zeitpunkt mit Strom versorgt - per 12V Buchse oder 5V USB?
Es interessiert mich schon länger wie man Servos steuern kann, ich würde gern mal einen Roboter in Menschlicher Form bauen, habe aber keine Ahnung was man da für Servos benutzen sollte, für das Skelett würde ich PVC Rohre verwenden, aber da habe ich auch keine Ahnung wie man diese an den Servos, oder die Servos an den Rohren befestigen müsste. Kennst du dich damit etwas aus, oder kennst du jemanden der sich mit sowas auskennt? Wäre sehr interessant ein einfaches bewegliches Skelett aufzubauen das mit Servos bewegt wird und dann irgendwann immer weiter auszubauen.
Also, die meisten Servos haben eine bestimmte fixe Geschwindigkeit, mit der sie die Zielposition anfahren. Möglich wäre z.B. die Endposition nicht direkt anzusteuern, sondern aus dem Programmcode in Teilschritten, die sich der Zielposition nähern. Das wird wahrscheinlich aber eine etwas ruckelige Bewegung zur Folge haben.
Hallo, die Ansteuerung funktioniert soweit wunderbar, allerdings habe ich einen Taster, wenn ich den Taster gedrückt halte, arbeitet der Servo, jetzt möchte ich aber ganz gern, das der Servo nach loslassen des Tasters in seine Ausgangsstellung geht, gibt es da eine Möglichkeit?
myservo.write(map(digitalRead(TASTER_PIN), 0, 1, 0, 180)); Wenn ich dich richtig verstehe, soll der Servo beim Drücken sich ausfahren und danach zurück?!? Dann sollte das hier funktionieren.
Scheint ja zu funktionieren, nur hab ich gehört (absoluter Arduino Anfänger), dass man nicht mehr als 20mA über das Board laufen lassen soll. Aber eigentlich ziehen Servos schnell mehr als 20mA. Oder sind die beiden gewählten Pins am Board dafür genau ausgelegt?
Zur Stromversorgung des Servos werden die +5V/GND Pins des Arduino verwendet, die vertragen laut Datenblatt bis zu 200mA (wahrscheinlich eher mehr, in manchen Foren ist von bis zu 400mA die Rede). Beim PWM-Pin für das Steuersignal selbst wird dann keine so große Leistung benötigt.
Deine Schaltung und die Art wie du alles erklärt hast finde ich super! Der Servo dreht bei mir nur durch sobald ich den Potti zu weit aufdrehe. :/ Könntest du oder Jemand anderes mir sagen woran das liegen könnte? Ist der Servo kaputt? schonmal Danke und Liebe Grüße!
Hi! Das beste deutschsprachige Einsteigerbuch ist aktuell "Die elektronische Welt mit Arduino entdecken" von Erik Bartmann. Weitere Bücher siehe hier: www.makerblog.at/arduino-buchtipps/
Kann man das Potentiometer so einstellen, bzw programmieren das es nur in einem Drehwinkel von .. 40-60° wirkt? Also das der Servo bei 60° voll ausgefahren ist?
Hi, der Zusammenhang zwischen den 10-bit (0-1023) vom Potentiometer und den 0-180 Grad, die an den Servo gesendet werden ist ein rein rechnerischer. Über die Zeilen val = map(val, 0, 1023, 0, 180); im Arduino Sketch lässt sich das gut steuern, wenn man da z.B. den max. Ausschlag von 1023 durch einen niedrigeren Wert ersetzt, dann reagiert der Servo empfindlicher auf die Drehung am Potentiometer. So lässt sich auch das von dir gewünschte Verhalten einstellen.
Makerblog.at - Arduino & Co Hallo, habe einen Joystick, also quasi zwei Potentiometer. Kann ich (wie beschrieben) einfach den map(val, wert1, wert2) ändern, damit die ansteuerug feiner wird? Also zb. (0, 500) ?? Und dann wäre noch die Frage, ob man den servo mit einer if-Bedingung, beim drücken des Joystick (Switch), dazu bringen kann, dass er nicht zurük in die Ausgangsposition geht?? Versuche seit Tagen einen Code dafür zu finden. Danke schon einmal im Vorraus
Jan Borggreven Hallo Jan, wenn du die Ansteuerung feiner haben willst, dann brauchst du das map() eigentlich gar nicht. Der Wert vom Potentiometer wird vom Analogpin des Arduino als 10bit-Wert (0-1023) geliefert, den könntest du ja direkt nehmen. Feiner geht es allerdings auf diesem Weg nicht mehr. Für jeden anderen Wertebereich, in den du den Potentiometerwert umwandeln möchtest, kannst du wie von dir geschrieben einfach das 180 durch das Maximum des Wertebereichs Wert ersetzen.
Hallo, bei mir funktioniert das Programm leider nicht wie gewollt. Ich habe alles wie im Video angeschlossen, benutze allerdings einen Tower Pro SG 90 Servo, sobald ich das Programm starte dreht sich der Servo in eine Richtung bis zum Anschlag und bleibt dann stehen (bzw will weitere drehen was aber durch den mechanischen Anschlag verhindert wird) Was muss ich ändern, dass mein Servo auf die vom Poti vorgegebene Position fährt?
+DanNi S. Was ich noch vergessen habe zu erwähnen ist, dass sich durch ein Drehen am Poti während des Verfahrens lediglich die Geschwindigkeit verändert mit der der Servo bis zum Anschlag fährt. Es wäre super wenn mir jmd helfen kann
+DanNi S. Was schickst du den an den Servo? Hast du dir den Wert mal über Serial.print() angeschaut und ausgeben lassen? Ist die Steuerleitung des Servo auch sicher an einem der PWM-Pins angeschlossen? Normalerweise funktionieren diese kleinen Zwerge recht zuverlässig, da gibts nicht viel was man falsch machen kann. Notfalls Foto des Aufbaus und Arduino Sketch an mich mailen, meine Mail findest du auf meinem Blog.
Ich habe einen Potentiometer verwendet. Vielleicht hab ich die Kontakte falsch angeschlossen oder es war ein Produktionsfehler. Bin eben kein Experte ¯\_(ツ)_/¯
Ich bin Anfänger und wollte es mit einem 360 Grad Towerpro md 995 testen, jedoch dreht er sich die ganze Zeit und ändert beim Drehen am Potentiometer nur die Richtung oder bleibt steht bei Mittelstellung des Potentiometers. MfG
Das ist glaub ich ein 360 Grad Continous Servo, oder? Da funktioniert das etwas anders, mit dem Beispielcode würde er sich immer weiter drehen, also ähnlich wie bei dir beschrieben. Allerdings hab ich so einen Servo noch nicht ausprobiert, kann da also keiner wirklich zuverlässige Aussage machen. Auf arduino.cc heisst es dazu beim write()-Befehl: "On a continuous rotation servo, this will set the speed of the servo (with 0 being full-speed in one direction, 180 being full speed in the other, and a value near 90 being no movement)."
Makerblog.at - Arduino & Co okay ich werde mal weiter sehen habe auch win motorshield muss mal sehen, ob man darüber es so hinbekommt wie ich es mir vorstelle
Weil du Schrittmotoren direkt über die Output-Pins mit Spannung (und Strom) versorgst, allerdings ziehen die definitiv mehr Strom als 20mA. Der Servo braucht nur ein ganz schwaches PWM-Steuersignal
Zweiten Servo und weiteres Poti auf anderen Pins anschliessen, diese passend initialisieren. Dann ein weiteres Servoobjekt Servo myservo1; und eine weitere Variable int val1; einführen und im loop() alle Zeilen bis aufs delay() angepasst auf die Variablen und Pins der 2. Poti/Servo-Einheit verdoppeln. Das müsste dann schon funktionieren, das kriegst du sicher hin.
hallo ich habe mal eine frage und zwar habe ich ein programm geschrieben und es funktioniert nur zur hälfte und zwar geht alles bis zu myservo2 und der dritte soll sich mit dem taster 7=pin6 und 8=pin7 langsam nach links und langsam nach rechts bewegen jedoch macht dieser nix und fehler zeigt es auch nicht hier schonmal der Code wenn Sie mir helfen können :) // Programm: mit 4 servos und 8 tastern // Author: Arduino and Co. #include // Stellwinkel des Servos (Startposition: mittig) int angle = 45; // Lag zum warten auf den Servo int lag = 10; Servo myservo, myservo1, myservo2, myservo3; int val; int keyone = 0; // Pin an nr. 0 int Keytwo = 1; // Pin an nr. 1 int keythree = 2; // Pin an nr. 2 int keyfour = 3; // Pin an nr. 3 int keyfive = 4; // Pin an 4 int keysix = 5; // Pin an 5 int keyseven = 6; // Pin an 6 int keyeight = 7; // Pin an 7 void setup () { // Servo an Pin 11 angeschloßen myservo.attach (11); // Set the pin as input pinMode (keyone, INPUT); // Crank internal pull-up resistor digitalWrite (keyone, HIGH); pinMode (Keytwo, INPUT); digitalWrite (Keytwo, HIGH); pinMode (keythree, INPUT); digitalWrite (keythree, HIGH); pinMode (keyfour, INPUT); digitalWrite (keyfour, HIGH); // Servo an Pin 10 angeschloßen myservo1.attach (10); // Set the pin as input pinMode (keyone, INPUT); // Crank internal pull-up resistor digitalWrite (keyone, HIGH); pinMode (Keytwo, INPUT); digitalWrite (Keytwo, HIGH); pinMode (keythree, INPUT); digitalWrite (keythree, HIGH); pinMode (keyfour, INPUT); digitalWrite (keyfour, HIGH); // Servo an Pin 9 angeschloßen myservo2.attach (9); // Set the pin as input pinMode (keyfive, INPUT); // Crank internal pull-up resistor digitalWrite (keyfive, HIGH); pinMode (keysix, INPUT); digitalWrite (keysix, HIGH); // Servo an Pin 8 angeschloßen myservo3.attach (8); // Set the pin as input pinMode (keyseven, INPUT); // Crank internal pull-up resistor digitalWrite (keyseven, HIGH); pinMode (keyeight, INPUT); digitalWrite (keyeight, HIGH); } void loop () { // Le the value of the Left Key (On / Off) val = digitalRead (keyone); // If the key is pressed, move the servo if (val!=1) { myservo.write (45); // Move the servant to the angle of 60 degrees delay (15); // Delay for the servant reach the position } val = digitalRead (Keytwo); if (val!=1) { myservo.write (90); // Move the servant to the angle of 90 degrees delay (15); } val = digitalRead (keythree); if (val!=1) { myservo.write (180); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfour); if (val!=1) { myservo.write (60); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyone); // If the key is pressed, move the servo if (val!=1) { myservo1.write (45); // Move the servant to the angle of 60 degrees delay (15); // Delay for the servant reach the position } val = digitalRead (Keytwo); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 90 degrees delay (15); } val = digitalRead (keythree); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfour); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfive); if (val!=1) { myservo2.write (15); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keysix); if (val!=1) { myservo2.write (150); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyseven); if(val!=1){ if(angle > 0){ angle = angle-1; delay(lag);} myservo3.write(10); delay (15);{ } val = digitalRead (keyeight); if(val!=1){ if(angle < 180){ angle = angle+1; delay(lag);} myservo3.write(180); delay (15); } } }
Hi. Du änderst bei den beiden Tasten (am Ende des Codes) zwar den angle-Wert, schickst dann aber immer 10 oder 180 über myservo3.write an den Servo? Ich denke da gehört ein .write(angle) hin, dann sollte sich schon was tun. Außerdem müsstest du bei den anderen Keys auch jeweils den Wert angle auf den an den Servo geschickten Wert setzen, sonst kann es dann sein, dass beim ersten Klick auf Key7 oder Key8 zwar der neue angle=46 berechnet wird, der Servo von Key6 aber noch auf 150 steht und dann nicht eine kleine Bewegung macht sondern zuerst von 150 auf 46 Grad zurückfährt.
hallo danke für die schnelle antwort aber das mit dem write zuangle hab ich schon versucht aber das geht nicht und es soll ja nur servo3 feingesteuert werden die anderen 3servos sollen bestimmte positionen fahren und stehen bleiben ich möchte mit diesen programm in meinem auto die heitzung mit servos ansteuern und da soll servo 0 und 1 die reglung für die luft steuern also frontscheibe oder füsse und servo 2 soll außen und ihnen luft steuern und servo 3 warm und kalt und da bei warm und kalt der servo sich nur langsam bewegen soll brauch ich eine lösung am liebsten wäre mir wenn ich dazu noch 3 rote led´s und 3 blaue led´s ansteuern könnte also wenn der servolangsam zu heiß wechselt eine rote led nach der anderen aufleuchtet bis der servo anhält und und alle roten led´s leuchten für voll heiß und anders herum zu den blauen für kalt. Mein problem ist ich hab den arduino erst seit einer woche und kenn mich da nicht so aus und weis nicht ob das machbar ist (ich hab ein Arduino Mega 2560) würde mich freuen wenn sie mein programm ein wenig ändern könnten aber wenn nicht dank ich ihnen trotzdem :)
Michael Thomas Hallo Michael, OK, ich glaub jetzt versteh ich was du meinst. Trotzdem, wenn du den angle bei myservo3.write() nicht mitgibst (und dieser sich nicht langsam ändert) dann wird der Servo immer so schnell wie möglich zum Endpunkt fahren. Hast du schon probiert, in den beiden if{} für keyseven und keyeight und am Ende vom loop() eine Ausgabe des aktuellen angle-Wertes über Serial.println auf den Seriellen Monitor am PC zu machen? Dann kannst du dir zumindest sicher sein, dass die Buttonklicks richtig erkannt und der angle jeweils um 1 erhöht oder erniedrigt wird.
// Ansteuern von 4 servos #include int posmyservo3 = 45; //StartpositionH int delayPeriod = 10; // Geschwindigkeit Servo myservo, myservo1, myservo2, myservo3; int val; int keyone = 0; // Pin an nr. 0 int Keytwo = 1; // Pin an nr. 1 int keythree = 2; // Pin an nr. 2 int keyfour = 3; // Pin an nr. 3 int keyfive = 4; // Pin an 4 int keysix = 5; // Pin an 5 int keyseven = 6; // Pin an 6 int keyeight = 7; // Pin an 7 void setup () { // Servo an Pin 11 angeschloßen myservo.attach (11); // Set the pin as input pinMode (keyone, INPUT); // Crank internal pull-up resistor digitalWrite (keyone, HIGH); pinMode (Keytwo, INPUT); digitalWrite (Keytwo, HIGH); pinMode (keythree, INPUT); digitalWrite (keythree, HIGH); pinMode (keyfour, INPUT); digitalWrite (keyfour, HIGH); // Servo an Pin 10 angeschloßen myservo1.attach (10); // Set the pin as input pinMode (keyone, INPUT); // Crank internal pull-up resistor digitalWrite (keyone, HIGH); pinMode (Keytwo, INPUT); digitalWrite (Keytwo, HIGH); pinMode (keythree, INPUT); digitalWrite (keythree, HIGH); pinMode (keyfour, INPUT); digitalWrite (keyfour, HIGH); // Servo an Pin 9 angeschloßen myservo2.attach (9); // Set the pin as input pinMode (keyfive, INPUT); // Crank internal pull-up resistor digitalWrite (keyfive, HIGH); pinMode (keysix, INPUT); digitalWrite (keysix, HIGH); // Servo an Pin 8 angeschloßen myservo3.attach (8); pinMode (keyseven, INPUT); pinMode (keyeight, INPUT); } void loop () { // Le the value of the Left Key (On / Off) val = digitalRead (keyone); // If the key is pressed, move the servo if (val!=1) { myservo.write (45); // Move the servant to the angle of 60 degrees delay (15); // Delay for the servant reach the position } val = digitalRead (Keytwo); if (val!=1) { myservo.write (90); // Move the servant to the angle of 90 degrees delay (15); } val = digitalRead (keythree); if (val!=1) { myservo.write (180); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfour); if (val!=1) { myservo.write (60); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyone); // If the key is pressed, move the servo if (val!=1) { myservo1.write (45); // Move the servant to the angle of 60 degrees delay (15); // Delay for the servant reach the position } val = digitalRead (Keytwo); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 90 degrees delay (15); } val = digitalRead (keythree); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfour); if (val!=1) { myservo1.write (45); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keyfive); if (val!=1) { myservo2.write (15); // Move the servant to the angle of 120 degrees delay (15); } val = digitalRead (keysix); if (val!=1) { myservo2.write (150); // Move the servant to the angle of 120 degrees delay (15); } if(digitalRead(6) == HIGH){ if (posmyservo3 < 170){ posmyservo3=posmyservo3+1; digitalWrite(12,HIGH); } } if(digitalRead(7) == HIGH){ if (posmyservo3 > 30){ posmyservo3=posmyservo3-1; digitalWrite(12,HIGH); } } myservo3.write(posmyservo3); delay(delayPeriod); digitalWrite(12,LOW); }
servus allesamt, hab ne frage zu meinem Projekt, ich bin gerade an einer Steuerung zur Füllstandskontrolle in einem Behälter. Dieser bei einem gewissen Füllstand von einer Impellerpumpe abgepumpt wird. Jetzt mein Problem ich will einen Not-Aus Schalter in meine Schaltung einbauen der den Pumpvorgang unterbricht und den Code vom Arduino unterbricht , und eine Fehlermeldung an ein Display schickt. Wer kann mir helfen?
Ich weiß, es kommt SEHR spät. Aber du könntest machen, dass wenn der schalter gedrückt wird, eine Variable zu null gesetzt wird und die Variable ist die Pumpgeschwindigkeit. LG
Ich fang gerad erst an mit der Elektronik und muss agen, das hier ist für mich eines der besten Einführungen in das Thema Arduino und technische Wissen. Danke dafür!
Hallo gutes Video sehr gut erklärt. Gibt es eine Möglichkeit den Servo vom pc direkt anzusteuern in einem nich auf Text basierendem Programm ?
Dankeschön für das gute Tutorial!
sehr gutes video :) einfach gehalten aber trotzdem strukturiert erklärt :)
Danke für den Einblick die Steuerung.
So ein gutes Video.
Vielen Dank!!
Tolles Video! Eine Frage hätte ich allerdings. Wenn ich das Potentiometer durch eine MESA 7i96s ersetzte, kann ich diesen auch mit einem analogen Signal steuern oder brauche ich ein Potentiometer, um die Spannung zu steuern, da der Winkel in Abhängigkeit der Spannung am Servo eingestellt wird?
Arduino: 1.6.0 (Windows 8), Board: "Arduino Uno"
servocontrol1.0.ino:1:20: error: missing terminating > character
servocontrol1.0.ino:1:20: fatal error: Servo.ha: No such file or directory
compilation terminated.
Error compiling.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Was heißt das? Und was hab ich falsch gemacht?
Vielen Dank!
tolles Video, habe das Programm übernommen, Hab aber ein Problem mit der Drehrichtungsänderung
(val = -map(val, 0, 1023, 0, 180); ich hab Änderungen vorgenommen,aber ohne Erfolg. Was kann man noch tun?
Hallo, für mein Projekt würde ich zwei Poti anschließen wollen um den Servo von zwei Positionen zu steuern, ist das möglich??
kannst du auch ein Video mit nem 360° Servo machen???
Super Video. Reicht dem Servo die 5 V die der Arduino abgibt? Oder sollte man die Servos mit einen extra 5 Volt Netzteil betreiben? Ich frag nur weil mein Arduino gerade anscheinden wegen sowas durchgebrannt ist... der Servos ging 5 mal und dann ist es durch gebrannt. Hat er vllt zu viel Strom gezogen?
Die Miniservos, die vielen Starterkits beiliegen, können eigentlich problemlos über den Arduino versorgt werden. Größere Servos brauchen eine eigene Stromversorgung.
Welchen Servo hast du angeschlossen und wie wurde der Arduino zu dem Zeitpunkt mit Strom versorgt - per 12V Buchse oder 5V USB?
Es interessiert mich schon länger wie man Servos steuern kann, ich würde gern mal einen Roboter in Menschlicher Form bauen, habe aber keine Ahnung was man da für Servos benutzen sollte, für das Skelett würde ich PVC Rohre verwenden, aber da habe ich auch keine Ahnung wie man diese an den Servos, oder die Servos an den Rohren befestigen müsste. Kennst du dich damit etwas aus, oder kennst du jemanden der sich mit sowas auskennt? Wäre sehr interessant ein einfaches bewegliches Skelett aufzubauen das mit Servos bewegt wird und dann irgendwann immer weiter auszubauen.
Aiba Randolf Kauf dir nen günstigen 3D Drucker wie den Anet A8 und du kannst dir das ganze Skelett passend für deine Servos ausdrucken :D
Aiba Randolf wird aber jede Menge Geld verschlingen
auch wenn es bischen spät ist einfach ausprobieren
Danke!
Genial! Gesucht, gefunden, genau was wir brauchen! 👍
Aber ginge auch ein mini Arduino?
("Arduino Pro Mini" oder so?)
Wenn ich nun eine Weiche auf meiner Modellbahn damit ansteuern möchte, wie sag ich dann dem Servo, dass er sich langsam bewegen soll?
Also, die meisten Servos haben eine bestimmte fixe Geschwindigkeit, mit der sie die Zielposition anfahren. Möglich wäre z.B. die Endposition nicht direkt anzusteuern, sondern aus dem Programmcode in Teilschritten, die sich der Zielposition nähern. Das wird wahrscheinlich aber eine etwas ruckelige Bewegung zur Folge haben.
Hallo, die Ansteuerung funktioniert soweit wunderbar, allerdings habe ich einen Taster, wenn ich den Taster gedrückt halte, arbeitet der Servo, jetzt möchte ich aber ganz gern, das der Servo nach loslassen des Tasters in seine Ausgangsstellung geht, gibt es da eine Möglichkeit?
em key klar
myservo.write(map(digitalRead(TASTER_PIN), 0, 1, 0, 180));
Wenn ich dich richtig verstehe, soll der Servo beim Drücken sich ausfahren und danach zurück?!? Dann sollte das hier funktionieren.
Scheint ja zu funktionieren, nur hab ich gehört (absoluter Arduino Anfänger), dass man nicht mehr als 20mA über das Board laufen lassen soll. Aber eigentlich ziehen Servos schnell mehr als 20mA. Oder sind die beiden gewählten Pins am Board dafür genau ausgelegt?
Zur Stromversorgung des Servos werden die +5V/GND Pins des Arduino verwendet, die vertragen laut Datenblatt bis zu 200mA (wahrscheinlich eher mehr, in manchen Foren ist von bis zu 400mA die Rede). Beim PWM-Pin für das Steuersignal selbst wird dann keine so große Leistung benötigt.
Deine Schaltung und die Art wie du alles erklärt hast finde ich super! Der Servo dreht bei mir nur durch sobald ich den Potti zu weit aufdrehe. :/
Könntest du oder Jemand anderes mir sagen woran das liegen könnte? Ist der Servo kaputt?
schonmal Danke und Liebe Grüße!
Bei mir iat der servo aus dem arduino stqrter kit kaput der hat sich wtändig über die maximalposition hinqus gedreht und jetzt ist das getriebe kaputt
hahahaahaha *auslach*
hallo, tolles video!
kannst du mir vielleicht ein gutes arduino/elektronik- buch empfehlen?
Hi! Das beste deutschsprachige Einsteigerbuch ist aktuell "Die elektronische Welt mit Arduino entdecken" von Erik Bartmann. Weitere Bücher siehe hier: www.makerblog.at/arduino-buchtipps/
Kann man das Potentiometer so einstellen, bzw programmieren das es nur in einem Drehwinkel von .. 40-60° wirkt? Also das der Servo bei 60° voll ausgefahren ist?
Hi, der Zusammenhang zwischen den 10-bit (0-1023) vom Potentiometer und den 0-180 Grad, die an den Servo gesendet werden ist ein rein rechnerischer. Über die Zeilen val = map(val, 0, 1023, 0, 180); im Arduino Sketch lässt sich das gut steuern, wenn man da z.B. den max. Ausschlag von 1023 durch einen niedrigeren Wert ersetzt, dann reagiert der Servo empfindlicher auf die Drehung am Potentiometer. So lässt sich auch das von dir gewünschte Verhalten einstellen.
Makerblog.at - Arduino & Co
Hallo,
habe einen Joystick, also quasi zwei Potentiometer.
Kann ich (wie beschrieben) einfach den map(val, wert1, wert2) ändern, damit die ansteuerug feiner wird? Also zb. (0, 500) ??
Und dann wäre noch die Frage, ob man den servo mit einer if-Bedingung, beim drücken des Joystick (Switch), dazu bringen kann, dass er nicht zurük in die Ausgangsposition geht?? Versuche seit Tagen einen Code dafür zu finden.
Danke schon einmal im Vorraus
Jan Borggreven Hallo Jan, wenn du die Ansteuerung feiner haben willst, dann brauchst du das map() eigentlich gar nicht. Der Wert vom Potentiometer wird vom Analogpin des Arduino als 10bit-Wert (0-1023) geliefert, den könntest du ja direkt nehmen. Feiner geht es allerdings auf diesem Weg nicht mehr.
Für jeden anderen Wertebereich, in den du den Potentiometerwert umwandeln möchtest, kannst du wie von dir geschrieben einfach das 180 durch das Maximum des Wertebereichs Wert ersetzen.
Hallo, bei mir funktioniert das Programm leider nicht wie gewollt.
Ich habe alles wie im Video angeschlossen, benutze allerdings einen Tower Pro SG 90 Servo,
sobald ich das Programm starte dreht sich der Servo in eine Richtung bis zum Anschlag und bleibt dann stehen (bzw will weitere drehen was aber durch den mechanischen Anschlag verhindert wird)
Was muss ich ändern, dass mein Servo auf die vom Poti vorgegebene Position fährt?
+DanNi S. Was ich noch vergessen habe zu erwähnen ist, dass sich durch ein Drehen am Poti während des Verfahrens lediglich die Geschwindigkeit verändert mit der der Servo bis zum Anschlag fährt.
Es wäre super wenn mir jmd helfen kann
+DanNi S. Was schickst du den an den Servo? Hast du dir den Wert mal über Serial.print() angeschaut und ausgeben lassen? Ist die Steuerleitung des Servo auch sicher an einem der PWM-Pins angeschlossen? Normalerweise funktionieren diese kleinen Zwerge recht zuverlässig, da gibts nicht viel was man falsch machen kann. Notfalls Foto des Aufbaus und Arduino Sketch an mich mailen, meine Mail findest du auf meinem Blog.
Tolles Video.
Aber irgendwie hat mein regler begonnen zu rauchen. Was ist passiert? LG
Mit Regler meinst du das Potentiometer oder die Servos? Mit den 5V vom Arduino und ohne Kurzschluss sollte eigentlich nichts rauchen :)
Ich habe einen Potentiometer verwendet. Vielleicht hab ich die Kontakte falsch angeschlossen oder es war ein Produktionsfehler. Bin eben kein Experte
¯\_(ツ)_/¯
Ok danke
Digga nice, Danke!
Ich bin Anfänger und wollte es mit einem 360 Grad Towerpro md 995 testen, jedoch dreht er sich die ganze Zeit und ändert beim Drehen am Potentiometer nur die Richtung oder bleibt steht bei Mittelstellung des Potentiometers.
MfG
Also er regelt sozusagen nur die Spannung in höher oder niedriger und positiv und negativ
Das ist glaub ich ein 360 Grad Continous Servo, oder? Da funktioniert das etwas anders, mit dem Beispielcode würde er sich immer weiter drehen, also ähnlich wie bei dir beschrieben. Allerdings hab ich so einen Servo noch nicht ausprobiert, kann da also keiner wirklich zuverlässige Aussage machen. Auf arduino.cc heisst es dazu beim write()-Befehl: "On a continuous rotation servo, this will set the speed of the servo (with 0 being full-speed in one direction, 180 being full speed in the other, and a value near 90 being no movement)."
Makerblog.at - Arduino & Co okay ich werde mal weiter sehen habe auch win motorshield muss mal sehen, ob man darüber es so hinbekommt wie ich es mir vorstelle
Makerblog.at - Arduino & Co trotzdwm vielen Dank
Wie könnten ich den Arduino und den Servo ausser der USB Schnittstelle versorgen ?
An jedem Arduino ist eine Buchse für ein Steckernetzteil.
Ich bekomme eine Fehlermeldung "(sketch_jul03a.ino:17:1: error: expected ‘;’ before ‘Serial’) " woran liegt das ?
ich hab alles genau so gemacht !
kommt jetzt wahrscheinlich spät aber irgendwo in deinem Code wird ein semikolon (dieses Zeichen ;) welches du am Ende jeder Zeile machen musst
fehlen
wieso braucht man bei einem Schrittmotor ein Schutz wie Motor ics für den arduino aber beim servo Motor nicht?
Weil du Schrittmotoren direkt über die Output-Pins mit Spannung (und Strom) versorgst, allerdings ziehen die definitiv mehr Strom als 20mA. Der Servo braucht nur ein ganz schwaches PWM-Steuersignal
wie muss ich den Code schreiben wenn ich das ganze mit einen zweiten Servo und einen 2 Potentiometer machen will
Zweiten Servo und weiteres Poti auf anderen Pins anschliessen, diese passend initialisieren. Dann ein weiteres Servoobjekt Servo myservo1; und eine weitere Variable int val1; einführen und im loop() alle Zeilen bis aufs delay() angepasst auf die Variablen und Pins der 2. Poti/Servo-Einheit verdoppeln. Das müsste dann schon funktionieren, das kriegst du sicher hin.
hallo ich habe mal eine frage und zwar habe ich ein programm geschrieben und es funktioniert nur zur hälfte und zwar geht alles bis zu myservo2 und der dritte soll sich mit dem taster 7=pin6 und 8=pin7 langsam nach links und langsam nach rechts bewegen jedoch macht dieser nix und fehler zeigt es auch nicht hier schonmal der Code wenn Sie mir helfen können :)
// Programm: mit 4 servos und 8 tastern
// Author: Arduino and Co.
#include
// Stellwinkel des Servos (Startposition: mittig)
int angle = 45;
// Lag zum warten auf den Servo
int lag = 10;
Servo myservo, myservo1, myservo2, myservo3;
int val;
int keyone = 0; // Pin an nr. 0
int Keytwo = 1; // Pin an nr. 1
int keythree = 2; // Pin an nr. 2
int keyfour = 3; // Pin an nr. 3
int keyfive = 4; // Pin an 4
int keysix = 5; // Pin an 5
int keyseven = 6; // Pin an 6
int keyeight = 7; // Pin an 7
void setup ()
{
// Servo an Pin 11 angeschloßen
myservo.attach (11);
// Set the pin as input
pinMode (keyone, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyone, HIGH);
pinMode (Keytwo, INPUT);
digitalWrite (Keytwo, HIGH);
pinMode (keythree, INPUT);
digitalWrite (keythree, HIGH);
pinMode (keyfour, INPUT);
digitalWrite (keyfour, HIGH);
// Servo an Pin 10 angeschloßen
myservo1.attach (10);
// Set the pin as input
pinMode (keyone, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyone, HIGH);
pinMode (Keytwo, INPUT);
digitalWrite (Keytwo, HIGH);
pinMode (keythree, INPUT);
digitalWrite (keythree, HIGH);
pinMode (keyfour, INPUT);
digitalWrite (keyfour, HIGH);
// Servo an Pin 9 angeschloßen
myservo2.attach (9);
// Set the pin as input
pinMode (keyfive, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyfive, HIGH);
pinMode (keysix, INPUT);
digitalWrite (keysix, HIGH);
// Servo an Pin 8 angeschloßen
myservo3.attach (8);
// Set the pin as input
pinMode (keyseven, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyseven, HIGH);
pinMode (keyeight, INPUT);
digitalWrite (keyeight, HIGH);
}
void loop ()
{
// Le the value of the Left Key (On / Off)
val = digitalRead (keyone);
// If the key is pressed, move the servo
if (val!=1)
{
myservo.write (45); // Move the servant to the angle of 60 degrees
delay (15); // Delay for the servant reach the position
}
val = digitalRead (Keytwo);
if (val!=1)
{
myservo.write (90); // Move the servant to the angle of 90 degrees
delay (15);
}
val = digitalRead (keythree);
if (val!=1)
{
myservo.write (180); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfour);
if (val!=1)
{
myservo.write (60); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyone);
// If the key is pressed, move the servo
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 60 degrees
delay (15); // Delay for the servant reach the position
}
val = digitalRead (Keytwo);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 90 degrees
delay (15);
}
val = digitalRead (keythree);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfour);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfive);
if (val!=1)
{
myservo2.write (15); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keysix);
if (val!=1)
{
myservo2.write (150); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyseven);
if(val!=1){
if(angle > 0){
angle = angle-1;
delay(lag);}
myservo3.write(10);
delay (15);{
}
val = digitalRead (keyeight);
if(val!=1){
if(angle < 180){
angle = angle+1;
delay(lag);}
myservo3.write(180);
delay (15);
}
}
}
Hi. Du änderst bei den beiden Tasten (am Ende des Codes) zwar den angle-Wert, schickst dann aber immer 10 oder 180 über myservo3.write an den Servo? Ich denke da gehört ein .write(angle) hin, dann sollte sich schon was tun.
Außerdem müsstest du bei den anderen Keys auch jeweils den Wert angle auf den an den Servo geschickten Wert setzen, sonst kann es dann sein, dass beim ersten Klick auf Key7 oder Key8 zwar der neue angle=46 berechnet wird, der Servo von Key6 aber noch auf 150 steht und dann nicht eine kleine Bewegung macht sondern zuerst von 150 auf 46 Grad zurückfährt.
hallo danke für die schnelle antwort aber das mit dem write zuangle hab ich schon versucht aber das geht nicht und es soll ja nur servo3 feingesteuert werden die anderen 3servos sollen bestimmte positionen fahren und stehen bleiben ich möchte mit diesen programm in meinem auto die heitzung mit servos ansteuern und da soll servo 0 und 1 die reglung für die luft steuern also frontscheibe oder füsse und servo 2 soll außen und ihnen luft steuern und servo 3 warm und kalt und da bei warm und kalt der servo sich nur langsam bewegen soll brauch ich eine lösung am liebsten wäre mir wenn ich dazu noch 3 rote led´s und 3 blaue led´s ansteuern könnte also wenn der servolangsam zu heiß wechselt eine rote led nach der anderen aufleuchtet bis der servo anhält und und alle roten led´s leuchten für voll heiß und anders herum zu den blauen für kalt. Mein problem ist ich hab den arduino erst seit einer woche und kenn mich da nicht so aus und weis nicht ob das machbar ist (ich hab ein Arduino Mega 2560) würde mich freuen wenn sie mein programm ein wenig ändern könnten aber wenn nicht dank ich ihnen trotzdem :)
Michael Thomas Hallo Michael, OK, ich glaub jetzt versteh ich was du meinst. Trotzdem, wenn du den angle bei myservo3.write() nicht mitgibst (und dieser sich nicht langsam ändert) dann wird der Servo immer so schnell wie möglich zum Endpunkt fahren.
Hast du schon probiert, in den beiden if{} für keyseven und keyeight und am Ende vom loop() eine Ausgabe des aktuellen angle-Wertes über Serial.println auf den Seriellen Monitor am PC zu machen? Dann kannst du dir zumindest sicher sein, dass die Buttonklicks richtig erkannt und der angle jeweils um 1 erhöht oder erniedrigt wird.
// Ansteuern von 4 servos
#include
int posmyservo3 = 45; //StartpositionH
int delayPeriod = 10; // Geschwindigkeit
Servo myservo, myservo1, myservo2, myservo3;
int val;
int keyone = 0; // Pin an nr. 0
int Keytwo = 1; // Pin an nr. 1
int keythree = 2; // Pin an nr. 2
int keyfour = 3; // Pin an nr. 3
int keyfive = 4; // Pin an 4
int keysix = 5; // Pin an 5
int keyseven = 6; // Pin an 6
int keyeight = 7; // Pin an 7
void setup ()
{
// Servo an Pin 11 angeschloßen
myservo.attach (11);
// Set the pin as input
pinMode (keyone, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyone, HIGH);
pinMode (Keytwo, INPUT);
digitalWrite (Keytwo, HIGH);
pinMode (keythree, INPUT);
digitalWrite (keythree, HIGH);
pinMode (keyfour, INPUT);
digitalWrite (keyfour, HIGH);
// Servo an Pin 10 angeschloßen
myservo1.attach (10);
// Set the pin as input
pinMode (keyone, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyone, HIGH);
pinMode (Keytwo, INPUT);
digitalWrite (Keytwo, HIGH);
pinMode (keythree, INPUT);
digitalWrite (keythree, HIGH);
pinMode (keyfour, INPUT);
digitalWrite (keyfour, HIGH);
// Servo an Pin 9 angeschloßen
myservo2.attach (9);
// Set the pin as input
pinMode (keyfive, INPUT);
// Crank internal pull-up resistor
digitalWrite (keyfive, HIGH);
pinMode (keysix, INPUT);
digitalWrite (keysix, HIGH);
// Servo an Pin 8 angeschloßen
myservo3.attach (8);
pinMode (keyseven, INPUT);
pinMode (keyeight, INPUT);
}
void loop ()
{
// Le the value of the Left Key (On / Off)
val = digitalRead (keyone);
// If the key is pressed, move the servo
if (val!=1)
{
myservo.write (45); // Move the servant to the angle of 60 degrees
delay (15); // Delay for the servant reach the position
}
val = digitalRead (Keytwo);
if (val!=1)
{
myservo.write (90); // Move the servant to the angle of 90 degrees
delay (15);
}
val = digitalRead (keythree);
if (val!=1)
{
myservo.write (180); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfour);
if (val!=1)
{
myservo.write (60); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyone);
// If the key is pressed, move the servo
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 60 degrees
delay (15); // Delay for the servant reach the position
}
val = digitalRead (Keytwo);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 90 degrees
delay (15);
}
val = digitalRead (keythree);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfour);
if (val!=1)
{
myservo1.write (45); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keyfive);
if (val!=1)
{
myservo2.write (15); // Move the servant to the angle of 120 degrees
delay (15);
}
val = digitalRead (keysix);
if (val!=1)
{
myservo2.write (150); // Move the servant to the angle of 120 degrees
delay (15);
}
if(digitalRead(6) == HIGH){
if (posmyservo3 < 170){
posmyservo3=posmyservo3+1;
digitalWrite(12,HIGH);
}
}
if(digitalRead(7) == HIGH){
if (posmyservo3 > 30){
posmyservo3=posmyservo3-1;
digitalWrite(12,HIGH);
}
}
myservo3.write(posmyservo3);
delay(delayPeriod);
digitalWrite(12,LOW);
}
servus allesamt,
hab ne frage zu meinem Projekt,
ich bin gerade an einer Steuerung zur Füllstandskontrolle in einem Behälter.
Dieser bei einem gewissen Füllstand von einer Impellerpumpe abgepumpt wird.
Jetzt mein Problem ich will einen Not-Aus Schalter in meine Schaltung einbauen der den Pumpvorgang unterbricht und den Code vom Arduino unterbricht , und eine Fehlermeldung an ein Display schickt. Wer kann mir helfen?
Ich weiß, es kommt SEHR spät.
Aber du könntest machen, dass wenn der schalter gedrückt wird, eine Variable zu null gesetzt wird und die Variable ist die Pumpgeschwindigkeit.
LG
Arduino Servos
Besser kann's nicht erklärt werden 😀👍
Vielen Dank!