Interactuar con la videocámara MD80 y un microcontrolador

Hace poco escribí una reseña sobre el clon de la videocámara MINIDV MD80. Al ser una videocámara de tamaño reducido se puede usar en los proyectos de electrónica que queramos, sin embargo su autonomía viene marcada por la batería que contiene, además de que el proceso de encendido/apagado y grabación/parada es manual. Mi intención ha sido sustituir la batería por otra fuente de alimentación (una batería más grande, un transformador de la corriente eléctrica, etc) y que tanto el encendido como la grabación se hagan a través de un microcontrolador. En este artículo voy a explicar los pasos que he seguido para conseguir mi objetivo.

En principio he desmontado la carcasa de la videocámara y he extraido la electrónica y la batería:

He desoldado la batería y en su lugar he puesto dos cables para unirlos a una protoboard (aunque podrían soldarse a una placa de topos o a una pcb). Después he soldado dos cables de wrapping a los terminales traseros del botón de encendido y otro cable de wrapping al terminal trasero izquierdo del botón de grabación:

A partir de aquí ya se puede usar la cámara con un microcontrolador. Para este artículo me he decantado por un pic 12f683. La idea es usar dos transistores NPN para que hagan la simulación de pulsar tanto el botón de encendido como el de la grabación, para este artículo he usado 2 BC547. El microcontrolador activará la base del transistor a través de una resistencia de 390K. y comunicará el colector con el emisor como si de una pulsación manual del botón se tratase. Sólo hay que tener en cuenta que para el botón de encendido, el cable de wrapping de la derecha tiene que ir al colector y el cable de la izquierda al emisor, y en el botón de grabación el único cable va al colector y el emisor va a masa (GND).

La batería que trae la videocámara es una LiPo de una sola celda y tiene una capacidad de 230 mAh. Esto nos da la pista de que a la cámara debemos alimentarla con una tensión de 3,7 v. Para ello he usado un regulador Step-Down basado en el chip AX3022 de sure electronics. Este regulador ofrece hasta 1,5 A., más que suficiente para alimentar la videocámara y el microcontrolador (que puede funcionar a 3,7 v.).

Finalmente así queda el conjunto en una protoboard:

El ejemplo que he programado en el microcontrolador es muy sencillo: Espera 5 segundos, activa el transistor del botón de encendido durante medio segundo, esto hace que la videocámara se encienda, espera otros 5 segundos, activa el transistor del botón de grabación durante medio segundo, esto hace que la videocámara empiece a grabar, espera 10 segundos, activa el transistor del botón de grabación durante medio segundo, esto hace que la grabación pare, espera 5 segundos y finalmente activa el transistor del botón de encendido durante medio segundo, que provoca que la videocámara se apague:

El código fuente del programa del pic:

Cuando vayamos a conectar la videocámara a un puerto USB para ver las grabaciones, no debemos olvidarnos de desenchufar los cables de alimentación que hemos soldado, ya que la fuente de alimentación ya no es la batería original que contenía.

56 comentarios en “Interactuar con la videocámara MD80 y un microcontrolador

  1. Gatubit

    Recientemente tras ver tu post anterior sobre la videocámara MD80 y tras pensarlo decidí adquirir esta en DealExtreme.

    Aun no me ha llegado (espero que lo haga pronto) pero ya andaba yo pensando en si seria posible alimentar la videocámara de alguna forma alternativa y justo vas y me sorprendes con este post. 😛

    Ya de paso aprovecho la ocasión para preguntarte algo, ¿Cuanto es el máximo de duración que has llegado a grabar y usando que tarjeta?

    Un saludo de un viejo lector.

    Responder
    1. admin Autor

      Es una cámara que merece la pena por el precio que tiene. No he llegado a probarlo hasta cuanto dura la batería, pero por lo que he leido puede llegar a durar unos 90 minutos y ocupar casi una micro sdhc de 4 GB.

      Responder
  2. gcenjor

    Moooola, yo también me había quedado picado sobre si sería posible hacerla funcionar de un modo «no manual».

    Con esta cámara y un sensor de ultrasonidos, ya me estoy imaginando un sistema de vigilancia casero.

    Responder
    1. admin Autor

      Más que un sensor de ultrasonidos, un sensor de movimiento por infrarrojos: http://www.sistemasorp.es/2010/08/14/alarma-con-un-pic-16f628-un-transceptor-ds275-sensor-de-movimiento-y-un-modem-antiguo/

      Estaba pensando que el consumo medio de la cámara es de 170 mA. con picos de poco más de 200mA. Por lo tanto con unos paneles solares que te den unos 300 mA., la cámara, el pic y el sensor de movimiento puedes grabar a aves en su propio nido. Cuando lleguen a este el sensor de movimiento las detecta, lanza una señal al PIC, y este enciende la cámara y empieza a grabar hasta pasado unos minutos, todo ello sin otra fuente de alimentación que la propia placa solar.

      Responder
  3. Sebas

    Tengo pensado usar esta cámara en un pequeño robot usando una placa arduino para su control y me gustaría saber si no dañaría la cámara siguiendo el montaje pero conectando las resistencias a dos pines del arduino. Es que como los valores de tensión y corriente de salida del pic son 3V y 25mA (máx), y para el arduino son 5V y 40mA no sé si tendría que cambiar el valor de las resistencias empleadas.
    Y gracias por enseñarnos todo lo que te curras!! y por descubrir esta pedazo de cámara!!

    Responder
    1. admin Autor

      Necesitarías unas resistencias de 560K en vez de 390K. Lo importante es el voltaje de salida del pin, no la intensidad. Todo ello se calcula de la siguiente forma:

      Por un lado la intensidad que pasa por los bornes de los botones de la cámara es de 0,9mA. Para calcular la resistencia que debes poner al transistor para que actue como interruptor, tienes que buscar el valor de la ganacia del mismo, que para el BC547 es de 110. Por tanto 0,9mA / 110 hFe son 0,008 mA. Lo pasamos a amperios: 0,008mA / 1000 = 0,000008 A. Después dividimos el voltaje de la patilla del micro menos la tensión entre base y emisor (que es casi siempre 0,7 V.) entre el resultado anterior: (5 V. – 0,7 V.) / 0,000008 A. = 537500 ohm. La resistencia comercial por encima de ese valor es la de 560000 ohm.

      Un documento muy bueno donde lo explican es este: http://www.tecnologiaseso.es/pdf/electronicapdf/transistores.pdf y otro sitio de consulta también muy bueno es este: http://picmania.garcia-cuervo.net/electronica_basica.php#TRANS1Q1

      Responder
  4. Sebas

    ¡Muchas gracias Oscar!

    Cuando tenga montado mi robot te diré como me ha quedado, aunque todavía queda tiempo para ello, ahora mismo estoy adquiriendo los componentes y no me sobra ni dinero ni tiempo, que es más valioso.

    ¡Gracias!

    Responder
  5. chuis

    Siempre intenté controlar una camara digital barata con un micro, por más que busqué en la net no encontre nada, que pena que no se fabriquen con algo parecido a un rs232 para poder controlarla con comandos. Cuando ví tu aportación Oscar, me encantó, sobretodo que hayas metido el soldador, mi pregunta es por qué no has mantenido la misma batería y así ocupar poco espacio. supongo que has dado prioridad al tiempo de grabación. qué opinas sobre la calidad de las imágenes que proporciona?.

    Responder
    1. admin Autor

      Asi es, mi idea es usar una fuente de alimentación externa y no depender de las cargas y descargas de la batería y su duración. La calidad, para el pecio que tiene me parece muy buena. Es cierto que no graba bien del todo, pero para la mayoría de proyectos cumple su función correctamente.

      Responder
  6. chuis

    Hola Oscar, gracias por el ack. He comprado ya la cámara y todo ok, tardan mucho en servirla pero por el precio que tiene lo asumo sin problemas.En disco que trae con los drivers vienen dos programas, uno creo que es para hcer trabajar la camara como camara web y el otro viene todo en chino y no se para que es. Estoy un poco intrigado con el pulsador mode que so se para que vale, tampoco se cambiarle la hora. Casi seguro que todo se tiene que hacer desde un programa en el PC, pero tengo dudas. A ver si me puedes echar una mano. Saludos.

    Responder
    1. admin Autor

      El botón mode es para cuando está enchufada la cámara al puerto usb y está en modo disco usb, cambiarlo al modo webcam. Si le has instalado los drivers que comentas te funcionará como tal. El cambio de hora se hace a través de un fichero dentro de la tarjeta de memoria que tienes que editar con la fecha y la hora de cuando quieres empezar a grabar, un engorro vamos.

      Responder
  7. chuis

    Hola Oscar, no soy capaz de cambiar la fecha de la cámara, según el minimanual que viene con ella dice en mal inglés que tengo que llamarle al fichero de texto the text document y guardarlo en raiz de la card con el formato 2011/03/28 22:00:00 realizo lo comentado y sigue sin cambiar, la verdad no se si son los year o que. Por otro lado dice que hay que instalar un driver llamado STK02N 2.3.exe que en el disco que suministran no viene. La verdad que estoy un poco quemado, podrías tú editarme el fichero y mandarmelo por correo a ver si soy capaz de salir de esta incertidumbre.
    Un saludo y que sigas iluminándonos con tus aportaciones, antiguamente se decía que Dios te lo pague.

    Responder
    1. admin Autor

      Te copio la traducción correcta:

      El CD que trae con el producto contiene un archivo llamado tiempo de sincronización
      de archivos (TAG.TXT). Por favor, copie a la tarjeta SD de la siguiente forma:
      1. Crear un archivo de texto llamado TAG.TXT en el directorio raíz de la tarjeta.
      2. Abrir TAG.TXT, escriba la fecha y hora correcta según su reloj.
      Tiene que quedar de la siguiente manera:
      [date]
      2009/07/12
      12:00:00
      Una vez creado guarde los cambios y desconecte la cámara del ordenador, apáguela y
      vuélvala a encender y automáticamente quedara sincronizada. Si ha creado
      correctamente el archivo y ha seguido todos los pasos TAG.TXT se eliminara
      automáticamente de su tarjeta MicroSD.

      El driver no es necesario a no ser que:
      a) Quieras usar tu cámara como webcam
      b) Quieras añadirle un firmware para quitarle la fecha y la hora de las grabaciones

      Responder
  8. Chuis

    Gracias Oscar, ya me funciona correctamente,tengo que comentarte que l fichero TAG.TxT sí viene en el disco, y leyendo las instrucciones llego a la conclusión que hay que llamarle The text document. Sea como fuere la cuestión es que funcina muy bien. mi fase siguiente es sacarle las tripas y tratar de acoplarlo a un pic de la familia 24. Un millón de gracias y que tengas tiempo para seguir investigando.

    Responder
    1. admin Autor

      Me alegro de que ya la tengas a pleno rendimiento. Mi idea es usarla en un globo de helio junto con un módulo GPS y un teléfono que puedo mandar sms a través de un pic. Ya lo pondré en un futuro en el blog.

      Responder
  9. Fernando

    Muy buenas ‘admin’, resulta que tengo esta misma cámara para usarla precisamente para lo mismo que tu. Me he llevado una grata sorpresa al ver que tenías pensado usarla para grabaciones en un globo de Helio, yo también.
    Y llevo dos días buscando por Internet una solución al problema de la grabación de archivos de 4Gb. Si el globo se pega dos horas o más volando, la cámara cuando llegue a 4Gb se apaga sola en vez de guardar ese archivo y continuar grabando de nuevo.
    Como no encontraba ningún firmware que corrigiera eso (supongo que esa funcionalidad se podría implementar) había pensado en hacer un temporizador que cada 60 minutos parase y volviera a arrancar la grabación (con dos pulsos al botón), de manera que así haga varios vídeos.

    Me gustaría saber si has encontrado alguna información sobre esa limitación o bien, si sería posible implementar tu montaje, para evitar que la cámara se apague y hacer que cada X tiempo haga una pausa breve (lo mínimo) y continúe grabando en otro archivo AVI distinto.

    Gracias!

    Responder
  10. Fernando

    Gracias por la respuesta. Si, la limitación es lógica, lo que no veo tan lógico es que la cámara se apague y punto. Hay otras (por lo visto) que graban vídeos a intervalos de X Gigas resolver la limitación del FAT32.
    Así que lo único que se podría hacer es lo que he comentado, un pulso para detener la grabación y cinco segundos después (tiempo suficiente para guardar el vídeo en la memoria) otro pulso para continuar. Supongo que cambiando el código fuente se podría implementar este caso concreto, sin embargo tampoco tengo mucha idea de programación y no sabría como compilarlo. No se si podías echarme una mano con eso…

    Gracias.

    Responder
  11. Fernando

    El pic 12F683 que has usado en tu artículo parece fácil de implementar, no estoy familiarizado con el resto. He estado haciendo pruebas con lo más básico, el 555 pero está claro que lo más cómodo es poder programarlo.

    Responder
    1. admin Autor

      Entonces puedes programarlo en ensamblador con el MPLAB, en C con el PCWH CCS (el que he usado yo) y en BASIC con el PIC BASIC. Depende de con cuál te sientas más cómodo puedes hacerlo con uno o con otro ya que es tan sencillo como activar o desactivar una patilla del PIC.

      Responder
  12. Fernando

    Buenas de nuevo, retomando el tema, por fin he conseguido el PCWH CCS y he cargado el código fuente que tienes listado, pero claro, al compilar me dice que hay error en el archivo main.h. Suponía que no iba a funcionar y me preguntaba si «main.h» es un archivo genérico o se puede conseguir en algún sitio para evitar el fallo.

    Gracias.

    Responder
    1. admin Autor

      El fichero es necesario para el proyecto y es personalizado para este. Prueba a crear un proyecto en el CCS y después sustituye en main.h y el main.c por los del artículo.

      Responder
  13. Fernando

    No puedo hacerlo, en el artículo solo detallas el «main.c». He probado a quitar el include y sustituirlo por esta cabecera para que me deje compilar:

    #include
    #fuses NOWDT, INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, BROWNOUT
    #use delay (clock=8000000)

    no se si será válido, por lo menos me deja compilarlo sin errores. La verdad es que no tengo ni idea de programación y esto me está costando lo suyo.
    Había pensado en usar el código que presentas variando los tiempos, supongo que si quito la última instrucción de power y me las apaño para crear un bucle, podría hacer que cada 45 minutos enviara un pulso al «record»… Es lo único que quiero, cuando se acabe la batería de 1800mAh que la he puesto, se acabó…

    Responder
    1. admin Autor

      Cierto, creía haberlo puesto. Te lo paso por aquí:

      #include <12F683.h>
      #device adc=8

      #FUSES NOWDT //No Watch Dog Timer
      #FUSES INTRC_IO //Internal RC Osc, no CLKOUT
      #FUSES NOCPD //No EE protection
      #FUSES NOPROTECT //Code not protected from reading
      #FUSES NOMCLR //Master Clear pin used for I/O
      #FUSES NOPUT //No Power Up Timer
      #FUSES NOBROWNOUT //No brownout reset
      #FUSES NOIESO //Internal External Switch Over mode disabled
      #FUSES NOFCMEN //Fail-safe clock monitor disabled

      #use delay(clock=8000000)
      #use fast_io(a)

      Como bien dices puedes estar cada cierto tiempo parando la grabación y volviendo a activarla.

      Responder
  14. Fernando

    Después de muuucho tiempo, por fin lo he conseguido. Al final lo he hecho así:

    void main()
    {
    int i=1; // Variable i para generar el bucle
    setup_adc_ports(NO_ANALOGS|VSS_VDD);
    setup_adc(ADC_OFF);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC);
    setup_vref(FALSE);
    setup_oscillator(OSC_8MHZ);

    // TODO: USER CODE!!

    set_tris_a(0);
    output_a(0);
    delay_ms(5000);
    power();
    delay_ms(5000);

    while (i==1)
    {
    record();
    delay_ms(10000);
    record();
    delay_ms(5000);
    i=1;
    }

    En el ejemplo el tiempo de grabación sería de 10 segundos, con 5 segundos de pausa entre grabaciones para tener tiempo a guardar el vídeo en la tarjeta. La intención como dije, es sustituir esos 10 segundos por 45 minutos. Lo dejo por aquí por si a alguien le vale. Gracias Oscar por tu aportación, ya estoy esperando a que pongas algo del proyecto de enviar SMS a traves de un PIC, me tienes intrigado.

    Saludos.

    Responder
  15. Fernando

    Ups… tengo un problema. Todo funciona bien menos al meter los los 45 minutos que son «2700000» milisegundos ¿son demasiados? He intentado ponerlo y el pic ejecuta un «nuevo» record en unos 13 segundos. He probado con 20000 y si lo hace en 20 segundos ¿alguna idea de cómo poner esos 45 minutos que necesito?

    Responder
    1. admin Autor

      Puedes usar bucles para conseguirlo:

      int16 x;
      .
      .
      .
      while (i==1)
      {
      record();
      for(x=0; x < 2700; x++) { delay_ms(1000); } record(); delay_ms(5000); i=1; }

      Responder
  16. Fernando

    Una dudilla en base a la electrónica. Si se supone que tanto el power como el record son interruptores pulsadores que hacen un corto entre sus patillas para activarse, ¿porqué razón hay que conectarlo al colector y emisor según comentas? o dicho de otra forma ¿qué más da en qué sentido hagas el «corto» con el transistor? el caso es que efectivamente, no funciona si lo conectas al revés. Será algo muy básico pero no me cuadra.

    Responder
    1. admin Autor

      Porque la corriente continua sólo va en una dirección, de mayor potencial a menor potencial, de + a -, de VCC a GND. Lo mismo pasa por tanto con el transistor NPN que sólo va de colector a emisor con la característica que se comporta como un diodo especial y ya sabes que los diodos sólo dejan pasar la corriente en una dirección.

      Responder
  17. Fernando

    Bueno, justo es compartir el invento después de todo. Funciona perfectamente, al final cambié el programa y metí un bucle inicial para definir el número de veces que debía repetirse las operaciones de encendido y apagado, todo ello alimentado con una batería de 1020mAh de un teléfono móvil que da una autonomía de unas 4 horas o hasta que se llene la tarjeta, una de 16Gb clase 10.
    Aquí la cámara y el PIC en proceso de pruebas finales y montaje:
    http://img225.imageshack.us/img225/2804/md802.jpg

    Circuito integrado en la cámara. Al quitar la batería interna queda hueco para meterlo todo, aunque he tenido que hacerle un pequeño cajeado porque el chip se sale un poco, queda en plan camello ;). Además, viene bien para poder sacarlo si hay que reprogramar.
    http://img594.imageshack.us/img594/905/md801.jpg

    Por último, con la funda puesta ni se nota y además, lo protege:
    http://img402.imageshack.us/img402/2744/md803.jpg

    Espero que le sirva a alguien como idea.
    Saludos.

    Responder
  18. Pingback: Calcular la resistencia para un transistor accionado por un microcontrolador | C.I.r.E.

  19. cesar Suarez

    Saludo cordial, he leído todo el post y me parece muy interesante el proyecto, pero mi duda es la siguiente:
    Hay alguna forma de darle mas ganancia al micrófono para hacerlo mas sensible?, la verdad no encuentro una resistencia variable que me permita hacer esto, y no se cual resistencia variar para hacerlo.
    Agradezco si me das una orientación hacerca e esto.

    Responder
  20. honorio

    hola, he utilizado esta camara como sistema de grabacion de una alarma que utiliza un pic 16f84,tiene sensores de movimiento y perimetrales con laser,ademas es capaz de activarse y recibir avisos por gsm. Yo he quitado la bateria y la alimento desde la placa de la alarma.El problema que se me plantea que en el un plazo de un mes se llena la tarjeta sd y no graba mas,conoces algún programa que permita sobreescribir la tarjeta comenzado a machacar el archivo mas antiguo?

    un saludo

    Responder
    1. admin Autor

      Lo que planteas es modificar el firmware de la cámara, que es la única que tiene acceso a la tarjeta de la memoria, pero lo veo muy complicado ya que no hay documentos que digan cómo hacerlo. Sin embargo puedes soldar unos cables a las patillas de la memoria desde la placa de la cámara a tu microcontrolador y cuando esta esté apagada interactuar con la memoria para borrar ficheros, empezaría por ver en la revista ucontrol cómo interactuar con las memorias SD: http://ayudaelectronica.com/descarga-revista-ucontrol-9/

      Responder
    1. admin Autor

      Se trata de grabación a trozos en vez de grabación continua. Se trata de hacer un bucle que grabe y pare cada cierto tiempo como le mostre por código a Fernando

      Responder
  21. jon

    El problema de ahora es que le doy al boton grabar y se para a los 40 minutos,quiero que grabe lo maximo de tiempo aunque sea en trozos.

    Responder
  22. jon

    Voy a hacer con el pic,asi aprendo.

    Como se programa el pic? Tiene 12 patillas?

    Y los programadores son de 16 o mas patillas? Tengo un dragon avr,sirve?

    Gracias anticipadas

    Responder
    1. admin Autor

      PIC es una familia de microcontroladores de Microchip, los hay de muchos tipos y por tanto con diferente número de patillas (6, 8, 14, 18, 20, 28, 36… etc).

      Necesitas un programador específico para PIC: http://es.wikipedia.org/wiki/Microcontrolador_PIC#Programadores El que mencionas es para microcontroladores AVR y no sirve.

      Sin embargo, ¿por qué has descartado la idea de hacerlo con arduino si como te comentaba puedes reaprovechar el código que le enseñé a Fernando para hacer la grabación continua a intervalos?

      Responder
  23. vicente

    Buenas a Tod@s
    soy nuevo en todo esto y estaba buscando algo así , es todo una idea perfecta , pero tengo una pregunta .
    se podría hacer que encendiera con un mando a distancia y que se pudiera visualizar lo que graba la cámara a la vez que graba ?
    un saludo y gracias

    Responder
  24. vicente

    hace poco he comprado este componente
    Transmitter Receiver Module Wireless Remote Kit for Arduino mando distancia ,
    podría hacer algo con el ? y si es así de que manera
    saludos y gracias

    Responder
  25. Daniel -

    Estimados, he encontrado este foro y es exelente, y desde ya agradezco la dedicación y buena disposición de ustedes, necesito si pueden orientarme un poco sobre un proyecto. Necesito generar un modulo de grabación para el interior de un vehículo, el mismo debe tomar la señal de audio y video de una cámara y grabarla en una tarjeta SD, anticipo que solo tengo conocimientos básicos de electrónica pero estoy investigando, al respecto, cada tema que afecte. Los requerimientos que debería tener el modulo son:
    – Poder grabar audio y video en la mejor resolución posible (entiendo que esto tiene sus limitaciones)
    – Poder grabar los archivos generados en una tarjeta SD (por lo menos 12hs de video, en SD de 64 o 128)
    (no importa el tiempo de grabación de cada archivo, Ej archivos de 1h. o 30 minutos seria suficiente.)
    Necesito si pueden orientarme en que tipo de cámara, que microcontrolador usar y algún otro dato que puedan darme…
    Desde ya muy agradecido.
    Mi dirección de mail es jdayguavella@yahoo.com.ar por si quieren pasarme mas info …

    Responder
    1. admin Autor

      Mejor adquiere una Mobius ActionCam que puede usar SD grandes y además tiene una opción que cuando recibe alimentación (por ejemplo del mechero del coche al arrancar este) se enciende y empieza a grabar, y cuando deja de recibir la alimentación para de grabar y se apaga.

      Responder

Responder a vicente Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *