Review del Multicoptero UFO de 4 canales, 2.4Ghz. Para empezar en el radio control “con bajo presupuesto”

El día de hoy les voy a presentar la nueva nave que se ha sumado a mi flota de micro multicopteros a control remoto. Es un multicóptero UFO Y4, con control de 4 canales, a 2.4Ghz de frecuencia. Este multicoptero lo pueden encontrar en www.tmart.com, a un excelente precio, tomando en cuenta todo lo que incluye.

DSC00513

Este multicóptero viene empacado de tal manera, que llega totalmente protegido del maltrato que pudiera soportar durante el viaje desde la China. La caja no es demasiado grande (para evitar en lo posible costos en aduana), pero tiene suficiente espacio para proteger al multicóptero, al control remoto y a sus accesorios.

Dentro del paquete, se incluyen los siguientes items:

  • Multicoptero UFO Y4
  • Control remoto de 4 canales, programable
  • 2 baterias LiPo de 1S 300mAh
  • Cargador de baterias USB
  • 3 Hélices de repuesto
  • Manual de usuario

Lo único que debemos comprar antes de volar, son 4 baterías AA para el transmisor. Éste funciona sin problemas con baterías alcalinas. Hay que tomar en cuenta, el momento de desempacar el multicóptero, que las baterías, el cargador y los repuestos, se encuentran en una pequeña cajita en la parte trasera del soporte interno de la caja.

DSC00514

 

DSC00516

 

DSC00518

 

Como les comentaba, este multicóptero tiene una configuración Y4, es decir, lleva forma de Y, con 3 ejes de rotores, pero en la parte delantera tiene 2 motores que giran en sentido contrario para mantener la estabilidad.

DSC00683

DSC00685

 

Algo super práctico, especialmente para los principiantes, es que éste multicoptero tiene una armadura protectora que cubre las hélices, motores y electrónica del equipo. Con esto estamos relativamente a salvo de roturas en las hélices por choques contra paredes y obstáculos. La armadura es muy liviana y resistente, lo que contribuye a que la experiencia de vuelo sea muy buena, y para nada frustrante, como sucede con otros tipos de multicópteros.

En la parte inferior, se encuentra el soporte para las baterías, el cual las asegura para que no se caigan durante el vuelo. Además, en la parte inferior, se encuentra toda la lógica de control, receptor y giroscopios que hacen que el UFO se estabilice solo en el aire.

DSC00686

 

DSC00687

 

El transmisor es una versión mas pequeña de lo normal, de un transmisor de RC. Tiene 4 canales, un LCD bastante grande, pero poco útil, y 2 botones que sirven para seleccionar el modo de vuelo (Lo / Hi Rates) y el modo acrobático, donde el multicoptero realiza giros sobre sus ejes al movimiento de los controles. Ojo con este modo!!, puede causar un serio golpe si no se lo realiza en un lugar con el espacio adecuado. Los controles del transmisor son super suaves, el control es super liviano, en parte porque solo necesita 4 baterías AA, y tiene trims digitales, lo cual es un extra para un equipo de este precio.

Después de unos días de prueba de este multicoptero, podemos resumir sus características en lo siguiente:

Pros:

– Buen empaque protector, y disponibilidad de envío desde EEUU o China
– No se ve como un producto barato. Los acabados del multicoptero y del transmisor son excelentes. Las palancas del transmisor son suaves y precisas.
– El transmisor usa solo 4 baterías AA, y adicionalmente tiene un puerto USB que permite cargar al multicóptero (para esto se necesitan baterías recargables en el transmisor)
– El multicóptero es super estable gracias a sus giroscopios y sistemas de control. Lo hace muy facil de volar para principiantes
– En el paquete viene incluido todo, incluso hélices de repuesto
– Excelente precio (USD. $47, incluido el envío desde la china)
– Puede volar en exteriores, con viento moderado

Contras:

– En el sitio web del distribuidor, no existen partes de repuesto listadas. Pero en ebay se puede conseguir facilmente
– La estructura protectora es también la estructura mecánica del multicóptero. Un golpe extremadamente fuerte podría romperlo y destruir la unidad

Que tal vuela se preguntarán? Les dejo un pequeño y accidentado video de las pruebas. Cabe recalcar que despues de unas 2 semanas de vuelos en interiores y exteriores, el multicoptero sigue como nuevo!

 

 

Usando un LCD nokia 5100 con el Stellaris Launchpad

Ha pasado mucho tiempo apagado el pequeño Stellaris Launchpad, y por eso, aprovechando que tuve un poco de tiempo libre el fin de semana, decidí jugar un poco con él.

En esta ocasión, he conectado un LCD Nokia 5100 que tenía por ahí, y he armado un pequeño voltímetro digital.

Primero, hay que descargar la librería lcd_5100 e instalarla dentro de nuestra carpeta de Energia, en la ruta energia\hardware\lm4f\libraries. Esto debemos hacerlo antes de abrir Energia, para que al iniciar la aplicación, se instale la librería para poder ser usada por nuestro Launchpad

Para la conexión del Launchpad con el LCD, vamos a usar los siguientes pines:

  • Backlight: PA6
  • SCLK: PA3
  • MOSI: PA5
  • DC: PA2
  • RST: PB5
  • SCE: PA7

y el código fuente para el Stellaris es el siguiente:

// ejemplo para uso del display nokia 5100
/*
Pines usados en el display

led:   PA6
SCLK:  PA3
MOSI:  PA5
DC:    PA2
RST:   PB5
SCE:   PA7

*/

#include "Energia.h"
#include 
#include "LCD_5110.h"
#include 

// Variables
LCD_5110 myScreen;
boolean	backlight = false;
uint8_t k = 0;

// Add setup code
void setup() {
    myScreen.begin();

    myScreen.setBacklight(backlight);
    myScreen.setFont(0);
    myScreen.text(0, 0, "Launchpad ADC.");
    myScreen.setFont(0);
    myScreen.text(0, 1, "--------------");

    delay(1000);
    myScreen.text(0, 5, "Backlight off");
}

// Add loop code
void loop() {
    int analog=analogRead(A0);
    double valorReal = (analog-1093)/318.79;
    String valor=floatToString(valorReal, 3);
    if (myScreen.getButton()) {
        backlight = (backlight==0);
        myScreen.setFont(0);
        myScreen.text(0, 5, backlight ? "Backlight on " : "Backlight off");
        myScreen.setBacklight(backlight);
    }

    myScreen.setFont(1);

    myScreen.text(0, 2, valor);
    myScreen.setFont(0);
    for (uint8_t i=0; i<14; i++) myScreen.text(i, 4, (i==k) ? "*" : " ");
    k++;
    k %= 14;

    delay(100);
}

String floatToString(double number, uint8_t digits) 
{ 
  String resultString = "";
  if (number < 0.0)
  {
     resultString += "-";
     number = -number;
  }
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)     rounding /= 10.0;      number += rounding;   unsigned long int_part = (unsigned long)number;   double remainder = number - (double)int_part;   resultString += int_part;   if (digits > 0)
    resultString += "."; 

  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    resultString += toPrint;
    remainder -= toPrint; 
  } 
  return resultString;
}

El ejemplo es bastante sencillo. Lo único adicional que he tomado de un ejemplo en C, es la conversión de Double a String, para mostrar el valor convertido desde el ADC en el LCD.

Y dado que una imágen vale mas que 1000 palabras, les dejo la prueba del funcionamiento.

IMG_20130914_130648

Si desean visualizar el código fuente en Codebender, pueden utilizar este enlace

Arduino GSM Shield: Comunicando tu arduino con el mundo exterior

Si como yo, has estado jugando un poco con tu Arduino, tarde o temprano llega un momento donde es necesario conectarlo al mundo exterior. Lo mas usual es conectarlo mediante Ethernet o WiFi si te dá el presupuesto, para poder enviar información hacia el mundo exterior.

Pero estas no son las únicas opciones de comunicación. En esta ocasión, vamos a revisar el Shield GPRS/GSM EF-Com fabricado por la Elekfreaks, y distribuido por www.dx.com.

Este shield, permite que nuestro arduino opere como un teléfono GSM, obviamente debiendo programar todas las funciones del mismo. Dentro del hardware de este shield, podemos encontrar los siguientes dispositivos:

  • Modem GSM/GPRS basado en el chip SIM900
  • Conectores de entrada y salida de audio (para realizar o recibir llamadas)
  • Reloj RTC, con batería de respaldo
  • Varios pines de GPIO libres controlables  mediante comandos AT
  • Opción para conexión RS232 via hardware o software

Contenido del paquete

Al recibir el paquete, pude notar inicialmente, que el empaque era bastante grande para un shield de Arduino, por lo que definitivamente debía tener varios items en su interior. Dentro del paquete, al abrirlo pude encontrar:

  • Shield GSM / GPRS
  • Antena externa
  • Adaptador de 9V / 1A
  • Display Nokia 5100 con backlight Azul

DSC00285

 

DSC00286

 

DSC00291

 

El display es un extra inesperado. En el sitio web no indica que se incluye este display, pero el Shield tiene un header instalado propiamente para éste. Es un extra que da valor agregado al producto.

Operación

El adaptador de 9V es necesario, porque alimentando directamente al Arduino y al Shield desde el puerto USB, éste no alcanza a proveer la corriente necesaria para su operación. Según el fabricante, el módulo en picos de consumo de corriente, puede superar 1A facilmente.

Algo a tomar muy en cuenta, es la posición del display LCD en el shield. Lastimosamente no existen marcas del Pin 1 del header, y en el Wiki del fabricante, menciona que el LCD con backlight azul (existen 2 versiones, una con backlight azul y otra con backlight blanco) debe ir como se muestra en las fotos, con el display sobre el chip SIM900. Esta posición es incorrecta, ya que el display con backlight azul debe ir montado en la posición exterior del Shield. Esto lo veremos en las imágenes posteriores.

Programación

Como lo mencionabamos, el Shield GPRS funciona como un modem GSM serial, es decir, para su uso, únicamente requerimos los pines Rx, Tx y Gnd del puerto serie de nuestro arduino, o de un puerto serial por Software, en los pines que nosotros definamos

Tomando en cuenta esto, vamos a programar un pequeño Sketch, que ejecutará las siguientes tareas:

  1. Mostrará un mensaje de bienvenida en el LCD Nokia 5100
  2. Esperará un caracter en el puerto serial del Arduino
  3. Mediante un Puerto Serial de Software inicializará la comunicación con el Shield GSM
  4. Enviará un mensaje de texto (SMS) a un número colocado en el software

El código que vamos a usar en nuestro arduino es el siguiente:

#include <"lcd5110_graph.h">
#include <"softwareserial.h">

LCD5110 myGLCD(9,10,11,12,13);

extern uint8_t SmallFont[];

#define rxPin 2
#define txPin 3

SoftwareSerial mySerial(rxPin, txPin);

char *init1="AT+IPR=19200";  // configuracion del modulo para 19200bps
char *init2="AT+CMGF=1";  // configuracion para modo ascii 
unsigned char CR=13; // caracter de retorno de linea
void setup()
{
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);

  mySerial.begin(19200);                 // Velocidad de conexion por defecto del Shield  
  Serial.begin(19200);                  // Velocidad del puerto serie
  Serial.println("Conexion Serial Ok.");

  myGLCD.clrScr();
  myGLCD.print("Prueba del", CENTER, 0);
  myGLCD.print("GPRS Shield   ", LEFT, 12);
  myGLCD.print("patolin.com   ", LEFT, 30);
  myGLCD.update();
}

void loop()
{
  // inicializamos el shield

      mySerial.write(init1);
      mySerial.write(CR);
      delay(1000);
      mySerial.write(init2);
      mySerial.write(CR);
      delay(1000);

  myGLCD.clrScr();
  myGLCD.print("SMS", CENTER, 0);
  myGLCD.print("Esperando", LEFT, 12);
  myGLCD.print("caracter al ", LEFT, 24);
  myGLCD.print("RS232", LEFT, 36);
  myGLCD.update();

  // esperamos un caracter cualquiera en el puerto serie

  if (Serial.available()) {
      if (mySerial.available()) Serial.write(mySerial.read());
      // limpiamos el buffer de lectura
      Serial.read();

      // enviamos el sms
      myGLCD.clrScr();
      myGLCD.print("SMS", CENTER, 0);
      myGLCD.print("Enviando....", LEFT, 12);
      myGLCD.update();

      mySerial.write("AT+CMGS=\"099XXXXXXX\""); // reemplace por el numero de celular de destino  
      mySerial.write(CR);
      delay(1000);
      mySerial.write("Prueba de SMS desde Arduino!");  
      mySerial.write(CR);
      delay(1000);
      mySerial.write(26);  // Ctrl+Z para finalizar el mensaje y enviar
      myGLCD.print("enviado!", LEFT, 30);
      myGLCD.update();

  }

}

Bastante sencillo cierto? El código se explica solo. Basta con configurar la comunicación con el Shield a la misma velocidad (19200bps en este caso) y enviar los respectivos comandos. Al ser un modem GRPS, responde a una amplia variedad de comandos AT, que podemos revisarlos en este manual propio del fabricante.

Les dejo un video de la prueba de este código sobre mi Arduino.

Para concluir, las aplicaciones para este Shield son varias! Desde una alarma de seguridad de hogar con notificaciones por SMS, hasta un dispositivo remoto que pueda contestar llamadas y devolver información.

Para concluir, podemos resumir las características de este Shield, en las siguientes:

  • Shield GSM/GPRS Quad-Band 850/900/1800/1900 MHz, con el chip SIM900 GSM
  • Compatible con Arduino Uno / Mega
  • Voltaje de Operación 5Vcc
  • Socket plástico para el Chip GSM ubicado en la parte inferior del Shield
  • Antena externa, en L para mayor facilidad de ubicación
  • Adaptador de alimentación incluido
  • Jacks de Entrada y Salida de Audio, para la generación de llamadas telefónicas via celular
  • Reloj en tiempo real incluido
  • Display LCD Nokia 5100  incluido

Para los entusiastas de la electrónica y del Arduino, puedo comentarles que el precio de este Shield es un poco elevado. El costo es de USD. 57,70 incluido el envío desde China. Si descontamos el valor del LCD y del adaptador, podríamos llegar a los USD. 50,00 que sigue siendo algo elevado, tomando en cuenta el costo del Arduino. Pero si vamos a usar este Shield en una aplicación profesional, Si resulta muchísimo más barato que otras soluciones de comunicación GSM que existen en el mercado.

Les dejo algunos enlaces correspondientes a este producto. Espero les sean de interés

 

Poniendo a trabajar al Raspberry Pi

El famoso Raspberry Pi. La pequeña computadora de $35 que ha causado furor a nivel mundial, y ha inspirado algunos clones, unos mas potentes que otros, pero, como en todo en la vida, el que pega primero, pega dos veces!

Con el Raspberry han hecho de todo, desde encender y apagar un LED, hasta controlar una torre de telefonía celular (pasando por un sistema casero de vigilancia que funciona 24/7 en mi morada, jugar minecraft, servir tragos….. una larga lista); pero hay realmente pocas aplicaciones “económicamente rentables” que se hayan dado a conocer.

Lo que les voy a comentar no es una aplicación, sino una prueba de concepto, de cómo ésta pequeña tarjeta electrónica, puede realizar un trabajo pesado, con un bajisimo gasto energético. No voy a dar soluciones de código, no extensas explicaciones de como hacer A o B tarea en X lenguaje de programación, solamente voy a comentar mi experiencia con un trabajo “del mundo real” aplicando el Raspberry Pi para su solución.

Resulta que en un proyecto personal, se me encomendó la tarea de extraer determinada información de cierto website, para luego procesarla e indexarla. Para qué hacer esto? Pues el sitio web original no era muy amigable al usuario, y estaba realizado sin una plataforma de base de datos. Entonces la del proyecto quedó planteada de esta manera:

  1. Generar un índice del sitio web, con los links de todas las páginas que contenían la información requerida
  2. Navegar página por página del indice de links, recabando determinada información contenida dentro de cada link
  3. Almacenar la información extraida en una base de datos, para su posterior análisis
  4. Generación de un nuevo índice dinámico, usando la información almacenada en la base de datos.

No suena complicado (en teoría), pero el problema principal era la GRAN cantidad de trabajo. El sitio web antiguo contenia alrededor de 7000 subpáginas con información, y recopilar la misma manualmente era una tarea titánica, hubiera requerido una cantidad considerable de personal, y un tiempo bastante largo para concluirla. Es aquí donde después de echarle cerebro un rato decidí darle una solución viable al problema.

Antes de decidir que y como resolver el problema, decidí investigar un poco, y de paso, esta fué la oportunidad perfecta para programar en Python usando Linux. Este lenguaje brinda muchísimas facilidades en cuanto al procesamiento de páginas web, por lo que se convirtió en el “Weapon of Choice” del proyecto.

Al hablar de facilidades en el procesamiento de páginas web, existen funciones en Python, que nos permiten almacenar el contenido de una página entera, dentro de una variable, por ejemplo, si quisieramos pasar el codigo html de www.patolin.com a una variable, tendríamos el siguiente script:

import urllib2

url="http://www.patolin.com"
page=urllib2.urlopen(url)

Simple no? Con estas 3 líneas de código (que de hecho pueden ser 2 jejeje), logramos que todo el contenido de dicha web, se almacene en la variable “page”. Pero bueno, un punto menos del problema resuelto. Ahora, como buscamos información dentro del contenido de la variable “page”? Es aquí, donde con un poco de Google, encontré la librería BeautifulSoup, que permite analizar código HTML y separarlo según tags…. perfecto para el caso.

Las instrucciones para instalar esta librería se encuentran bien documentadas en el sitio web, así que no presentará ningún problema por si quieren probarla. Ahora, como funciona? muy simple! Miremos el siguiente código:

import urllib2
import BeautifulSoup
url="http://www.patolin.com"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
titulos=soup.findAll('h2')
foreach titulo in titulos
    print titulo

Pues que hace este pequeño fragmento de código? Primero, como vimos anteriormente, nos captura el contenido de la url www.patolin.com, y lo almacena en la variable “page”, luego dicha variable, pasa a indexarse mediante la librería BeautifulSoup en la variable “soup”, realizamos una búsqueda de todos los tags “<h2>” que son los títulos de los posts de patolin.com. Finalmente, dado que los titulos se guardan en un array, imprimimos en pantalla título por título hasta llegar al final.

Como vemos, algo que quizás pueda resolverse en otros lenguajes más potentes, con algo más de programación, gracias a las librerias existentes se vuelve una tarea bastante trivial en Python. Con estas pocas líneas de código, hemos resuelto una gran parte del problema, ya que con este código, simplemente debemos crear 2 bucles:

  • Uno que revise el índice actual de la página y extraiga todos los links existentes
  • Otro que usando los links extraidos del punto anterior, extraiga el contenido de la página

El como hacer estas tareas, se los dejo de pregunta de examen, pero no es nada del otro mundo. Ahora nos falta el almacenado en la base de datos. Para esto, por conveniencia, vamos a usar MySql como base de datos destino, y como era de esperarse, Python tiene soporte para manejo de MySql integrado en su instalación.

Cargar datos en MySql, se vuelve algo tan simple como ejecutar los siguientes comandos en Python

 

import MySQLdb as mdb

try:
    con = mdb.connect('dbhost', 'usuario', 'clave', 'nombredb')
    cur = con.cursor()
    cur.execute("INSERT INTO datos (titulo, contenido) VALUES (%s, %s)", (varTitulo, varContenido, ))
except mdb.Error, e:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
finally:
    if con:
        con.close()

 

En este ejemplo, de una tabla con las columnas “titulo” y “contenido”, basta con cargar los datos en las variables varTitulo, varContenido (ojo con la última coma), e iremos almacenando los datos en nuestra base MySql.

Con todos estos pedazos de código, basta con unirlos, y tenemos lista la aplicación que escanea el contenido de un website, lo procesa, y almacena en una base de datos. La visualización de los datos almacenados en el MySql queda para una sencilla página de PHP, que no viene al caso de este post.

Ahora, donde entra nuestro estimado Raspberry Pi? Pues como les decía, el proceso involucraba analizar 7000 páginas html, y la extracción de la información, incluido el tiempo de carga y almacenamiento en el Mysql (ojo, es una DB en línea, no local) hacía que en promedio demore de 15 a 20 segundos POR PÁGINA, lo que en tiempo total de procesamiento, aproximadamente iba a demorar 38 horas, lo que implicaba tener encendido el computador 38 horas, con el consiguiente consumo de energía.

Instalé el script generado y las librerías en mi Raspberry que está en mi casa, y funcionó correctamente, así que ejecutarlo desde ahí tendrá las siguientes ventajas:

  • El Raspberry Pi, de por sí pasa encendido 24/7, consumiento algo así como 5W, nada comparado con los 700W de mi desktop
  • La conexión a internet de mi casa pasa libre todo el día, desperdiciando un par de Mbps de velocidad
  • El proyecto no era de un apuro terrible, un día más o un día menos era aceptable

Y lo ejecutamos pues desde el Raspberry. Poco a poco la información se iba cargando en el MySql, y cerca de las 48 horas, finalizó. Si vamos al consumo energético, podemos comparar:

  • 700W * 35 horas = 24.5 kwh
  • 5W * 48 horas = 0.24 kwh

No hay por donde perderse. Con un consumo 100 veces menor se realizó la misma tarea usando el computador de bolsillo. El cliente contento, por ver su proyecto cumplido, yo contento por hacer algo bueno en Python, y el planeta contento por el ahorro de energía alcanzado.

🙂

 

 

Necesitas visualizar información con tu Arduino? Nada mejor que un LCD a color

En este post, vamos a revisar el Color LCD Shield, fabricado por Elecfreaks y distribuido por www.dx.com, que viene listo para usar con cualquier placa Arduino.

DSC00252

Este shield tiene las siguientes características:

  • Display a color de 128x128px, basado en el display Nokia 6100
  • 4096 colores (profundidad de color de 12 bits)
  • Interfaz I2C (requiere unos pocos pines para funcionar)
  • Control de iluminación del backlight, mediante PWM en el pin 10 del arduino
  • Joystick de 5 posiciones, conectado a las entradas A0-A4 (deben ser configuradas como entradas digitales)
  • Regulación automática de 3.3v (no requiere modificaciones adicionales al Arduino)

El precio de este shield es bastante conveniente (19.xx con envío gratis desde China), y la calidad de fabricación es excelente. El item viene debidamente empacado, protegiendo con gomaespuma la pantalla y los pines de conexión, evitando las pantallas rotas o pines doblados en el largo viaje desde el otro lado del mundo.

Para esta prueba, vamos a usar los siguientes componentes:

Por que usar un LCD gráfico en lugar del clásico shield LCD 16×2? bueno, aquí es cuestión de gustos, y de la aplicación que le querramos dar. Como ejemplo del funcionamiento del Shield, y para ilustrar las funciones disponibles para el mismo, vamos a programar un voltímetro, que mida entre 0 y 5v, y que nos grafique en tiempo real las variaciones de voltaje ingresadas por el pin A5 de nuestro Arduino Uno.

Primero, debemos descargar e instalar la librería ColorLCDShield, que la puedes descargar de este enlace. Esta librería debe ser descomprimida en la carpeta “Libraries” de tu instalación del Arduino IDE, antes de empezar con nuestra prueba.

Primero, debemos incializar el LCD, para lo cual usamos los siguientes comandos:

pinMode(10, OUTPUT);
analogWrite(10, 1023); 
lcd.init(PHILLIPS); 
lcd.contrast(40);

Como podemos ver en este fragmento de código, el pin 10 de nuestro arduino controlará la intencidad del backlight mediante PWM. El valor de 40 para el contraste es un valor recomendado por el fabricante, así que no hay mucha explicación sobre dicho valor.

A continuación, luego de inicializada la pantalla, procedemos a dibujar la grilla de fondo. Para esto, vamos a usar el siguiente código:

  int x,y;  
  lcd.clear(BLACK);  
  lcd.setStr("Datalogger 2013 ", 2, 0, RED, WHITE);
  lcd.setStr("www.patolin.com ", 112, 1, BLUE, WHITE);
  for (x=1;x< =132;x+=20) {
       lcd.setLine(30,x,110,x, GRAY);
  } 
  for (y=30;y<=110;y+=20) {
       lcd.setLine(y,1,y,132, GRAY);  
  }
  lcd.setRect(30,2,110,129, 0, MAGENTA);

Dentro de este bloque, como podemos observar, usamos rutinas para limpiar la pantalla lcd.clear(BLACK);, escribir strings lcd.setStr(“Datalogger 2013 “, 2, 0, RED, WHITE);, dibujar líneas lcd.setLine(30,x,110,x, GRAY); y dibujar rectángulos lcd.setRect(30,2,110,129, 0, MAGENTA);.

Todas estas funciones, y el listado de colores disponibles como constantes para facilidad de uso, se encuentran detallados dentro de la ayuda de la librería del display.

Lo que vamos a hacer con nuestro arduino, es leer el valor del potenciómetro conectado en el puerto A5, y graficarlo en escala, dentro de la grilla que dibujamos previamente. El momento que el gráfico de la señal llegue al borde derecho de la grilla, limpiaremos la pantalla y empezaremos desde el borde izquierdo. Les dejo el código completo que estoy usando.

#include <ColorLCDShield.h> 

LCDShield lcd;  
int buttonPins[5] = {A0, A1, A2, A3, A4};  

void setup()
{
  pinMode(10, OUTPUT);
  analogWrite(10, 1023); //PWM control blacklight
  lcd.init(PHILLIPS);  // Initializes lcd, using an PHILIPSdriver
  lcd.contrast(40);  // -51's usually a good contrast value

  dibujaGrilla();
}

void dibujaGrilla() {

  int x,y;  
  lcd.clear(BLACK);  
  lcd.setStr("Datalogger 2013 ", 2, 0, RED, WHITE);
  lcd.setStr("www.patolin.com ", 112, 1, BLUE, WHITE);
  for (x=1;x< =132;x+=20) {
       lcd.setLine(30,x,110,x, GRAY);
  } 
  for (y=30;y<=110;y+=20) {        lcd.setLine(y,1,y,132, GRAY);     }   lcd.setRect(30,2,110,129, 0, MAGENTA); } void dibujaPunto(int x,int valADC) {   // ajustamos el valor del adc para la escala del grafico   int valor;   valor=valADC/20;   lcd.setPixel(RED,(110-valor),x); } void loop() {   int x=3;   int valor;   while(1) {     if (x>128) { x=3; dibujaGrilla();}
    valor=analogRead(A5);
    dibujaPunto(x,valor);
    delay(100);

    x++;
  }
}

Luego de cargar el código en el Arduino, el resultado es excelente! hemos creado con unas pocas líneas de código, un datalogger gráfico, que puede servir como base para muchas aplicaciones más. Les dejo un pequeño video del resultado.

Como podemos observar, este LCD Shield es bastante práctico, y es una gran mejora sobre el LCD 16×2 que casi siempre usamos en nuestros proyectos, para resumir sus características, podemos lanzar la siguiente comparativa:

A favor:

  • Bajo costo
  • Envío gratis desde dx.com
  • Incluye joystick de 5 posiciones
  • Interfaz I2C reduce el número de pines usados
  • Librerías listas para generar texto y gráficos
  • Facil uso y de facil integración en tus proyectos con Arduino

En contra

  • Largo tiempo de espera para recibirlo
  • el Joystick utiliza 5 pines (A0-A4) dejando solo una entrada analógica disponible (podría arreglarse cambiando los pines usados, conectándolo a un arduino nano o pro)
  • La actualización del display es un poco lenta, para algunas aplicaciones (podría ser un poco lenta si queremos usarla para un osciloscopio digital)

 

 

Osciloscopio con Stellaris Launchpad – Actualización

Todo el mundo quiere un osciloscopio! (bueno, todos los que trabajan en electrónica jejeje), y para no quitarme el gustito de construir un osciloscopio digital, desde cero, hice algunas pruebas con mi stellaris launchpad, que como comentaba en un post anterior, logré que muestree a casi 1Msps. Modificando un poco el código del stellaris, bajé la velocidad de muestreo a 125Ksps, e hice algunas capturas de la señal PPM que genera mi transmisor de RC basado en Arduino.

Para visualizar la señal armé una pequeña app en Visual Basic 2010, que recibe los datos del puerto serie del stellaris, y los grafica sobre un Chart Control, que resulta que es más facil de usar de lo que han pensado.

Les dejo un par de fotos, y el código fuente del Stellaris y de  la Aplicación de Visual Basic

Captura PPM a 125Ksps, 2048 muestras

dso

 

Captura PPM a 125Ksps, 4096 muestras

dso1

 

 

 

Microhelicopteros! Review de un minihelicóptero de 3.5 canales

La gente de www.tmart.com fué muy amable en enviarme un minihelicóptero de 3.5 canales con control infrarojo, para realizar unas pruebas, así que les comentaré por acá mis experiencias con el mismo.

Hace algún tiempo, llegaron acá al Ecuador una oleada de microhelicópteros, que prometian mucho (facilidad de vuelo y durabilidad), pero la verdad es que no eran ni fáciles de volar, ni eran durables ni baratos. Mucha gente los compró y tuvieron un mal inicio en el hobbie del radio control, ya que estos helicópteros causaban mas frustración que diversión.

Es por esto que le dí una oportunidad a este helicóptero, así que vamos revisandolo.

Primero el empaque. Éste vino empacado de una manera muy profesional, con doble capa de envoltura de burbujas (grandes por fuera, pequeñas por dentro), con lo que se garantiza que el paquete arribará sano y salvo a la puerta de tu casa.

DSC00202

 

 

DSC00203

Por si no abrieron el link del producto (deberían hacerlo ahora), notarán que primero, este tiene un costo bajísimo (USD. $19,99) que incluye en envío gratis, ya sea desde las bodegas de EEUU, o desde la principal en la China. En mi caso el paquete fué enviado desde EEUU, y demoró algo más de 7 días en llegar a Cuenca. Tomen en cuenta que por la característica del artículo, éste debió pasar por aduana, lo que aumentó un pago de $5,00 el momento de la entrega, por gastos aduaneros.

 

Una vez abierto el paquete, lo primero que me gustó fué la calidad de la caja del mismo (está genial para ponerlo sobre una repisa, como adorno). El helicóptero y su control remoto vienen en una caja de acrílico transparente, que lo hace facil y seguro de transportar, por si quieres llevarlo fuera de casa

DSC00204

 

Para sacar al helicóptero de su caja, necesitarás un destornillador estrella pequeño, ya que el mismo tiene atornillada una base a su tren de aterrizaje. Esta medida me parece excelente porque lo asegura a la caja durante el viaje, evitando sorpresas en la entrega. Además, en la parte inferior de la caja, existe un pequeño compartimento (también asegurado con tornillos) que contiene el cable de carga USB, y una hélice trasera de repuesto (muy conveniente, para no truncar nuestros primeros vuelos experimentales)

DSC00206

 

DSC00208

DSC00209

 

Si algo puedo mencionar, es que el control remoto se ve algo “barato” comparado con el resto del paquete. Es de plástico rojo, y las palancas se las siente un poco débiles. El control tiene los mandos para la velocidad de giro de las hélices, rotación en el eje de la hélice, y para moverse adelante y atrás (throtle, rudder, elevator para los que conocen más de RC) y además, contiene una perilla para calibrar el giro del helicóptero, es decir, para mantenerlo estable en el aire. Aparte de los controles, existe un selector de canal, lo que nos da a pensar que podemos volar hasta 3 helicópteros a la vez, sin tener interferencia. El control remoto trabaja con luz infraroja, así que el rango de control es de máximo 5m en línea de vista, lo que es suficiente para volar en interiores. El transmisor usa 6 baterías AA, y además tiene un cable que permite cargar el helicóptero directo desde el control.

DSC00213

DSC00214

 

El helicóptero como tal, no tiene nada que ver con la calidad del control remoto. Éste está fabricado en aluminio y plástico, Excelente calidad de fabricación! Contiene 3 motores, la batería y toda la circuitería de control, incluido in giroscopio, que ayuda a estabilizarlo en el aire, facilitando su control

DSC00216

 

DSC00211

 

DSC00212

 

La batería incluida es de 150mah, lo que nos dá un tiempo de vuelo de unos 5 mins. Usando el cargador USB, demora de 10 a 12 mins en recargarse, lo que me gusta, porque he visto otros que necesitan casi 1 hora para recargar, y dan menos tiempo de vuelo.

Ahora la pregunta del millón: como vuela? Pues les digo que son los $19,99 que mejor pueden invertir en un helicóptero de este tipo. Inicialmente pensé “esto se va a estrellar y romper en el primer despegue” pero no! El helicóptero es super estable, los mandos no tienen una respuesta tan rápida, lo que ayuda en el control para los principiantes, y lo más importante, es muy muy resistente a los golpes. El truco es que, cuando veas tu helicoptero por estrellar, corta la potencia de las helices. Con eso caerá pero te asegurarás de no romper ningún engrane interno.

Resumiendo, y haciendo una comparativa, tenemos que:

A favor:

  • Precio imbatible (por $20 con todo incluido, que puede salir mal)
  • Excelente empaque, quedarías de película regalando uno
  • Listo para volar. Solo agrega baterías al control remoto y carga el helicóptero
  • Muy fácil de volar. El giroscopio hace casi todo el trabajo de estabilización, y el helicóptero como tal viene muy bien balanceado
  • Se carga desde el control remoto o desde el puerto USB
  • Se carga en 10 mins y vuela por 5 mins. Mucha diversión y poca espera
  • Ideal para la casa  u oficina. Saca al geek que hay en tí

 

En contra:

  • Necesitas 6 baterias AA
  • Tiempo de entrega de 1 semana cuando envían desde EEUU, desde China el tiempo puede subir hasta 3 semanas
  • El control remoto infrarojo puede causar interferencias (nunca lo uses cerca del control remoto de la TV)
  • Corto alcance (5m), aunque suficiente para interiores
  • Casi imposible de volar en exteriores. Incluso soplando sobre el se desestabiliza por su escaso peso.

Si desean echarle un ojo y comprarlo, este es el enlace http://www.tmart.com/3.5-Channel-Infrared-R-C-Mini-Helicopter-with-Gyro-Red_p136571.html . La compra es segura y el pago con paypal no presenta ningún problema. El momento del envío ellos envían un código de tracking del paquete, para que todo sea legal.

Y por si les queda la duda, les dejo un video de las pruebas de vuelo (ojo al final con los accidentes). Realmente es algo que puedo recomendar comprar a cualquiera que quiera probar iniciarse en el mundo de los helicópteros. La verdad es que con éstos, hay que empezar desde abajo 🙂

 

 

Freaduino Uno Review

Como habrán escuchado, la plataforma Arduino, es una plataforma electrónica abierta, diseñada para la creación de prototipos de hardware y software, pensando en gente que no tiene mucha experiencia con microcontroladores y electrónica en general.

En mi opinión personal, al haber estudiado a detalle algunos microcontroladores,pasando por el Motorola 68HC11 y el Intel 8051, hasta los modelos un poco mas actuales de Microchip (como el 18F4550, que he usado en muchos de mis proyectos), puedo decirles que la plataforma Arduino, dentro de sus limitaciones de hardware, nos brinda una extremada facilidad al momento de desarrollar aplicaciones de electrónica, que requieran del uso de un microcontrolador.

Dado que Arduino es una plataforma de código abierto, era de esperarse que empiecen a comercializarse “Clones” o incluso versiones mejoradas de la placa original. En este caso, vamos a analizar al Freaduino Uno, que lo puedes conseguir en DealExtreme, aun precio realmente bajo. Mucha gente tiene miedo de comprar en estos sitios mayoristas, que distribuyen desde la China, pero he realizado varias compras desde este sitio, y nunca he tenido problemas con los pedidos, el soporte al cliente es excelente, y los precios son muy convenientes.

freaduino3

Características

Como lo mencionamos, el Freaduino Uno está basado en el Arduino Uno, por lo que tiene características base similares. Las características completas las podemos observar en la siguiente tabla:

 

Freaduino Uno

Arduino Uno

Microcontrolador

ATMega 328P (SMD)

ATMega 328 (DIP)

Memoria Flash

32Kb

32Kb

Memoria Ram

2Kb

2Kb

Memoria EEPROM

1Kb

1Kb

E/S Digitales

14

13

E/S Analógicas

6

6

E/S PWM

6 (compartidas con las digitales)

6 (compartidas con las digitales)

Voltaje de Operación

3.3V/5V seleccionable

5V

Voltaje de Alimentación

7 a 23Vcc

7 a 12 Vcc

Corriente de salida máx.

800mA (3.3V) / 2000mA (5V)

50mA (3.3V) / 500mA (5V)

Pines dedicados (IIC/UART)

Si

No

Rieles Vcc y Gnd para E/S

Si

No

Tipo de conector USB

mini USB

USB tipo B

Precio

$ 18.60 (envío gratis desde dx.com)

$ 25.00 aprox (+ envío desde arduino.cc)

Si comparamos directamente las características, vemos que tenemos una placa muy superior al Arduino original, sin tomar en cuenta el valor adicional de un menor costo, que incluye el envío hasta la puerta de tu casa. Como es de esperar, el Freaduino Uno es compatible 100% con el IDE de Arduino, y los Shields diseñados para el mismo.

Por el precio de compra, se incluye un cable USB, para poder conectar la placa a nuestro computador, y poder programarla.

freaduinocable

El mayor plus de esta placa, comparada con la original de Arduino (o varios clones que existen en el mercado) es la inclusión de los headers para conexiones externas, que incluyen +Vcc y Gnd. Estos headers están claramente señalados al pin que corresponden, y nos brindan una gran ayuda el momento de conectar servomotores o sensores, eliminando la necesidad de incluir un shield de sensores para dichas conexiones.

2013-06-18_21-26-17_415

Otra función adicional, que nos podrá resultar super útil a futuro, es la inclusión de un selector de voltaje de trabajo. Todas las tarjetas Arduino tienen una salida de voltaje de referencia de 3.3v, pero el microcontrolador siempre funcionará a 5Vcc internamente. El Freaduino Uno posee un selector de voltaje de operación que  nos permite que todo el microcontrolador opere a 3.3v. Esto nos resulta útil para interconectar nuevos dispositivos (transmisores Bluetooth, pantallas LCD gráficas, acelerómetros, giroscopios, etc) que requieran este voltaje de funcionamiento, eliminando el requerimiento de componentes adicionales para la conexión.

 freaduino2

Instalación

La instalación del Freaduino Uno es identica a la del Arduino original. Basta con descargar el Arduino IDE, conectar la tarjeta al puerto USB con el cable provisto, e instalar los drivers que se incluyen dentro del IDE. Únicamente debemos seleccionar “Arduino Uno” de la lista de dispositivos compatibles, y escoger el puerto COM respectivo, según se instale en nuestro computador.

Para finalizar, podemos resumir toda esta revisión, en los siguientes pros y contras de esta tarjeta compatible con arduino:

Pros:

  • Compatible 100% con el Arduino Uno, en Programación y Shields existentes
  • Bajo Costo
  • Excelente calidad de manufactura
  • Pines de E/S con alimentación incluida (ideales para conectar servos o sensores)
  • Mayor capacidad de corriente de salida
  • Selección de voltaje de operación mediante un switch (3.3v o 5v)
  • El uso de componentes SMD ahorra espacio, y crea una disposición de placa más limpia
  • El regulador de voltaje switching a la entrada de alimentación, permite un mayor rango de voltajes de entrada.
  • Chip FTDI reemplazado por un ATMega8U, para la conexión USB con el computador
  • Leds integrados y boton de reset de facil acceso, al tener Shields conectados
  • Envío gratis desde dx.com

 

Contras:

  • Tiempo de espera de casi 3 semanas para la entrega (bueno, viene desde muy lejos hacia Ecuador)
  • Cable USB bastante corto, y si usas una PC de escritorio, quizás necesites un cable más largo
  • Empaque de transporte aceptable, pero no el 100% adecuado.

 

Valoración: 100/100

Aplicaciones

Con las pruebas que he realizado, he llegado a montar aplicaciones tan simples como un voltímetro digital usando una pantalla LCD, hasta reemplazar toda la electrónica de un transmisor de radio control básico, para convertirlo en un transmisor completamente programable. Las aplicaciones provienen de nuestras necesidades, así que a darle un buen uso.

Un ejemplo que lo tengo en video, es mi módulo de transmisor para radio control, donde el Freaduino Uno, se encarga de la lectura de los potenciómetros de las palancas de mando, el procesamiento de los datos, la visualización en una pantalla LCD y el envío de una señal PPM hacia el módulo de radio frecuencia. Les dejo un video con esta aplicación.

Enlaces