miércoles, 1 de noviembre de 2023

Conectar un servo. Parking. (IDE Arduino)

El Shield multifunción deja libres algunos pines de Arduino, en concreto el 5, 6, 9 y A5. Además, en los tres primeros podemos conectar directamente un micro servo (tipo SG 90), sólo debemos tener cuidado en colocar el cable naranja donde está serigrafiado el número del pin.


Para trabajar con el microservo vamos a utilizar una librería auxiliar, se trata de un conjunto de funciones que nos facilitan su programación. La librería se denomina Servo y va incluida en el IDE Arduino, aunque hay que declararla al inicio del programa y definir los servos que vayamos a usar. El programa adjunto mueve el micro servo de un extremo al otro a intervalos de 45º:

#include <Servo.h>   //inluimos la librería 

Servo servo1;        //definimos nuestro servo como servo1,
                     //podemos darle el nombre que deseemos.
                     //Podemos declarar más, servo2, servo3,...
void setup()
{
  servo1.attach(5);  //conectamos servo1 en el pin 5
}

void loop()
{ 
  servo1.write(0);   //indicamos el ángulo en el debe posicionarse
  delay(500);
  servo1.write(45);
  delay(500);
  servo1.write(90);
  delay(500);
  servo1.write(135);
  delay(500);
  servo1.write(180);
  delay(500);
}

Ahora vamos a mover el servo con los pulsadores S1 y S2, en un sentido y en el contrario.

/*
 * servoPulsador.ino
 * Al accionar los pulsadores S1 y S2 movemos el servo
 * hacia la izquierda y la derecha respectivamente,
 * a intervalos de 5 grados.
 */

#include <Servo.h>  //incluimos la libreria Servo

Servo servo1;       //definimos nuestro servo como servo1

int angulo = 90;    //creamos la variable angulo
 
void setup()
{
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  servo1.attach(5);        //servo1 en el pin 5
  servo1.write(angulo);    //servo1 a 90º
}

void loop()
{ 
  if (digitalRead(A1) == LOW){        //si pulsamos A1
    angulo = angulo + 5;              //incrementamos angulo en 5º
    if (angulo > 180){angulo=180;}    //impedimos que sea > de 180º
  }
  if (digitalRead(A2) == LOW){        //si pulsamos A2
    angulo = angulo - 5;              //decrementamos angulo en 5º
    if (angulo < 0){angulo=0;}        //impedimos que sea < de 0º
  }
  servo1.write(angulo);               //posicionamos servo1
  delay(200);
}


Ejercicios propuestos:

1.- Queremos abrir y cerrar una barrera utilizando el micro servo; por ejemplo, 10º cerrada y 170º abierta. El control lo haremos con dos pulsadores, S1 para abrir y S2 para cerrar.

2.- Ahora vamos a utilizar un único pulsador, ya que, una vez abierta, la barrera se cerrará automáticamente transcurridos 20 segundos. Ampliar el programa para que en el display se muestre el número de veces que se acciona el pulsador (valorar la posibilidad de usar la función delayMillis(), analizada en la entrada anterior).

3.- Realizar un programa que nos permita controlar el funcionamiento de un aparcamiento. Podemos usar  micro servos para hacer las barreras de entrada y salida y controlarlos mediante los pulsadores. Uno de los LEDs se debe poner en rojo cuando el parking esté completo y el display debe mostrar, en todo momento, el numero de plazas que quedan libres.