Está en la página 1de 24

2020

[INTRODUCCIÓN A ROBÓTICA
CON ARDUINO]
Durante el desarrollo de este módulo nos familiarizaremos con los conceptos básicos de robótica y cómo
pueden llevarse a la práctica a partir de una plataforma de software y hardware libre como es Arduino. Se
darán los lineamientos básicos para diagramar y codificar un programa, y para manejar sensores y actuado-
res.
Introducción a la robótica
con Arduino

Robótica

La robótica es la rama de la tecnología que se dedica al diseño y construcción de los robots, siendo un robot
cualquier dispositivo electromecánico con cierto grado de inteligencia. Es decir, capaz de tomar decisiones
en base a un programa. Los robots suelen ser máquinas para la realización de trabajos productivos, inspira-
das en la imitación de movimientos y comportamientos de seres vivos.

Las aplicaciones de la robótica actualmente son muy variadas. Desde la amplificación de la potencia muscu-
lar del hombre hasta máquinas o instrumentos que son también capaces de procesar información, com-
plementándolo en alguna actividades intelectuales.
Las características que más destacan en los procesos robotizados son la precisión, repetitividad y velocidad
de los movimientos, el tiempo ininterrumpido de trabajo que pueden sostener y las tareas riesgosas o insa-
lubres que pueden llevar a cabo.
Básicamente, un proceso robótico consiste en medir, tomar decisiones y actuar. Para ello, todo robot cuen-
ta con un “cerebro”, es decir, un microcontrolador que constituye el sistema de control de la máquina. El
microcontrolador es un dispositivo programable capaz de interpretar datos y enviar órdenes.

Por otro lado tenemos los sensores. Estos son dispositivos que pueden traducir magnitudes como la tempe-
ratura, la presión y la humedad, en señales eléctricas que puedan ser interpretadas por el microcontrola-
dor. Le permiten al robot percibir el entorno, como si fueran sus “sentidos”.

Y por último tenemos los actuadores. En general son motores que mueven una herramienta o dispositivo
específico a través de transmisiones (cadenas, correas, cajas de engranaje o acoples). Por ejemplo, una
pinza para tomar objetos, una articulación de un brazo robótico, una compuerta o la rueda de un vehículo.

Los actuadores cuentan con sensores internos para informar su posición y velocidad. Y reciben las instruc-
ciones a través de un dispositivo que se encarga de convertir las señales de baja potencia en señales
de alta potencia. Este dispositivo será un driver o etapa de potencia.

Los robots pueden ser móviles, con distintos medios de locomoción, o fijos. Pueden ser orientados a la ma-
nipulación o al relevamiento de información, pueden ser total o parcialmente autónomos. Sin embargo,
todos responden aproximadamente a la estructura descripta.

~1~
Introducción a la robótica
con Arduino

Plataforma de desarrollo Arduino

Los sistemas embebidos son dispositivos electrónicos con capacidad de procesamiento, diseñados específi-
camente para propósitos particulares. Por ello, las funcionalidades de hardware se ajustan a estos propósi-
tos.

Estas plataformas tienen resueltas algunas cuestiones que suelen ser limitantes cuando uno da los primeros
pasos en el mundo de los microcontroladores. Por ejemplo, pueden programarse en forma directa a través
de usb sin necesidad de una placa complementaria, permiten conectividad física con otros dispositivos sin
necesidad de soldar componentes y sobretodo, suelen ser de arquitectura abierta (software y hardware
libre), y por ello suele haber una comunidad colaborativa virtual para compartir y potenciar desarrollos.

Dentro de estos sistemas destacan las plataformas Arduino, Raspberry y Beaglebone En este caso utiliza-
remos una tarjeta Arduino para implementar nuestro prototipo robótico. En particular un Arduino UNO.
Puede tomar información del entorno de toda una gama de sensores y puede afectar aquello que le rodea
controlando luces, motores y otros actuadores. El microcontrolador, que es el corazón del sistema, es un
Atmega 328.

~2~
Introducción a la robótica
con Arduino

Se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo


Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de
conectar a una PC o un celular, aunque tienen la posibilidad de hacerlo y comunicarse con diferentes tipos
de aplicaciones.

Tipos de variable y operadores en C

El lenguaje que emplea Arduino toma muchos elementos de los lenguajes C y C++. Ahora veremos los ope-
radores y tipo de variables más empleados.

Los tipos de variables son:

int Emplea 2 bytes de memoria y permite almacenar números entre -32 768 a 32 767)

char Emplea un byte de memoria y permite almacenar un caracter. Se emplea para trabajar con
cualquier símbolo de la tabla ASCII, incluyendo las letras del abecedario)

Los operadores son:

De asignación (Asignan lo que está a la derecha del operador a lo que está a la izquierda del mismo)

a=5

De comparación (Comparan si los elementos vinculados por el operador son distintos o son iguales)

a == 5 Devuelve una afirmación si a es igual a 5

a != 5 Devuelve una afirmación si a es distinto de 5

a>5 Devuelve una afirmación si a es mayor que 5

a<5 Devuelve una afirmación si a es menor que 5

a <= 5 Devuelve una afirmación si a es menor o igual a 5

a >= 5 Devuelve una afirmación si a es mayor o igual a 5

De lógica (Establecen relaciones lógicas entre las expresiones vinculadas por el operador)

(a > 5) && (c > 6) Devuelve una afirmación cuando a es mayor que 5 y al mismo tiempo c es
mayor que 6. Es decir, si se cumplen ambas condiciones simultáneamente.

(a > 5) | | (c > 6) Devuelve una afirmación si a es mayor que 5 o si c es mayor que 6. Es decir,
si se cumplen alguna de las dos condiciones.

~3~
Introducción a la robótica
con Arduino

Estructuras condicionales (if - while)

Estas estructuras son propias de C. Para comprenderlas nos ayudaremos de diagramas de bloques. Luego
veremos cómo traducir esos diagramas en pseudocódigo y en los ejemplos veremos cómo implementarlos
en Arduino.

La primera estructura que analizaremos es el while. Esta estructura es un ciclo que se repite y ejecuta una
determinada acción o varias acciones, siempre que se cumpla una determinada condición.

Por ejemplo, mantener un led encendido durante un segundo y apagado durante un segundo mientras que
un contador sea menor que 10. Si el contador se inicia en cero e incrementamos su valor en cada ciclo,
habremos encendido y apagado 10 veces el led.

while(CONDICIÓN)
{
INSTRUCCIÓN 1
INSTRUCCIÓN 2
}

Para resolver el ejemplo que acabamos de


proponer en pseudocódigo podríamos
plantear:

while(CONTADOR < 10)


{
Encender Led
Esperar un segundo
Apagar Led
Esperar un segundo
Incrementar contador
}

El programa entra por primera vez a la estructura si se cumple la condición, ejecuta secuencialmente las
instrucciones y vuelve a preguntar se la condición se sigue cumpliendo. Este proceso se repite hasta que
deje de cumplirse. Por lo menos una de las instrucciones del ciclo debe afectar a la variable de la condición
para poder salir en algún momento de la estructura.

La siguiente estructura es el if. Esta estructura pregunta si se cumple una determinada condición. Si se
cumple ejecuta una acción o una serie de acciones y, a diferencia del while, sigue con el resto del programa.
Es decir, compara, y ejecuta el cuerpo de la estructura una sola vez. Los if pueden anidarse sin inconvenien-
tes empleando el conector else if.

~4~
Introducción a la robótica
con Arduino

Los indicadores que dentro de un programa nos marcan una determinada condición se denominan flags o
banderas. Entonces, por ejemplo, podremos encender un led rojo cuando el flag sea uno y encender un led
verde cuando el flag sea 2.

if(CONDICIÓN)
{
INSTRUCCIÓN 1
INSTRUCCIÓN 2
}

Para resolver el ejemplo que acabamos de


proponer en pseudocódigo podríamos
plantear:

If ( BANDERA == 1)
{
Encender Led Rojo
Apagar Led Verde
}
If ( BANDERA == 2)
{
Encender Led Verde
Apagar Led Rojo
}

Descripción del hardware

~5~
Introducción a la robótica
con Arduino

Microcontrolador ATmega328P

Voltaje de Operación 5V

Voltaje de entrada (recomendado) 7-12V

Voltaje de entrada (límites) 6-20V

Puertos de entrada y salida I/O digitales 14 (de los cuales 6 tienen salida PWM)

Puertos de salida digitales con PWM 6

Puertos de Entrada Analógica 6

Corriente continua por cada puerto I/O 20 mA

Corriente continua del puerto de 3,3V 50 mA

Memoria Flash 32 KB (ATmega328P)de los cuales 0.5


KB los usa el bootloader

SRAM 2 KB (ATmega328P)

EEPROM 1 KB (ATmega328P)

Velocidad de Clock 16 MHz

LED_BUILTIN 13

Largo 68.6 mm

Ancho 53.4 mm

Peso 25 g

Pasemos a detallar las partes más importantes que constituyen el hardware de la plaqueta:

Puerto USB-B: Es la principal forma que utiliza la placa para interactuar con una PC. Permite cargarle
programas nuevos hechos por el usuario o por terceros. También puede proveer la alimentación que
requiere el arduino para funcionar (5V) con una corriente máxima de 100mA.

Entrada de energía: Facilita la alimentación del arduino cuando está listo para funcionar sin necesi-
dad de conectarlo al puerto USB de la PC. Puede alimentarse con tensiones desde 6V a 20V pero los
fabricantes recomiendan usar de 7V a 12V. Esta tensión será regulada por la misma placa arduino pa-
ra obtener una tensión de operación estable de 5V.

~6~
Introducción a la robótica
con Arduino

Esto bien puede lograrse con un cargador de pared con la ficha plug de 2,1 mm de centro positivo
(no confundir con los de centro negativo, lo cual suele ser un error común).

Entradas y Salidas Digitales: Se utilizan para recibir y generar señales de estado binario (2 estados),
el estado “1 o alto” se representa eléctricamente con 5V y el “0 o bajo” como 0V. Estas señales pue-
den provenir de un sensor periférico, como también del cambio de tensión en el punto del circuito al
que esté conectada la entrada.

Este cambio de tensión puede darse por un accionamiento mecánico (pulsado de un botón o una te-
cla) o accionamiento electrónico (activación de un transistor o fototransistor).

También puede generar este tipo de señales al fijar la tensión de la salida en 5V o 0V, lo que nos
permite enviar señales de control de activación y desactivación a la etapa de potencia. Las salidas di-
gitales pueden también comandar en forma directa algunos dispositivos (sin necesidad de una etapa
de potencia), pero estos deben ser de un consumo muy bajo de corriente (como un led o un servo-
motor pequeño)

Entradas Analógicas: Estas entradas nos permitirán el sensado de señales analógicas y su discretiza-
ción para su posterior procesamiento. Las señales no deben superar los 5v de amplitud máxima, Se-
rán representadas por el conversor analógico digital de 10 bits con una resolución de 1024 valores.

Esto quiere decir que podremos partir el rango (0-5)V, en 1024 valores diferentes. Se emplean espe-
cíficamente para la lectura de los sensores que devuelvan este tipo de señales.

Microcontrolador ATmega 328p: Este es el modelo de microcontrolador que lleva el Arduino UNO,
es el centro neurálgico de la lógica y procesamiento del embebido.

Salidas PWM: Estas salidas permiten enviar una señal digital pulsada para aplicar la técnica de con-
trol conocida como PWM (pulse width modulation o modulación por ancho de pulso). Consiste bási-
camente en variar el ancho de pulso de una señal periódica para variar la potencia media entregada
desde la fuente hacia la carga (un motor o un led). Como resultado se varía la velocidad del motor o
la intensidad de luz emitida por el led.

~7~
Introducción a la robótica
con Arduino

Entorno de desarrollo integrado

Lo importante de entender, es que el microcontrolador es capaz de procesar información, enviar órdenes y


recibir datos del medio. El procesamiento siempre tiene que ver con operaciones matemáticas y lógicas
que resuelve gracias al microprocesador, mientras que la interacción con el entorno es a partir de sus patas
o pines, las cuales pueden configurarse para recibir señales o enviar órdenes. A su vez, estas señales y ór-
denes pueden ser analógicas o digitales.
Entonces, construir un programa se basa en indicarle al microcontrolador, bajo qué condiciones debe eje-
cutar una u otra acción. Y estas condiciones pueden estar sujetas al entorno, es decir, a la lectura de los
sensores.

El entorno de desarrollo integrado o IDE (Integrated Development Environment), es la interfaz gráfica des-
de la cual se editan los programas, se compilan y se cargan en el microcontrolador. Para editar el programa
debemos conocer el lenguaje, es decir, el conjunto de instrucción y rutinas disponibles y cómo codificarlas.
De esta manera sabremos como indicarle al microcontrolador lo que queremos hacer.

El proceso de compilación se basa en traducir el código que escribimos a lenguaje de máquina, es decir, al
lenguaje que puede “entender” el microcontrolador para ejecutar el programa. Si en alguna parte del códi-
go equivocamos la forma en que se escribe una instrucción o se emplea una función, nos devolverá un
error de compilación. Si no hay errores de compilación el programa se cargará en el microcontrolador y
estará listo para usarse.

Veamos el programa Arduino Software (IDE), y las herramientas que proporciona.

Antes que nada, se descarga la IDE: https://www.arduino.cc/en/main/software#:

Se elige el instalador que corresponda al sistema operativo de la computadora. La descarga es gratuita. Una
vez instalada la IDE en la computadora se puede acceder como a cualquier otro programa desde la barra de
inicio o un ícono de escritorio. Lo primero que podemos hacer es ir a File>Preferences y cambiar el idioma a
Español (Spanish).

~8~
Introducción a la robótica
con Arduino

Una vez modificado el idioma, cerramos y volvemos a abrir el programa para que guarde los cambios.

~9~
Introducción a la robótica
con Arduino

El Arduino IDE contiene un editor de texto (como el bloc de notas de windows) para escribir el código, un
área de mensajes, una consola de texto, una barra de herramientas con botones para funciones de uso
común y una serie de menús.

Escribir Sketches (Programas)

A los programas que se escriben usando el Arduino Software (IDE) se los llama sketches. Estos sketches son
escritos en el editor de texto y son guardados con la extensión de archivo .ino. El editor tiene funciones
como copiar/pegar y buscar/reemplazar texto. El área de mensaje nos mantiene al tanto de los errores
cometidos o de la la función que está realizando el software, como compilar o cargar el programa.

En la esquina inferior derecha de la ventana se muestra la placa que tenemos seleccionada (Arduino Uno,
Mega, etc...) y el puerto serie COM (USB) al que está conectada. Los botones de la barra de herramientas
nos permiten verificar, subir, crear nuevo, abrir, y guardar (salvar) sketches, y abrir el monitor serie.

Verificar

Chequea si hay errores en el código compilándolo.

Subir

~ 10 ~
Introducción a la robótica
con Arduino

Compila el código y lo sube a la placa que esté conectada.

Nuevo

Crea un sketch nuevo.

Abrir

Presenta un menú de todos los sketches en tu proyecto (sketchbook). Haciendo


click en uno de ellos lo abrirá en una nueva ventana. También da acceso rápido a
ejemplos de sketches.

Salvar

Salva el sketch.

Monitor Serie

Abre el monitor serie

Sketchbook (proyecto)

El Arduino Software (IDE) usa el concepto de proyecto. Un lugar estándar para almacenar los programas
(sketches). Los sketches en tu sketchbook pueden ser abiertos desde Archivo > Proyecto ó desde el botón
Abrir. La primera vez que se uses Arduino Software (IDE), creará automáticamente un directorio para tu
proyecto. Se puede ver o cambiar la ubicación predeterminada del proyecto desde Archivo > Preferencias.

Subiendo o cargando el sketch

Antes de subir el sketch, se necesita seleccionar la placa correcta desde Herramientas > Placa y el puerto
desde Herramientas > Puerto. En Windows, probablemente aparezca como COM3 o mayor y entre parén-
tesis el nombre de la tarjeta conectada. Sin embargo, esto dependerá de los drivers utilizados para el puer-
to USB . Se puede buscar el dispositivo USB en los puertos de el Windows Device Manager.

Una vez seleccionada la placa correcta y su puerto, se presiona el botón Subir de la barra de tareas. En la
mayoría de las placas, se puede ver los leds asociados a los pines de Arduino RX y TX titilar mientras se car-
ga el programa, indicando la transferencia de datos. hay que asegurarse que nada esté conectado a estos
pines mientras se carga un programa nuevo.

El Arduino Software (IDE) mostrará un mensaje cuando termine de subir el programa. Si no hubo proble-
mas mostrará el mensaje “sketch subido” . De lo contrario mostrará los errores de compilación o de comu-
nicación entre la placa y la PC.

~ 11 ~
Introducción a la robótica
con Arduino

Cuando se sube un programa, se está usando el Arduino bootloader, un programa que fue cargado al mi-
crocontrolador previamente. Esto permite subir código sin necesidad de hardware adicional. El bootloader
está activo por unos segundos cuando se resetea la placa, luego comienza a ejecutar el último sketch que
se haya subido al microcontrolador.

Librerías

Las librerías proveen funcionalidades extra que pueden ser empleadas en el programa. Por ejemplo traba-
jar con hardware específico como sensores ó bien manipular datos. Puedes usar las librerías escritas por
otros usuarios o bien crear tus propias librerías. Para tener disponible una librería en un sketch primero hay
que cargarla desde Programa > Incluir Librería.

A partir de aquí, para usar la librería en un sketch se escribe #include <Nombre de la librería> al principio
del sketch. Como las librerías deben ser subidas a la placa junto al sketch, estas aumentan el espacio ocu-
pado en memoria.

Monitor Serie

El monitor serie permite mostrar los datos enviados y recibidos desde la placa Arduino a través del puerto
USB. Para enviar datos desde la PC a la placa se puede ingresar texto en la barra superior y presionar send.
Para establecer una comunicación se deben establecer algunos parámetros que veremos posteriormente
en los ejemplos.

Estructura de un programa

A continuación presentaremos la estructura típica de un programa en Arduino.

~ 12 ~
Introducción a la robótica
con Arduino

Lo primero es identificar las partes principales de la estructura del programa y las herramientas básicas de
Edición del mismo.

Nota que las palabras clave reservadas por el compilador para tareas específicas se tornan de otro color.
Esto permite detectar rápidamente errores de tipeo. Por otro lado, puedes hacer comentarios a lo largo de
todo el código. Estos comentarios serán ignorados por el compilador, simplemente son una herramienta
para explicar y recordar lo que hace cada parte del código. Para incluir comentarios se usa la doble barra //,
o bien /* comentario */ como se muestra en el ejemplo. Los comentarios aparecen en color gris.

Lo primero que se hace en el código es definir las variables y constantes que se van a utilizar de forma glo-
bal. Se colocan etiquetas a ciertos números para facilitar su uso a lo largo del código y se definen las libre-
rías que se utilizarán.

Es una buena práctica de programación utilizar letras mayúsculas para las constantes y letras minúsculas
para las variables. Las etiquetas se nombran haciendo referencia al uso que se le dará al número en el pro-
grama.

De esta manera podremos tener:

La última instrucción asigna el número 13 a la etiqueta PIN_LED. De esta forma, cada vez que se escriba
PIN_LED en el código será lo mismo que escribir 13.

Lo que sigue es el setup y el loop. Ambas son funciones, la primera de configuración (se ejecuta una sola
vez cuando comienza el programa) y la segunda de ejecución cíclica indefinida. Cuando una función no de-
vuelve ningún parámetro, se coloca delante del nombre de la función la palabra reservada void. Cuando
devuelve algún valor se coloca delante del nombre de la función el tipo de variable que devuelve, por
ejemplo int, float, boolean. En este caso, ninguna de las dos funciones devuelve ningún valor.

Manejo de sensores

A la hora de percibir el mundo real, un robot o máquina automatizada necesita dispositivos análogos a ór-
ganos sensoriales, ojos para ver, oídos para oír, piel para percibir la temperatura, etc. Estos dispositivos se
denominan sensores. La analogía no suele ser tan directa como uno creería, es decir, reemplazar los ojos
con una cámara o los oídos con un micrófono.

La realidad es que el poder de procesamiento necesario para procesar la información de estos dispositivos
tan complejos requiere computadoras y algoritmos de inteligencia artificial que todavía son restrictivos

~ 13 ~
Introducción a la robótica
con Arduino

para el usuario (no así para la industria que ya trabaja con sistemas de visión por ejemplo). Por lo tanto los
sensores que se utilizan suelen ser más sencillos y puntuales a la hora de observar el mundo que rodea a la
máquina. Los sensores que podemos utilizar se dividen en dos categorías que derivan del tipo de informa-
ción que pueden generar.

Sensores Digitales

Por digital nos referimos a que el sensor devuelve una señal que solo puede tomar dos estados. Un botón
puede estar apretado o no, un sensor PIR de movimiento puede indicar que hay movimiento o no, un haz
infrarrojo puede estar interrumpido o no. Solo dos situaciones se pueden presentar en estos sensores y
nunca ambas al mismo tiempo. Estos dos estados son representados eléctricamente con dos tensiones
(voltajes), 5V o 0V, y computacionalmente se representan como los estados binarios 1 (nivel alto - activado)
o 0 (nivel bajo - desactivado).

Estos sensores no son tan sensibles a las sutilezas que nosotros podemos percibir con nuestros sentidos.
Por ejemplo, al ver una persona moverse frente a nosotros podemos estimar dirección, sentido y velocidad.
El sensor PIR (usados domésticamente para detectar si hay alguien en el pasillo y encender la luz) solamen-
te le dice al microcontrolador si algo se movió y no a qué velocidad o en en qué sentido ni en qué dirección.

Pasemos a detallar algunos de los sensores que emplearemos:

Final de carrera: No es más que un botón mecánicamente robusto que nos permite saber cuándo se
llega al límite mecánico del recorrido de un movimiento. Tiene tres patas. Una donde se alimenta con
5V, otra que se conecta a la referencia (0V) y la última pata, la de señal, se conecta a un pin digital
del Arduino.

Cuando el botón está presionado cortocircuita la pata de señal con una de las dos restantes y cuando
no está presionada cortocircuita la pata de señal con la otra. Por lo tanto permite enviarle una señal
de 5V al Arduino cuando está en un estado (no presionada) y una de 0V cuando está en el otro (pre-
sionada). A esta configuración se la llama normal cerrado.

~ 14 ~
Introducción a la robótica
con Arduino

Ultrasonido HC-sr04: Algunos sensores digitales buscan devolver información más compleja con la
ayuda de software, el Sensor de Ultrasonido HC-sr04 hace precisamente eso. Eléctricamente tiene un
comportamiento sencillo.

Tiene una pata de alimentación de 5V y una pata de conexión a GND (0V). Además tiene una pata
llamada Echo, y otra llamada Trigger.

Con el Trigger se acciona el disparo de una onda ultrasónica (esta función se podría considerar como
un actuador, el término correcto sería sensor activo) y con el Echo se captura el rebote. El principio
de funcionamiento consta en disparar una rafaga corta (del orden de los 10us) de onda ultrasónica,
para luego esperar y sensar el rebote.

Sabiendo que la onda se mueve a la velocidad del sonido y conociendo el tiempo que tardó entre que
se disparó y se sensó el eco, se puede calcular indirectamente la distancia a la que se encuentra el
objeto.

Sensores Analógicos

Estos sensores devuelven información más detallada. No solo dos posibles estados sino que un rango pseu-
do continuo de valores, lo que significa que en principio se puede obtener cualquier valor. Para poder al-
macenar esta información en el microcontrolador, hay que discretizarla.

El proceso de discretización implica partir la señal en una cantidad finita de pedazos. A cada “pedazo” en
que se parte la información se lo llama muestra. Cuantas más muestras se puedan tomar, más precisa es la
medición y más útil es la información.

Si la respuesta del sensor genera una forma de onda como esta:

~ 15 ~
Introducción a la robótica
con Arduino

El Conversor Analógico Digital (ADC, por sus siglas en inglés) del Arduino discretizará la señal tomando valo-
res a una frecuencia determinada, es decir, a intervalos constantes de tiempo. Como resultado de este pro-
ceso se obtiene la una señal con la siguiente forma:

La resolución de 1024 valores distintos (del 0 al 1023) de tensión que puede discretizar el ADC de 10 bits del
Arduino suelen ser más que suficiente para describir la curva original con la fidelidad adecuada. Cada esca-
lón de medida es de 5V/1024 = 0,00488281V, algo menos de 5mV, lo que significa que no puede discrimi-
nar entre valores de tensión cuya diferencia sea menor que esto.

Sin entrar en mucho detalle, lo que un convertidor ADC hace es comparar sucesivamente la señal que que-
remos cuantificar en la entrada, con una tensión de referencia. Dicho de otro modo, el ADC no proporciona
valores absolutos sino relativos.

~ 16 ~
Introducción a la robótica
con Arduino

Por default la tensión de comparación es de 5V, sin embargo cuando el sensor no devuelve un valor máxi-
mo de 5V conviene redefinir la referencia para poder mejorar la resolución

Sensor de temperatura TMP36: Tiene una pata de alimentación, una de referencia (0V) y una tercera
de señal que se conecta a un pin analógico del Arduino. Este sensor devuelve una tensión entre 0.1V
y 1.7V para representar la temperatura a la que está siendo sometido (entre -40°C y 125 °C) como se
puede ver en esta gŕafica:

Como se puede ver que la tensión máxima (1.7V) es menor que el default de 5V, conviene cambiar la
tensión de referencia.

Esto puede hacerse por código mediante la instrucción analogReference(). En Arduino UNO por
ejemplo, analogReference(INTERNAL) redefine la tensión de referencia como 1,1V, lo que permite
aprovechar las 1024 posibilidades.

Por más que con 1.1V de referencia máxima no puedo medir las temperaturas más altas, para medir
temperaturas cercanas a la temperatura ambiente funcionaría bien (nota en la curva que para 1,1V la
temperatura debería ser de 60° aproximadamente).

Para usar una referencia de tensión externa. En el código se define analogReference(EXTERNAL) y se


conecta la referencia de tensión deseada en el pin referenciado con AREF.

~ 17 ~
Introducción a la robótica
con Arduino

Sensor de humedad de suelo - capacitivo SOIL MOISTURE: Este sensor también es analógico y se co-
necta de la misma forma. Debemos hallar la tabla correspondiente para su calibración.

Estructura mecánica de un robot

Dentro del sistema robótico podemos decir que existe una parte de la mecánica orientada a la movilización
y otra parte orientada a la manipulación. Cuando hablamos de manipulación, hablamos del posicionamien-
to de un elemento terminal (soldadora, pinza, destornillador, regador etc) en un punto determinado del
espacio para realizar una determinada función.
Un robot puede combinar ambas partes o carecer de una de ellas. Si un robot tiene como única función
explorar y relevar datos, toda su mecánica apuntará seguramente al traslado del robot. Esto podría ser por
medio de ruedas u orugas si es terrestre o por medio de hélices y/o alas si es aéreo. Por otro lado si un

~ 18 ~
Introducción a la robótica
con Arduino

robot forma parte de la línea de ensamblaje de una fábrica automotriz, toda su mecánica apuntará a la
manipulación de la herramienta, ya que el robot no necesita desplazarse.
Abarcaremos de aquí en más, la estructura destinada al posicionamiento de un elemento terminal. Es decir,
nos enfocaremos en la mecánica de un sistema manipulador sin desplazamiento. Mecánicamente, un ma-
nipulador está formado por una serie de elementos o eslabones unidos mediante articulaciones que permi-
ten un movimiento relativo entre dos eslabones consecutivos.
Cada uno de los movimientos independientes que puede realizar cada articulación con respecto a la ante-
rior se denomina grado de libertad.

Transmisiones

Las transmisiones son los elementos encargados de transmitir el movimiento


desde los actuadores hasta las articulaciones. También pueden ser utilizadas
para convertir un movimiento traslacional en rotacional o viceversa. Un
buen sistema de transmisión debe tener un tamaño y peso reducidos, debe
evitar holguras y debe ser capaz de soportar un funcionamiento continuo a
un par (torque) elevado.
Para la transmisión pueden emplearse reductores u optar por el acciona-
miento directo. Los reductores son los encargados de adaptar el par y la velocidad de salida del actuador a
los valores adecuados. A los reductores utilizados en robótica se les exigen condiciones de funcionamiento
muy restrictivas por las altas prestaciones que deben presentar en cuanto a precisión, repetitividad y velo-
cidad de posicionamiento. Deben ser de bajo peso y tamaño y presentar poca fricción. Deben soportar ele-
vados pares instantáneos (continuos arranques y paradas).

Si en lugar de emplear reductores se realiza un accionamiento directo, el eje del actuador se conecta direc-
tamente a la articulación. Es ventajoso ya que reduce la complejidad de la estructura mecánica.
Sin embargo se requiere de un motor con par elevado a bajas revoluciones manteniendo la mayor rigidez
posible. Estas características encarecen sustancialmente al motor.
Como resumen presentamos la siguiente tabla con las posibilidades de transmisión, sus ventajas y desven-
tajas.

~ 19 ~
Introducción a la robótica
con Arduino

Manejo de actuadores

Los actuadores son los dispositivos que emplea el robot para actuar sobre el entorno que lo rodea. Pueden
ser neumáticos, hidráulicos o eléctricos. Los eléctricos suelen ser motores. En particular, nos encargaremos
de describir el funcionamiento y control de los motores PaP (paso a paso) y los motores de continua.

Motores PaP

Para no complejizar, diremos que los motores paso a paso se activan por medio de pulsos. Cada vez que el
motor recibe un pulso, avanza un ángulo determinado o paso. En general, estos motores trabajan con 400
pasos por vuelta, con lo cual, el eje rota 360°/400 = 0,9° por paso. El sentido de giro se regula con la se-
cuencia de pulsos y la velocidad se regula con la ventana temporal entre pulso y pulso.

La ventaja de estos motores es que nos permiten posicionar el eje con mucha precisión. Si la rotación se
convierte mediante transmisiones en un movimiento lineal, se podrá posicionar con precisión cualquier
herramienta a lo largo de un eje cartesiano.

En principio, debemos considerar que si no se agrega un encoder (sensor) para conocer la posición, este
tipo de motor funciona a lazo abierto. Es decir, no cuenta con una realimentación de la posición en la cual
se encuentra. Si por algún motivo, se pierde algún paso en la secuencia que el motor recibe, no hay forma
de que el sistema “se entere” y pueda corregir el error.

~ 20 ~
Introducción a la robótica
con Arduino

Los motivos posibles para perder pasos tienen que ver con que el motor deba
realizar un torque superior al torque de régimen para poder avanzar un paso.
Por ello, es recomendable su uso en ocasiones en que el torque del motor
sea muy superior al torque necesario para mover la carga. Otra opción es
integrar un encoder al motor.
Los motores que más se emplean tanto en aplicaciones industriales como en
máquinas de menor porte son los bipolares. Existen dos formas de suminis-
trar la secuencia de pulsos necesaria para el control.
Como hemos visto, los actuadores necesitan una etapa de control que provea
las señales de baja corriente (en nuestro caso el Arduino), y una etapa de
potencia que permita el flujo de energía desde la fuente al motor cuando la
etapa de control se lo indique.
En este caso, el driver resuelve internamente la secuencia, recibiendo solo un
tren de pulsos y un nivel lógico para el sentido de giro. Para motores de bajo
consumo (menos de 1A en total) puede emplearse el integrado A4988, cono-
cido comercialmente como pololú. Para motores de mayor consumo se em-
plean drivers como el Toshiba Tb6560. Con este tipo drivers la velocidad se
controla regulando el período del tren de pulsos.

Veamos un esquema de conexión de los dispositivos:

~ 21 ~
Introducción a la robótica
con Arduino

Motores de continua

Un motor de continua es un dispositivo que transforma energía eléctrica en energía mecánica rotacional. Es
decir, que a partir de una alimentación de tensión constante, permite el giro de un eje de forma continua.

Como características principales podemos mencionar:

 A mayor torque requerido, mayor corriente consumida.


 A mayor tensión aplicada (dentro de ciertos límites), mayor velocidad de giro.
 Cuando se invierte la polaridad en el motor, el mismo gira en sentido contrario.
 No se puede controlar con precisión la posición salvo que se agregue un sensor (encoder)

La forma correcta de controlar la velocidad del motor de continua es a través de la técnica denominada
PWM (pulse width modulation).

Con esta técnica se aplican pulsos de tensión continua con una frecuencia fija. Al variar el ancho del pulso
(duty cycle) se varía la energía media entregada al motor y en consecuencia, su velocidad.

La frecuencia con la que se envían los pulsos es muy elevada, con lo cual el motor “no percibe” que está
siendo alimentado con una señal pulsada (compuesta de pulsos) y no con una señal continua.

Esta técnica también permite variar la intensidad de luz en una lámpara de continua o un led ya que la
energía promedio entregada tiene relación directa con la luminiscencia.

Como hemos visto, los actuadores necesitan una etapa de control que provea las
señales de baja corriente (en nuestro caso el Arduino), y una etapa de potencia
que permita el flujo de energía desde la fuente al motor cuando la etapa de con-
trol se lo indique. En este caso, el driver también permite controlar el sentido de
giro (tiene 2 entradas de control, si se activa una gira en un sentido y si se activa
la otra gira en el sentido puesto). El más comúnmente usado para motores de
hasta 2A de consumo es el L298. Este integrado permite manejar dos motores de
continua y se puede conseguir montado sobre placa con borneras, leds indicado-
res y protecciones en una presentación como la de la figura.

~ 22 ~
Introducción a la robótica
con Arduino

Veamos un esquema de conexión de los dispositivos:

~ 23 ~

También podría gustarte