Lezione 88: Controllo di un servomotore utilizzando due interruttori a pulsante
Questo progetto dimostra come controllare un servomotore utilizzando due pulsanti con un Arduino. Invece di affidarsi a un potenziometro o a un comando seriale, puoi usare semplici interruttori tattili per muovere manualmente un servo a sinistra o a destra. Questo è incredibilmente utile per applicazioni in cui hai bisogno di un controllo fisico diretto su un meccanismo, come costruire un braccio robotico, regolare un gimbal per fotocamera o creare un sistema pan-tilt telecomandato. I pulsanti ti permettono di regolare incrementamente l'angolo del servo, con la possibilità di tenere premuto il pulsante per spazzare l'intera gamma di movimento.
Ecco alcuni progetti pratici che puoi realizzare con questa configurazione:
- Costruire un pannello di controllo manuale per un braccio robotico o una pinza.
- Creare uno slider per fotocamera o una testa pan-tilt telecomandata.
- Sviluppare un'interfaccia di controllo fisico per il timone di un aeromodello o di una barca.
- Realizzare un semplice "teach pendant" per registrare posizioni per una macchina CNC o una stampante 3D.

Hardware e Componenti
Questo progetto richiede solo pochi componenti di base, rendendolo un eccellente punto di partenza per imparare sia i dispositivi di input che di output con Arduino.
- Scheda Arduino (Uno, Nano, Mega, ecc.)
- Servomotore (es. SG90 o MG995)
- Due pulsanti momentanei
- Cavi jumper
- Breadboard (opzionale ma consigliato)
Guida al Cablaggio
Nel video, il cablaggio è semplice. Il pin del segnale del servomotore è collegato a un pin con capacità PWM sull'Arduino, che in questo esempio è il pin 9. L'alimentazione e la massa del servo sono collegate ai pin 5V e GND dell'Arduino. I due pulsanti sono cablati in modo simile tra loro. Una gamba di ciascun pulsante è collegata a massa, e l'altra gamba è collegata a un pin di ingresso digitale sull'Arduino (pin 2 per il pulsante "sinistra" e pin 3 per il pulsante "destra"). Il codice utilizza i resistori di pull-up interni, quindi non sono necessari resistori esterni per i pulsanti. (nel video a 00:57)

Spiegazione del Codice
Il codice è progettato per essere facilmente configurabile. Le parti chiave configurabili dall'utente sono all'inizio dello sketch. Ecco una suddivisione delle variabili e definizioni importanti che potresti voler regolare per il tuo progetto.
#include <Servo.h>
Servo myservo; // crea un oggetto servo per controllare un servo
int servoPin = 9;// questo pin deve essere uno di quelli con PWM ~
int angle =90; // angolo iniziale per il servo
int angleStep =5;
#define LEFT 2 // il pin 2 è collegato al pulsante sinistra
#define RIGHT 3 // il pin 3 è collegato al pulsante destra
servoPin: Questa variabile definisce il pin Arduino a cui è collegato il filo del segnale del servo. È fondamentale usare un pin che supporti la Modulazione di Larghezza di Impulso (PWM), tipicamente indicato con un simbolo~sulla scheda.angle: Questo imposta l'angolo iniziale del servo quando l'Arduino si avvia. Il valore predefinito è 90 gradi, che tipicamente centra il servo.angleStep: Questo è l'incremento con cui l'angolo del servo cambia ogni volta che un pulsante viene premuto. Un valore di 5 significa che ogni pressione muoverà il servo di 5 gradi. Puoi aumentarlo per un movimento più veloce o diminuirlo per un controllo più fine.LEFTeRIGHT: Queste direttive#defineassegnano i pin digitali a cui sono collegati i pulsanti. Se cabli i tuoi pulsanti a pin diversi, devi cambiare questi valori per corrispondere alla tua configurazione.
La logica principale nella funzione loop() controlla se un pulsante è premuto (leggendo un segnale LOW a causa della configurazione pull-up). Se il pulsante "destra" è premuto, diminuisce la variabile angle di angleStep. Se il pulsante "sinistra" è premuto, aumenta l'angle. Il codice include controlli dei limiti per garantire che l'angolo rimanga nell'intervallo da 0 a 180 gradi. La funzione myservo.write(angle) viene quindi utilizzata per comandare al servo di muoversi nella nuova posizione.
Dimostrazione Live del Progetto
Nella dimostrazione video, la funzionalità è chiaramente mostrata. Premendo e tenendo premuto il pulsante "sinistra", il servo spazza dolcemente verso sinistra, con l'angolo che incrementa di 5 gradi alla volta, fino a raggiungere 180 gradi e fermarsi. Allo stesso modo, premendo e tenendo premuto il pulsante "destra", il servo spazza verso destra, diminuendo l'angolo fino a raggiungere 0 gradi. L'angolo corrente viene stampato sul Monitor Seriale, permettendoti di vedere la posizione esatta del servo in tempo reale. (nel video a 05:20)
Capitoli del Video
- [00:00] Introduzione al controllo di un servo con pulsanti
- [00:57] Guida al cablaggio per il servo e i pulsanti
- [02:12] Spiegazione del codice, parte 1: Setup e configurazione
- [03:25] Spiegazione del codice, parte 2: La logica del loop principale
- [05:20] Dimostrazione live del progetto
- [06:23] Conclusione e applicazioni potenziali
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
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
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motore su Amazonamzn.to
-
eBay
File📁
Altri file
-
Scheda tecnica del motore SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB