Usare un servomotore con Arduino - #35
Вставка
- Опубліковано 12 вер 2024
- In questo video spiego cos'è e come funziona un servomotore. Collegheremo il servomotore ad Arduino per pilotarlo con l'apposita libreria.
sketch e schema:
github.com/zma...
Puoi scaricare gratuitamente il mio libro: "Il manuale di Arduino - Guida Completa" dal mio sito: www.zeppelinmaker.it oppure direttamente da gumroad: gumroad.com/l/...
Ciao Paolo, intanto le faccio i complimenti per il lavoro costante che fa, per far divertire anche noi. Ho creato una cassaforte con tastierino numerico, lcd 16x2 e un servo per il meccanismo della serratura. Funziona tutto ma!!, quando alimento/accendo Arduino, il servo fa un piccolo movimento da un senso e un'altro leggermente più lungo nell'altro senso, perdendo la sua posizione di chiusura, ma poi facendo un ciclo di apertura e chiusura si rimette nelle sue posizioni originali e funziona benissimo. Come faccio ad ovviare a questo??? per far rimanere la serratura in posizione di chiusura in quella breve frazione di accezione del sistema. Le sarei davvero grato, e un piccolo progetto per mia nipote, che stiamo realizzando insieme, ora che ho un po di tempo a disposizione dato le circostanze!!. Sono sicuro che ha un rimedio. Grazie anticipatamente. Cordiali saluti
si potrebbe provare a impostare un angolo inziale di azzeramento: si solito 90°, oppure tenere scollegato il servo con un relè e collegarlo solo dopo l'avvio... A che pin è collegato?
@@zeppelinmaker pin 11
I suoi tutorial sono chiari e dettagliati, complimenti, domanda: a fine corsa si può fermare il servo per un tempo prestabilito?
certo, se hai capito il meccanismo a stati non dovrebbero esserci problemi. Lo puoi eventualmente implementare aggiungendo uno stato in più
Complimenti per i video!
ho una domanda (forse impossibile da realizzare),
è possibile variare la velocità di un servo con una curva specifica per ogni movimento?
pensavo ad un comando tipo "coseno" o cose simili...
grazie 1000
ah si si può fare. devi intervenire sui delay, aumentando il valore della pausa applicata
@@zeppelinmaker grazie mille,
complimenti ancora per i video, sono perfetti anche per me che sono una testa di marmo!!
Salve Paolo, il cavo verde ovvero (credo il pin 9) come è stato collegato con i cavi collegati al motore?
Buongiorno, io vorrei azionare il servo solo dopo aver premuto un pulsante ( chiude e apre subito il contatto aperto ) come inserire il comando nel programma?
Posso comandare più servomotori contemporaneamente oppure in tempi diversi con comandi diversi all'occorrenza, con una sola scheda Arduino Uno?
Ciao Paolo!
Ho un pulsante solo e vorrei avviare un loop sul servo con un click, fermarlo con un secondo click, riavviarlo con un altro click e cosi via. Come modificare lo sketch per ottenere questo effetto?
Ciao Paolo, domanda: ho realizzato uno sketch simile , solo che alla pressione di un pulsante UP e uno DOWN, lo stopper scende di 20°. Il problema è che se lo riporto alla posizione 0 questo non torna esattamente li ma rimane spostato di 10° circa. se resetto arduino, e ricarica tutto, visto che nell'inizializzazione lo forza a 0, questo torna correttamente! Problema dello stopper? me lo fa anche con la libreria d'esempio di arduino..
Complimenti per il video, ma potrei inserire un temporizzatore?
Eccellente video, c'è qualche esempio con un range slider da web per il controllo del servo motore?, grazie mille
Ciao, no ma è una bella idea per un nuovo video.
Un servo motore puo sentire un "fine corsa": ovvero se collego l'albero a una ruota che ha un fine corsa, un ostacolo ad esempio, o' possibile dire al servo di fermarsi e memorizzare quella posizione?
ciao, no. ti serve qualche tipo di sensore
grazie Paolo
una domanda: il delay all'interno del ciclo for, è la velocità con la quale il servo si porta in posizione (non il tempo della pausa del comando), ed in questo caso hai settato 20 millisecondi; ma sia dal video che da mie misurazioni effettuate non mi sembra che siano 20ms. Pertanto la mia domanda è: all'interno del ciclo for l'unità di misura del delay non è in millisecondi? grazie
Tralasciando il fatto che è un video di 6 anni fa (di solito gli youtuber dopo un po' dall'uscita del video non rispondono perché hanno nuovi video a cui rispondere), il delay è in millisecondi.
Il punto è che trascorrono 20ms per ogni grado che si sposta, quindi sono 180x20 ms ovvero 3600 ms totali per compiere tutto il movimento di 180°. Ovviamente bisogna anche contare che è un movimento fisico, mi spiego meglio: se tu mettessi un delay(0) (ipoteticamente si intende, quale pazzo metterebbe mai un delay(0)), avresti comunque un tempo reale del movimento dell' albero del motore; quindi in un certo senso si può dire che con delay(X) stai impostando X ms massimi per passare tra un grado e l'altro nel movimento reale.
si è in ms ma devi tenere conto anche dell'inerzia dell'oggetto... di solito abbastanza lento.
@@cuordacciaio8901 perfetto ecco perché non capivo, 20ms sono una velocità altissima a mal la pena la riesci a misurare mentre nel video.per ruotare ci metteva una vita ed anche dalle.mie prove. Con la tua spiegazione ha tutto più logica. L'unità di misura è ms/grado
complimenti!
Ciao Paolo,complimenti per tutto,av rei una domanda da porti:è possibile controllare e quindi modificare la velocità del servomotore per il raggiungimento dell'angolo impostato?
Grazie in anticipo
si basta intervenire sul delay all'interno del ciclo for
@@zeppelinmaker grazie mille!
È possibile inclinare il servo tower pro sg90 ad un angolo negativo?
Come si può utilizzare un motore dc applicato allo sterzo, come un servo motore, cioè impostare un angolo massimo, in modo tale che non distrugga gli ingranaggi in plastica
Bel video
Ciao Paolo,
Provando a modificare lo sketch che hai mostrato volevo inserire il grado di rotazione da tastiera tramite seriale (tra 0 e 180). Il servo motore correttamente riceve il grado di apertura e lo esegue ma poi si riporta sempre in posizione zero. Hai qualche suggerimento?
credo che tu debba gestire lo stato. Cmq mi segno il problema e magari ci faccio un video.
@@zeppelinmaker Grazie. Genitilissimo
Ma perché collegando 5 servi SG90 ad un Arduino UNO ai pin da A1 a A5 (solo gli analogici ho disponibili!) Si impazziscono? Fino a 3 il programma funziona come collego gli altri si incasina!
Ciao Paolo. Ho provato ad impostare un angolo superiore a 180° (anche 270°) ma non ci arriva. Si ferma sempre a 180°, aspetta un attimo e poi torna indietro. Non basterebbe modificare i parametri del ciclo "if" per farlo o ci vuole altro?
quei tipi di servi arrivano massimo fino a 180 gradi
Con una batteria da 9V non riesco a controllare 3 servomotori? Essendo che ogni servo assorbe 5V..?
Come faccio?
se io gli voglio dire di eseguire solo un'apertura di 60 gradi,come faccio?Non posso utilizzare i?
Ciao Paolo, ho collegato un servo ai 5v di arduino nano (quest'ultimo alimentato da usb del pc) e praticamente ho rovinato 2 schede. Non carica più gli sketch. E' possibile che abbia tirato troppa corrente?
Strano. che servo è? come lo hai collegato?
@@zeppelinmaker è un mg 995, per sbaglio l'ho collegato al pin 5v di arduino nano (elegoo) e in pratica negli sketch compare un messaggio del tipo stk500_getsync() : not in sync: resp=0x08, inoltre rimane acceso solo il led power fisso. Lo avrò fatto secco 🙂
Non contento, poi ne ho giustiziato un altro 😀
Ciao Paolo
Ho il servo della elego.
L’escursione e’ minore di 180 gradi. 0 gradi, a occhio, sara + 5 e 180 sara’ 175 circa. E’ difettoso?
Grazie
son servomotori economici... imprecisi
Grazie👍👋
sto impazzendo con sto sketc
include
Servo servo1;
void setup() {
servo1.attach(9);
}
void loop() {
for (int i = 0; i < 180; i++) {
servo1.write(i);
delay(20);
}
for (int i = 180; i >= 0; i--) {
servo1.write(i);
delay(20);
}
}
vorrei che prima di far partire il servo due led si accendano pulsando e dopo 2 secondi parta il servoche apre la scatola e
questo fa muovere ilservo, ma io vorrei che una volta arrivato al punto x si fermi e non che torni indietro.
come debbo fare ?
Come faccio a collegare più servomotori ad Arduino perché i 5 v non bastano
Collegandolo a una batteria esterna
Ciao, io volevo fare un braccio robotico utilizzando dei servo digitale perché ho visto che hanno più coppia e sono piu precisi ma non so se sono programmabili come quelli analogici
dovrebbero essere migliori e più veloci
Ho una domanda: io vorrei alimentare un servomotore con arduino, quindi come hai fatto tu, solo che ho dei dubbi sull'amperaggio che il servo mi richiede e ho paura di friggere arduino, quello che mi chiedo è: se l'amperaggio è (per esempio) di 100 mAh, arduino puó erogarmi al massimo 40 mAh, rischio quindi di friggere arduino oppure il motore non viene correttamente alimentato?
Perchè tu hai detto che non è necessario nessun ponte H, mosfet o altro, ma non il perchè...
Ho detto una boiata, la 5V non ha il massimo di 40mAh, quello sarebbe un pin qualsiasi, ma non la 5v
Ciao Samuele. Il servo può essere alimentato anche a parte (purchè l'alimentatore che usi abbia la massa i comune con il GND di arduino). Il servo infatti ha il "suo controllo di potenza" che prende direttamente dalla alimentazione che fornisci. Arduino gli da solo il segnale di pilotaggio.
paolo aliverti grazie del chiarimento 👍🏼
Ciao Paolo, io avrei un dubbio
Ho un arduino da poche settimane, e la maggior parte delle cose che so le devo si tuoi tutorial
Vorrei sapere se si può far fare un giro di 130 all'arduino, ma solo per una volta
Ciao e grazie! Intendi 180 gradi? se si forse è meglio un motore passo passo
No, scusami intendevo 90😅
Perché praticamente nel video, gira di 90 gradi, si, ma per 90 volte
@@riccardomarino2927 ma certo. basta che gli dai direttamente servo.write(90) e stop
perchè a volte vedo messo un condensatore? altra domanda, se collegassi il servo ad un pin non pwm cosa succederebbe?
Mah, interoria non è necessario e potresti solo disturbare il segnale. Avrebbe forse senso sull'alimentazione, non sul segnale. Devi usare la libreria solo su pin pwm.
ma si possono collegare due servo-motori in un solo arduino?????
si, perchè no! ma meglio con ua-cam.com/video/Wj7U_f-kQd8/v-deo.html
è possibile fermare la rotazione del servomotore ad un certo valore di [i]?
ah si. Basta che dai semplicemente servo.write(angolo_desiderato);
@@zeppelinmaker
Grazie Paolo Funziona!
Provero a sezionare l'angolo e ad evidenziarlo con buzzer e led di colore diverso.
Grazie ancora!
posso pilotare un motore passo passo anzichè un servo sempre con un potenziometro
salve sto provando a configurare Sketchper un servomotore ma non riesco a capire dovè l'errore exit status 1
expected ';' before '}' token,
se ce qualcuno che puo darmi una mano a capire dove sbaglio volevo allegare una foto ma non ho capito come si fa forse non si puo grazie anticipato
ho un grande problema: io ho utilizzato 2 motori comuni dc, con l293d, in modo da muoverli con il monitor seriale, insieme ad essi volevo collegare un servo motore ad arduino.
però sembra che quando collego il servomotore è come se bloccasse i 2 motori dc.
ecco lo sketch:
(ho provato a rimuovere la scritta s.attach(11); e sembra che funzioni tutto a parte il servo motore ovviamente. ho paura che si un problema della libreria. )
#include
Servo s;
int ena = 9;
int in1 = 3;
int in2 = 4;
int enb = 10;
int in3 = 5;
int in4 = 6;
char val;
int val2;
int val3;
int pin[6]={ena,enb,in1,in2,in3,in4};
void setup() {
// put your setup code here, to run once:U
for(int i; i < 6; i++){
pinMode(pin[i],OUTPUT);
}
Serial.begin(9600);
s.attach(11);
}
void loop() {
// put your main code here, to run repeatedly:
val = Serial.read();
if (val == 'w' && val2 != 2) {
Serial.println(val);
avantiA();
val2 = 2;
}
if (val == 's' && val2 != 1) {
Serial.println(val);
indietroA();
val2 = 1;
}
if(val =='d' && val3 != 1){
Serial.println(val);
destrab();
val3 =1;
}
if(val =='a' && val3 !=2){
Serial.print(val);
sinistrab();
val3 = 2;
}
if(val == 'q'){
Serial.println(val);
su();
}
if(val == 'e'){
Serial.println(val);
giu();
}
}
void avantiA() {
analogWrite(ena, 200);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
delay(1100);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
void indietroA() {
analogWrite(ena, 200);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(1300);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
void destrab(){
analogWrite(enb,200);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
delay(300);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void sinistrab(){
analogWrite(enb,250);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
delay(150);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void su(){//q
s.write(0);
}
void giu(){//e
s.write(50);
}
Meglio inizializzare la rotazione mettendo il servo a 0 gradi nel setup con delay(1500)
Vorrei gestire un motore diesel e con una specie di potenziometro devo fargli gestire 3 mappature
ciao paolo io mio servo ruota con gradi differenti
Qualcuno mi può aiutare con servomotore DS5260SSG ?
spiegazione molto povera devo dire
Paolo non si tocca!
Probabilmente non ti è chiaro il senso dei suoi video che sono rivolti trasversalmente a neofiti e professionisti