Questo tutorial è parte di: Servomotori
Tutti i video correlati ai servomotori sono elencati qui. I link ad altri video si trovano sotto questo articolo.
Controllare un servomotore con pulsanti usando Arduino
In questo tutorial impareremo come controllare un servomotore usando due pulsanti: uno per spostarlo a sinistra e l'altro per spostarlo a destra. Quando premi il pulsante destro, il servomotore si sposterà di 10 gradi verso destra, e quando premi il pulsante sinistro si sposterà della stessa quantità verso sinistra. Se tieni premuto un pulsante, il servomotore continuerà a muoversi in quella direzione finché non lo rilasci.

Questo progetto è un ottimo modo per capire come interfacciare pulsanti con un servomotore usando Arduino. Spiegheremo i componenti hardware necessari, ti mostreremo come eseguire il cablaggio e forniremo il codice necessario per far funzionare il tutto. Per una comprensione più chiara, puoi fare riferimento al video che accompagna questo tutorial (nel video a 01:00).
Hardware spiegato
Per questo progetto, avrai bisogno di una scheda Arduino, di un servomotore e di due pulsanti. Il servomotore è responsabile del movimento, mentre i pulsanti fungono da ingressi per controllare la direzione di tale movimento. L'Arduino elabora questi ingressi e invia i segnali appropriati al servomotore.
Il servomotore funziona basandosi sulla modulazione della larghezza dell'impulso (PWM). Inviando impulsi con larghezze diverse, è possibile controllare l'angolo del servomotore. I pulsanti saranno collegati ai pin di ingresso digitali dell'Arduino e useremo le resistenze di pull-up interne per semplificare il cablaggio.
Dettagli della scheda tecnica
| Produttore | Diversi |
|---|---|
| Numero di parte | SG90 |
| Tensione logica/I/O | 5 V |
| Tensione di alimentazione | 4.8-6 V |
| Corrente di uscita (per canale) | Massimo 1,5 A |
| Corrente di picco (per canale) | 2,5 A max |
| Indicazioni sulla frequenza PWM | 50 Hz |
| Soglie logiche di ingresso | 0.3VCCfino a 0,7 Vcopia conoscenza |
| Caduta di tensione / RDS(on) / saturazione | 0,4 V |
| Limiti termici | 85 °C |
| Pacchetto | Plastica |
| Note / varianti | Rotazione standard di 180° |
- Assicurati che il servo sia compatibile con la tua tensione di alimentazione.
- Usare un dissipatore adeguato se si opera a correnti elevate.
- Collegare i pulsanti a massa con una configurazione pull-up.
- Applica il debounce ai pulsanti se riscontri comportamenti erratici.
- Monitora l'output seriale per il debug.
Istruzioni di cablaggio

Per collegare i componenti, inizia collegando il servomotore. Collega il filo rosso del servomotore al pin 5V dell'Arduino, il filo nero al pin GND e il filo di segnale giallo o bianco al pin 9 dell'Arduino. Questo pin controllerà la posizione del servomotore.
Successivamente, collega i pulsanti. Collega un terminale del pulsante destro al pin 2 e l'altro terminale a massa. Per il pulsante sinistro, collega un terminale al pin 12 e anche l'altro terminale a massa. Questa configurazione permette alle resistenze di pull-up interne di mantenere i pin al livello alto quando i pulsanti non sono premuti.
Esempi di codice e guida passo passo
Cominciamo con il codice per controllare il servo con un singolo pulsante. Il codice inizializza l'oggetto servo e imposta un angolo iniziale. Ecco un breve estratto:
int angle = 90; // initial angle for servo
int angleStep = 10; // step size for movement
In questo frammento,anglerappresenta la posizione corrente del servo, mentreangleStepDefinisce di quanto si muove il servo ad ogni pressione del pulsante. Questo codice è essenziale per tenere traccia della posizione del servo.
Successivamente abbiamo la funzione setup in cui colleghiamo il servo e configuriamo i pin di ingresso:
void setup() {
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9
pinMode(2, INPUT_PULLUP); // configure button pin
}
Nella funzione setup inizializziamo il monitor seriale e colleghiamo il servo al pin 9. Il pulsante sul pin 2 è impostato come ingresso con resistenza di pull-up, il che semplifica il cablaggio ed evita la necessità di resistenze esterne.
Infine, esaminiamo la funzione loop che gestisce la pressione del pulsante:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // increment angle
myservo.write(angle); // move servo
}
Questo ciclo controlla continuamente se il pulsante è premuto. Quando è premuto, l'angolo aumenta del passo definito e il servo si muove di conseguenza. È fondamentale assicurarsi che l'angolo rimanga entro i limiti (da 0 a 180 gradi) per evitare danni al servo.
Dimostrazione / Cosa aspettarsi
Quando premi il pulsante destro, il servo dovrebbe muoversi verso destra con incrementi di 10 gradi fino a raggiungere il massimo di 180 gradi. Allo stesso modo, premendo il pulsante sinistro il servo si muoverà verso sinistra. Se tieni premuto un pulsante, il servo continuerà a muoversi in quella direzione finché non rilasci il pulsante (nel video a 01:00).
Errori comuni includono problemi di cablaggio, come connessioni errate o ingressi flottanti. Assicurati sempre che i collegamenti siano sicuri e che tu stia usando i pin corretti come specificato nel codice.
Questo tutorial è parte di: Servomotori
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controllare un servomotore con un potenziometro usando Arduino
- Controllare un servomotore con un potenziometro e un LCD1602 usando Arduino
- Controllare i servomotori utilizzando un telecomando a infrarossi con Arduino
- Controllo del Motore Servo Arduino Utilizzando un Potenziometro
- Controllare la posizione del servo con gesti della mano per Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Codice Arduino e video per il controller per servomotori PCA9685 a 16 canali e 12 bit V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Cose di cui potresti avere bisogno
-
AmazonServo motore su Amazonamzn.to
-
AliExpressAcquista il servomotore SG90 da 180 o 360 da AliExpresss.click.aliexpress.com
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Nessun file disponibile.