Archivo de la categoría: BA6289N

ArduRover puede Seguir Líneas

¿Qué pretendo realizar?

Básicamente lo que pretendo realizar es que el Rover sea capaz de desplazarse a lo largo de una línea de un color negro diferente al fondo blanco, para ello he colocado cuatro sensores, de los que en principio solo utilizaré dos.

El funcionamiento básicamente consta de tres ordenes y son las siguientes:

BD14866_ Los dos sensores están sobre la línea, avanzamos

BD14866_ El sensor de la derecha ha salido de la línea, giramos hacia la izquierda

BD14866_ El sensor de la izquierda ha salido de la línea, giramos hacia la derecha

BD14866_ Los dos sensores están fuera de la línea, sigue con lo que estabas realizando.

Teoria_Sigue_lineas

Para ampliar información – pulsa aquí

Lista de Piezas

Dibujo de la Pieza Nombre Nº Piezas
Soporte_CNY70 Soporte CNY70 1
Porta_Soperte_CNY70 Porta Soporte 2

 

Bloque Sigue Líneas

Metodo_SigueLineas

Esquema Parcial Teórico:

Circuito_ArduRover_Sigue_Lineas

Esquema Práctico Simplificado:

Extracto_Placa_1_ArduRover_XI

Extracto del Programa Arduino:

Codigo_ArduroverXI

Fotos:

Frontal

Frontal

Detalle_DelanteroSC_1939

Detalle Frontal

Panza

Panza

Detalle_Panza

Detalle Panza

Código fuente Completo

ArduRover_Sigue_Lineas.ino

APP de Proyecto:

ArduRover_XI.apk

Ficha del Proyecto:

ArduRover_XI_Sigue_Linea_Ficha_39

Vídeo resumen:

 

Anuncios

ArduRover VIII (Creando Recorridos)

Creación de un Recorrido Definido.

Esta parte del proyecto es continuación de los proyectos anteriores  y trata de crear un recorrido como suma de secuencias de movimientos que se grabarán en un registro.

Para ello, lo primero que hay que realizar, son los procedimientos básico para la gestión de una BD:

Añadir un Registro

Eliminar un Registro

Modificar un Registro

Para ello, he creado una lista y la he manejado utilizado las funciones que nos ofrece App Inventor  sobre “TinyDB”.

Una vez terminada esta labor, lo siguiente en realizar la sincronización de la secuencia a utilizar, para ello, he utilizado un sistema de sincronización que se basa en la siguiente secuencia:

La aplicación envía una orden a ejecutar y espera respuesta.

Arduino ejecuta la orden, y cuando acaba envía a la aplicación “OK”

Cuando la aplicación lo recibe, pasa a la siguiente orden.

Esto acaba con el ultimo registro grabado

Como podéis ver he implementado cuatro botones de recorridos, aunque solo está habilitado el primero, dejando para un futuro la implementación de cuatro posibles recorridos.

Diagrama de Flujo del Funcionamiento de Arduino al recibir una Orden

Presentación_Recorrido

SCREEN 1

Pantalla1SCREEN 2

Pantalla2
SCREEN 3

Pantalla3

SCREEN 4

Pantalla4Bloque de Inicialización

Bloque_Inicializacion

Bloques del Control de Registros

Bloque_Reguistro_Recorrido

Bloques Ejecutar Recorrido del Registro

Bloques_Recorridos

Esquema Teórico Parcial:

Sensor_Hall

Esquema Práctico:

Placa_1_ArduRover_Codificador_Hall

Modificación del Programa Arduino:

Extracto_Codigo_Recorrido

Fotos:

Vista_General

Vista General

DetalleDetalle de las conexiones

TabletPantalla Tablet

—————-

Código fuente

ArduRover_Recorridos.ino

APP de Proyecto:

APP ArduRover_VIII.apk

Ficha del Proyecto:

ArduRover_VIII_Ficha_35

Vídeo resumen:

ArduRover VII Codificadores

Codificando Interrupciones

La realización de esta parte del proyecto es continuación de los proyectos anteriores , se trata de seguir incorporando funcionalidades nuevas al Rover. En este caso he incorporado la posibilidad de realizar los cuatro movimientos básicos con un codificador “Hall”, de manera que puedo elegir, la distancia del movimiento. En un proyecto futuro se podrá confeccionar un recorrido definido y realizarlo con un alto nivel de precisión.

Codificador_Hall

He utilizado las posibilidades que me brinda la placa Arduino en cuanto a la programación de Interrupciones.

Interrupciones_Arduino

Las interrupciones son un método del que disponen Arduino para hacer notar al procesador la aparición de alguna circunstancia que requiera su intervención. De este modo, el dispositivos que ha realizado la interrupción pueden provocar que el procesador deje por el momento la tarea que estaba realizando y atienda la interrupción, una vez atendida, seguirá con su labor anterior. Las interrupciones son útiles para hacer que las cosas que sucedan automáticamente puedan ser atendidas de inmediato sin necesidad de ir consultando regularmente el estado de ese suceso, estas puedan ayudar a resolver problemas de temporización y son buenas para leer un encoder rotacionales, monitorizando la entrada del usuario, sin perder nunca un pulso.

Para comprender un poco mejor como funciona las interrupciones en Arduino, podéis visitar la entrada que realicé con el proyecto “Interrupciones

SCREEN 1

Pantalla1SCREEN 2

Pantalla2
SCREEN 3

Pantalla3

Código de la Función Contador de Pasos

Codigo_Contador_de_Pasos

Código de la Función PasosAPaso

Codigo_PasoAPaso

Bloques del Cambio entre Pantallas

Botones_Cambio_de_Pantallas

Bloques de la selección de la función a realizar (Dirección) 

Cambio_de_Direccion

Bloques de los pasos a caminar 

Ir

Esquema Teórico Parcial:

Sensor_Hall

Esquema Práctico:

Placa_1_ArduRover_Codificador_Hall

Código Parcial del Programa Arduino:

Codigo_Codificadores

Fotos:

Vista_General

Vista General

DetalleDetalle de las conexiones

Tablet_01Pantalla Principal

Tablet_02Pantalla de Programación por Pasos

Código fuente

ArduRover_Codificador_de_cuadratura.ino

APP de Proyecto:

APP ArduRover_VII.apk

Ficha del Proyecto:

ArduRover_VII_Ficha_34

Vídeo resumen:

ArduRover VI Sigue Luz

Sigue Luz

Esta parte del proyecto es una continuación del proyecto anterior (ArduRover III Luz), se trata de seguir incorporando funcionalidades al Rover, en este caso he incorporado un programa que sigue una luz.

El árbol de decisión es muy simple y se basa en el diagrama de flujo que más abajo reflejo. En resumen se trata de avanzar mientras los dos sensores luminosos(LDR) tienen una iluminación parecida, si uno de ellos percibe un incremento de luminosidad preestablecido como parámetro, gira hacia este lado y prosigue avanzando.

Diagrama de Flujo 

Diagrama_de_Flujo_Sigue_Luz

 

He realizado una modificación con el programa anterior, diseñando una nueva pantalla que reunirá todos los programas o funciones que se irán incorporando al proyecto, de tal manera que en la primera pantalla se podrá realizar el control manual del Rover y en la pantalla de “Programas” se podrá invocar los programas desarrollados.

 SCREEN

Screen_ArduRover_1.5

Código de la Función Sigue Luz de Arduino

Programa_Sigue_Luz

Bloque del Evento Sigue Luz

Modulo_Sigue_Luz

Esquema Teórico Parcial:

Circuito_Sensores

Esquema Práctico:

Placa_1_ArduRover_4_bb

Código Parcial del Programa Arduino:

Codigo_Sigue_Luz

Fotos:

2

Vista de Perfil

Frente

Detalle de la LDR

Código fuente

ArduRover_Sigue_Luz.ino

APP de Proyecto:

APP ArduRover_VI.apk

Ficha del Proyecto:

ArduRover_VI_Ficha_33

Vídeo resumen:

 

 

 

ArduRover V (Evitar Obstaculos)

Evitar Obstáculos

La realización de esta parte del proyecto es una continuación del proyecto anterior (ArduRover IV Distancias), se trata de seguir incorporando funcionalidades al Rover, en este caso he incorporado la posibilidad de mediante un medidor de distancias del tipo HC-SR04 por ultrasonidos, pode decidir que camino seguir una vez que se a encontrado con un obstáculo delantero.

El árbol de decisión es muy simple y se basa en el diagrama de flujo que más abajo reflejo. En resumen se trata de avanzar hasta encontrar un obstáculo delante, detenerse y elegir en cual de los dos lados(derecha o izquierda) hay más espacio y seguir por ese.

Diagrama de Flujo 

DiagramaDeFlujo

 

SCREEN

Screen

 

Bloque del Evento Evita Obstáculos

Modulo_Evita_Obstaculos

 

Esquema Teórico Parcial:

ArduRover_Distancias

 

Esquema Práctico:

Placa_1_ArduRover_4_bb

 

Código del Programa:

Codigo_Evita_Obstaculos

 

Fotos:

7

Vista Lateral

2
Vista de Perfil

Frente

Vista de Frente

Sin título

Aplicación en el Tablet

Código fuente

ArduRover_Evitar_Obstaculos.ino

APP de Proyecto:

App_ArduRover_V.apk

Ficha del Proyecto:

ArduRover_V_Ficha_32

Vídeo resumen:

ArduRover IV (Distancia)

Medir Distancias con el HC-SR04

La implementación de esta parte del proyecto es una continuación del proyecto anterior (ArduRover III Luz).

HC-SR04

Se trata de seguir incorporando funcionalidades al Rover, en este caso he incorporado un medidor de distancias del tipo HC-SR04 por ultrasonidos. Para saber más sobre como funciona este medidor, consultar la entrada “Medir Distancias” .

7805

He implementado una fuente de voltaje + 5Vcc con el circuito integrado 7805. La alimentación de entrada la suministra las baterías del Rover y la salida la utilizaré para la alimentación del servo y futuros circuitos de + 5 Vcc con un cierto medio-bajo amperaje.

Las características principales son las siguientes:

  • Entrada …………………………………  7 a 20 Vcc
  • Salida ……………………………………. 4.8 a 5.2
  • Intensidad de Salida………………. 500 mA

He introducido un servo y he colocado el HC-SR04 encima con la visión futura de poder mover el sensor y realizar medidas en diferentes direcciones. Para este fin he utilizado un servo que tenía por ahí y lo he reciclado.

La conexiones del servo las he mirado en una tabla que construí con la información que encontré en Internet.

Terminales_Servos

He modificado el Screen de programa, el módulo de “Clock”  y he implementado un bloque más.

SCREEN

Screen_Distancia

Como se puede observar he incluido un botón para especificar de manera manual cuando queremos que realices las mediciones. También he habilitado un lugar para que represente la medida en centímetros que existe entre la delantera del Rover y el obstáculo. En el fututo será empleado para evitar obstáculos y medir distancias de escape de un laberinto con dificultad media-baja.

Bloque del Evento Clock de Medidas

Modulo_Reloj_Medida

 El bloque se ejecuta coda 500 ms y se ha ampliado con respecto al anterior en lo siguiente:

Se realiza la lectura de los datos provenientes del Arduino y se guarda en la variable “DatoRecibido”

Mediante las funciones de troceado y medición de cadenas se le asigna a cada etiqueta el valor del sensor medido de la siguiente forma:

Medimos la longitud de la cadena leída y si es mayor que 11, realizamos el troceado. Con esto nos evitamos que los datos provenientes del Arduino no están completos. Troceamos la cadena en tres partes, la primera comenzando en la primera letra y terminando al encontrar una “,”. La segunda desde esta hasta el signo “+”, y la tercera desde esta última hasta el signo “-“.

En caso de no estar conectados rellenamos los valores con “XXX”

Bloque del Evento Pulsar el Botón Medir

Modulo_Medida

El módulo se parece mucho al de la conexión/desconexión de la luz que ya habíamos programado, la diferencia es que este en vez de manipular una luz, realiza la habilitación del reloj (TimerEnabled).

Esquema Teórico Parcial:

ArduRover_Distancias

Esquema Práctico:

Placa_1_ArduRover_4_bb

Código del Programa:

Codigo_ArduRover_Distancias

Fotos:

2Vista de Perfil

7

Vista Lateral

Planta

Vista en Planta

Detalle

Detalle Lateral

Frente

Detalle Frontal

Tablet

Aplicación en el Tablet

Código fuente

ArduRover_Traccion_Bluetooth_Luz_Distancia.ino

APP de Proyecto:

App_ArduRover_IV.apk

Ficha del Proyecto:

ArduRover_IV_Ficha_31

Vídeo resumen:

ArduRover III (Luz)

Encender una Luz y Realizar Medidas de Luminosidad.

La implementación de esta parte del proyecto es una continuación del proyecto anterior (ArduRover II Bluetooth).

Se trata de seguir incorporando funcionalidades al Rover, en este caso he incorporado una luz delantera y la medición de la luz ambiente con dos LDR incorporadas en la delantera del Rover.

He modificado el Screen de programa y he implementado dos bloques más.

SCREEN

Screen_1.2

Bloque del Evento Clock

Bloque_Clock

El bloque se ejecuta coda segundo y realiza lo siguiente:

Comprueba si está conectado y si es así

Envía una “M” por Bluetooth.

Recoge los datos suministrado por el Arduino (He tenido que realizarlo dos veces, por que con una solo captaba parte de los datos enviados. Seguiré investigando)

Si no está conectado, no realiza nada

Bloque del Evento Pulsar el Botón Luces

Boton_Luces

Creo una variable global que dice como se encuentra la luz.

El Bloque se ejecuta cada vez que pulsamos el botón de la Luz, y realiza lo siguiente:

Comprueba si está conectado y si es así

Comprueba si la variable global es “true” y si es así

Envía  “LOOF” por Bluetooth.

Establece la variable global a “false”

Pone la etiqueta del botón de luz en “OOF”

Si la variable global es “false”

Envía  “LON” por Bluetooth.

Establece la variable global a “true”

Pone la etiqueta del botón de luz en “ON”

Si no está conectado, informa de que no puede realizar la operación dada por encontrase desconectado.

Esquema Teórico Parcial:

Esquema_Practico_LDR

 

Esquema Práctico:

Placa_1_ArduRover_3_bb

Código del Programa:

Codigo_ArduRover_1.2

Fotos:

Vista_Lateral

Vista de perfil

Superior

Vista Superior

Tablet

Funcionamiento en una Tablet

Detalle_de_Conexion

Detalle de las conexiones

Código fuente:

ArduRover_Traccion_Bluetooth_Luz.ino

APP de Proyecto:

ArduRover_IV.apk

Ficha del Proyecto:

ArduRover_III_Ficha_30

Vídeo resumen:

ArduRover II (Bluetooth)

Control de manera inalámbrica (Bluetooth).

Para el control de manera inalámbrica, he utilizado la comunicación Bluetooth. Está muy instaurada, es fácil de que hoy en día lo tenga la mayoría de los dispositivos tipo Tablet o Smartphone. El SO donde he diseñado la aplicación, es en Android y el IDE que he utilizado es el “App Inventor”. (para saber más)

La implementación de esta parte del proyecto se basa en una entrada que con anterioridad realicé.  (“Comunicación Bluetooth”). Lo que he implementado nuevo es el interfaz en dispositivo móvil, que en aquellos tiempos utilicé uno ya existente y ahora he desarrollado uno específico para este proyecto.

Básicamente la programación con el App Inventor se basa en la creación de bloques que manejan eventos y en el diseño y configuración del interfaz.

Configuración del Screen:

Android_Screen_ArduRover

Bloques del Evento pulsar botón de conexión bluetooth

Bloque del Evento pulsar uno de los botones de movimiento 

Bloque_del_Boton

Como se puede ver la lógica de control es muy fácil, primero conecto el dispositivo mediante una conexión bluetoooth y cuando esta se realiza envío una cadena que la placa arduino la identifica y realiza una de las acciones previamente asignadas.

Estructura de decisión del programa Arduino.

Estructura_de_Decision

Esquema

Placa_1_ArduRover 2_bb

Código del Programa:

Codigo_ArduRoverII

Fotos:

Frente

Vista de frente

Arriba

Vista desde arriba

Detalle

Detalle

Galaxy_Mini

Visión del interface con un móvil

Tablet

Visión del interface con un Tablet

Código fuente:

ArduRover_Tracción_Bluetooth.ino

Ficha del Proyecto:

ArduRover_II_Ficha_29

Vídeo resumen:

ArduRover I (Tracción)

ArduRover

Empiezo un nuevo proyecto, la realización de un vehículo oruga capaz de moverse de manera autónoma o controlado a distancia. Irá evolucionando conforme pase el tiempo e implementemos múltiples accesorios y funciones. Algunas de las funciones que me gustaría que tuviese son las siguientes:

  • Movimiento de Avance, Retroceso, Giro a la Izquierda, Giro a la Derecha, etc
  • Capaz de seguir una línea mas o menos compleja.
  • Capaz de reproducir una ruta previamente almacenada y salir de un laberinto
  • Evitar obstáculos
  • Programación a través de una pantalla LCD
  • Control de manera inalámbrica (Bluetooth).
  • Instrumentado con sensores de Luz, Temperatura, Sonido, etc.
  • Comunicación bidireccional
  • Brazo robotizado
  • Cámara de Vídeo
  • ETC

Gestión de la tracción.

Para esta parte he optado por la adquisición de un “Rover 5” con dos motores y dos encoder de Efecto Hall.

Codificadores.png

Sus características son las siguientes:

Tipo de Tracción                            Oruga
Tensión de Motores                       7.2 Vcc
Intensidad de Motores                   2.5 A
Torque de Motores                       10 kg/cm
Proporción Caja de Cambios          86.8:1
Tipo de Codificador                      Cuadratura
Velocidad                                     1 km/h
Medidas                                       245x225x74
Resolución del Codificador           1000 pulsos por 3 vueltas

 Motores

Para la gestión de los motores he utilizado dos BA6286N con las siguientes

Características:

Tensión máxima de alimentación           18 Vcc
Potencia máxima disipada                      1050 mW
Temperatura de funcionamiento             -20 a 75 ºC
Intensidad máxima de salida                   1 A
Tensión de Vcc, Vm, Vref                         desde 4.5 Vcc a 15 Vcc
Valores para una temperatura ambiente de 25 ªc

 BA6286N_Esquema_de_Bloques

Tabla_BA6286N

 La configuración de los dos circuitos BA6286N es la siguiente:

 BA6286N En la primera aproximación el terminal “Vref” lo he conectado a Vmot.

El funcionamiento es muy simple y similar al anteriormente explicado “L293D”. Dependiendo de que terminal que se encuentre en alto (+5), el integrado realiza la polarización de adelante, atrás, freno o reposo.

Para el montaje de toda la electrónica, he utilizado una plancha de metacrilato convenientemente pintado que servirá de soporte para todos los accesorios que en el futuro tendremos que conectarle.

Las conexiones entre los distintos módulos, las he realizado sirviéndome de placas de conexión auxiliares y puentes de conexión y desconexión fácil.

 

Esquema Eléctrico:

BA6286N

Circuito Práctico:

esquema_practico

Código del Programa

Codigo_ArduRover_I

Fotos:

Planta2

Detalle de las conexiones

Gif_2 Gif_8

Vista en Perspectiva

lado

Vista Lateral

Planta

Vista de la Planta

Código fuente:

ArduRover_Traccion.ino

Ficha del Proyecto:

ArduRover_I_Ficha_28

Vídeo resumen: