Código de búsqueda

Controlar un servomotor con pulsadores usando Arduino

Controlar un servomotor con pulsadores usando Arduino

En este tutorial aprenderemos cómo controlar un servomotor usando dos pulsadores: uno para mover el servomotor hacia la izquierda y otro para moverlo hacia la derecha. Cuando pulses el botón derecho, el servomotor se moverá 10 grados hacia la derecha, y cuando pulses el botón izquierdo, se moverá la misma cantidad hacia la izquierda. Si mantienes pulsado un botón, el servomotor seguirá moviéndose en esa dirección hasta que lo sueltes.

Este proyecto es una excelente manera de entender cómo conectar botones a un servomotor usando Arduino. Cubriremos los componentes de hardware necesarios, las instrucciones de cableado y el código necesario para que todo funcione. Para una comprensión más clara, puede consultar el video que acompaña este tutorial (en el video a las 01:00).

Hardware explicado

Para este proyecto necesitarás una placa Arduino, un servomotor y dos pulsadores. El servomotor es el encargado del movimiento, mientras que los pulsadores actúan como entradas para controlar la dirección de dicho movimiento. El Arduino procesa estas entradas y envía las señales apropiadas al servomotor.

El servomotor funciona basándose en señales de modulación por ancho de pulso (PWM). Al enviar pulsos de diferente ancho, puedes controlar el ángulo del servomotor. Los pulsadores se conectarán a pines de entrada digital del Arduino y utilizaremos resistencias internas de pull-up para simplificar el cableado.

Detalles de la ficha técnica

FabricanteVarios
Número de piezaSG90
Voltaje lógico/E/S5 V
Tensión de alimentación4.8-6 V
Corriente de salida (por canal)1.5 A máx.
Corriente de pico (por canal)2,5 A máx.
Guía de frecuencia PWM50 Hz
Umbrales de lógica de entrada0.3VCCa 0,7 VCC
Caída de tensión / RDS(encendido)/ saturación0.4 V
Límites térmicos85 °C
PaquetePlástico
Notas / variantesRotación estándar de 180°

  • Asegúrese de que el servomotor esté clasificado para su tensión de alimentación.
  • Utilice disipadores de calor adecuados si opera con corrientes elevadas.
  • Conecte los botones a tierra con configuración pull-up.
  • Aplica antirrebote a tus botones si experimentas un comportamiento errático.
  • Monitorea la salida serie para la depuración.

Instrucciones de cableado

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Para cablear los componentes, comience conectando el servomotor. Conecte el cable rojo del servomotor al pin de 5V del Arduino, el cable negro al pin GND y el cable de señal amarillo o blanco al pin 9 del Arduino. Este pin controlará la posición del servomotor.

A continuación, cablea los pulsadores. Conecta un terminal del pulsador derecho al pin 2 y el otro terminal a tierra. Para el pulsador izquierdo, conecta un terminal al pin 12 y el otro terminal también a tierra. Esta configuración permite que las resistencias de pull-up internas mantengan los pines en alto cuando los pulsadores no están presionados.

Ejemplos de código y guía paso a paso

Empecemos con el código para controlar el servo con un solo pulsador. El código inicializa el objeto servo y establece un ángulo inicial. Aquí tienes un breve extracto:

int angle = 90;    // initial angle for servo
int angleStep = 10; // step size for movement

En este fragmento,anglerepresenta la posición actual del servo, mientras queangleStepDefine cuánto se mueve el servo con cada pulsación de botón. Este código es esencial para rastrear la posición del servo.

A continuación, tenemos la función setup donde adjuntamos el servomotor y configuramos los pines de entrada:

void setup() {
  Serial.begin(9600);          // setup serial
  myservo.attach(9);  // attaches the servo on pin 9
  pinMode(2, INPUT_PULLUP); // configure button pin
}

En la función setup, inicializamos el monitor serie y conectamos el servo al pin 9. El botón en el pin 2 se configura como entrada con una resistencia pull-up, lo que simplifica el cableado y evita la necesidad de resistencias externas.

Finalmente, vemos la función loop que maneja la pulsación del botón:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // increment angle
  myservo.write(angle); // move servo
}

Este bucle comprueba continuamente si se pulsa el botón. Cuando se pulsa, el ángulo aumenta en el paso definido y el servo se mueve en consecuencia. Es crucial asegurarse de que el ángulo se mantenga dentro de los límites (0 a 180 grados) para evitar daños al servo.

Demostración / Qué esperar

Al presionar el botón derecho, el servo debería moverse hacia la derecha en incrementos de 10 grados hasta alcanzar el máximo de 180 grados. De manera similar, al presionar el botón izquierdo se moverá hacia la izquierda. Si mantienes pulsado un botón, el servo seguirá moviéndose en esa dirección hasta que sueltes el botón (en el video en 01:00).

Los errores más comunes incluyen problemas de cableado, como conexiones incorrectas o entradas flotantes. Asegúrese siempre de que sus conexiones estén firmes y de que esté utilizando los pines correctos según lo especificado en el código.

Imágenes

Controlar el servo con un solo botón pulsador con Arduino
Controlar el servo con un solo botón pulsador con Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
Idioma: C++
/*
 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

  
}
99-Control a servo with two push buttons using Arduino
Idioma: C++
/*
 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
  }// 

  
}

Cosas que podrías necesitar

Recursos y referencias

Aún no hay recursos.

Archivos📁

No hay archivos disponibles.