Digitalizador de Libros.
Grupo 20 (Móstoles):
Juan Jesús Blanco Bautista
Álvaro González Fernández
1. Idea, Introducción y Fundamentos.
La idea surge de una necesidad particular, la idea de digitalizar las partes de los libros de apoyo que necesitamos en la universidad. Vamos a la biblioteca y nos damos cuenta de que está el libro que utiliza el profesor para poner los exámenes.
¿Y que hacemos?
Pues hacemos fotos, fotocopiamos la parte que necesitamos, lo copiamos en papel o en el ordenador….
¿No existe una máquina o dispositivo que lo haga solo?
¿Por qué no lo hacemos nosotros con un Arduino?
¡¡¡Manos a la obra!!!
El concepto es sencillo nos basaremos en el modo de pasar las páginas que tenemos nosotros. Utilizaremos en un principio dos motores, uno que levante la hoja y otro que pase la página, y una vez terminado este proceso hacemos una foto al libro, comic, ….
¿Sencillo? Pues va a ser que NO.
2. Tecnologías.
Arduino IDE y mucho WhatsApp.
3. Hardware, Estructura, Montaje y Código.
Como se trata de dos tareas muy diferenciadas, una el paso de las hojas y otra hacer las fotos usaremos 2 Arduinos Uno (en nuestro caso es un Arduino Uno oficial, y otro compatible).
Y ahora para la parte del paso de hojas, en nuestro caso nos prestan un Lego Mindstorm NXT completo con el que podremos trabajar, del cual utilizaremos los motores y las piezas para crear la estructura.
¿Y esto como lo conectamos al Arduino?
Después de buscar mucho en internet, encontramos la siguiente web, donde hablaban de Hacking the Lego NXT. Aquí nos explicaban como realizar los cables para conectar los motores del Lego al Arduino. Y a partir de esta web encontramos otra (NXT Pinout Information)que nos explicaba que era cada cable. Además encontramos más información en Philohome.
Pues fácil, hagamos los cables.
Como vemos en la imagen, partimos de un cable con los dos extremos de RJ12, a finalmente tener cables que podemos conectar a nuestra protoboard. (Añadida chuleta con conexiones).
Ya estamos en disposición de poder montar la primera parte que corresponde al paso de las hojas. Primero hacemos unas pruebas
Aquí vemos la estructura básica de la que dispondremos y las primeras conexiones, donde no podemos ver nada, un lío de cables.
Para manejar el motor necesitamos de un H-Bridge L293DNE, que nos facilitará la vida como veremos a continuación en las conexiones.
Con esto ya pudimos comprobar que podíamos mover los motores del Lego con el Arduino.
Finalmente, las conexiones del paso de hojas quedarían de de la siguiente manera.
El cable RJ12 modificado podemos comprobar que es cada cable:
Blanco y Negro -> Motor Power A o B, dependiendo de la dirección a la que queramos girar el motor se pondrán a LOW-HIGH (Sentido Horario) o HIGH-LOW (Sentido Anti-Horario).
Rojo y Verde -> Ground y 5v, esto alimenta al sensor que nos proporciona que nos proporcionara la información de ángulo y velocidad en los encoders.
Amarillo y Azul -> Encoder Signal 1 y 2, estas señales nos devuelven los cambios de estado de 0 a 1 de los que extraeremos la información de la posición del motor.
En cuanto a las conexiones de en protoboard y Arduino la información es la siguiente:
Azul -> 5v.
Negro -> Ground. Tierra.
Rojo -> 9v. Es la tensión necesaria para mover los motores del Lego.
Amarillo -> Salidas del H-Bridge a nuestra conexión del motor donde activaremos Motor Power A o B en función de la dirección del motor.
Blanco -> Salida del Arduino en pines (2,3) y (6,7), donde decidimos con el Arduino la dirección del motor.
Naranja -> Encoder de los motores conectados como entradas a los pines (4,5) y (8,9), donde contaremos los cambios de estado de 0 a 1 para extraer la posición del motor.
Código:
|
|
Código: Paso de Hojas
Finalmente esta primera parte quedará de la siguiente manera.
|
|
Bueno, vayamos con la cámara y sus conexiones con su Arduino correspondiente. Lo primero de todo es informarnos de las diferentes conexiones de las que dispone la cámara. Y además como nuestra intención es guardar las imágenes en una tarjeta microSD, por lo que necesitaremos una SD Shield, la cual conectaremos directamente al Arduino como se conecta cualquier Shield.
El funcionamiento de la SD Shield es básico, simplemente se usan las librerías proporcionadas por Arduino <SD.h> y <SPI.h>
Utilizamos un programa de Test que prueba el perfecto funcionamiento de la SD Shield y guarda un archivo de texto en la MicroSD.
Y ya para finalizar realizar las conexiones de la cámara, la cual transmite la información de la foto mediante puerto serial al Arduino y por tanto a la MicroSD.
Estas son las conexiones que realizaremos al Arduino respetando los nombre, puertos y colores que de las conexiones que hemos realizado en el proyecto.
Para empezar la cámara se tiene una alimentación de 2.5v a 3v, como se ve en las conexiones, conectamos la alimentación a la salida de 3,3v de la que dispone el Arduino. Además la cámara tiene una resolución de 640x480mm y 30fps.
En los puertos SIOC, SIOD y XCLK, necesitamos conectar unas resistencias de 10k, para no romper la cámara, pues se trata de los puertos que realizaran las transferencia de información y de pulso de reloj.
Para conseguir toda la información necesaria para poder trabajar con la Cámara OV7670, hemos recurrido a la página de github de ArduCAM donde podréis encontrar todo el material, librerías y ejemplos para trabajar.
Además si os interesa este tipo de material en el foro de la página oficial de Arduino hay varios post con mucho material que leer acerca de la diferentes gamas de cámara que soportan esta librería y diferentes configuraciones. (Enlace 1, Enlace 2).
El funcionamiento es el siguiente:
1. Inicia Wire, Serial and SPI.
2. Configura Pin Serial de Entrada al Arduino.
3. Chequea el bus SPI.
4. Elige el modo de captura.
5. Inicia la LCD. (En nuestro caso no disponemos de ella, se omitiría el paso).
6. Inicia la cámara.
7. Comprueba la SD / MicroSD.
8. Inicia el modo FIFO.
9. Empieza la captura.
10. Graba la imagen.
Finalmente el diagrama de conexiones quedaría de la siguiente manera.
Como se puede ver ahora un Arduino esta conectado con el otro mediante los pines 0 (Rx) y 1 (Tx), cuando uno termina su trabajo transmite (Tx) al receptor (Rx) del otro Arduino un 1 para comunicar que ha finalizado, y que empiece el trabajo, y viceversa.
4. Materiales y Precios.
5. Funcionamiento.
Como se puede comprobar en el video, aquí vemos como realiza el paso de las hojas. Comprobamos que es bastante difícil la sincronización de los motores, pasando a veces varias páginas juntas, nosotros trabajamos con una pila de 9v, muchos de los problemas de sincronización de los motores al gastarse la pila, se corregirían trabajando con una fuente de alimentación de 12v y un potenciómetro donde ajustaríamos la tensión de entrada a los motores a 9v, que es el máximo permitido.
En cuanto a la funcionalidad de realizar las fotos, por problemas en el código, en concreto en la sincronización del interface de los puertos serial definidos.
6. Problemas encontrados.
A parte de los problemas de sincronización encontrados en los motores, hemos encontrado problemas a la hora de realizar las primeras pruebas con la cámara, puesto que al no disponer de una pantalla (TFT) donde mostrar las imágenes, las capturas se realizaban a ciegas.
Además después de compactar el código nos encontramos con problemas de sincronización con el interface de los puertos serial, dando error en la conexión de la cámara al Arduino.
También hemos tenido algún problema de concepto con el modo de operar de Arduino, que finalmente realizando unos diagramas a mano de los pasos realizados en el código, hemos solventado.
7. Mejoras Posibles.
Posibles mejoras que podemos incorporar al proyecto son la utilización de dos cámaras una para cada página, en vez de una cámara.
Conexión a fuente de alimentación de 12v con un potenciómetro para regular la tensión de entrada y evitar los desfases de los motores.
8. Conclusiones.
La conclusiones que sacamos de este tipo de proyecto es que con una buena idea y paciencia se puede conseguir sacar un proyecto desde la nada, en nuestro caso hemos tenido momentos de tensión en el cual no nos funcionaba nada, momentos en los que utilizando un mismo código que creíamos que estaba mal funcionaban las cosas, pero finalmente todo se ha logrado terminar en mayor medida.
Si alguien quiere continuar a partir de nuestro trabajo aquí les dejo un documento donde adjunto las páginas consultadas de donde he ido extrayendo la información.
9. Imágenes del Proyecto.
Un saludo. Espero que les guste.