CABLE CONEXIÓN CON LA PLACA ARDUINO

Siguiendo el esquema del artículo anterior, se realizó un cable que permite comunicar la placa Arduino con el robot de una forma simple y estable.
El cable de conexión se realizó a partir de un cable plano flexible de 10 hilos, de los cuales se aprovechan 6 para las conexiones. A las terminaciones se soldaron por un lado 5 pines hembra y 1 macho, para la conexión con la placa Arduino y en el otro lado  se utilizó  la conexión estandar de grillete a la que se le acoplaron 6 pines machos unidos. Para la conexión con los correspondientes 6 pines hembra del robot.

CONEXIÓN ATMEGA-ARDUINO

Para poder cargar los programas desde el ordenador al microcontrolador Atmega, es preciso utilizar la placa Arduino.

A continuación se muestra un esquema de como se puede realizar esta conexión.

Esta conexión alimenta a todo el sistema, incluyendo a los motores, esto permite realizar pruebas que no requieran desplazamiento.

Relación conexionado pines:

Arduino —>Atmega

1-ICSP—> 18
2-ICSP (5V)—> 7/20
3-ICSP—> 19
4-ICSP—> 17
6-ICSP (GND)—> 8/9/10/22
10-DIGITAL—> 1

Para poder cargar programas en un microcontrolador Atmega328P “virgen”, mediante esta técnica, primero es necesario programar la tarjeta Arduino Leonardo como programador y cargar el cargador de inicio (bootloader) en el microcontrolador; para esto es necesario seguir los siguientes pasos:
1- Abrir Ide Arduino
2-Abrir en el Ide Arduino, Archivo/Ejemplos/ArduinoISP
3- Cambiar #define RESET SS por #define RESET 10
4- Elegir en Herramientas/Programador AVRISP mkll y en Herramientas/Tarjeta Arduino Leonardo
5- Cargar el programa pulsando en cargar
6- Elegir en Herramentas/Tarjeta Arduino Duemilanove w/ATmega 328
7- Pulsar en Herramentas Gravar Cargador de Inicio
Con la tarjeta Leonardo y con el microcontrolador preparados, se puede cargar cualquier programa que nos interese sin tener que volver a realizar estos pasos.
Para cargar nuevos programas, seleccionamos en Herramientas/Programador Arduino as ISP y seleccionamos en Archivo Cargar usando Programador o con la combinación de teclas Ctrl+Shift+U.

 

CIRCUITO S.LINEAS

La función de este circuito es la de portar los CNY70 utilizados para seguir liñas y adaptar  sus conexiones.
Los 3 CNY70 están en la cara inferior de la placa, mientras que los demás componentes están en la superior, esto es así para facilitar las conexiones.

Simulación da cara superior.

Cara inferior.

Esquema eléctrico.

CIRCUITO BOT

La función principal de este circuito es la de administrar las conexiones entre el circuito TOP y los otros elementos del Robot.

Loss conectores ENCODERS-1 e ENCODERS-2 se encargan de la alimentación y el conexionado de dos CNY-70 que realizan la función de encoders.
Los conectores MOTOTES sirven para simplificar y ordenar las conexiones de alimentación de los motores.

A continuación se muestra una simulación de la placa BOT seguida del fotolito de una cara utilizado en la misma.

CIRCUITO TOP

El robot consta de 3 placas que albergan los circuitos que hacen posible su funcionamiento.

La placa principal, denominada placa TOP alberga el microcontrolador y los circuitos auxiliares de este, la etapa de potencia, encargada de adaptar la tensión de las baterías a una apta para los elementos del robot, la etapa de control de los motores y también sirve de soporte de varios sensores además del dispositivo de comunicación bluetooth seleccionado.

DESCRIPCIÓN DE LAS DISTINTAS ETAPAS DE LA PLACA TOP:

Etapa de potencia:

Su elemento principal es el regulador de tensión LM7805 el cual reduce la tensión procedente de las baterías, que entregan una tensión máxima de 12,6V, a una tensión de entre 4,8V e 5,2V. Para que esto se cumpla, la tensión de entrada (VI) mínima
tiene que ser de 7V.
El LM7805 está conectado al condensador cerámico C1 de 100nF y al condensador electrolítico C2 de 16uF, estos condensadores mejoran la respuesta transitoria del sistema.
Esta etapa protege al sistema de posibles conexiones erróneas de los terminales de las baterías mediante el diodo D1, de tipo 1N4007.
Este circuito puede alimentarse con las baterías a través de los pines VBAT e GND o con la placa Arduino por ARD 5V y ARD GND, para evitar problemas de doble conexión, el terminal ARD 5V y el VBAT se conectan al circuito a través de un interruptor, el cual selecciona cual de los dos terminales alimentará al circuito. De alimentarse a través de Arduino, la corriente omite el paso por el LM7805, por estar ya regulada a 5V.
La salida de este circuito está conectada á masa a través de la resistencia R4 de 10K en serie con el diodo LED rojo D2, el cual se enciende cuando esta etapa proporciona 5V, permitindo así una fácil observación de la correcta conexión.
En este circuito también están incluidas las resistencias R1, R2 de 20K e R3 de 5K que forman un divisor de tensión el cual divide la tensión presente en VBAT entre 3, lo que permite conectar a su salida el microcontrolador, ya que la tensión nunca rebasará la máxima admitida por este que es de 5V, este circuito se diseña así por que las baterías entregan una tensión máxima de
12,6V que si se divide entre 3 queda en 4,2V y no ocasiona problemas al microcontrolador.

Control de los motores:

Esta etapa es necesaria para poder controlar el funcionamiento de los motores, los cuales tienen un consumo típico de 5V y 600 mA aprox. El microcontrolador no puede ofrecer estos niveles de corriente, por eso este circuito es imprescindible.
El control de los motores es posible, gracias a un Puente-H constituido por el circuito L293D.

El L293D precisa dos entradas de alimentación, conectadas a los pines 16 (Vss) y 8 (Vs), la primera tiene que ser de 5V y es utilizada para alimentar la lógica, mientras que la segunda es la de alimentación de la carga, que en este caso también será de 5V.
Cada par de etapas del circuito posee una entrada de inhibición pines 1 (EN1) y 9 (EN2) que permiten la des habilitación de las salidas pines 3 (OUT1),6 (OUT2) 11 (OUT3) e 14 (OUT4).
Los terminales de entrada 2 (IN1) y 7 (IN2) de la etapa 1 y 2 están relacionados con EN1, OUT1 e OUT2, y se encargan del control del Motor-A. Las entradas 10(IN3) y 15 (IN4) de las etapas 3 y 4 se relacionan igualmente con EN2, OUT3 y OUT4 ligadas estas al Motor-B.
La respuesta del Motor-A en función de IN1, IN2 y EN1 es mostrada a continuación.

IN1—IN2 —EN1—>Gira

H——-L——H—->Derecha

L——-H——H—->Izquierda

X——-X——L—->Parado

H: Entrada a nivel alto.
L: Entrada a nivel bajo.
X: Indiferente.

La respuesta del Motor-B es similar a la del Motor-A.
La velocidad de giro de los motores se regula en función de la tensión de alimentación de los mismos. Esto se hace  aplicando una señal regulable en anchura. Esto se denomina PWM (Pulse Width Modulated) o Regulación por Ancho de Pulso.

Las salidas OUTx se conectan a masa a través de los condensadores cerámicos de 100 pF C4,C5,C6 y C7 para mejorar la respuesta dinámica de los motores.
Las entradas INx están conectadas a las puertas inversoras del circuito SN74HC14N, de tal forma que hacen posible el funcionamiento de los motores explicado arriba con tan solo 2 terminales del microcontrolador por motor, DIR-1 y DIR-2
ahorrando así salídas de este.
Las conexiones DIR-1 y DIR-2 se encargan del sentido de giro de los motores y PWM-1 y PWM-2 conectados a ENx de su velocidad mediante Modulación por Anchura de Pulso (PWM).
DIR-x y PWM-x se conectan en paralelo con los componentes explicados, L293D y SN74HC14N, con las resistencias R5,R6,R7 y R8 de 100K para proteger al circuito.
El L293D admite una corriente de pico máxima de 1,2A y una media de 600mA, esto se tiene en cuenta a la hora de elegir los motores y su alimentación, porque la corriente máxima de cada motor alimentado a 6V es de 760mA y si los motores son forzados a detenerse mientras se les da la orden de girar, la corriente máxima puede ser de 1520mA lo que superaría la corriente de pico del L293D, por esto se reduce la tensión de los motores a 5V, rebajando también así su corriente máxima por debajo del límite del L293D.

Etapa de control:

El esquema anterior corresponde a la etapa de control. En el se observa el cristal X1 de 16MHz conectado entre los condensadores C8 y C9, Los cuales viene marcados en las hojas  de características del Arduino Leonardo, el esquema que hace mención a estos
componentes. También vienen indicados en las hojas de características del Arduino Leonardo las conexiones de alimentación como son las de los pines 7 de tensión y 8 y 22 de masa que no aparecen en el esquema, el 1 de reset, y los 20 y 21 de tensión.
También se incluyó el diodo LED D1 con la resistencia en serie R11, ambos conectados al pin 19 que corresponde con el puerto digital 13 y que tiene ciertas características como la de parpadear en el momento de cargar los programas, pero que también puede ser programado para que se ilumine cuando sea preciso.
Se introdujo un MINIPULSADOR conectado al pin 6 correspondiente con el puerto digital 4.
Para la carga de programas se utilizan las conexiones ARD1,2,3 y 4 correspondientes con los pines 18, 1, 19 y 17 respectivamente; estas se conectan a la placa Arduino Leonardo tal y como se explicará en una próxima entrada. Con esta conexión, conectada la placa Arduino por USB al ordenador es posible la carga de los programas en el microcontrolador.
El bloque de terminales BLUE es la entrada del Módulo de Bluetooth JY-MCU, el cual tiene que conectarse de forma que  sus pines cuadren con los del siguiente esquema.

Cabe mencionar que el puerto RX del Atmega se conecta al puerto TX del Bluetooth y el puerto RX de este, con el  TX del Atmega.

Etapa de sensores.

Esta etapa, corresponde a los sensores situados en el circuito TOP. Estos son IR1,2,3 que corresponden con sensores de infrarrojos SHARP 0A41SK además de USA y USB que son los sensores de ultrasonidos HC-SR04. Todos estos funcionan con una tensión de alimentación de 5V.

A continuación una simulación de la placa diseñada seguida de la placa real.

Para realizar esta placa se diseñó el  fotolito siguiente:

Cara superior

Cara Inferior

MICROCONTROLADOR

El microcontrolador escogido es el Atmega 328-PU el cual es el mismo que utiliza la placa Arduino Leonardo.

El lenguaje Arduino es open-source y el código fuente para el ambiente de Java, se publica bajo licencia GPL y las bibliotecas C/C++ bajo la LGPL. En concreto el microcontrolador Atmega 328-PU consume menos corriente que su hermano el Atmega 328.

Este microcontrolador se puede obtener de forma gratuita pidiéndolo como muestra = sample en la página de Atmel.

El microcontrolador precisa de un circuito auxiliar para funcionar a pleno rendimiento.

El esquema anterior explica un circuito básico para conectar el microcontrolador, pero para este robot se diseñó otro circuito que se mostrará en la próxima entrada.

REPOSITORIO

Se creo el repositorio https://github.com/alexfilgueira/BotyBot donde se puede encontrar el programa utilizado en el robot BotyBot.

En este repositorio se encuentra el programa principal del robot además de programas utilizados durante el desarrollo del mismo. Estos programas, se presentan de forma independiente por que pienso que pueden ser útiles para realizar cualquier tipo de aplicación.

Entre los programas mencionados se encuentran algunos con los cuales se pueden controlar los sensores descritos en este artículo. También hay programas para controlar motores y servomotores, programas en los que se implantan reguladores PID, u otros utilizados en el manejo de un módulo Bluetooth.

El código está alojado en GitHub que es una forxa basada en GIT. Este permite realizar control de versiones, sobre el código utilizado.

La página permite alojar código gratuitamente, pero este tiene que estar disponible públicamente. Si se requiere espacio para alojamiento privado es necesario realizar un pago.

SENSORES

La selección y la instalación de los distintos sensores en el robot es una de las tareas más complejas, ya que estos determinarán la capacidad de reconocimiento del entorno por parte del robot.

Se utilizan 3 sensores distintos en el robot, los cuales se clasifican en 2 grupos.

El primer grupo de sensores se utiliza para detectar obstáculos a media-larga distancia, los sensores escogidos en este grupo son:

Sensores de Infrarrojos SHARP GP2D los cuales tienen un rango de medida de entre 10 e 80 cm. Estos sensores se alimentan a 5V. Constan de 3 cables, normalmente:

  • Rojo –> 5V (+)
  • Negro –> GND (-)
  • Blanco –> Salida analógica.

La salida analógica se puede conectar directamente a una entrada analógica de un microcontrolador o a una tarjeta Arduino o similar.

En la imagen siguiente se puede ver la gráfica ofrecida por el fabricante la cual indica la “supuesta” distancia a la que se encuentra un obstáculo del sensor en función de la tensión emitida por este. Digo “supuesta”, por que la tensión emitida por estos sensores varía enormemente en función del material del objeto o del ángulo en el que refleje el haz infrarrojo.

En este link se puede acceder a 2 programas para Arduino, que permiten trabajar con los sensores SHARP.

El otro tipo de sensores utilizado para detectar obstáculos a media-larga distancia, son los de ultrasonidos HC-SR04.

Estos sensores ofrecen un rango de medida entre 2 a 400 cm y precisan una tensión de alimentación de 5V. Su conexión es a través de 4 pines:

  • Vcc –> 5V (+)
  • Trig –> Salida digital.
  • Echo –> Salida digital.
  • GND –> GND (-)

Estos sensores, más complejos que los anteriores, permiten, utilizando sas librerías correctas, obtener la distancia al objeto sin tener que consular ninguna tabla.

Importante tener en cuenta la conexión de los pines Echo e Trig. En el programa que se puede ver aquí, los pines a los que se conectan estos vienen definidos en la línea:

Ultrasonic ultrasonic(6,7); //(Trigger pin,Echo pin)

En el segundo grupo están los sensores utilizados para seguir lineas en el suelo. Esto es preciso para realizar pruebas de robots sigue-lineas.

Los sensores elegidos son los CNY-70. Estos tienen un rango de medida que varía entre 0 y 5 mm. Por esto tienen que ir situados muy cerca de la superficie a sensar. Su alimentación es a 5V.

Su conexionado puede ser el siguiente:

Con el circuito mostrado en la imagen anterior, se puede medir en una entrada analógica de un microcontrolador la tensión ofrecida por este sensor.

  • Vcc –> 5V (+)
  • GND –> GND (-)
  • J1 –> Salida analógica.

Con este programa se puede medir el valor de la tensión a la salida del sensor y evaluar que valor es el óptimo para diferenciar las lineas o las marcas del resto de la superficie.

Que a salida del sensor se lea de forma analógica es una mejora respecto a circuitos que ofrecen la salida de una forma digital, ya que los valores de cambio de color pueden regularse para cada circunstancia.