Entradas populares

22 de mayo de 2012

Arduino – Convirtiendo datos flotantes a cadenas

 

La función mágica es dtostrf y según la documentación de la biblioteca funciona así:

image

Esta función recibe la variable que queremos convertir (variableFlotante), el tamaño mínimo de la cadena resultante (tamañoMinimo) incluyendo el punto decimal y el signo negativo en caso necesario, el número de dígitos tras el punto decimal (precisión) y una cadena con suficiente espacio para guardar (cadenaDondeGuardar). Regresa un apuntador a la cadenaDondeGuardar.

image

Y un por ultimo acá hay un pequeño código de ejemplo:

image

5 de mayo de 2012

Música Electrónica

  En esta entrada les quiero compartir otra de mis aficiones, la música electrónica, sin duda que a todos nos gusta la música, en lo personal yo no tengo un estilo definido y escucho de todo un poco, es que la música para mi es algo solemne, sin embargo la música electrónica es un encuentro con la perfección, se han podido crear sonidos increíbles utilizando sintetizadores y también por medios informáticos, no pongo en duda que nada de eso se compara al sonido natural de un piano o una guitarra tocada por las manos de un músico pero pienso que no se debe cerrar la mente a explorar nuevos sonidos, los sintetizadores son un instrumento mas.

  Hace poco que descubrí un estilo de música electrónica llamado vocal trance, es una mezcla de trance acompañado con sensuales voces femeninas, el mayor precursor de este estilo es Armin Van Buuren, el cual es un reconocido Dj y productor de música trance, según el ranking elaborado por DJ Magazine, ha sido nombrado DJ número 1 del Mundo en 2007, 2008, 2009, 2010 siendo el único hasta la fecha en conseguir este galardón cuatro veces consecutivas.

He aquí algunos videos, te sugiero que los pongas a 480p o mas ya que también mejora la calidad del audio:

 

Varios Armin Van Buuren – A State Of Trance

Armin Van Buuren Feat Sharon den Adel - In and out of love

 

Armin Van Buuren Feat Jacqueline Govaert – Never say never

 

Armin van Buuren Feat Cathy Burton - Rain

 

Armin Van Buuren – Communication

 

Susana Feat Omnia & The Blizzard - Closer

 

Delerium – Angelicus

 

Delerium – After All

4 de mayo de 2012

Desarrollo de aplicaciones en Visual Basic 6 orientado a Arduino y Electronica

Introducción:

  Visual Basic 6 es un entorno de desarrollo creado por la empresa Microsoft, se trata de un software que nos permite crear nuestras propias aplicaciones según nuestras necesidades, se puede integrar con diferentes plataformas de bases de datos tales como Access y MySLQ mediante ODBC, también nos va a permitir interactuar con nuestros desarrollos en electrónica por medio de los puertos Serie, Paralelo y también en una red LAN o a través de Internet utilizando Winsock.

  Si bien actualmente se trabaja con la plataforma .Net y Visual Basic 6 esta quedando obsoleto, aun sigue siendo una buena opción para iniciarse en el mundo de la programación, este sistema al día de hoy tiene muchos adeptos y en Internet hay muchísima información, recursos y código fuente para descargar, es posible reutilizar parte de un código y adaptarlo para lograr que la aplicación pueda realizar otra tarea, mi recomendación es que una vez que nos manejemos con la aplicación y consigamos aprender lo suficiente pasemos a estudiar la plataforma .Net, este ultimo sistema nos brinda aun mas posibilidades pero es un poco mas complejo de aprender que Visual Basic 6.

Interactuando con dispositivos electronicos:

La mayoría de la veces tenemos la necesidad de crear algún tipo de interfaz de usuario con el fin de controlar dispositivos externos tales como leds, reles, motores, etc., el otro caso mas común es querer monitorear el valor de algún sensor de temperatura, humedad, luz, etc, todo esto con el fin de tomar alguna acción, ejemplo de ello es activar alarmas o enviar correos a una persona de turno si sube la temperatura, todo lo expuesto es perfectamente posible de realizar mediante una aplicación en Visual Basic 6, las posibilidades que nos brinda son casi infinitas, es posible mostrar información en pantalla simulando un display de 7 segmentos o un LCD pudiendo personalizar tanto los colores así como los tamaños y estilos de fuente, se pueden simular leds o interruptores de encendido/apagado, para esto ultimo se pueden insertar imágenes del interruptor graficando ambos estados, es posible simular potenciómetros deslizantes e incluso se pueden crear gráficos de tipo x y pudiendo personalizar el color del trazado y fondo así como también se puede dibujar un diseño e insertarlo en nuestro desarrollo, también es posible trabajar con multimedia, una posible aplicación para esto ultimo es crear un Wurlitzer digital, como ven las posibilidades son muy amplias y es una excelente opción para integrarla a nuestros proyectos.

Videotutorial Visual Basic 6 orientado a Arduino y Electrónica

Introducción:

Conociendo el entorno de desarrollo:


Desarrollando nuestra primera aplicación:

9 de febrero de 2012

Arduino – Ethernet Shield

El Ethernet Shield permite a la tarjeta Arduino conectarse a Internet. Está basada en el chip Ethernet W5100 de Wiznet el cual provee un stack IP tanto para TCP como para UDP. El Ethernet Shield soporta hasta 4 conexiones a sockets en forma simultánea. Utiliza la Librería Ethernet para escribir sketches con conexión a internet utilizando este Shield.

El Ethernet Shield se conecta a la tarjeta Arduino sin necesidad de cables y deja el layout de los pines intacto permitiendo a un segundo Shield conectarse en la parte superior.

Arduino utiliza los pines digitales 10,11,12 y 13 (SPI) para comunicarse con el W5100 de la tarjeta. Mientras se utilice este Shield estos pines no se pueden utilizar para otro propósito.

El Shield viene con un conector RJ45. El botón de reset del Shield reinicia tanto el W5100 como la placa Arduino.

image

La manipulación de datos de forma remota en un sistema ahora es posible gracias a las redes, en la red se pueden enviar y recibir datos entre los diversos elementos que la componen, es aquí cuando surgen términos como Cliente, Servidor, Dirección IP, Ethernet, etc, esto significa que utilizando el Ethernet Shield podremos hacer uso de los diferentes protocolos de comunicación que se usan en Internet, ej: HTTP, Telnet, etc, siendo el único limite nuestra imaginación.

Arduino como Servidor Web

El código que veremos a continuación transforma a nuestro conjunto Arduino+Ethernet Shield en un simple servidor web que mostrara los valores de las 6 entradas análogas en una simple pagina web, pero antes de seguir adelante hay algo que deben tener bien claro para comprender el código que viene a continuación y se trata del protocolo HTTP

Protocolo HTTP

El protocolo HTTP es algo así como un lenguaje que permite que un servidor web y un cliente intercambien información, acá un extracto de lo que dice Wikipedia con respecto a este protocolo:

HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la petición (un navegador web o un spider) se lo conoce como "user agent" (agente del usuario). A la información transmitida se la llama recurso y se la identifica mediante un localizador uniforme de recursos (URL). Los recursos pueden ser archivos, el resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un documento, etc.

Transacciones HTTP

Una transacción HTTP está formada por un encabezado seguido, opcionalmente, por una línea en blanco y algún dato. El encabezado especificará cosas como la acción requerida del servidor, o el tipo de dato retornado, o el código de estado.

El uso de campos de encabezados enviados en las transacciones HTTP le dan gran flexibilidad al protocolo. Estos campos permiten que se envíe información descriptiva en la transacción, permitiendo así la autenticación, cifrado e identificación de usuario.

Un encabezado es un bloque de datos que precede a la información propiamente dicha, por lo que muchas veces se hace referencia a él como metadato —porque tiene datos sobre los datos—.

Si se reciben líneas de encabezado del cliente, el servidor las coloca en las variables de ambiente de CGI con el prefijo HTTP_ seguido del nombre del encabezado. Cualquier carácter guion ( - ) del nombre del encabezado se convierte a caracteres "_".

El servidor puede excluir cualquier encabezado que ya esté procesado, como Authorization, Content-type y Content-length. El servidor puede elegir excluir alguno o todos los encabezados si incluirlos excede algún límite del ambiente de sistema. Ejemplos de esto son las variables HTTP_ACCEPT y HTTP_USER_AGENT.
 

  • HTTP_ACCEPT. Los tipos MIME que el cliente aceptará, dado los encabezados HTTP. Otros protocolos quizás necesiten obtener esta información de otro lugar. Los elementos de esta lista deben estar separados por una coma, como lo dice la especificación HTTP: tipo, tipo.
  • HTTP_USER_AGENT. El navegador que utiliza el cliente para realizar la petición. El formato general para esta variable es: software/versión biblioteca/versión.

El servidor envía al cliente:

  • Un código de estado que indica si la petición fue correcta o no. Los códigos de error típicos indican que el archivo solicitado no se encontró, que la petición no se realizó de forma correcta o que se requiere autenticación para acceder al archivo.
  • La información propiamente dicha. Como HTTP permite enviar documentos de todo tipo y formato, es ideal para transmitir multimedia, como gráficos, audio y video. Esta libertad es una de las mayores ventajas de HTTP.
  • Información sobre el objeto que se retorna.

Ten en cuenta que la lista no es una lista completa de los campos de encabezado y que algunos de ellos sólo tienen sentido en una dirección.
 

Ejemplo de un diálogo HTTP

Para obtener un recurso con el URL http://www.example.com/index.html

  1. Se abre una conexión al host www.example.com, puerto 80 que es el puerto por defecto para HTTP.
  2. Se envía un mensaje en el estilo siguiente:
 GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: nombre-cliente
[Línea en blanco]

La respuesta del servidor está formada por encabezados seguidos del recurso solicitado, en el caso de una página web:

HTTP/1.1 200 OK
Date: Fri, 31 Dec 2003 23:59:59 GMT
Content-Type: text/html
Content-Length: 1221

<html>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
.
.
.
</body>
</html>

 


Métodos de petición


GET


Pide una representación del recurso especificado. Por seguridad no debería ser usado por aplicaciones que causen efectos ya que transmite información a través de la URI agregando parámetros a la URL.



Ejemplo:
GET /images/logo.png HTTP/1.1 obtiene un recurso llamado logo.png
 
Ejemplo con parámetros:
/index.php?page=main&lang=es
 
POST

 

Somete los datos a que sean procesados para el recurso identificado. Los datos se incluirán en el cuerpo de la petición. Esto puede resultar en la creación de un nuevo recurso o de las actualizaciones de los recursos existentes o ambas cosas.

Arduino como Servidor Web


Ahora que ya comprendemos mejor de que se trata el protocolo HTTP veamos un código que transforma nuestro Arduino en un servidor web


#include <Ethernet.h>
#include <SPI.h>


byte mac[] = {0x00,0x11,0x22,0x33,0x44,0x55};
byte ip[] = {192,168,1,10};
Server server(80);


void setup()
{
  Ethernet.begin(mac,ip);
}


void loop()
{
  Client client = server.available();
  if (client)
  {
    while (client.connected())
    {
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();


      client.print("<font size=5>");         
      client.print("Valores de las Entradas Analogas");
      client.print("<br><br>");
      client.print("A0 = ");client.print(analogRead(A0));client.print("<br>");
      client.print("A1 = ");client.print(analogRead(A1));client.print("<br>");
      client.print("A2 = ");client.print(analogRead(A2));client.print("<br>");
      client.print("A3 = ");client.print(analogRead(A3));client.print("<br>");
      client.print("A4 = ");client.print(analogRead(A4));client.print("<br>");
      client.print("A5 = ");client.print(analogRead(A5));client.print("<br>");
      client.print("</font>");


      delay(100);


      client.stop();
    }
  }
}


Arduino Ethernet Shield – Servidor Web (parte 1)




Arduino Ethernet Shield – Servidor Web (parte 2)



 


Arduino como Cliente Web


También podemos programar nuestra Ethernet Shield de tal forma que se comporte como un cliente web, es decir emula lo que hace un navegador web cuando visualizamos una pagina web en un servidor determinado, esto nos serviría para obtener algún tipo de información útil de un servidor determinado y procesarla de alguna forma o mejor aun, podemos crear nuestro propio servidor web y crear una  pagina en HTML o PHP que nos permita por ejemplo apagar o encender Leds, mover Servos y también leer el valor de algún sensor conectado a nuestro Arduino.

Un lector me envió un correo consultándome como podía hacerlo para crear una pagina web en la que al hacer click en un botón se logre encender y apagar un Led y partiendo de esa base poder interactuar con otros dispositivos mas complejos, pues bien, esto es totalmente posible pero antes de ver el código que permite hacer esto debemos aprender como transformar nuestro Arduino en un cliente web.

El código que veremos a continuación es muy simple y nos permitirá comprender como programar nuestro Arduino para que funcione en modo cliente, el saber esto nos será de mucha utilidad a la hora de crear una aplicación para interactuar con otros dispositivos en una pagina web e incluso aplicaciones mas complejas relacionadas con domótica y automatización

El siguiente código hace que nuestro Arduino establezca una conexión en modo cliente hacia el servidor de www.facebook.com y en caso de ser exitosa muestra el mensaje “Conexión establecida” por la consola serie, mientras que si no se logra establecer la conexión muestra el mensaje “Falla en la conexión”.

Nota: La dirección IP la obtuve haciendo un ping a la pagina www.facebook.com en la consola de MS-DOS
image


Y ahora el código:


#include <Ethernet.h>
#include <SPI.h>


byte mac[] = {0x00,0x11,0x22,0x33,0x44,0x55};
byte ip[] = {192,168,1,10};
byte server[] = {66,220,156,32}; // Direccion IP de www.facebook.com
Client client(server, 80);


void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
 
  if (client.connect())
  { 
    Serial.println("Conexion establecida");
  }
  else
  {
    Serial.println("Falla en la conexion");
  }
}


void loop()
{
}



Arduino Ethernet Shield (Cliente Web)


Encender y apagar un Led mediante una pagina web


Habiendo visto lo anterior ahora veremos un código que genera una pagina web simple la cual contiene dos botones que permiten encender y apagar un Led conectado al pin 2 de la tarjeta Arduino

En este código se utilizan los modos servidor y cliente al mismo tiempo, el código HTML generado por la parte servidor contiene un formulario el cual hace uso del método GET para enviar por medio de la URL el contenido de una variable llamada “Led”, esta variable adquiere los valores “On” y “Off” dependiendo del botón que se presiono logrando que se apague y encienda el Led, esto se consigue por medio de una rutina en el modo cliente la cual almacena en un string lo que se recibe por medio de la URL y lo compara en un bloque IF tomando la acción correspondiente


Ahora el Código


imageimageimage


Un poco de HTML


Para poder crear diferentes proyectos que utilicen una pagina web como interfaz de comunicación con el usuario debemos saber un poco de HTML, mas bien las instrucciones necesarias para poder trabajar con texto, cajas de texto botones, listas desplegables y formularios

Te recomiendo que leas este excelente tutorial de HTML el cual esta dividido en diferentes secciones:

http://www.htmlya.com.ar/index.php?inicio=16