Como accionar un servomotor con dos pulsadores


servopulsador.jpg

Video

En esta práctica programaremos un control de giro para un servomotor SG90 usando dos pulsadores y un Arduino UNO.

Como accionar un servomotor con dos pulsadores


- Materiales:


Para realizar el circuito necesitas:

• 1 Arduino UNO,
• 1 Servomotor SG90,
• 2 pulsadores,
• 2 resistencias de 10k,
• 1 Protoboard y Jumpers.

- Código


Comenzaremos el sketch incluyendo la librería para el servomotor que ya tiene instalado el IDE de Arduino. Podemos añadirla desde la pestaña Programa->Incluir Librería -> Servo. Automáticamente se incluirá en el código.

Una vez que se tengamos la librería, abriremos un nuevo objeto de tipo “Servo” con el nombre de “servo1” (tú puedes nombrarlo como gustes).

#include <Servo.h>
Servo servo1;

Antes de entrar al void setup(), definiremos las variables que utilizaremos en todo el programa. Para el servo, usaremos dos parámetros, el pin donde estará conectado el cable de datos y el ángulo.
Y para los pulsadores también tomaremos dos parámetros, el pin digital donde estarán puenteados y el valor que arroje cada uno al Arduino. Dando un total de seis variables de tipo entera.

int servopin = 8;
int angulo = 0;
int buttonPin1 = 6;
int buttonPin2 = 7;
int buttonState1 = 0;
int buttonState2 = 0;

Dentro del void setup(), declararemos como se comportarán dichos pines. Iniciando con el servo, mediante la función .attach, le diremos a la librería Servo.h que ahí está mi servomotor conectado. Y con la función pinMode que el pin de cada pulsador será de entrada.
Finalizando la configuración, mandaremos al servo al ángulo 0 cada vez que se ejecute el programa usando .write.

void setup() {
servo1.attach(servopin);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
servo1.write(angulo);
}

Para el void loop(), estructuraremos todas las instrucciones que debe hacer el Arduino. Primero obtendremos el estado de cada pulsador al momento de correr el programa en la placa.

buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);

Abriremos un condicional para que ejecute el incremento del ángulo cuando el primer pulsador mande un 1 o esté siendo presionado. Poniendo “++” después del nombre de la variable, le decimos al compilador que aumente en 1 esa variable.
Para que nuestro contador no se nos vaya al infinito y para que se quede en el rango de 0 a 180, agregaremos otro condicional que reescriba el valor del ángulo al valor máximo del rango, ósea 180 grados.

  if (buttonState1 == HIGH)
{
angulo++;
if (angulo >= 180)
{
angulo = 180;
}
}

Hacemos lo mismo para el segundo pulsador, pero invirtiendo la lógica, es decir, en vez de aumentar en 1 el valor del ángulo, vamos a disminuirlo en 1, utilizando “--” o el doble menos.
Dentro del segundo condicional este tiene que ser menor o igual que 0 para que no obtenga valores negativos la variable.

if (buttonState2 == HIGH)
{
angulo--;
if (angulo <= 0)
{
angulo = 0;
}
}

Para que finalicemos mandando dicho ángulo al servomotor con la función .write con un delay de 10 milisegundo. El delay es opcional.

void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
if (buttonState1 == HIGH)
{
angulo++;
if (angulo >= 180)
{
angulo = 180;
}
}

if (buttonState2 == HIGH)
{
angulo--;
if (angulo <= 0)
{
angulo = 0;
}
}
servo1.write(angulo);
delay(10);

}

- Instrumentación


Colocaremos primero los pulsadores. Los pulsadores los pondremos en un extremo de la protoboard. En cada pulsador, conectaremos una de las patas a 5v y el otro haremos un nodo donde estará una pata de la resistencia de 10k y el puente donde lo conectaremos al pin digital de Arduino. El extremo que falta por conectar de la resistencia lo pondremos en GND.
Puenteamos el pin de 5v del Arduino a la línea Vcc y GND a la línea de tierra de la protoboard para alimentar el pot.

Para la conexión del servomotor, identificamos primero los cables de alimentación, para el SG90 son rojo y café, y estos los conectaremos a las líneas de voltaje de la protoboard. Finalizando con el cable de datos (cable naranja) puenteado al pin 8 digital del Arduino.

DESCARGAS


LINK DE DESCARGA

Imágenes

servopulsador.jpg
servopulsador2.jpg
servopulsador3.jpg

APRENDE LO QUE NECESITAS

NUESTROS CURSOS


cursoarduinoyandroid.jpg

Creación de un HMI en Android Studio y Arduino

Nivel: Básico 2 horas y 30 min (146 min.)

Diseña, maqueta y programa un HMI completo en Android Studio vinculado a un Arduino mediante Bluetooth.

cursodispensadorautomatico.jpg

CONSTRUYE un DISPENSADOR AUTOMÁTICO CASERO sin ARDUINO desde CERO

Nivel: Básico 27 minutos

Construye desde cero un dispensador automático casero sin Arduino desde cero, utilizando pura electrónica.

cursocarritorobot4wd.jpg

Creación de carrito robot desde cero usando mando de PS4

Nivel: Básico 2 horas y 19 min (139 min.)

Construye desde cero un carrito robot con arduino manipulado por un control de PS4 y un teléfono Android.