Estación meteorológica

Proyecto en el que a través de un barómetro y un termómetro se puede realizar una predicción del tiempo.

Arduino y Nokia 5110

Mediante un arduino y una pantalla de un Nokia 5110, se consigue crear cosas muy curiosas.

Tipos de Arduinos

Información acerca de los distintos Arduinos que podemos encontrar en el mercado.

Definiciones y Conceptos

Aquí se pueden aprender conceptos básicos sobre la plataforma Arduino.

Dónde adquirir productos (Proximamente)

En esta sección se podrá obtener información de las distintas páginas donde se puede comprar hardware.

viernes, 18 de octubre de 2013

Arduino meets Android, primer ejemplo

¿Qué nos puede ofrecer Arduino junto con Android?



Una de las principales aportaciones que nos da la integración de Arduino con Android es que podemos conseguir proyectos de domótica muy llamativos a la vez que son de muy bajo coste. Android consigue proporcionar una interfaz gráfica para todas las operaciones que puede realizar Arduino. Por ejemplo, en este tutorial vamos a configurar el color de un led RGB desde una aplicación. Toda la comunicación se hará a través de Bluetooth utilizando una librería llamada Amarino. Nos ponemos manos a la obra.

¿Qué necesitamos?


  • Módulo de Bluettoth JY-MCU, utiliza una comunicación serie con Arduino y es por esto por lo que su pin TX se conecta al RX de Arduino y viceversa.
  • Led RGB, que nos servirá para poder representar los colores que se muestran en el seekbar de la aplicación de Android.
  • Resistencias de 330 Ohm para los pines del led RGB.

¿Cómo conectarlos?




El módulo de Bluetooth JY-MCU tiene que estar conectado de esta forma:
  • RX: conectado al pin 1 de Arduino (TX)
  • TX: conectado al pin 0 de Arduino (RX)
  • GND: conectado directamente a GND
  • VCC: conectado directamente a 5V

El Led RGB de esta forma:

  • Pin Red: conectado a una resistencia de 330 Ohm y luego al pin 11
  • Pin VCC: conectado directamente a 5V
  • Pin Blueconectado a una resistencia de 330 Ohm y luego al pin 10
  • Pin Greenconectado a una resistencia de 330 Ohm y luego al pin 9

Vídeo




¿Y nuestro código?


Android

Primero tendremos que agregar este jar (AmarinoLibrary_v0_55.jar) a la carpeta "libs" de nuestro proyecto, puede ser que esta carpeta no esté por lo que tendremos que crearla.

El código de Android se basa en el proyecto que podemos encontrar en este enlace. Ese ejemplo tiene un pequeño bug que se soluciona sustituyendo esta línea de código de la clase MultiColorLamp:
colorIndicator.setBackgroundColor(Color.rgb(redgreenblue));
Por esta otra:
colorIndicator.setBackgroundColor(Color.rgb(255 - red, 255 - green, 255 - blue));
Además para hacer que funcione correctamente hay que setear el DEVICE_ADDRESS con el de nuestro módulo.
private static final String DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX";
Por último también tendremos que instalar estas dos aplicaciones:

Arduino

Este tutorial se basa en el ejemplo que proporciona la librería de MeetAndroid, simplemente vamos a cambiar dos detalles para que funcione correctamente con nuestro módulo. El código es el siguiente:


#include <MeetAndroid.h>

// Declaramos el objeto de MeetAndroid para establecer la comunicación
MeetAndroid meetAndroid;

// Necesitamos 3 pines PWM para controlar los pines del led RGB
int redLed = 11;   
int greenLed = 10;
int blueLed = 9;

void setup()  
{
  // Para nuestro Bluetooth utilizaremos 9600 baudios 
  Serial.begin(9600); 
  
  // Registra las funciones de callback las cuales se llamarán cuando un evento asociado ocurra
  meetAndroid.registerFunction(red, 'o');
  meetAndroid.registerFunction(green, 'p');  
  meetAndroid.registerFunction(blue, 'q'); 

  // Seteamos todos los pines como salidas
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  
  // Seteamos todos los pines en HIGH para ver si funcionan correctamente
  digitalWrite(redLed, HIGH);
  digitalWrite(greenLed, HIGH);
  digitalWrite(blueLed, HIGH);

}

void loop()
{
  meetAndroid.receive();  // Necesitamos mantenerlo en loop para recibir eventos
}

/*
 * Cuando se modifique el seekbar de color rojo cambiará el valor del pin rojo
 */
void red(byte flag, byte numOfValues)
{
  analogWrite(redLed, meetAndroid.getInt());
}

/*
 * Cuando se modifique el seekbar de color verde cambiará el valor del pin verde
 */
void green(byte flag, byte numOfValues)
{
  analogWrite(greenLed, meetAndroid.getInt());
}

/*
 * Cuando se modifique el seekbar de color azul cambiará el valor del pin azul
 */
void blue(byte flag, byte numOfValues)
{
  analogWrite(blueLed, meetAndroid.getInt());
}

miércoles, 16 de octubre de 2013

Intel y Arduino forman: Intel Galileo

¿Qué es Intel Galileo?




Es una placa basada en un microcontrolador de Intel, concretamente en el Intel® Quark SoC X1000, con una CPU de 32 bits de un solo núcleo, con un solo hilo y set de instrucciones Pentium que puede llegar hasta los 400 MHz. Su datasheet podemos encontrarlo en el siguiente enlace. Es la primera placa que se diseña bajo la arquitectura de Intel pero dando soporte en cuanto a hardware como software para shields de Arduino Uno R3. La localización de los pines son iguales que en el Arduino Uno R3 por lo que tendremos una placa con un sistema totalmente distinto pero que a la vez nos resultará tan familiar como nuestro típico Arduino.

Con este tipo de placas podemos conseguir desarrollar productos de domótica a bajo coste ya que nos daría toda la potencia de computación de un PC con un consumo mínimo.
 

Especificaciones de Hardware, puertos y pines





En principio se puede conectar mediante un adaptador de 5V que transforma de AC a DC, pero también se puede conectar con un cable micro USB como el caso de Raspberry Pi.

Un detalle a destacar es que las shields de Arduino UNO son compatibles con las de Intel Galileo ya que están diseñadas para soportar 3,3V o 5V. 

A grandes rasgos, en esta placa nos podemos encontrar:

  • Un bus I2C, TWI: Los pines de SDA y SCL que están cerca del pin de AREF.
  • 14 pines digitales de entrada/salida, de los cuales 6 pueden ser usados como salidas PWM. Es importante destacar que estos pines operan entre 3,3 y 5 V con un máximo de 10 mA como salida o recibir como máximo unos 25mA y tienen una resistencia en pull-up (desconectada por defecto) de 5,6k a 10kOhms.
  • 6 pines analógicos que utilizan un conversor analógico/digital, cada pin tiene 12 bits de resolución (0 - 4095). Por defecto las medidas son desde 0 a 5V.
  • UART (puerto serie): A través de los pines 0 (RX) y 1 (TX).
  • ICSP (SPI): Un zócalo de 6 pines para ICSP (In-Circuit Serial Programming), localizado a propósito para conectar shields ya existentes. Estos pines soportan comunicación SPI usando la librería de SPI.
  • VINLa tensión de entrada a la tarjeta Galileo cuando se utiliza una fuente de alimentación externa (por oposición a 5V de la fuente de alimentación regulada que está conectada a la toma de alimentación). Se puede suministrar tensión a través de este pin.
Advertencia: El voltaje aplicado a este pin debe ser una alimentación de 5V regulada de lo contrario podría dañar la placa o provocar un funcionamiento incorrecto.
  • Pin de 5V: Este pin proporciona 5V desde una fuente exterior o desde el conector USB. La máxima intensidad es de 800mA
  • Pin de 3.3V: Un pin que proporciona 3.3V generados por un regulador en la placa. La máxima intensidad es de 800mA.
  • GND: Pin de tierra ó a 0V.
  • IOREFsirve para que la placa reconozca el tipo de alimentación que requieren las shieds (3.3v ó 5v)
  • Botón o pin de RESET: Resetea la placa para la carga de un sketch o cualquier tipo de problema.
  • El AREF no se usa en Galileo. La proporción de una referencia externa de voltage para las entradas analógicas no está soportado. Por tanto la función de analogReference() carece de sentido.

Características soportadas por la arquitectura Intel


  • Set de instrucciones de Intel Pentium compatibles con la arquitectura ISA que puede llegar hasta los 400MHz y con 16KB para un nivel de caché.
    • 512 KBytes de SRAM
    • Programación muy simple: Un único hilo, un único núcleo, velocidad constante
    • Integrado un RTC (Real Time Clock)
  • Conector Ethernet 10/100
  • Un slot de Full PCI Express con PCIe 2.0 con estas características:
    • Trabaja con tarjetas mini PCIe, opcionalmente con un conversor.
    • Proporciona un puerto USB 2.0 en el conector mini-PCIe.
  • Un conector USB 2.0, usado para programar la placa
  • Una socket de 10 pines JTAG Standard para poder hacer debug.
  • Un botón de re-arranque.
  • Un botón de reset para resetear cualquier sketch cargado en la placa.
  • Opciones de almacenamiento:
    • 8MB SPI Flash cuyo principal propósito es el almacenamiento del firmware (o bootloader) y el último sketch. Entre 256KB y 512KB son dedicados para el almacenamiento del sketch. La descarga se hará directamente desde el PC en el que se esté desarrollando.
    • 512KB para una SRAM embebida, habilitada por el firmware por defecto
    • 256MB de DRAM, también habilitada por defecto.
    • Un slot para SD de hasta 32 GB de almacenamiento
    • El almacenamiento a través de USB es compatible con USB 2.0

¿Cómo podemos programarla?


Puede ser programada con el Software de Arduino. Cuando estés preparado para subir tu "sketch" a la placa solo tendrás que seleccionar el tipo de dispositivo que en este caso será "Intel Galileo". Para más detalles sería aconsejable ver la guía de inicio. En ocasiones puede ser que se precise del pulsado del botón de reset antes de la subida del código.


¿Cuando estará disponible?


Estará disponible comercialmente a partir de noviembre, y mientras Intel distribuirá 50.000 Galileos entre 1.000 universidades de todo el mundo durante los próximos 18 meses. De esta forma intentarán extender su uso y convertirse en un nuevo estándar. Su precio es una incógnita todavía.

domingo, 13 de octubre de 2013

Detector de presencia con Ultrasonidos y buzzer

Introducción

En este tutorial vamos a medir la distancia de objetos mediante ultrasonido. Además dicha distancia se mostrará en una pantalla LCD de un Nokia 5110 y cuando sea menor de 10 cm se activará un buzzer como alarma que nos indicará que se ha vulnerado la distancia mínima.

¿Qué necesitamos?

  • LCD de Nokia 5110
  • Buzzer
  • Un Módulo sensor ultrasonidos HC-RS04, se puede encontrar en Dealextreme por unos pocos dólares.
  • Arduino UNO o similar

Librerías necesarias

  • HC-SR04, esta librería ya nos proporciona todo lo necesario para medir distancias y hasta incluso el tiempo que tarda el sonido en ir y volver.
  • Adafruit para LCD de Nokia 5110 y Adafruit GFX, es posible que si utilizáis el IDE 1.0.5 de Arduino la carga de la librería os de problemas. Para solucionarlo simplemente tenemos que borrar la librería de Robot_Control, si tenéis algún tipo de problemas no dudéis en comentarlo en el post.

Montaje


El montaje de la parte de la pantalla LCD lo podemos encontrar en esta entrada del blog: Empezando con Nokia 5110 y Arduino, recordad que la pantalla se alimenta con 3,3V NO con 5V.

El sensor de ultrasonidos solo tiene 4 pines:
  • VCC: colocado directamente a 5V
  • Trig: colocado directamente al pin 10 de Arduino.
  • Echo: colocado directamente en el pin 13.
  • GND: directamente a GND proporcionado por Arduino.
El buzzer:
  • GND: directamente a GND de Arduino.
  • Pin positivo: colocado en el pin 9 con una resistencia de 330 ohm.


Código

Cabecera:

Se incluyen las librerías a utilizar y se definen tanto el display LCD como el sensor de ultra sonido.
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Ultrasonic.h> 
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 3 - LCD reset (RST)
// pin 4 - LCD chip select (CS)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 3, 4);
Ultrasonic ultrasonic(10,13); // (Trig PIN,Echo PIN)
int BUZZER = 9; 

Setup:

Se establece la comunicación, inicialización y se establece el contraste del LCD.
void setup()   {
  Serial.begin(9600);
  display.begin();
  // Inicializacion completada
  // Cambia el contraste para una mejor visualizacion
  display.setContrast(50);
  display.display(); // Muestra el splashscreen de Adafruit
  delay(2000);
  display.clearDisplay();   // Limpia la pantalla y el buffer de comunicaci´n

  pinMode(BUZZER, OUTPUT); // Se establece como salida el pin 9 para el buzzer

  //Sonidos de configuracion del buzzer
  beep(20);
  delay(1000);
}

Funciones de escritura y emisión de sonidos:

  • La función beep(int frec) recibe como parámetro la frecuencia del sonido y simplemente lo escribe en el pin 9 que está conectado al pin positivo del buzzer.
  • La función write(int value) recibe como parámetro el valor en cm que se mostrará por el LCD.
void beep(int frec){

analogWrite(BUZZER, frec);      // Permite cualquier valor entre 0 y 255, donde 0 indica la ausencia de sonido
}
void write(int value) {

  display.clearDisplay();
  String valueString = String(value);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);

  if(value < 10) {
 
    display.println("Dist.: " + valueString + "  cm");
    display.println("Peligro!");
    display.display();
    beep(20);
  } else {
 
    display.println("Dist.: " + valueString + " cm");
    display.display();
    beep(0);
  }

Vídeo



sábado, 12 de octubre de 2013

Definición y usos de Raspberry Pi

¿Qué es Raspberry Pi?

Raspberry Pi es un ordenador de placa reducida (SBC) de bajo coste desarrollado en Reino Unido por la Fundación Raspberry Pi, con el objetivo de estimular la enseñanza de ciencias de la computación en las escuelas.



Un poco de Historia

En 2006 ya existían diseños de esta pequeña placa y portaba un microcontrolador Atmel, concretamente el ATMega644 (familia de microcontroladores que posee Arduino). Estos primeros esquemas están totalmente abiertos y se pueden acceder a ellos sin ningún tipo de problemas.

En mayo de 2009, la Fundación Raspberry Pi fue fundada en CaldecoteSouth CambridgeshireReino Unido como una asociación caritativa que es regulada por la Comisión de Caridad de Inglaterra y Gales. Hay que destacar que esta fundación es totalmente sin ánimo de lucro, y citaré una entrada de su FAQ que habla sobre esto para que veáis hasta donde llega esta comunidad.

Can I buy shares in the Raspberry Pi Foundation?We’re a charity, so you can’t buy shares in the company. If you want to support us, we’d love you to buy one.

Especificaciones de Hardware


  • CPUARM1176JZF-S a 700 MHz (familia ARM11) perteneciente a la versión 6, por lo que puede soportar RISC OS
  • GPU: Broadcom VideoCore IV, es capaz de reproducir vídeos en 1080p a 30fps. Hay reviews sobre esta placa que dicen que hasta puede asimilarse a unos gráficos de la primera XBOX
  • RAM: Tiene una versión de 256MB (modelo A) y una de 512MB (modelo B). Comparte una parte de la memoria con la GPU
  • Salidas de vídeo, HDMI y audio
  • 1/2 Puertos USB dependiendo el modelo
  • Puerto Ethernet (sólo el modelo B)
  • Consumo energético 500 mA y 2,5W en su modelo A y 700mA y 3,5W en el modelo B
  • Alimentación de 5V por el puerto micro USB



Sistemas Operativos Soportados


  • Android, testeada hasta la versión 4.0
  • Arch Linux ARM
  • Debian Whezzy Soft-Float, versión de Debian sin soporte para coma flotante por hardware
  • Firefox OS
  • Gentoo Linux
  • Google Chromium OS
  • Kali Linux

  • Open webOS

  • PiBang Linux , distribución Linux derivada de Raspbian con diferente escritorio y aplicaciones
  • Pidora, versión Fedora Remix optimizada
  • QtonPi, distribución linux con un framework de aplicaciones multiplataforma basado en Qt framework
  • Raspbian, versión de Debian Wheezy para ARMv6 con soporte para coma flotante por hardware
  • Slackware ARM, también conocida como ARMedslack
  • Raspbmc (Media Center)

¿Qué podemos hacer con Raspberry Pi?

Android y XBMC

Lo más típico que podemos hacer con nuestro pequeño ordenador es crear un Media Center con OpenELEC o con Raspbmc con el fin de poder ver nuestras películas desde cualquier sitio y sin la necesidad de tener conectado toda una torre a nuestro TV. Un ejemplo de este uso es el siguiente vídeo:




Raspberry Pi y Ambilight

Otro de los usos que está tomando fuerza es la posibilidad de crear un sistema de luces Ambilight de bajo coste y en sencillos pasos, no tenemos más que crear una malla de LED's conectados a Raspberry Pi, ponerlos detrás de nuestro TV y ya ella se puede encargar del resto. Un ejemplo de este uso es el siguiente vídeo. Si queremos realizar este montaje podemos seguir los pasos proporcionados por los proyectos de PiBob o AmbiPi.


Domótica y Raspberry Pi

Además de todo esto también podemos crear nuestro pequeño servidor para gestionar por ejemplo las luces de casa. Yo recomiendo utilizar una Raspberry Pi y un Arduino y tratar siempre a Arduino como un "Actuador", ya que será el encargado de la parte más electrónica y utilizar a Raspberry como "Servidor" o cabeza pensante. Un ejemplo de esto podemos verlo en el siguiente vídeo basado en PiHome:


¿Dónde podemos comprarla?

Hay distintas webs de venta de componenetes que permiten la distribución de Raspberry Pi, algunas de estas webs son RS Componentes, Farnel, Electan, Cooking Hacks, etc.

El precio puede oscilar entre unos 35$ el modeelo B y 25 $ el modelo A. Además se venden muchos periféricos como GPS, Bluetooth, WiFi, cámaras capaces de grabar en Full HD a 30 fps y hacer fotos con una resolución de 2592x1944, etc.