• Autor de la entrada:
  • Categoría de la entrada:Arduino

Seguro que alguna vez se te ha pasado por la cabeza como controlar varios servomotores usando un teclado matricial, o quizá no. En realidad lo más probable es que no lo hayas pensado nunca, pero de todo se puede aprender.

La situación es sencilla, tenemos varios servomotores que se mueven entre dos puntos determinados, por ejemplo 0 y 20 grados y nosotros tenemos que mover de una posición a otra cada servomotor cuando el usuario del sistema pulse el número identificador del servomotor en un teclado matricial.

Y es muy probable que estés pensando, y para que necesito yo saber montar este sistema de control. Es muy fácil, este sistema se puede aplicar para controlar los cambios de aguja de una maqueta de trenes a escala, en el cual tienes un panel de control con un teclado matricial y al mover cada servomotor en realidad estas cambiando las vías por las que circula el tren. ¡Ponte el gorro de maquinista y vamos a mover esos servomotores!

El funcionamiento es bastante sencillo, imagina que queremos mover el servomotor número 1, por tanto pulsamos la tecla 1 en el teclado y seguidamente la A para confirmar el cambio.

Si queremos volver a la posición original repetimos la operación, tecla 1 y luego tecla A.

El control de un servomotor se realiza mediante una señal PWM que generaremos con Arduino usando la librería servo.h tal y como puedes ver un poco más abajo.

Los servomotores suelen tener tres tipos de cable.

Rojo-negro-amarillo

  • Rojo -> Vcc
  • Negro -> GND
  • Amarillo -> Señal

Rojo-negro-blanco

  • Rojo -> Vcc
  • Negro -> GND
  • Blanco -> Señal

Rojo-marrón-naranja

  • Rojo -> Vcc
  • Marrón -> GND
  • Naranja -> Señal

Se me ocurre que puedes echar un vistazo al vídeo explicativo y luego al código para entender cómo funciona.

Puedes llevar este código un poco más allá y controlar con el teclado matricial no solo servomotores sino cualquier otra cosa, por ejemplo las válvulas de circulación de un caldera o la apertura de una puerta.

No olvides que necesitas la librería keypadLibray para hacerlo funcionar.


Servos y teclado matricial | RincónIngenieril

Código para controlar servomotores usando un teclado matricial

#include <Keypad.h>
#include <Servo.h>

//Variables, constantes y matriz para el teclado
const byte FILAS = 4;                   //Número de filas
const byte COLUMNAS = 4;                //Número de columnas
char teclado[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinFilas[FILAS] = {9, 8, 7, 6};    //Pins en los que estan conectadas las filas
byte pinColumnas[COLUMNAS] = {5, 4, 3, 2}; //Pins en los que estan conectadas las columnas

//Crear el teclado usando todo lo anterior.
Keypad keypad = Keypad( makeKeymap(teclado), pinFilas, pinColumnas, FILAS, COLUMNAS );

//Crear servomotor con el nombre "servo1"
Servo servo1;

//Posición servomotor
int posicion = 0;

void setup() {
//Asignar pin 9 al servomotor
servo1.attach(10);
}

void loop() {
//Leer la tecla pulsada
char key = keypad.getKey();

if (key == '1'){
//Tras verificar el servo a mover, buscamos la confirmación A
do{
key = keypad.getKey();
} while(key != 'A');

if(posicion == 0){
servo1.write(20);
posicion = 20;
}
else if(posicion == 20){
servo1.write(1);
posicion = 0;
}
delay(300);
}
}

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en www.enriquegomez.me