Introduction: Sombrero Capacitivo De Raspberry Pi

About: Me gustan las bicis, las Macs, los circuitos, la inteligenica artificial, visión por computadoras, graficos en 3D, videojuegos, entre otras cosas, entre semana soy estudiante de Ing. Electrónica y en fines de …

> Actualización/Update:

Muchas gracias a todas las personas que han escrito un post acerca de mi trabajo, significa mucho para mi:

Thank you very much to the people who written about my work, mean a lot for me:

http://www.eedesignit.com/this-raspberry-pi-powere...

https://www.raspberrypi.org/blog/capacitive-touch-...

http://www.muycomputer.com/2015/08/30/raspberry-pi...

https://blog.adafruit.com/2015/09/11/the-future-ha...

Hola a todos en este instructable les voy a enseñar a usar el Sombrero Capacitivo de Adafruit (HAT en inglés), puedes ver el sombrero en los siguientes enlaces:

https://www.adafruit.com/products/2340

https://learn.adafruit.com/mpr121-capacitive-touch...

Este instructable, además de ser una traducción de Adafruit, intenta cubrir algunos puntos que no se mencionan en la página de Adafruit.

El gran final es reproducir tonos MIDI en python a través de frutas.

Cosas necesarias:

  • Raspberry Pi B+/A+/B2
  • micro SD de 4 GB (o más)
  • Lector de SD (ya sea un adaptador USB o la ranura de tu computadora)
  • Router con internet, dhcp habilitado y puertos ethernet (es el caso más común de un router casero)
  • Cable de ethernet
  • 12 Caimanes (a mi parecer pequeños)
  • 12 Frutas (Intenta con varias frutas)
  • Bocinas/Audifonos con jack de 3.5 mm para escuchar el audio
  • Sombrero Capacitivo de Adafruit https://www.adafruit.com/products/2340
  • Cargador Actek de doble salida ( http://articulo.mercadolibre.com.mx/MLM-502586927-... )
  • Cable Micro USB de buena calidad (el cable que viene con tu smarthphone será suficiente)

Voy a comenzar desde cero, si tienes experiencia en conexión remota salta al paso 4 "Instalando Dependencias"

Hay un paso que no cubro, es la de soldar los pines del sombrero, puedes seguir la excelente guia "Soldar es fácil":

http://mightyohm.com/files/soldercomic/translation...

Comencemos con la diversión.

Step 1: Instalando Debian

En este paso voy a cubrir como quemar el sistema operativo a la micro SD de la Raspberry Pi, si tienes Debian instalado puedes saltar este paso.

Descargando la Imagen

Para este instructable estoy usando la última versión de Raspbian, la cual puedes descargar desde la página oficial:

https://www.raspberrypi.org/downloads/

Aquí les dejo el enlace para descargar directamente el .zip de la imagen:

http://downloads.raspberrypi.org/raspbian_latest

Grabando la imagen

Básicamente el archivo .img es una copia cruda del sistema operativo de Raspberry Pi, lo que necesitamos es grabar byte a byte este archivo a una tarjeta SD de mayor tamaño que la misma imagen, para esto usaremos la aplicación recomendada por la fundación de Raspberry Pi: Win32DiskImager, descargala aquí

http://sourceforge.net/projects/win32diskimager/fi...

Una vez que tengamos la imagen descomprimida abrimos Win32Disimager, selecionamos la imagen descomprimida, como objetivo selecionamos la tarjeta SD (que previamente conectamos a la computadora) y selecionamos "Write", nos dira que "Esto ocasionara una posible corrupción a tu tarjeta SD", respondemos que si queremos continuar.

Después de 10 a 15 minutos nuestra SD estará lista para insertarse en nuestra Raspberry Pi.

Nota:

Si estas en otro sistema operativo puede leer como grabar la imagen en la página oficial de Raspberry Pi (en inglés):

https://www.raspberrypi.org/documentation/installa...

Step 2: Conectar Y Encender

Una vez que tenemos nuestra micro SD lista la insertamos en la Raspberry, conectamos el sombrero (no importa si no tenemos tornillos para sostenerlo, no vamos a hacer tanta fuerza), conectamos el ethernet y finalmente la energía que es el micro USB.

  • Si todo esta bien veremos que el led de Actividad (led verde) se enciende por unos instantes y se apaga, si el led verde se mantiene encendido es que hubo un problema y no puede leer la SD.
  • El led rojo del sombrero se encenderá tenuemente, esto signfinica que tiene energía.
  • Esperamos un poco más y veremos que el ethernet enciende con sus LEDs de actividad.

Esperamos un poco más a que termine de arrancar nuestra Raspberry Pi (aproximadamente 30 segundos en total).

Nuestra Raspberry Pi esta lista para usarse.

Step 3: Trabajando En La Raspberry Pi

Tenemos dos opciones para trabajar en nuestra Raspberry: Teclado y monitor o acceso remoto (yo recomiendo la segunda forma).

Teclado y monitor

Como su nombre lo dice, conectamos teclado y monitor, desde la consola podemos hacer todo, yo personalmente no recomiendo esto porque de todos modos tienes que leer este instructable desde un navegador :) la única excepción es si tienes un raton y accedes al escritorio de la Raspberry Pi para abrir el navegador.

Si esta es tu opción, solo ingresa las credenciales:

user: pi

password: raspberry

Si te sale una pantalla azul solo presiona la tecla ESC y entrarás en la consola de la Raspberry Pi, para arrancar el escritorio solo entras "startx", busca el navegador en la parte izquierda superior.

Acceso Remoto

Tenemos una gran ventaja al tener conectada la Rasp a un router, podemos accesar a la Raspberry por medio de protocolos basados en red, en específico por medio de Secure Shell (abreviado ssh), el cual se encarga de emular una terminal remota en nuestra computadora.

Esto tiene muchas ventajas, la más notable es que no necesitamos monitor ni teclado, solo una conexión ethernet y un router de intermediario.

(Nota: las siguientes instrucciones son para windows, si estas un sistema Linux o Mac puedes usar el comando ssh directamente en la consola, también puedes buscar la IP de la Raspberry con nmap http://security.stackexchange.com/questions/36198/... )

Conectandose a la Raspberry

Para poder conectarnos por ssh a la Raspberry necesitamos encontrar primero la IP de la Raspberry en la red, para esto necesitamos escaner la red, personalmente recomiendo este programa:

http://www.advanced-ip-scanner.com

Instalamos y ejecutamos, damos buscar y nos presentará la Raspberry con el nombre Raspberry Pi Foundation, anotamos la IP de la Raspberry.

Ahora descargamos e instalamos Putty para el SSH http://the.earth.li/~sgtatham/putty/latest/x86/put...

Ingresamos la IP de la Raspberry en el textbox de host, dejamos el puerto 22 (este es el puerto por default) y damos clic en "Open".

Inmediatamente preguntará por usuario (user), ponemos pi y posteriormente ponemos como contraseña raspberry (no respondera la consola, continua escribiendo normalmente, cuando termines presiona enter).

Listo! estamos en la Raspberry Pi.

Step 4: Instalando Dependencias

Entendiendo el I2C

Tenemos nuestro sombrero conectado, es hora de comunicarnos con él, esto se hace a través del puerto I2C (Inter Integrated Circuit), es un protocolo multipunto diseñado para la intercomunicación de varios chips a cortas distancias, típicamente en misma tarjeta de circuitos. (Puedes leer más aquí http://www.electroensaimada.com/i2c.html )

Instalando todo lo necesario

El código lo vamos a hacer en python, así que necesitamos instalar todo lo necesario para que python pueda usar el puerto I2C, realmente no necesitamos saber como conectar el I2C a los chips, esto es lo que nos ahorra el sombrero de Adafruit.

Ejecutamos los siguientes comandos en la consola:

  • sudo apt-get update
  • sudo apt-get install build-essential python-dev python-smbus python-pip git
  • cd Adafruit_Python_MPR121
  • sudo python setup.py install

Con esto habremos instalado el driver I2C de python y la librería de Adafruit para usar el sombrero.

Nota: El repositorio es un fork del repo de adafruit modificado por mi, el principal motivo son los umbrales de detección, los que vienen por default no aceptan bien las frutas, adicionalmente agrego el ejemplo de tonos MIDI, hice un pull request para que adafruit acepte mis cambios, aún no he recibido respuesta.

Habilitando el driver I2C

Con lo anterior hemos instalado el driver de I2C, ahora nos hace falta que el sistema lo cargue, para esto hacemos lo siguiente:

  • sudo nano /boot/config.txt
  • Agregamos al final la linea dtparam=i2c_arm=on (ver imagen)
  • Gudardamos con ctrl+o y cerramos con ctrl+x
  • sudo nano /etc/modules
  • Agregamosi2c-bcm2708 y i2c-dev en dos lineas separas (ver imagen)
  • Una vez más guardamos ctrl+o , ctrl+x
  • Reiniciamos con sudo reboot para que los cambios surtan efecto
  • Comprobamos que podemos ver el sombrero en la red I2C con el comando sudo i2cdetect -y 1 , deberá aparecer entre varias lineas un número 5a, esta es la dirección del sombrero en la red I2C (ver imagen)

Ejecutando un ejemplo

Ahora ejecutamos en la carpeta Adafruit_Python_MPR121 lo siguiente:

  • cd examples
  • sudo python simpletest.py

Veremos la leyenda "Adafruit MPR121 Capacitive Touch Sensor Test" en la consola, si tocamos en las partes donde tiene las perforaciones más grandes (y etiquetadas con numeros) veremos que el LED cerca del integrado enciende (detectando el evento) y en la consola nos identificará que número estamos tocando (ver imagenes).

Fuente:

http://www.raspberrypi-spy.co.uk/2014/11/enabling-...

Step 5: Probando Probando

Nota: Mi repositorio tiene los valores de umbral modificados, estan adecuados para que puedan detectar de forma más estable frutas medianas como duraznos, mangos y frutos de similar tamaño.

La ventaja de esta técnica de detección de toque es que no necesitas una linea de tierra, como lo puede necesitar el makey makey, aunque tiene sus desventajas, el sombrero capacitivo abre otras opciones.

Es importante considerar el tamaño del caimán, tienen que ser pequeños, cuando fuí a preguntar a las tiendas de electrónica, todos tenían caimanes grandes, esto no entran para nada bien, no los recomiendo.

Conectando las frutas

Ahora toma un caimán y conectalo a una fruta, después conecta el otro lado al sombrero (en el lugar que más te agrade), es importante conectar las frutas antes de iniciar el programa, si las conectamos posteriormete puede presentar comportamientos erróneos.

Ejecutando el programa correcto

El ejemplo simpletest.py es de Adafruit, el problema es que los umbrales de detección por default no son muy buenos para ponerle frutas, para esto vamos a usar un ejemplo modificado, el ejemplo se ejecuta así:

  • cd $HOME
  • cd Adafruit_Python_MPR121/examples/

  • sudo python simpletest_new_threshold.py

Este ejemplo aceptará mejor las frutas conectadas, en dado caso de que no sea así, busca la linea que dice: "cap.set_thresholds(50, 10)", cambia el valor de 50 y 10 para que se ajusten a tu aplicación (juega con los valores), el primer valor es el umbral de toque y el segundo el umbral de liberado.

Probando una sandía

Si intentamos conectar una sandía nos daremos cuenta de los detalles de esta técnica, una de ellas son las propiedades eléctricas de lo que conectamos, otro detalle es que la masa que conectemos para detectar introduzca una capacitancia similar a nuestro cuerpo, esto dificulta la detección de toque.

En conclusión, una sandía puede ser díficil de trabajar.

Durazno, Tuna, Mango y tamaños similares

Las frutas trabajan muy bien, sin oscilaciones y son perfectamente detectables, la que puede presentar dificultades al detectar el toque es la tuna, debido a que su cáscara es un poco seca, solo hay que asegurarnos que estamos conectando bien el caimán.

Step 6: Teclado De Frutas (tonos MIDIS)

Llego la hora de la diversión, el teclado con frutas.

Conectamos todas nuestras frutas al sombrero capacitivo, solo tenemos en cuenta lo siguiente a la hora de reproducir tonos:

  • Electrodo 11: Cambio de instrumento
  • Electrodo 10: Subir Tonos
  • Electrodo 9: Bajar tonos
  • Electrodos 0-8: Reproducir nota

Lo interesante de usar MIDIs en lugar de sonidos WAV es que podemos usar diferentes instrumentos y cambiar de tonos, sin necesidad de volver a generar nuevos archivos WAV.

Para ejecutar el ejemplo de teclado, primero necesitamos un sintetizador de tonos MIDI, el código de python solo manda comandos MIDI, necesitamos mandar estos comandos a un sintetizador que convierta commandos MIDI a sonido.

Para esto usaremos el sintetizador en software timidity, los instalamos de la siguiente forma:

  • sudo apt-get install timidity

Ahora lo ejecutamos en segundo plano, el parametro -iA significa que vamos a usar la interfaz de ALSA (Advanced Linux Sound Architecture), una interfaz estándar de audio en Linux.

  • timidity -iA &

Tenemos todo listo para ejecutar el teclado, en la carpeta de examples ejecutamos

  • sudo python midi_touch.py

Ahora podemos hacer un concierto con frutas.

Si quieres agregar más instrumentos puedes ir a la función "def midiExample():" y buscar el arreglo "instrument_array=[GRAND_PIANO,CHURCH_ORGAN,GUITAR,DRUMB,SAX,VIOLA,TROMBONE]", cabe señalar que los instrumentos en realidad son numeros, puedes consultar la equivalencia de instrumentos en la siguiente página:

http://www.skoogmusic.com/manual/manual1.1/Skoog-W...

No todos los instrumentos funcionan.

Para reproducir un tono simplemente damos dos números, un número que corresponde a la nota y otro número que corresponde al volumen, en el código en python esto es: "midi_out.note_off(i,127)" y "midi_out.note_on(i,127)", donde i es el tono y 127 es el volumen, puedes ver la correspondencia de números a tonos en la siguiente página:

http://www.electronics.dit.ie/staff/tscarff/Music_...

Lo mejor es que al finalizar este experimento puedes comerte la fruta.

Step 7: ¿Que Más?

Esta demás decir que el limite es la creatividad de quien lee esto, en la hoja de datos se explica como funciona el circuito integrado, los registros con los que cuenta y otros detalles técnicos, aquí solo les dejo una aplicación que la hoja de datos menciona.

https://www.sparkfun.com/datasheets/Components/MPR...

También agrego las notas de aplicación mencionadas en la hoja de datos:

http://cache.freescale.com/files/sensors/doc/app_n...

http://cache.freescale.com/files/sensors/doc/app_n...

http://cache.freescale.com/files/sensors/doc/app_n...

http://cache.freescale.com/files/sensors/doc/app_n...

Bueno, creo que es todo por el momento, cualquier comentario, correción o crítica es bien recibida.

Federico Ramos

tejonbiker.wordpres.com

@tejonbiker