Nel contributo di blog di oggi guidiamo quel che AZ-consegna Servo MG996Rsu uno Modulo di leva di comando.
Inoltre abbiamo bisogno:
1x AZ-consegna Mikrokontroller, compatibilmente con ArduinoONU R3
1x3a serie 40 Stk. Filo di pullover m2m / f2m / f2f
Il Servo tira nella società fino a 2.5A - troppo per il nostro Mikrokontroller, compatibilmente con ONU di Arduino R3. Dunque, dobbiamo fornirlo su una parte netta esterna.
Aumentiamo il giro seguente. Inoltre, deve esser seguito che colleghiamo GND di Arduino con lo GND della parte netta esterna.
In Servo ci sono 3 linee. Il più scuro (nel nostro caso marrone) è GND. È rosso come quasi sempre VCC (4.8 - 7.2 V di ammissione di corrente: a 2.5A), e l'ONU arancione R3 ha sterzato e con Spillo 9 è collegato da Mikrokontroller, compatibilmente con Arduino.
La leva di comando ha 5 Anschlusspins che come segue con Mikrokontroller, compatibilmente con ONU di Arduino R3 formeranno un'alleanza:
Leva di comando |
Mikrokontroller, compatibilmente con ONU di Arduino R3 |
GND |
GND |
5 V |
5 V |
VRx |
A0 |
Vry |
A1 |
A ONDE CORTE |
7 |
Per la programmazione prendiamo la biblioteca con il nome facile «Servo».
Per di più, usiamo solo lo X asse intorno a Servo nella direzione desiderabile per girare.
#include <Servo.H>; Servo servo1; //Dia a Servo un nome #define joyX A0 //Spillo A0 - leva di comando X #define joyY A1 //Spillo A1 - leva di comando Y #define joyBTN D7 //Spillo D7 - distintivo di leva di comando intervallo fondi = 0, a Lei = 0, xValue, yValue; //Variabili per posizione (fondo), in direzione di (Lei), così come X e valore Y della leva di comando vuoto situazione() { Seriale.cominciare(9600); servo1.essere connesso (9); //La direzione di controllo di Servo è collegata a Spillo 9 } vuoto cappio() { xValue = analogRead(joyX); //Domanda su X posizione della leva di comando yValue = analogRead(joyY); //Domanda su posizione Y della leva di comando //Su monitor seriale sono economici - solo alla ricerca di sbaglio Seriale.stampa(fondi); Seriale.stampa(«\t\n»); Seriale.stampa(xValue); Seriale.stampa(«\t\n»); se (xValue < 490){ //Se Gioia dopo collegamenti < - fondi = --fondi; //i fondi diventano veringert } se (xValue > 500){ //Se Gioia a destra fondi = ++fondi; //fondi di aumenti noi } se (fondi < 0){ //Con esso i fondi non diventa negativo fondi = 0; } se (fondi > 180){ //Non fa con esso per fondi più di 180 fondi = 180; } ritardo(20); servo1.scrivere(fondi); //Servo su mossa «di fondi» di posizione }
Adesso dopo il deposito ad alto livello del codice possiamo girare Servo per mezzo della leva di comando nella direzione desiderabile.
Speriamo che Lei il nostro contributo di blog di oggi La ha ispirato, e stiamo contenti sui Suoi commenti. Fino al prossimo contributo di AZ-consegna, il Suo esperto per microelettronica!
4 commenti
Andreas Wolter
@marc: bitte mal versuchen, statt des Kopieren-Buttons den Quellcode mit der Mouse zu markieren und zu kopieren. Wir hatten das Problem kürzlich schon einmal und ich war der Meinung, dass es gelöst wurde.
Beim Kopieren werden aus der HTML-Seite unsichtbare Steuerzeichen mitkopiert. Das sollte eigentlich nicht passieren.
Wenn man den Code in die Arduino IDE einfügt, sieht man z.B. an dem Aufruf delay(), ob etwas nicht stimmt. Wenn “delay” nicht orange eingefärbt ist, dann hat es nicht funktioniert.
Ich gebe das noch einmal weiter.
Danke für den Hinweis.
Grüße,
Andreas Wolter
AZ-Delivery Blog
marc
hallo,komisch copy/past des sketch bekomme ich von Arduino IDE folgende Meldung:
#include ; ^sketch_aug15b:11:2: error: stray ‘\302’ in program
Serial.begin(9600);
^
sketch_aug15b:11:3: error: stray ‘\240’ in program
Serial.begin(9600);
^
sketch_aug15b:12:2: error: stray ‘\302’ in program
servo1.attach (9); // Steuerungsleitung vom Servo wird mit Pin 9 verbunden
^
sketch_aug15b:12:3: error: stray ‘\240’ in program
servo1.attach (9); // Steuerungsleitung vom Servo wird mit Pin 9 verbunden
^
sketch_aug15b:16:2: error: stray ‘\302’ in program
xValue = analogRead(joyX); // X-Position des Joysticks abfragen
^
sketch_aug15b:16:3: error: stray ‘\240’ in program
xValue = analogRead(joyX); // X-Position des Joysticks abfragen
^
sketch_aug15b:17:2: error: stray ‘\302’ in program
yValue = analogRead(joyY); // Y-Position des Joysticks abfragen
^
sketch_aug15b:17:3: error: stray ‘\240’ in program
yValue = analogRead(joyY); // Y-Position des Joysticks abfragen
^
sketch_aug15b:18:2: error: stray ‘\302’ in program
//Auf Seriellem Monitor ausgeben – nur zur Fehlersuche
^
sketch_aug15b:18:3: error: stray ‘\240’ in program
//Auf Seriellem Monitor ausgeben – nur zur Fehlersuche
^
sketch_aug15b:19:2: error: stray ‘\302’ in program
Serial.print(pos);
^
sketch_aug15b:19:3: error: stray ‘\240’ in program
Serial.print(pos);
^
sketch_aug15b:20:2: error: stray ‘\302’ in program
Serial.print(“\t\n”);
^
sketch_aug15b:20:3: error: stray ‘\240’ in program
Serial.print(“\t\n”);
^
sketch_aug15b:21:2: error: stray ‘\302’ in program
Serial.print(xValue);
^
sketch_aug15b:21:3: error: stray ‘\240’ in program
Serial.print(xValue);
^
sketch_aug15b:22:2: error: stray ‘\302’ in program
Serial.print(“\t\n”);
^
sketch_aug15b:22:3: error: stray ‘\240’ in program
Serial.print(“\t\n”);
^
sketch_aug15b:24:2: error: stray ‘\302’ in program
if (xValue < 490){ // Wenn Joy nach Links <-
^
sketch_aug15b:24:3: error: stray ‘\240’ in program
if (xValue < 490){ // Wenn Joy nach Links <-
^
sketch_aug15b:25:2: error: stray ‘\302’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:25:3: error: stray ‘\240’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:25:4: error: stray ‘\302’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:25:5: error: stray ‘\240’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:25:6: error: stray ‘\302’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:25:7: error: stray ‘\240’ in program
pos = —pos; // pos wird veringert
^
sketch_aug15b:26:2: error: stray ‘\302’ in program
}
^
sketch_aug15b:26:3: error: stray ‘\240’ in program
}
^
sketch_aug15b:27:2: error: stray ‘\302’ in program
^
sketch_aug15b:27:3: error: stray ‘\240’ in program
^
sketch_aug15b:28:2: error: stray ‘\302’ in program
if (xValue > 500){ // Wenn Joy nach Rechts
^
sketch_aug15b:28:3: error: stray ‘\240’ in program
if (xValue > 500){ // Wenn Joy nach Rechts
^
sketch_aug15b:29:2: error: stray ‘\302’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:3: error: stray ‘\240’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:4: error: stray ‘\302’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:5: error: stray ‘\240’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:6: error: stray ‘\302’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:7: error: stray ‘\240’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:21: error: stray ‘\302’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:29:22: error: stray ‘\240’ in program
pos = +pos; // pos wir erhöht
^
sketch_aug15b:30:2: error: stray ‘\302’ in program
}
^
sketch_aug15b:30:3: error: stray ‘\240’ in program
}
^
sketch_aug15b:32:2: error: stray ‘\302’ in program
if (pos < 0){ // Damit pos nicht negativ wird
^
sketch_aug15b:32:3: error: stray ‘\240’ in program
if (pos < 0){ // Damit pos nicht negativ wird
^
sketch_aug15b:33:2: error: stray ‘\302’ in program
pos = 0;
^
sketch_aug15b:33:3: error: stray ‘\240’ in program
pos = 0;
^
sketch_aug15b:33:4: error: stray ‘\302’ in program
pos = 0;
^
sketch_aug15b:33:5: error: stray ‘\240’ in program
pos = 0;
^
sketch_aug15b:33:6: error: stray ‘\302’ in program
pos = 0;
^
sketch_aug15b:33:7: error: stray ‘\240’ in program
pos = 0;
^
sketch_aug15b:34:2: error: stray ‘\302’ in program
}
^
sketch_aug15b:34:3: error: stray ‘\240’ in program
}
^
sketch_aug15b:35:2: error: stray ‘\302’ in program
if (pos > 180){ // Damit pos nicht über 180 geht
^
sketch_aug15b:35:3: error: stray ‘\240’ in program
if (pos > 180){ // Damit pos nicht über 180 geht
^
sketch_aug15b:36:2: error: stray ‘\302’ in program
pos = 180;
^
sketch_aug15b:36:3: error: stray ‘\240’ in program
pos = 180;
^
sketch_aug15b:36:4: error: stray ‘\302’ in program
pos = 180;
^
sketch_aug15b:36:5: error: stray ‘\240’ in program
pos = 180;
^
sketch_aug15b:36:6: error: stray ‘\302’ in program
pos = 180;
^
sketch_aug15b:36:7: error: stray ‘\240’ in program
pos = 180;
^
sketch_aug15b:37:2: error: stray ‘\302’ in program
}
^
sketch_aug15b:37:3: error: stray ‘\240’ in program
}
^
sketch_aug15b:39:2: error: stray ‘\302’ in program
delay(20);
^
sketch_aug15b:39:3: error: stray ‘\240’ in program
delay(20);
^
sketch_aug15b:40:2: error: stray ‘\302’ in program
servo1.write(pos); // Servo auf Position “pos” bewegen
^
sketch_aug15b:40:3: error: stray ‘\240’ in program
servo1.write(pos); // Servo auf Position “pos” bewegen
^
sketch_aug15b:42:2: error: stray ‘\302’ in program
^
sketch_aug15b:42:3: error: stray ‘\240’ in program
^
exit status 1
stray ‘\302’ in program
Andreas Wolter
@Robert Miosga:
damit das Servo stehen bleibt, würde ich ein Maximum einbauen. eine Variable, die immer dann überspeichert wird, wenn der neue Wert größer ist, als der alte. Diesen Wert dann auf das Servo geben, falls er sich geändert hat.
Die Geschwindigkeit, mit der sich die Servoachse dreht, wird in diesem Fall wahrscheinlich mit der Zeile delay(20) festgelegt.
Was Sie brauchen ist die Beschleunigung. Je größer die Beschleunigung, desto kleiner der Wert in der delay() Funktion. Die Beschleunigung ist die erste Ableitung der Geschwindigkeit. Die Geschwindigkeit zu messen, geht über die Zeit. Das ist der mathematische Ansatz dahinter. Dafür gibt es viele Beispiele im Netz. Sie müssen es dann “nur” noch in Code umsetzen.
Ohne Mathe würde ich immer den gleichen Zeitraum messen und dann gucken, um wieviel sich der Wert erhöht hat. Den Abstand der beiden Werte innerhalb der Zeitmessung könnte man dann ins Verhältnis zum Wert in der delay() Funktion setzen. Also bräuchte man dafür eine minimale und maximale Drehgeschwindigkeit der Servoachse.
Ich hoffe, ich konnte ein wenig weiterhelfen.
Andreas Wolter
Robert Miosga
Hallo, ich habe eine Frage, ich versuche schon seit Langen Servos mit einem Joystick zu steuern, aber mein Ziel ist es das der Servo sich in die jeweilige Richtung bewegt und dann auch dort stehen bleibt .. und sich nicht wieder zurückbewegt nachdem der Joystick sich zentriert .. zusätzlich soll der Servo sich proportional schneller bewegen je nach dem wie sehr man den Joystick in die jeweilige Richtung drückt .. können Sie mir eventuell weiterhelfen oder mir Ansätze geben wie man das angeht ?