Johnny-Five – programando Arduino en Javascript

sgier-johnny-five

Johnny-Five es un proyecto para aficionados al desarrollo web que empiezan a jugar con Arduino o para los que ya lo hacen y buscan integrar algún prototipo a una aplicación web, corre bajo un servidor Nodejs y esta pensado para programar Arduino en Javascript con ayuda del ya famosa “Firmata”.

A pesar de que en un inicio solo se tenia la intension de usarlo para la programación de Robots, la comunidad no tardo nada en empezar a buscarle otras maneras de explotar el proyecto, como la facilidad que nos da ahora para crear proyectos de hardware y agregarle ese gran plus que es el control a distancia a través de una aplicación web.

Veamos un poco de lo que podemos hacer…

Requerimientos:

- Arduino pre cargado con Firmata(File > Examples > Firmata > StandardFirmata)

- NodeJs y npm instalado, en nuestro post anterior te decimos como (Instalación de NodeJs)

- Johnny-five instalado, creamos un directorio,  Blinkerjs en nuestro caso y desde Terminal tecleamos.

cd Blinkerjs/
npm install johnny-five

Es importante hacer este ultimo paso dentro del directorio creado par la elaboración de nuestro proyecto de prueba, y básicamente con esto tendremos el entorno listo, probemos ahora un ejemplo báscio.

podemos agregar el código anterior en un archivo con extension .js y guardarlo en el directorio creado.

Suponiendo que vamos bien hasta aquí, que tengo mi Arduino conectado por USB y que mi archivo se llamo blink.js, ejecuto lo siguiente en Terminal.

node blink.js

tendríamos que estar viendo algo similar a esto:

Pero, ¿que con eso?, con Arduino lo hago y con mucho menos pasos, bueno pues en realidad esto es solo el principio y estoy seguro que todos aquellos que hagan algo de desarrollo web y mejor aun de Nodejs, estarán imaginando el gran alcance de este Framework.

Para darnos una idea aun mayor de lo que podemos hacer con Johnny-Five en HHMX preparamos un pequeño caso practico aunque algo rápido, ya que nos tomaremos tanto tiempo en explicar todo el código, es un poco de HTML y Javascript estoy seguro que encontraran suficiente información acerca de este tema. Lo primero sera bajarse los archivos de Github (.zip), necesitamos agregar un modulo mas a nuestro entorno:

 

cd Johnny-Five_Test

npm install http

e igual como lo hicimos en el ejemplo anterior ejecutar “node httpTest.js” y ya que este corriendo abrimos desde el navegador “index.html”.

Voila! control desde la web :) , parece sencillo no?, pues si, lo es!, ojalá tengan un poco de tiempo paras seguir jugando con esta Librería y se den cuenta ustedes mismo de las maravillas que podemos lograr, esperamos ver proyectos pronto!!!

Lección 25 – Arduino – LED’s RGB

Esta lección es algo sencilla pero muy interesante ya que trabajaremos con otro tipo de LED’s los cuales son llamados LED’s RGB que por sus siglas en ingles significan Red, Green, Blue. A primera vista parecieran ser LED’s común y corrientes pero no es así ya que con LED’s RGB podemos generar cualquier color resultado de la combinación de estos tres colores principales. Al controlar la intensidad de cada uno de los tonos podemos generar combinaciones y por ende el color que tu quieras.
Como dato general el modelo de color RGB está basado en una síntesis aditiva, lo que significa que podemos representar cualquier color por adición de los tres colores de luz primarios. Este modelo es muy utilizado en la actualidad en las pantallas de los televisores, computadoras, teléfonos, etc. Si pudiéramos acercarnos muy de cerca (tal vez con una lupa) a las pantallas podríamos ver la presencia de esto tres colores.

Circuito

La configuración del LED es la siguiente. En nuestro caso tenemos un LED RGB de Catodo común, esto significa que tenemos una tierra en común y esa tierra es para los tres tonos. Nota: En dado caso que consiguieran un LED de anodo común se debe de conectar a 5Volts en lugar de tierra.

En circuito tenemos conectadas resistencias de 270 ohms, esto con el objetivo de evitar que fluya mucha corriente por el LED y que se pueda quemar.

Evernote Camera Roll 20140415 183456

RGBArduino

Código

Instalación de NodeJs

nodelogo

Node.js es una plataforma de desarrollo Web que trabaja del lado del servidor ejecutando código en Javascript, un lenguaje muy popular en la elaboración de aplicaciones Web, NodeJs se ha convertido en uno de los favoritos por su enfoque en la programación asíncrona, proporcionando información únicamente cuando esta se actualiza y sin tener que hacer peticiones innecesarias algo que mejorar por mucho el rendimiento de nuestras aplicaciones en la nube.

¿Pero por que hablamos de ello en Hardware Hacking MX?, bueno pues en realidad NodeJs no solo se encuentra ganando terreno en el desarrollo de Software, si no también en la implementación de Hardware, al “correr” del lado del servidor nos da acceso a los diferentes periféricos de una computadora lo que incluyendo al puerto USB, que como ya sabemos es el medio de comunicación mas usado por las plataformas electrónicas con la que jugamos a diario.

Su instalación es muy sencilla, en la pagina oficial podemos encontrar ejecutables para los diferentes sistemas operativos (descargas):

nodedownloads

 

Para Windows y Mac solo hay que ejecutar el instalador y seguir los pasos en pantalla, para el caso de sistemas Linux se requieren algunos pasos extra, por esta ocasión describiremos como hacerlo en Ubuntu.

A partir de la versión 12.04 ya podemos encontrar el paquete en los repositorios, así que desde cualquier Terminal tecleamos:

Si por alguna razón no se encuentra el paquete de instalación o si cuentan con una version anterior, podemos seguir los siguientes pasos:

Para comprobar la correcta instalación podemos teclear en la misma terminal node –version y nos mostrara la version del paquete instalado, 0.10.26 hasta el día de hoy.

Adicionalmente la instalación incluye un gestor de paquetes llamado NPM que se incluye en NodeJs a partir de sus versiones mas recientes, podemos verificar su instalación capturando npm –version, y es todo!

Con esto tendremos preparado el terreno para un par de proyectos que tenemos pensados compartir en #HHMX :)

 

 

Lección 24 – Arduino – Optoacopladores

Los optoacopladores son componentes electrónicos que funcionan a manera de conmutador, interruptor o switch, básicamente se componen de un diodo LED que satura a  un elemento optoelectronico (de ahi su nombre), normalmente en forma de fototransistor o fototriac. Los podemos encontramos en empaquetados que combinan a estos elementos o a un arreglo de ellos.

opto01

 

Una de sus principales funciones es aislar circuitos electrónicos sensibles o de caracteristicas diferentes, como sucede cuando el voltaje de operación varia, un caso practico puede ser el control de relevadores o solenoides de gran voltaje de operación (de 12v a 36v) a través de un Arduino (5v).

Para este post hemos probado dos modelos, el 4N26 y el PC817 ambos muy similares aunque en diferente presentación.

optocoupler

la gran diferencia entre estos dos modelos, como se ve en la imagen, es que el 4N26 tiene un pin adicional desde donde podemos activar el fototransistor si así se desea e independientemente al estado del Led.

Existe gran variedad de este tipo de componentes, aunque el modo de implementarlos sigue siendo el mismo pueden diferir en el voltaje o amperaje que llegan a controlar o incluso en el tipo de corriente que pueden manejar, tal es el caso de los que incluyen un fototriac, que son capaces de trabajar con corrientes alternas.

Es importante que revisemos las hojas de datos ya que ahi encontraremos la información necesaria sobre cada uno de los modelos que existen en el mercado, ademas que es de gran ayuda a la hora de estar diseñando nuestros proyectos.

Bien! para verlos en acción tomaremos como base la siguiente imagen, y para un ejemplo simple usaremos el sketch del Blink que viene en el IDE del Arduino, haciendo una modificación en los delay a 10000 para notar aun mejor el funcionamiento.

opto002

Si no cuentan con un solenoide pueden usar cualquier elemento que requiera de un voltaje mayor a los 5V o igual pero alimentado con una fuente externa a la del Arduino, incluso puede ser un multimetro :)

IMG_1554

 

Lección 23 – Arduino – Nokia 5110 LCD

El LCD es uno de los componentes que no pueden faltar a la hora de crear proyectos “interactivos”, sin duda ya conocido por todos, aun y cuando no se tiene conocimiento de sistemas embebidos o electronica, los podemos encontrar en la gran variedad de dispositivos que operamos del día a día, teléfonos, microondas, estufas, refrigeradores, maquinas expendedoras, etc., monocromáticos o de color, siempre los vemos por ahí, ya que en gran medida, es gracias a estos componentes que podemos “comunicarnos” con los aparatos.

En esta ocasión usaremos el modelo de Nokia 5110, un modulo integrado monocromático de 84 pixeles de ancho y 48 de alto, veamos algunas de las cosas que necesitamos:

  • Arduino, por supuesto.
  • LCD Nokia modelo 5110 (Adafruit, Sparkfun)
  • 4 resistencias de 10kOhms
  • 1 resistencia de 1kOhms
  • 1 resistencia de 220Ohms
  • Cables (jumpers)
  • Protoboard

Una ves tengamos los componentes a la mano, podemos basarnos en el siguiente esquema para armar el circuito.

Nok01

La mayoría de los LCD de este modelo vienen con la misma configuración de pines, así que no deberíamos tener problemas al conectar, si algo resulta mal es probable que el fabricante de tu modulo haya cambiando algunos pines, podemos basarnos en la siguiente tabla para conectar correctamente.

 

Pin Label Función Descripción
1 VCC 3v3 El rango de voltaje aplicado puede variar entre 2v7 y 3v3
2 GND Ground
3 SCE Chip select Resistencia de 1k
4 RST Reset  Resistencia de 10k
5 D/C Mode select Resistencia de 10k
6 DN(MOSI) Serial data in Resistencia de 10k
7 SCLK Serial clock  Resistencia de 10k
8 LED LED backlight Voltaje máximo de 3v3 + resistencia de 220

Es importante que el pin de VCC este conectado al pin 3v3 de Arduino y las resistencias entre los pines, puesto que el voltaje de operación es menor al del Arduino.

Suponiendo que todo va bien hasta aquí, continuemos con el programa. Dentro de este modulo encontramos un controlador de Phillips modelos PCD8544, el cual maneja los datos de una manera similar a la comunicación SPI pero gracias a la gran comunidad que existe, podemos encontrar algunas librerías que nos facilitan el trabajo pesado de interpretar protocolos de comunicación, listamos algunas:

  1. PCD8544 Arduino library
  2. Adafruit LCD library (se requiere la libreria grafica GFX)
  3. h3r0 ejemplo (foro de Arduino)

Hemos probado las tres opciones y nos han funcionado a la perfección, ya depende de que tan complejo sean los gráficos que queramos mostrar, para nuestro caso tomamos la ultima y le agregamos nuestro plus, es mas sencilla de entender y no requiere ninguna otra librerías adicional.

cargamos el sketch a nuestro Arduino y en un momento estaríamos viendo el logo en pantalla.

la foto

 

Pasando imágenes personalizadas:

Para poder agregar nuestras propias imágenes a partir de Mapa de Bits (.bmp) hemos probado la aplicación de LCD Assistant, la cual nos crea un arreglo de bytes que corresponden los pixeles en pantalla, solo tenemos que configurar las magnitudes, 84×48 en nuestro caso.

LCDassist

 

La opción File -> Save output nos da el resultado en texto, y podemos copiar el arreglo y pegarlo en nuestro ejemplo para ver los cambios (linea 26 – char hhmx[]={ } ).

Y eso es todo, espero les sea de utilidad y podamos ver algunos proyectos a la luz muy pronto :)

 

 

 

Raspberry Pi compute module

Raspberry Pi es un proyecto conocido por muchos de nosotros, lo que empezó como un proyecto para enseñar a los niños computación que después se convirtió en un gran movimiento de makers y hackers formando una gran comunidad al rededor de el “Pi”. La imaginación de todas las personas usando un Pi es increíble, existen proyectos de todo tipo desde un dispensador de comida para gatos hasta kano (un proyecto para enseñar programación a niños).

Pero los creadores de Raspberry Pi no han parado ahí y se han dado cuenta de que su creación ha ido más allá de lo que ellos mismos imaginaron. Es por eso que ahora han decidido lanzar el “Raspberry Pi compute module” el cual está enfocado a todos los usuarios de nivel más industrial.

Actualmente hay muchos dispositivos que están usando el Pi como sistema embebido de sus proyectos o productos y es por eso que el Raspi se ha vuelto más abierto. Este nuevo modulo permitirá usar Raspberry Pi de una manera más optima en sistemas embebidos. El modulo contiene las entrañas de Raspberry Pi las cuales son un procesador BCM2835 con 512 MB de RAM además de una memoria flash de 4 GB la cual es equivalente a la memoria SD en la versión normal.

De esta manera ahora se tendrán acceso a más puertos GPIO y diseñar un modulo personalizado será mucho más fácil. Esto pone al Pi un paso adelante para la creación de sistemas embebidos ya que ahora además de ser popular es más abierto y flexible que antes. La verdad será muy interesante ver los proyectos que se cocinarán en los siguientes meses con este modulo. Aparte de modulo existe un Kit de desarrollo el cual se venderá aparte y aún no se conoce el precio pero lo que se sabe es que el modulo estará disponible a mediados de junio a un precio poco mayor a los 35 dlls.

Compute Module – First Look from Raspberry Pi Foundation on Vimeo.

Fuente: http://www.raspberrypi.org/raspberry-pi-compute-module-new-product/

BleepDrum un proyecto Open para músicos

Bleep-Drum es una Drum Machine basada en Arduino, fue fabricada  por BleepLabs una casa de música dedicada al diseño de variedad de instrumentos electrónicos y esta diseñada por Dr. Bleep uno de sus principales colaboradores, al estar inspirada en un proyecto Open sus fuentes se encuentran disponibles de manera abierta de igual manera.

Dentro de sus principales caracteristicas podemos encontrar:

- Cuatro sonidos (dos con control del “pitch”)
- Cuatro secuencias seleccionables
- Grabado de patrones solo para reproducción
- Tap tempo
- Modo reversa
- Modo “Hypernoise 30XX”
- Conector stereo de 3.5mm

Algo que a pesar de su reducido tamaño, le da bastante potencial para jugar :)

BleepDIY

En Hardware Hacking MX nos gusta la idea de trabajar con proyectos de todo tipo y para todos genero, así que nos pusimos a jugar un poco con esta maravillosa herramienta y por supuesto, la hicimos nosotros mismos :)

El proceso es sencillo, en los siguiente enlace podrán descargar los archivos en EagleCAD, modificados para hacer de su elaboración casera mucho mas fácil, básicamente le quitamos las “vias” del diseño original, algo que la hace imposible de replicar en casa y movimos algunos componentes para mejorar las rutas.

Diagramas EagleCAD + PDFs

Si recuerdan en uno de nuestros “post” anteriores se describe una de los métodos mas comunes para la elaborar en casera de PCBs (Fabricacion casera de PCBs), así que por que no tomamos esta guía, una ves que hayan descargado los esquemas hay que imprimir los PDFs y seguir los pasos.

Ya echa la PCB, lo siguiente es conseguir los componentes, en seguida se muestra una lista de lo que necesitamos:

Componente Cant.
ATMEGA328 Arduino bootloader 1
MCP4901 1
78l05 1
DIP socket 14 pins 1
DIP socket 8 pins 1
Resonator 16MHz 1
Potenciometro 10k o 20k 2
Botones push 12mm 4
Botones push 6mm 1
Condensador 10uf – C1 1
Condensadores 100uf – C2 y C5 2
Resistencias 1k 5
Led RGB 1
Conector jack 3.5mm 1
Switch SPTD 1
Porta bateria 9v 1

Un par de cosas que hay que saber antes de empezar. Los sockets van soldados antes que los circuitos integrados, ATMEGA328 y MCP4901, en nuestro caso, para que en caso de alguna falla se puedan remover estos componentes con facilidad, las resistencias son todas del mismo valor, pero el led RGB puede llevar hasta valores de 22o ohms como mínimo y los condensadores tienen polaridad, así que recomiendo abrir el esquema de la PCB en Eagle para ver las descripciones de los componentes y el como ubicarlos.

Listo lo anterior tenemos que cargar el sketch de Arduino al microcontrolador, en el siguiente enlace podemos encontrar las fuentes. Es importante que la version de Arduino que vayamos sea la Duemilanove o la Uno (no SMD) ya que son las que nos permiten extraer el microcontrolador para montarlos en nuestra propia PCB, y seria todo, no se requiere nada adicional, cargamos como lo hacemos con cualquier otro programa.

Bleep Drum sketch

Para terminar, soldamos…

Existe otro proyecto llamado Dam Drum de la misma casa que desarrollo Bleep Drum y que afortunadamente comparte el mismo hardware,  así que podemos cambiar el sketch para probarlo, así podemos incrementar nuestra colección de sonidos y agregarle horas al juego.

Dam Drum sketch

Espero se animen a construir el suyo y pronto nos compartan algunos loops :)