5 - Programación de Servomotores - Parte 1
Programación de Servomotores (Parte 1)
Para poder comenzar con la programación del Arduino Uno R3 en Thinkercad, procedemos a seleccionar o hacer clic sobre la tarjeta de Arduino Uno R3.
Clic en la opción Continuar del mensaje de la ventana emergente.
Como se puede apreciar en la imagen anterior, se puede apreciar la estructura básica de programación en código C++ para Arduino Uno R3. El cual modificaremos para poder controlar el servomotor de la siguiente forma:
1. La Biblioteca Servo.h
Para que Arduino sepa cómo comunicarse con el servomotor, necesitamos usar una biblioteca o librería para dicho fin. Una biblioteca es un conjunto de funciones y herramientas prescritas que nos facilitan la programación. Para los servomotores, la biblioteca se llama Servo.h.
Paso clave: La primera línea de tu programa siempre debe ser:
#include <Servo.h>
Esto le dice a Arduino: "Voy a usar las herramientas de la biblioteca Servo, así que por favor, tenlas listas."
Una vez que la biblioteca está lista, necesitamos crear una variable para nuestro servomotor. A esta variable la llamamos un objeto porque, además de guardar información, tiene funciones especiales que nos permiten controlar el motor.
Ejemplo: Con la línea Servo miServo;, creamos un objeto llamado miServo. Puedes elegir el nombre que quieras, pero es una buena práctica usar un nombre que te recuerde lo que controla.
Está será la segunda línea de código C++ de nuestro proyecto de servomotor, el codigo general hasta el momento quedaría de la siguiente forma:
3. Las Funciones Clave
La biblioteca Servo nos da dos funciones principales para controlar nuestro motor:
1. miServo.attach(pin): Esta función asocia nuestro objeto miServo a un pin digital de Arduino, que se define entre los paréntesis, como parámetro de la función. Es como si le dijeras a Arduino: "Usa el pin 6 (o el que elijas) para enviar las órdenes a miServo". Esta función se coloca en la sección void setup(), porque solo necesitas hacerlo una vez.
2. miServo.write(ángulo): Esta función es la que realmente le dice al servomotor a dónde moverse. La función toma un valor numérico entre 0 y 180 grados , que se define entre los paréntesis, como parámetro de la función.
Este código mueve el servomotor de su posición inicial: 0°.
A ese ángulo exacto. Por ejemplo: miServo.write(90); moverá el motor a la posición central exactamente a 90°.
4. El Código de Ejemplo
El código de esta sección te muestra cómo mover el servomotor a tres posiciones: 0°, 90° y 180°. Después de cada movimiento, se utilizará la función delay(1000); para que el programa se detenga por un segundo y puedas ver el movimiento del servomotor.
Para comenzar comenzamos agregando un comentario que nos recordará en el futuro que funcionalidad este implementada en el programa. Los comentarios no son compilados o utilizados por el programa, solo sirven para que otro programados o tú en el futuro recuerdes que hace el programa o la línea de código bajo el comentario.
Existen dos tipos de comentarios:
4.1. Comentarios:
4.1.1. Comentarios de una sola línea: para crear comentarios de una sola línea, se utiliza el símbolo de barra diagonal, en ingles: slash (/) doble seguido del texto del comentario requerido. Por ejemplo:
// Esté es un comentario de una sola línea.
4.1.2. Comentarios multilínea: como su nombre lo indica es un comentario generalmente muy extenso, por tal razón, utiliza o emplea más de una sola línea de una sola línea. para crear comentarios multilínea, se utiliza el símbolo de barra diagonal, en ingles: slash (/) seguido del simbolo asterisco (*), luego digita el texto del comentario requerido para finalizar el comentario debes escribir los símbolos del inicio del comentario pero de forma invertida, es decir, digitamos el símbolo asterisco (*) seguido de el símbolo de barra diagonal o slash (/). Por ejemplo:
/* Esté es un comentario muy extenso, por lo cual requiere o necesita múltiples líneas para servir de recordatorio sin perder precisión, ni detalle del mensaje */
Ya que se ha comprendido que son los comentarios, para que sirven y como funcionan. Creamos uno para nuestro proyecto con el siguiente mensaje:
/* Este programa demuestra como controlar un servomotor usando la biblioteca Servo.h. /*
El código del programa en TINKERCAR quedaría de la siguiente forma:
4.2. Incluyendo la librería Servo:
4.2.1. Librería Servo: para incluir la librería Servo, empleamos la siguiente línea de código: crear comentarios de una sola línea, se utiliza el símbolo de barra diagonal, en ingles: slash (/) doble seguido del texto del comentario requerido. Por ejemplo:
// 1. Incluye la biblioteca Servo.
/* Esta línea le dice a Arduino que necesitamos las herramientas de la biblioteca Servo. */
#include <Servo.h>
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.3. Creando un objeto de la clase Servo:
4.3.1. Creando un objeto de la clase Servo: Un objeto se crea con el fin de poder emplear las características o funcionalidades de las librerías de la clase importada, en este caso la librería Servo, transfiriéndolas a una variable tipo objeto de nuestro programa, para este caso será la variable miServo1, que además representa o hace referencia a nuestro servomotor físico con el fin de permitirnos programarlo. Esto se logra mediante la siguiente línea de código:
// 2. Crea un objeto de la clase Servo.
/* Este objeto es como una variable que representa a nuestro servo motor en el código. */
Servo miServo1;
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.4. La función setup():
4.4.1. La función setup(): Es la función principal de un programa de Arduino. Se caracteriza principalmente por ejecutar una sola vez el código albergado dentro de ella tan pronto se inicia, ejecuta o enciende la tarjeta Arduino Uno. su estructura básica es la siguiente:
void setup()
{
//Código de la función
a = a + b;
}
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.5. Asociar el objeto miServo a un pin (PWM) de Arduino:
4.5.1. Asociar objeto miServo a pin Arduino: Como vimos anteriormente los pines digitales que soportan PWM de la tarjeta Arduino son los que se encuentran marcados con un icono (~) seguido del número del pin digital, tales pines son: pin 3, 5, 6, 9, 10 y 11. Estos son los pines que usaremos para controlar el movimiento del servomoror, es decir, que es el pin al que se conecta el pin de control del servomotor físico. Esta línea de código debe estar dentro de la función setup() del programa, ya que en este bloque es donde se asignan o asocian los valores "número del pin", al método attach del objeto miServo. Esto se logra mediante la siguiente línea de código:
void setup()
{
// 4. Crea un objeto de la clase Servo.
/* Este objeto es como una variable que representa a nuestro servo motor en el código. */
miServo1.attach(6);
}
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.6. La función loop():
4.6.1. La función loop(): Es la función que permite el funcionamiento del programa, como su nombre lo indica, los bloques de programación contenidos dentro de esta función se ejecutan en un loop o bucle infinito, es decir, que código de esta función se repite una y otra vez logrando un bucle infinito. Es similar al bloque para siempre de Scracth o MBlock. Su estructura básica es la siguiente:
void loop()
{
//Código de la función
a = a + b;
}
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.7. La función o método write():
4.7.1. El método write(): Es una función miembro de la clase Servo, que permite mover el servomotor pasándole como parámetro el número de grados que se va a mover, es decir, especificando el número de grados que se requiere mover dentro de los paréntesis de la función. Por ejemplo, si se quiere mover el servomotor 90° el código quedaría de la siguiente forma:
void loop()
{
//Mover el servomotor 90 grados
miServo1.write(90);
}
El código en TINKERCAD por el momento se muestra de la siguiente forma:
4.8. La función o método delay():
4.8.1. El método delay(): Es una función que permite detener un programa Arduino por un determinado periodo de tiempo, determinado por un valor numérico que se pasa como parámetro de la función, es decir, un número que se escribe dentro de los paréntesis de la función delay(). Este valor se escribe en milisegundos, es decir, que si colocas un valor de 1000 dentro de la función delay(), el programa al leer esa línea de código se pausara por 1 segundo y luego continuará ejecutando las siguientes líneas de código. Por ejemplo, Se quiere mover el servomotor a una posición de 45°, que el programa espere un segundo y luego cambie a una posición de 90°. El código quedaría de la siguiente forma:
void loop()
{
// Mover el servomotor a 45°
miServo1.write(45);
// Pausar el programa por 1000 Milisegundos = 1 Segundo.
delay(1000);
// Mover el servomotor a 90°
miServo1.write(90);
// Pausar el programa por 1000 Milisegundos = 1 Segundo.
delay(1000);
}
El código en TINKERCAD por el momento se muestra de la siguiente forma:
Este código moverá el servomotor 45°, hará una pausa de un segundo, luego lo moverá a un ángulo de 90° y hará nuevamente una pausa de 1 Segundo, volviendo al ángulo de 45°, y repitiendo el ciclo infinitamente ya que los bloques de programación se encuentran dentro de la función loop(){..}
5. ¡Tu Taller de Programación!
Ahora, ¡es tu turno de ser el programador!
Objetivo: Tu misión es modificar el código para que el servomotor se mueva infinitamente entre los siguiente ángulos: 45°, 90 y 135° con pausas de 1 minutos entre cada uno.
¡Recuerda que la sintaxis es muy importante! Cada línea de código debe tener los paréntesis y el punto y coma ; al final. Si hay un error, el programa no funcionará, ¡así que sé un buen detective de código y revisa con atención!
Comentarios
Publicar un comentario