Con la herramienta de programación Snap4Arduino (snap4arduino.rocks) podrás aprender a programar movimientos en un servomotor SG90, o similares, de una manera gráfica, ya que esa herramienta está basada en la programación por bloques tipo Scratch.

Requisitos previos

Para empezar con esta programación necesitarás previamente haber realizado los siguientes pasos:

  • Realizar la conexión del servomotor a la placa Arduino
  • Tener instalada en el ordenador la aplicación Snap4Arduino. En la web oficial snap4arduino.rocks puedes encontrar la sección Download donde debes buscar la versión correspondiente a tu equipo informático. En el momento de escribir este artículo hay disponibles versiones para GNU/Linux, MacOSX, Microsoft Windows y una versión web para el navegador Chrome con un plugin.
  • Tener instalado en la placa Arduino el código de StandardFirmata, que utiliza la aplicación Snap4Arduino para comunicarse con la placa Arduino. En la sección Installation de la web snap4arduino.rocks puedes encontrar las instrucciones para hacer esa instalación, que requerirá que tengas instalado el entorno de programación de Arduino (Arduino IDE).

Encender el circuito

Enciende el circuito eléctrico (sin que esté conectada la placa Arduino al USB) activando el interruptor, o conectando directamente las baterías al circuito formado con la placa Arduino y el servomotor. De esta manera nos aseguramos de que el servomotor (o los servomotores, si se conectan varios) reciban la alimentación eléctrica desde las baterías y no desde el USB del ordenador.

La conexión USB del ordenador no puede proporcionar la corriente necesaria cuando se conecta un número mayor de motores, y podría llegar a ocasionar desperfectos en el puerto USB al que se conectara el circuito. En este ejemplo, donde se usa un único servomotor no sería necesario utilizar una fuente de alimentación externa, bastaría con la alimentación que puede recibir desde el USB del ordenador, pero siempre conviene alimentar los motores de los circuitos desde otra fuente de alimentación.

Comprueba que en la placa Arduino se enciende el led POW como se muestra en la siguiente foto:

IMG 20190609 204841 3510c

Conectar el circuito al puerto USB

Conecta la placa Arduino a uno de los puertos USB que tenga disponible el ordenador usando el cable USB apropiado.

 IMG 20190609 205611 72fef

Conectar la placa Arduino en Snap4Arduino

Abre la aplicación Snap4Arduino si no la tenías abierta y selecciona la sección Arduino del conjunto de bloques que aparecen en la parte superior izquierda. En los bloques que aparecen en el margen izquierdo pulsa el botón Connect Arduino y selecciona el puerto al que has conectado la placa Arduino.

Captura de pantalla 2019 06 09 a las 20.30.06 dc144

Si todo ha ido bien, deberás obtener un mensaje como el siguiente:

Captura de pantalla 2019 06 09 a las 21.04.10 1b455

Recuerda que la placa Arduino debe tener instalado el código de StandardFirmata para que Snap4Arduino se pueda comunicar con ella. En caso de que no se tuviera instalado ese código aparecerá un mensaje de error como el siguiente al intentar hacer la conexión:

Captura de pantalla 2019 06 09 a las 21.14.13 c4001

Indicar un ángulo al servomotor

Los servomotores más frecuentes suelen trabajar posicionando su eje en un ángulo entre 0º y 180º. Para posicionar el eje en un ángulo concreto desde Snap4Arduino debes usar el bloque set servo.

Arrastra ese bloque desde el margen izquierdo hasta la zona de trabajo central, y escribe en el primer parámetro el número del pin de Arduino en el que se encuentra conectado el servomotor (en el caso de este ejemplo es el 2) y en el segundo parámetro indica el valor correspondiente al ángulo en el que quieres posicionar el eje del servomotor (entre 0º y 180º). En este ejemplo se está posicionando a 90º:

Captura de pantalla 2019 06 09 a las 20.35.40 3499c

Haz clic sobre el bloque que has editado en la parte central de la pantalla (en el que has indicado los valores) y podrás escuchar cómo el motor se ha girado a la posición indicada (90º), si no estaba ya en esa posición previamente.

Prueba a indicar diferentes valores (entre 0 y 180) en el segundo parámetro, haz clic de nuevo en el bloque tras cada cambio y comprueba que el eje del servomotor se mueve a las posiciones que indiques. Para poder ver más claramente los movimientos coloca al eje del servomotor uno de los brazos que trae en el paquete.

Crear una secuencia de movimientos

Si deseas que el servomotor se posicione en distintos ángulos sucesivamente puedes añadir más sentencias set servo al código, pero debes tener en cuenta que hay que añadir una pequeña pausa entre cada movimiento del servomotor para que tenga el tiempo suficiente para que se alcance la posición indicada. Ten en cuenta que el servomotor tarda un instante en hacer cada giro.

Para añadir las esperas busca en la sección Control (amarillo) el bloque wait 1 secs. Como puedes observar, por defecto se añade una espera de 1 segundo, pero puedes modificar el valor para indicar el número de segundos que desees parar la ejecución del código. Puedes indicar valores con decimales pero ten en cuenta que deben usar como separador un punto en vez de la coma que usamos habitualmente.

Prueba a desarrollar y ejecutar este código. Recuerda que para ejecutarlo tan sólo debes hacer clic en el conjunto de bloques de código que hayas añadido.

Captura de pantalla 2019 06 09 a las 21.32.54 427c5

Al ejecutar ese código, el eje del servomotor de debe colocar sucesivamente en los ángulos 0º, 90º y 180º. En la siguiente animación puedes ver el movimiento que se debe obtener (ten en cuenta que la animación se repite).

servo 0 90 180 7f25d

Repetir una secuencia de movimientos

La herramienta Snap4Arduino nos ofrece una amplia variedad de bloques que pueden utilizarse para hacer una programación más avanzada con los que podremos conseguir movimientos más complejos que pueden ser necesarios para el caso de algunos robots que puedes construir.

Por ejemplo, puedes encontrar bloques para realizar bucles, usar sentencias condicionales, crear variables, etc.

Para que veas su posible aplicación vamos a desarrollar el código necesario para realizar movimientos más suaves y de manera repetida.

Vamos a suponer que deseamos mover el servomotor entre el ángulo 30 y el 150 con un incremento de 5 en 5 grados. Para indicar el ángulo en el que se va a colocar el servomotor en cada momento vamos a necesitar una variable que almacene ese valor, así que debemos crear una variable que llamaremos angulo desde el botón Make variable que se encuentra en la sección Variables (naranja) de Snap4Arduino.

Captura de pantalla 2019 06 11 a las 19.53.22 1e483

Indica el nombre angulo en la ventana emergente que aparece y pulsa OK.

Captura de pantalla 2019 06 11 a las 19.55.32 370c7

Así aparecerá un pequeño bloque con el nombre de la variable indicado. Ese bloque podrás utilizarlo cada vez que quieras hacer uso de esta variable.

Captura de pantalla 2019 06 11 a las 19.58.52 90344

Así que vamos a hacer uso de esta variable para asignar el primer ángulo en el que deseamos posicionar el servomotor.

  1. Arrastra a la zona de trabajo el bloque set que aparece bajo la variable que se ha creado y asígnale, usando la lista desplegable, la variable angulo como primer parámetro. Tras la palabra to indica el valor 30. Con esta sentencia se le está asignando el valor 30 a la variable angulo.
  2. Vuelve ahora a la sección Arduino y arrastra un bloque set servo justo debajo de la sentencia que acabas de crear. Indica el pin donde está conectado el servomotor (recuerda que en este ejemplo lo tenemos conectado al pin digital 2). Ahora, tras la palabra to donde se indica el ángulo al que queremos posicionar el eje del servomotor, en vez de indicar un valor numérico literal como se ha hecho en ejemplos anteriores, vamos a indicar la variable angulo. Esto puedes hacerlo volviendo a la sección Variables y arrastrando el bloque de la variable angulo dentro del segundo parámetro del bloque set servo.
  3. Como siempre, añade una espera, por ejemplo de 0.5 segundos, para que el servomotor tenga tiempo de posicionarse en la posición indicada.

Captura de pantalla 2019 06 11 a las 20.03.15 2537e

Si ejecutas ese conjunto de bloques (haciendo clic sobre él), se deberá colocar el eje del servomotor en el ángulo 30º.

Vamos a añadir ahora el código necesario para que el eje del servomotor gire progresivamente desde 30º hasta 150º de 5 en 5 grados.

  1. Añade un bloque repeat until de la sección Control (amarillo). Este bloque permite repetir un conjunto de bloques hasta que se cumpla una determinada condición. En nuestro caso vamos a querer que se repita el código necesario para que se vaya cambiando el eje hasta que el ángulo alcance el valor 150. Así que en la condición del repeat until debes añadir un bloque de comparación > (mayor que), que puedes encontrar en la sección Operators (verde). En el lado izquierdo del comparador añade la variable angulo y en la parte derecha escribe el valor 150.
  2. Dentro del bloque repeat until añade un bloque set, de la sección Variables, para modificar el valor de la variable angulo. Deseamos incrementar la variable en 5, por lo que a esa variable se le debe asignar el valor que tuviera previamente más 5. Por tanto, en la parte izquierda del bloque set debes indicar la variable angulo (la que se quiere modificar) y en la parte derecha añade un bloque de suma + (también en la sección verde Operators). Ese bloque de suma deberá estar formado por la variable angulo y el valor 5.
  3. El nuevo valor que tenga ahora la variable angulo se deberá asignar de nuevo al servomotor, por lo que repite el bloque set servo que ya has usado antes.
  4. La espera que hay que añadir ahora puede ser muy pequeña, porque la variación del eje del servomotor tan sólo va a ser de 5º, así que puedes asignar 0.01 segundos, por ejemplo.

Así debería quedar el conjunto del código hasta ahora:

Captura de pantalla 2019 06 11 a las 20.41.54 d898a

Al ejecutar todo ese conjunto conseguiremos que el servomotor se coloque inicialmente a 30º y se vaya incrementando poco a poco (con variación de 5º) hasta alcanzar 150º.

Vamos a añadir ahora un bloque repeat until similar para que el servomotor retroceda de la misma manera hasta los 30º de nuevo. Recuerda que puedes usar el botón derecho del ratón en un bloque de código y seleccionar la opción duplicate para copiar el código.

Ten en cuenta que ahora la condición del repeat until es distinta, ya que se debe repetir el código hasta que el ángulo sea menor que 30º, por lo que debes sustituir el operador > (mayor) por < (menor) y asignar el valor 30. Además, ahora la variable angulo debe decrementarse en 5 en cada vuelta del bucle, por lo que se debe restar en vez de sumar.

Captura de pantalla 2019 06 11 a las 20.49.57 b99d3

Ejecuta el código y comprueba que el servomotor parte de 30º, va girando hasta 150º y vuelve de nuevo, poco a poco, hasta 30º.

Esto no ha sido más que un ejemplo de las posibilidades de la programación con Snap4Arduino de servomotores conectados a una placa Arduino. Dedicándole tiempo a investigar el funcionamiento algunos bloques más de este entorno de desarrollo, conectando más servomotores y uniendo objetos a los brazos de los servomotores podrás hacer funcionar innumerables máquinas como robots, por ejemplo.