29 may 2012

Instalando el controlador del puerto USB para Arduino Leonardo en Windows 7 32 bits

La placa electrónica de código abierto Arduino Leonardo
Ayer pude probar una placa electrónica que me va a acompañar durante mucho tiempo en todos mis proyectos; la placa electrónica de código abierto Arduino (modelo Leonardo, con más entradas/salidas).
Esta placa, si te gusta el "Hazlo tú mismo", es impresionante:
  • Barata (desde 20€)
  • Moderna, completa y flexible, con 20 pines entrada/salida para proyectos muy complejos
  • Hardware y software abierto (no hay secretos, te la puedes hacer tú mismo por piezas)
  • Fácil de programar (utiliza lenguaje de alto nivel basado en el Processing)
  • Con muchos ejemplos y una comunidad cada vez más grande
  • Muy económica para lo completa que es ¿lo había dicho ya? XD
Si queréis saber más sobre cómo nació esta maravilla de la electrónica, nada mejor que "Arduino, El documental". Toda una demostración del poder del código abierto y el altruismo colaborativo:



Vayamos al tema... Me costó lo suyo dar con la forma de instalar el controlador USB, pues Windows 7 32 bits no lo cogía, no lo encontraba, a pesar de seguir la guía oficial.
Pues al final resultó que es un puerto "COM" de comunicaciones virtual a través de un puerto USB, por lo que primero Windows tiene que instalar la capa superior del controlador, el dispositivo compuesto USB, con el cual funcionarán las comunicaciones, y luego ya el controlador de puerto serie.
Si al ver las propiedades del dispositivo os pone algo de "Port_#0001.Hub_#0007", entonces es eso:


Apunte: Evidentemente para instalarlo hay que dejarlo conectado, de forma que Windows lo muestre en el Administrador de Dispositivos (Panel de Control -> Sistema -> Administrador de Dispositivos si tenemos activada la vista por iconos en el Panel de Control, arriba a la derecha).
Y para instalar el controlador bastará con indicarle a Windows que lo busque en internet, y una vez instalado éste, podemos proceder a instalar el del puerto de comunicaciones:


Primero tenemos que descargar la última versión de la Interfaz de Desarrollo o IDE de la página de Arduino, y lo descomprimimos donde queramos:


En el administrador de dispositivos de Windows, pulsamos con el botón secundario del ratón sobre el dispositivo "Arduino Leonardo" y le damos a "Actualizar controlador", con lo que nos preguntará cómo deseamos buscar el controlador; pinchamos en "Buscar software de controlador en el equipo":

Entre los archivos del IDE que descargamos antes, hay una carpeta "drivers", que es la que tenemos que indicarle a Windows dándole a "Examinar":


Nos pedirá confirmación, ya que el controlador no está firmado, y le damos a instalar de todas formas:


Finalmente termina con que el controlador se ha instalado correctamente (en mi caso aparecía el siguiente COM libre, que era el 4, pero en tu caso puede variar.


Ahora ya nos falta tan sólo indicarle al IDE qué tipo de placa es y en qué puerto serie está conectado. Para ello abrimos el ejecutable de Arduino.exe (no es necesario abrirlo en modo administrador) y vamos al menú Herramientas -> Placa y seleccionamos la nuestra, en mi caso, Leonardo.


También cambiaremos el puerto serie, seleccionando en Herramientas -> Puerto Serie -> El puerto COM que nos ha indicado antes (COM4 en mi caso). Comprobad que se queda con el "tick" azul marcado, si no, no lo cogerá.



Para comprobar que ya podemos cargar software en la placa, cargamos un código ejemplo; Uno de los más sencillos para empezar a aprender cómo funciona es el Blink.
Vamos a Archivo -> Ejemplos > Basicos -> Blink, y le damos al botón redondo de la flecha a la derecha que está debajo del menú "archivo".



Tras unos segundos de compilación, lo manda a la placa. Si nos saliera un error extraño "Problema al subir el código a la tarjeta", con un Id extraño de la tarjeta, lo más seguro es que no hemos seleccionado el puerto COM adecuado. Lo cambiamos por el correcto y volvemos a probar.


Si todo va bien, nos cargará el código del programa "Blink" y el led amarillo integrado de la placa "L", empezará a hacer intermitencia de 1 segundo encendido y otro apagado (que podemos cambiar en el código en la parte final en los "delay", que es en milisegundos).

Funcionamiento de la subida del código en Leonardo
Según la guía oficial, debido a que utiliza el chip principal para manejar la comunicación por el puerto serie (siendo éste virtual, controlador CDC), cada vez que se resetea la placa, la comunicación del puerto USB se romperá, y se reconectará. En ese instante, Leonardo desaparecerá de la lista de dispositivos, para volver a aparecer.
De esta forma, la estrategia que sigue el IDE para subir el código a la tarjeta, cambia con respecto a Arduino UNO; tras enviar la orden de reset a la placa para subir el código, espera un tiempo prudencial para que esté preparada para recibir el código, y entonces lo envía en el puerto COM que especificamos y que Windows mantendrá cada vez que esto ocurre.
Si el reset automático no funciona, podemos hacer el proceso de forma manual; mantenemos presionado el botón reset de Leonardo, sin soltar pulsamos el botón "subir código" del IDE Arduino.exe, y soltamos el reset únicamente cuando aparezca el mensaje "subiendo código..." en la barra inferior de estado del IDE. En ese momento el arranque de la placa comenzará, creando el puerto virtual (CDC) de nuevo, que verá el software y lo usará para subir el código.

Hoy día no creo que haya mejor primer acercamiento para la electrónica, la programación, la medición, la automatización, la intervención, que Arduino. Felix E. Guerrero

En otra entrada os hablaré del lenguaje que utiliza Arduino, sus reglas básicas e instrucciones para ir empezando. Aquí tenéis un pequeño manual para iniciaros, de la universidad de Alicante, o este otro, un manual de referencia de las instrucciones disponibles, de Brian W. Evans, traducido al castellano.
Con Arduino podremos crear complejos autómatas de forma económica y reciclando electrónica de otros aparatos, como relés, motores, diodos, resistencias, ventiladores, etc, para proyectos como control automático de las luces según la iluminación de la habitación y la presencia de gente, o el control automático de persianas de la casa, o fabricación de pequeños robots "inteligentes" para los niños, o, que es para lo que yo quiero usarlo, el control de la combustión de una caldera de leña "open source". El único límite es tu imaginación.

Más información:
Página oficial Arduino
Arduino: El documental
Comenzando con Arduino en Windows
Manual de iniciación Arduino
Completo manual de Brian W. Evans en Español
Foro Arduino oficial
Guía oficial (inglés) de Arduino Leonardo
Ardumanía, ejemplos y proyectos para ir aprendiendo y disfrutando
Tienda Ardumanía, tienda Arduino en España con buenos precios, bastantes accesorios y mejor atención.
MHVLib - An Efficiency Oriented Runtime Library for AVR Microcontrollers

14 comentarios:

  1. Excelente, que bueno que existe el hardware abierto, así se pueden hacer esos proyectos sin tanto dinero.

    Y junto con el software libre hay más posibilidades...

    Saludos.

    ResponderEliminar
  2. Me ha servido de gran ayuda. Muy habitualmente desmonto y monto ordenadores con piezas de diferentes equipos y estoy bastante familiarizado a trastear con este tipo de componente. Nunca viene mal un buen artículo como este. Saludos.

    ResponderEliminar
  3. Men, no te endiendo lo que dices para instalar la primera parte del controlador, tengo el mismo problema y no he podido instalarlo

    ResponderEliminar
    Respuestas
    1. Siel, cuando te ponga la exclamación en el "dispositivo compuesto USB", le das a "buscar en internet". Luego ya es instalar el controlador propio del Arduino. Espero que se entienda... inténtalo y si no va, indícame más datos para saber que le pasa a tu Windows.

      Eliminar
  4. Veo que eres un experto en Leonardo y necesito hacerte esta pregunta por si puedes ayudarme:

    Me he desacargado unas lineas de programa que son para Arduino Uno y Arduino Mega. Yo tengo una Leonardo.

    Cuando cargo este programa --> https://github.com/condac/Arduino-traintable

    Me salen estos errores:

    traintable.ino: In function 'void SetupTimer2()':
    traintable:174: error: 'TCCR2A' was not declared in this scope
    traintable:175: error: 'TCCR2B' was not declared in this scope
    traintable:175: error: 'CS22' was not declared in this scope
    traintable:175: error: 'CS21' was not declared in this scope
    traintable:175: error: 'CS20' was not declared in this scope
    traintable:181: error: 'TCNT2' was not declared in this scope
    traintable.ino: In function 'void TIMER2_OVF_vect()':
    traintable:199: error: 'TCNT2' was not declared in this scope
    traintable:248: error: 'TCNT2' was not declared in this scope
    traintable:252: error: 'TCNT2' was not declared in this scope

    Puede ser por algún tipo de incompatibilidad por los temporizadores.

    ResponderEliminar
  5. Hola Jose, gracias, pero no lo domino tanto, estoy empezando... trataré de ayudarte. Puede ser que el Leonardo no tenga lo mismo; la parte del código que falla es la rutina del Timer2, se hace referencia a esta página en el código:
    http://maxembedded.wordpress.com/2011/06/29/avr-timers-timer2/
    Tendrás que buscar la manera de usar un temporizador de otra forma, yo no llego a entender por qué falla; igual le falta alguna librería o algo.

    ResponderEliminar
  6. Hola David, hace unos días compré Arduino Leonardo y recién quiero instalarle los drivers haciendole como tú lo explicaste, pero no puedo, conecto la tarjeta a la PC por el miniUBS y mi Windows 7 lo acepta (con el típico sonidito cuando insertas un hardware nuevo), pero después lo retira (con el otro sonidito cuando expulsas un hardware) y ya no me lo detecta, tengo que volver a conectar Leonardo y por segundo se vuelve a repetir.

    ¿Sabes qué crees que sea, es mi placa o el cable miniUSB que estoy utilizando? porque el cable miniUSB es de un teléfono Samsung del mismo puerto...

    :S

    Gracias David de antemano.

    ResponderEliminar
  7. a mi me sale en el monitor TESTATA alguien sabe porqué

    gracias

    ResponderEliminar
  8. Hola , yo tengo Windows Vista y tengo un error para hacer compatible el dispositivo y que mi ordenador reconozca la placa.

    Port_#0001.Hub_#0006
    He seguido tu recomendación de actualizar el controlador online y no lo consigo.
    Me aparece un código 28 y el dispositivo sigue sin ser reconocido.

    Alguna idea más?
    Gracias de antemano. Un saludo

    ResponderEliminar
  9. oye hdp ya me salio gracias malnacido (Y) like!!!!

    ResponderEliminar
  10. void loop() { Gracias infinitas, tuve problemas con la instalación de mi leonardo. Tu guía me ayudo. Saludos }

    ResponderEliminar
  11. Me sale que el Sjetch usa 1,030 bytes (3%) del espacio de alamacenamiento
    de programa. El máximo es de 32,256 bytes. que hago?????

    ResponderEliminar
    Respuestas
    1. Pues nada, porque tienes un 97% restante que podrías llenar sin problema... no entiendo la duda. No hay por qué llenarla... mientras tu Arduino haga lo que quieres.

      Eliminar
  12. Ayuda quiero programar para formar una flecha con luces y no se como

    ResponderEliminar

Puede dejar su comentario, que tratará de ser moderado en los días siguientes. En caso de ser algo importante/urgente, por favor utilicen el formulario de arriba a la derecha para contactar.