# Proyecto PIC(ChipKIT 32) + cámara



## terranology (Mar 28, 2012)

Hola a todos, descubrí el foro hace unas semanas, y por fin me he decidido a escribir. ^^

La cuestión es que estoy haciendo un proyecto fin de carrera que consiste en un robot, cuyo PIC será el ChipKIT Max 32, utiliza el mismo IDE que Arduino, lo que le da una gran ventaja, ya que antes había trabajado con ello. La dificultad la encuentro cuando me he decidido por conectar una cámara, dicha cámara estará conectada al PIC y tendrá que enviarme la imagen hasta un teléfono móvil via Wifi, que será desde el cual se controle el robot. La cámara tiene 3 patas: Vcc, Gnd y vídeo. Y la pregunta es, si alguno sabría decirme como puedo extraer el vídeo por solo una pata, y como mandar la señal, para que se reproduzca correctamente en el teléfono móvil.

Un saludo¡¡ y gracias de antemano¡


----------



## miborbolla (Mar 28, 2012)

Mi estimado Terranology, considero te falta un buen de información o en su defecto que nos la compartas, ya que así es muy difícil determinar un punto de partida de el proyecto, me queda claro en su aspecto general lo que quieres hacer, pero técnicamente no veo como hacerlo, ya que para comenzar deberás armarte un marco teorico/tecnico y su debida valoración de factibilidad.  Para comenzar al parecer piensas utilizar una cámara que entrega señal analogica (video compuesto) que requiere de un proceso de digitalizacion, empacamiento, tratatamiento y transmicion de los fotogramas, mientras que si contemplaras utilizar una cámara con alguna interface digital (CCD), podrías evitarte lo que comento. Ademas el Chipkit no considero tenga la potencia de CPU ni la memoria RAM, para manipular esta carga de información.

En fin, al menos este panorama veo, y quizas si compartieras el Hardware que tienes contemplado, podamos ayudarte de mejor manera.

Recibe un Saludo


----------



## Romyggar (Mar 29, 2012)

Buenas...

En un proyecto extenso que hice en la universidad, use un dsPIC para controlar una cámara CMOS de 640x480 pixeles, y además de esto implementé un algoritmo OCR para reconocer números (solamente). No use chips externos ni expansión de memoria, solamente el dsPIC 30F4011.

Es cuestión de optimizar el código controlador y reusar memoria ram.

Concuerdo con que no es nada claro lo que quieres hacer, si nos explicas claramente cual es tu objetivo, cuales son los requisitos o criterios, te podremos ayudar.


----------



## miborbolla (Mar 29, 2012)

Lo que expone mas digerido romyggar, es correctisimo puesto que ya habla de una cámara cmos (CCD) que entrega de alguna manera los fotogramas ya capturados y es cuestión de procesar lo que se desee con el microcontrolador.

Saludos


----------



## Romyggar (Mar 29, 2012)

Pues leí bien lo que escribe el amigo *terranology*, pero le queda dificil usar una cámara analógica, pues le tocaria digitalizar la señal de video, y luego mediante un módulo wifi enviar los datos convertidos.

*=>* Para recibir la señal via celular, se debe tener un teléfono con conectividad wifi, y una aplicacion que interprete los datos recibidos desde el micro.

*=>* Además de esto, es necesario configurar la conexion entre el módulo wifi y el teléfono de manera que no necesiten un enrutador (modo AdHoc), o si se requiere, se puede usar un enrutador inhalámbrico, pero pues, esto lincrementaría los costos.

Ya el amigo *miborbolla* te ha explicado algo parecido, pero no te ha dado alternativas. Mira la siguiente cámara, esta fue la que yo use en mi proyecto "OCR on a single chip" con dsPIC: *Cámara SparkFun*



*=>* hacer todo esto en un PIC32 es posible, pero requiere un nivel muy alto de optimizacion de código y reuso de memoria RAM y de programa (flash). Además de que no es nada barato el proyecto, ya que el módulo wifi es un poco costoso (esto sin incluir el que te toque importarlo desde USA).

*=>* Como alternativa, puedes usar bluetooth (muchos teléfonos celulares lo tienen) ya que los módulos de desarollo son mas económicos, el único inconveniente sería que la tasa de transmision de datos será mas baja, que se traduce como menos FPS de la cámara, o imágenes con menor resolucion, etc.

*Aqui* tienes una lista de cámaras en la tienda SparkFun.com

*Aqui* tienes una lista de Módulos inalámrbicos en SparkFun.com

PD: SparkFun *es solo como referencia*, por supuesto puedes indagar en otros sitios según tu conveniencia.


----------



## miborbolla (Mar 29, 2012)

Ciertamente no doy alternativas, pues me gustaría saber que nos comenta Terranology, puesto que tanto romyggar como yo tenemos ya todo muy disolucionado, pero quien origina el post no nos aporta por que y para que de su proyecto.

Yo cuando participe en un proyecto de procesamiento de imagenes, terminamos desarrollando todo en un linux embebido en un procesador ARM y ya hablamos entonces de un sistema operativo, con su respectivo Kernel, drivers, etc, etc. donde se podía utilizar prácticamente cualquier camara web (usb) que contara con drivers para linux y el tranporte de video era por trama MPeg a traves de tcp/ip, en fin nada que ver con lo que inicia el presente post.

Por eso es que no doy alternativa, pues quizás mal acostumbrado a contar con el poder de un ARM, con 128 megas de ram y todo un sistema operativo, no tiene punto de comparación con un chip kit

Saludos y en verdad debió ser un trabajo titanico cuidar los bits y los bytes en tu proyecto romyggar...ufff ya me imagino...hasta me dolió el hipotalamo nomas de pensar.


----------



## Romyggar (Mar 30, 2012)

miborbolla dijo:


> Ciertamente no doy alternativas, pues me gustaría saber que nos comenta Terranology, puesto que tanto romyggar como yo tenemos ya todo muy disolucionado, pero quien origina el post no nos aporta por que y para que de su proyecto.
> 
> Yo cuando participe en un proyecto de procesamiento de imagenes, terminamos desarrollando todo en un linux embebido en un procesador ARM y ya hablamos entonces de un sistema operativo, con su respectivo Kernel, drivers, etc, etc. donde se podía utilizar prácticamente cualquier camara web (usb) que contara con drivers para linux y el tranporte de video era por trama MPeg a traves de tcp/ip, en fin nada que ver con lo que inicia el presente post.
> 
> ...




Amigo *miborbolla*,

Bueno, veo que estuviste trabajando con muchos recursos tecnológicos,  yo para el proyecto que tenia que hacer, solo contaba con *2kiB *de RAM, *16KiB* de Flash, y una CPU de *40MIPS*. 

Con estos limitados recursos pude hacer lo siguiente:
- Logré capturar imágenes de la cámara que mencioné antes, 
- hacerle un procesamiento especial a cada imágen (recortarla y convertirla a blanco y negro   con un factor de conversión dinámico),:enfadado:
- identificar los números con el algoritmo OCR y 
- comprimirla con una relacion de 8 a 1​ 

Todo lo anterior en tiempo real, mientras se iba recibiendo la imagen desde la cámara por el puerto USART del dsPIC. 

Fue extenso el trabajo, pero me apoyé una simulación que hice en MATLAB, ahí diseñé el algoritmo OCR, usando instrucciones propias de matlab que se pudieran replicar en el dsPIC. Pero era claro el objetivo del proyecto de grado: *"OCR en un solo chip"* y se logró!

Gracias a ese proyecto, me pude graduar de ingeniero electrónico. 

PD: por cierto, el interesado del tema desapareció, así que te doy toda la razón...mientras el amigo *Terranology* no aparezca.... no avanzaremos en el tema de este hilo....

Salu2


----------



## terranology (Abr 11, 2012)

Hola a todos¡ en primer lugar muchas gracias por las respuestas, no me esperaba tanta gratitud ^^
He estado liado con la conexión Wifi, que no conseguíamos conectar el módulo Wifi a la placa ChipKIT Max 32. 
En primer lugar, comentar que la placa lleva un PIC 32, las características de nuestra placa son: 128Kb de RAM y 512 Kb de Flash.  Respecto a la cámara, si es CCD, aquí les dejo el enlace para que la vean http://todoelectronica.com/camara-miniatura-sonido-p-10837.html

Respecto al fin de la aplicación, no queremos procesar la imagen, ya que nuestro único fin es capturar la imagen con el robot y mandarlo al teléfono Android, y visualizarlo en dicho teléfono. La aplicación Android ya la tenemos diseñada. 

Un saludo¡ y muchas gracias por el interés¡


----------



## ilcapo (Abr 11, 2012)

romyggar dijo:


> Buenas...
> 
> En un proyecto extenso que hice en la universidad, use un dsPIC para controlar una cámara CMOS de 640x480 pixeles, y además de esto implementé un algoritmo OCR para reconocer números (solamente). No use chips externos ni expansión de memoria, solamente el dsPIC 30F4011.
> 
> ...



hola amigo es posible que compartas este proyecto ? me gustaria aprender a controlar las camaritas CMOS pero nunca encontre buena informacion de como hacerlo

saludos y gracias de antemano


----------



## Romyggar (Abr 12, 2012)

terranology dijo:


> Hola a todos¡ en primer lugar muchas gracias por las respuestas, no me esperaba tanta gratitud ^^
> He estado liado con la conexión Wifi, que no conseguíamos conectar el módulo Wifi a la placa ChipKIT Max 32.
> En primer lugar, comentar que la placa lleva un PIC 32, las características de nuestra placa son: 128Kb de RAM y 512 Kb de Flash.  Respecto a la cámara, si es CCD, aquí les dejo el enlace para que la vean http://todoelectronica.com/camara-miniatura-sonido-p-10837.html
> 
> ...



Hola amigo *terranology*,

Considero que esa cámara que piensas usar no es la mas adecuada, debido a que la salida de video que tiene es *analógica *(PAL). Tendrías que hacer lo que indiqué en el post #5, (convertir una señal PAL a datos digitales es otro proyecto).

Ya sabiendo lo que quieres hacer, veo que necesitas poco procesamiento (o ninguno) de las imágenes a recibir. Pero a modo de sugerencia, podrías incluir informacion del robot (como cuanta carga de la bateria le queda) en las imágenes que envias por wif....??

Finalmente, con ese PIC32, tienes mas que suficiente para hacer lo que quieres (128KBytes de ram........*yo apenas tuve 1k*)


----------



## Meta (Abr 12, 2012)

Hola:

Antes iban a poner una cámarita en los móviles que no las tenían, jajaja.







Bromas a parte.
Las móviles tienen sus propias cámaras dificil de manejar por un PIC o AVR. Ya que tiene todo incrustado, maneja bien la cámara para el robot, encima tiene para grabar vídeos o sacar fotos en una memoria flash de muchos gigas. En tu caso lo aprovecho de esa manera, y el trabajo que te ahorras.






Saludo.


----------



## miborbolla (Abr 12, 2012)

Yo también considero que no es la mejor cámara, ya que entrega una señal analógica, y por tanto no tienes acceso a la memoria intermedia del CCD, o a los fotogramas de manera directa, o en el peor de los casos no tienes las señales CAS (Row Address Strobe), RAS (Column Address Strobe) de la memoria CCD. ni al bus de datos. teniendo acceso a esto, ya puedes resguardar la imagen, y enviarla como mejor te parezca a través del wifi.


De hecho existen cámaras "TTL"  con protocolo serial, que bien te darán luz a lo que trato de expresar y que seguro se apega a lo que deseas hacer.

http://www.adafruit.com/products/397









Saludos


----------



## Meta (Abr 12, 2012)

Hola:

Las he visto, la verdad, tiene retardo de imágenes. En otras palabras, son lentas al grabar y si te mueves mucho, se te ve como a saltos de imágenes y eso no me gusta.

Para eso prefiero imágenes siempre en tiempo real.


----------



## Romyggar (Abr 12, 2012)

Hola Amigos Foristas,

Bueno, al parecer hay una pequeña confusión, el amigo *terranology* quiere enviar la señal de una cámara (cualquiera) a un celular con wifi ( a traves de wifi obviamente). 

Entonces hay varias maneras de hacer esto, por el momento postulo de manera *general* 3 métodos:

1- Usar una cámara WiFi como *esta*, y solamente es ponerla en el robot y conectarse a ella con el celular. Desventajas? el elevadísimo costo y el facilismo que implica optar por esta solución.

2.- Usar una cámara con salida TTL como las que se han sugerido anteriormente. Personalmente me parece la mejor opcion, ya que segun el amigo *terranology*, solamente se necesita enviar las imágenes (no hacerles procesamiento alguno). Los PIC32 son muy rápidos, creo que los Fps no serán un problema (como lo sugiere el amigo *Meta* cuando menciona la lentitud al grabar....¿grabar?). Además no son demasiado costosas (para las facilidades que ofrecen)

3. - Usar una cámara analógica, digitalizar la imagen, comprimirla y enviarla. Una solucion muy engorrosa (y extensa) de la que resultarían varios proyectos derivados. La solución #2 se salta todos estos sub-proyectos por un bajo precio.



ilcapo dijo:


> hola amigo es posible que compartas este proyecto ? me gustaria aprender a controlar las camaritas CMOS pero nunca encontré buena informacion de como hacerlo
> 
> saludos y gracias de antemano



Hola amigo *ilcapo*

Pues yo aun conservo toda la documentación de mi proyecto de grado, es más, aun tengo una cámara de repuesto y el dsPIC de respaldo que tenia (por si acaso fallaba en la hora final!), Sin embargo, al ser un proyecto de grado, la confidencialidad del caso es de caracter ético, esto se traduce como un "no" técnico a tu pregunta. Sin embargo eso no significa que los conocimientos no los pueda divulgar. lo que no puedo compartir es el mismo código que hice, ya que técnicamente ya no me pertenece.

Si tienes algún proyecto puedes abrir un hilo y me comentas, estaré atento a ayudarte a configurar tu cámara, y de seguro muchos otros compañeros del foro lo estarán también.

Nota: Encontré una imagen de lo que hacia el dsPIC con lo que recibía de la cámara mientras aún lo recibía. 

Salu2


----------



## Meta (Abr 12, 2012)

Hay cámras digitales que los pasa directamente a una tarjeta de memoria SD, MMC, etc. Con su módulo a parte para ello.

Carísimo.


----------



## terranology (Abr 16, 2012)

Hola de nuevo, poco a poco voy entendiendo un poco mejor, gracias¡
Pero, respecto a la cámara, vi que me comentaron que si era CCD no sería tan complicado el proyecto, podrían explicarme mejor que tendría que hacer para enviar la imagen a través de esta cámara, el problema es que la cámara ya la hemos comprado  , por eso, creo que debemos aprovechar, en vez de comprar otra.
Respecto a la información que mandaremos al celular Android, no será solo la imagen, si no que en el propio teléfono también mostraremos mucha otra información. De echo, aprovecho para contarles un poco el proyecto, consiste en un robot, que articulado con un sensor de distancia por ultrasonido, hace un barrido y calculará de manera automática un plano virtual de la habitación. Lo de ponerle ademas una cámara está enfocado para un sistema de vigilancia, que el usuario pueda ver lo que ve el robot.

Un saludo y gracias de verdad¡ ^^


----------



## terranology (Abr 18, 2012)

Una última aclaración, y es que no entiendo muy bien porqué me dicen que tengo que digitalizar la señal, ya que en uno de los primeros mensajes, vi que comentaban que si la cámara tenía interfaz CCD, me simplificaría el trabajo, y como veo que es CCD, por eso no entiendo muy bien...

Un saludo¡ ^^


----------



## miborbolla (Abr 18, 2012)

Terranology es muy simple: existen dos mundos dentro de la electrónica, uno es el mundo digital y el otro es el mundo analógico.

La cámara que has comprado entrega señal analógica (vídeo compuesto) y por tanto esta señal no la puedes procesar, transportar ni nada, si no esta dentro del mundo digital que es el que entiende tu procesador de manera natural, deberías convertirla (digitalizarla) para entonces así poderla procesar de manera mas conveniente. El hecho que uses una cámara con CCD no implica en nada que entregue una señal digital, eso depende del fabricante de la cámara y de nadie mas.

Por otro lado, varios fabricantes de cámaras que usan CCD, se aprovechan de la característica de estos para llenar memorias digitales para guardar momentáneamente la información contenida en el CCD (buffer) de tal suerte que este buffer se puede transferir a un procesador de manera mucho mas sencilla sin demasiada carga al procesador a donde se quiere utilizar la información del CCD. Dicho de otra forma un CCD esta diseñado para ser utilizado de manera digital, pero por razones meramente de diseño y comercialización prácticamente ningún  fabricante entrega información técnica ni la probabilidad de conectarse directamente al CCD a menos que la consigas expresamente para obtener los fotogramas de manera digital (transferir el buffer a tu desarrollo), como la cámara que te comento mas arriba.

Por supuesto también tienes la opción de comprar el CCD y hacer tu propia interface, pero créeme que eso es un trabajo bastante chancho, ya que físicamente son pequeñísimos, ademas de que hay que tener bastante conocimientos, que al menos yo no tengo ni las herramientas tampoco.

Así que si te fijas tu mismo te contestas cuando pones:

'vi que comentaban que si la cámara tenía interfaz CCD, me simplificaría el trabajo'

y bueno, ve si tu cámara tiene la interfaz y veras que solo tienes un pin que entrega Video (analogico) y nada mas.


Espero con esto ya te quede mas clarito el asunto que enfrentas con tu proyecto.


Saludos


----------



## phanthomsgn (Nov 6, 2012)

romyggar dijo:


> Buenas...
> 
> En un proyecto extenso que hice en la universidad, use un dsPIC para controlar una cámara CMOS de 640x480 pixeles, y además de esto implementé un algoritmo OCR para reconocer números (solamente). No use chips externos ni expansión de memoria, solamente el dsPIC 30F4011.
> 
> ...



Amigoo me interesaria aprender de tu proyecto, me podrias das alguna explicacion mas detallada, no te pido que me lo pases (eso seria de algun parasito), lo que pido es que me orientes a temas de los cuales podra aprender un poco para poder llegar a construir algo como tu proyecto, Saludos.


----------



## Romyggar (Nov 14, 2012)

phanthomsgn dijo:


> Amigoo me interesaria aprender de tu proyecto, me podrias das alguna explicacion mas detallada, no te pido que me lo pases (eso seria de algun parasito), lo que pido es que me orientes a temas de los cuales podra aprender un poco para poder llegar a construir algo como tu proyecto, Saludos.



Amigo *phanthomsgn*

Pues, te sugiero que abras un nuevo hilo para que así otros usuarios se beneficien de la información que pueda divulgar yo y otros contribuyentes que hayan trabajado en proyectos similares. 

Pero por ahora te puedo decir con mas detalles de qué se trataba el proyecto que hice:
1- Era un proyecto de grado (de fin de carrera profesional, ingeniería electrónica)
2- El objetivo era crear un dispositivo que automatizara la lectura de los contadores domiciliarios de energía eléctrica(medidores de "luz"). 
3- Debía ser: barato, fácil de mantener(hacerle mantenimiento), fácil de actualizar, con un diseño lo mas sencillo posible, etc.
4- Debía tener un software de control con características similares al dispositivo mismo (barato, fácil de mant...)

Solución:
1- Componentes: Una cámara CMOS con salida serial TTL (Protocolo RS-232), Un circuito conversor de RS-232 a 5V, Un dsPIC (Digital Signal Procesing PIC), unos cuantos LEDs Blancos de Alto Brillo, Una "Carcaza" para asilar luz interferente entre la cámara y su objetivo

2- Captura: EL dsPIC se comunica con la Cámara via USART, le solicita la imagen, el dsPIC la recibe byte por byte, la convierte a blanco y negro y la comprime mientras aún la esta recibiendo, de manera que al terminar la transmisión de la imagen desde la cámara, la imagen ya está almacenada de manera comprimida en la RAM del dsPIC.

3- Lectura: Después capturar una imagen, el dsPIC ejecuta el algoritmo de reconocimiento de caracteres (OCR en inglés), el cual tiene varios patrones pre-programados en la EEPROM del mismo. Aplica estos patrones al algoritmo OCR y determina que números hay en la imagen capturada

4- Resultado: Se incluyó una consola con una LCD 2x16 para ver los números hallados y el porcentaje de acierto de cada número.

- Se usaron muchas herramientas como MATLAB para crear los drivers de la cámara, o crear una aplicación sencilla y visualizar en un PC lo que la cámara "veía". Calibrar las condiciones de luminosidad, centrar la cámara en su objetivo, etc.

- Se hicieron numerosas pruebas para obtener los patrones que se le inyectaban al algoritmo OCR

- Cabe destacar, que para cumplir muchos de los objetivos, tuve que usar un dsPIC con ciertas limitaciones (2KB de RAM, 1KB EEPROM, 16Bits, 30MHz de Clock)
----------------------------------------------------
No sé que proyecto tienes en mente, pero como lo mencioné arriba, abre un nuevo hilo y así te podré ayudar de manera mas puntual.

Espero y te haya servido esta extensa respuesta!!!


----------



## codex (Mar 23, 2013)

romyggar dijo:


> Amigo *phanthomsgn*
> 
> Pues, te sugiero que abras un nuevo hilo para que así otros usuarios se beneficien de la información que pueda divulgar yo y otros contribuyentes que hayan trabajado en proyectos similares.
> 
> ...



Estoy haciendo un proyecto similar pero con una camara vga y usar el dspic para procesar y transmitir video por medio de un modulo wi-fi, crees que seria una buena opcion hacerlo de esta manera?, y de ser si que modulo wi-fi me recomendarias.
Gracias!


----------



## Sebastian1989 (Mar 23, 2013)

Te recomiendo utilizar una cámara que te entregue el vídeo de forma digital, te podría servir una como esta http://www.ebay.com/itm/180946265217?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649


----------



## Meta (Mar 23, 2013)

Si no sabes manejarla es un reisgo. Para eso consigo un movil con Android, Sansung S Galaxy el que sea, los kit Developer de Microchip o Arduino y todo fácil.


----------



## codex (Mar 25, 2013)

Sebastian1989 dijo:


> Te recomiendo utilizar una cámara que te entregue el vídeo de forma digital, te podría servir una como esta http://www.ebay.com/itm/180946265217?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649



Si de hecho es la camara que estoy utilizando, lo que necesito saber es con que modulo wifi podria transmitir video desde un dspic.


----------

