Mi nueva adquisición: Arduino Duemilanove

Recientemente he adquirido una placa open hardware llamada Arduino, cuya versión más moderna es la Duemilanove.

arduino

Con esta placa, que se puede programar en C desde el entorno que el proyecto facilita, se pueden hacer miles de cosas. De momento la estoy probando. Ya he usado las comunicaciones del usb (un puerto serie al final), lcd, leds, servos y aún me queda hacer ADC.

Matar procesos desde .NET

El otro día me surgió la necesidad de matar un proceso desde  mi programa en .NET. Este proceso debía estar mal programado y se quedaba cargado en memoria constantemente si daba un error, pero necesitaba cargarlo cada vez que el usuario necesitaba interactuar con él desde mi programa.

Por ello tuve que desarollar una función que hiciese esa labor:

Se le pasa como parámetro el nombre del proceso o los primeros carácteres y devuelve true si lo ha matado o false en caso contrario. Este internamente recorre toda la lista de procesos comprobando el nombre de cada uno de ellos y cuando coincida procede a matarlo. Se debe incluir el espacio de nombres System.Diagnostics.

Trucos para el buscaminas y el Pinball

He estado un tiempo sin escribir en el blog porque me han operado en Febrero y he estado de baja por más de un mes.

Ahora que ya me estoy recuperando e incluso ya estoy trabajando desde principios de este mes empiezo a retomar mi vida normal, entre otras cosas mi blog.

Para empezar, unos trucos para el juego del buscaminas y para el pinball que vienen en cualquier windows por defecto.

Buscaminas:

Si arrancas el buscaminas, pulsas X Y Z Z Y y luego shift + Intro podrás poner el cursor del ratón encima de cualquier cuadrado y en la esquina superior izquierda de la pantalla verás un pixel blanco que te indica que no hay mina debajo o negro si la hay.

Pinball:

  • Para conseguir bolas extras escribe 1max
  • Para activar el pozo gravitatorio teclea gmax
  • Para ascender de rango escribe rmax
  • Para tener un número de bolas infinito escribe bmax
  • Para mover la bola con el ratón escribe hidden test (con espacio incluido).

Reloj termómetro con PIC 16F628

Recientemente he creado un reloj-termómetro hecho con un PIC 16F628A, un sensor de temperatura i2c DS1624, un reloj en tiempo real i2c DS1307 y un LCD de 16×2 compatible con Hitachi HD44780.

El sistema, una vez encendido, muestra la fecha y hora, la temperatura junto con los valores máximo y mínimo que alcanza y finalmente un mensaje personalizado. Aquí hay un video que he grabado del mismo:

El esquema del circuito es el siguiente:

Y desde aquí os podeis bajar el .hex y el código fuente (CCS C)

proyecto

La fecha y hora se configuran con sólo un botón pulsador que está conectado a RB0 y que funciona por temporización e indexación. Es decir, si tu pulsas la primera vez el botón, se mostrará en el LCD la fecha y hora y el indice 0, que indica que vas a modificar el día, entónces si pulsas dentro de los dos segundos siguientes el botón, el día se incrementará, si no lo pulsas, el indice se incrementará a 1 y se podrán modificar los meses de igual manera. Así hasta llegar al indice 5 que son los segundos y después mostrará la fecha y hora actualizadas renovandose cada segundo.

A los diez segundos de mostrar la fecha y hora se muestra la temperatura actual junto con los valores máximo (M) y minimo (m) que se han alcanzado. Si son los 30 primeros segundos de medianoche se resetearán esos valores.

A los diez segundos de mostrar la temperatura, se mostrará un mensaje personalizado que se ha guardado en la EEPROM al programar el PIC. Pasados cinco segundos vuelve a mostrar la fecha y hora.

El PIC usa el oscilador interno de 4Mhz. El programa ocupa un 98% de su memoria de código. Aunque en el video vereis que hay un interruptor de encendido/apagado, un led indicador de encendido/apagado y unas resistencias variables para el LCD, con lo que hay en el esquema es suficiente para funcionar. Vcc son 5 voltios conseguidos a través de un 7805.

Divisas 3.0

He publicado la versión 3.0 de Divisas.

Este programa, que desde su primera versión han pasado más de 5 años, siempre ha tenido por objetivo dotar de una herramienta sencilla y eficaz para el usuario que desea convetir los valores de las monedas de distintos países.

En esta ocasión he intentando simplificar al máximo la interactuación entre el usuario y el programa. Por ello he quitado la opción de histórico que a duras penas se usaba, y he añadido una interfaz que junta lo mejor del mundo de las aplicaciones web y del mundo de las aplicaciones de escritorio.

Ahora al usuario se le presenta un mapa del mundo (de Google Maps) y este selecciona con una simple pulsación el país de origen y de destino de los cuales quiere la información del valor de sus divisas. A continuación, si así lo desea el usuario, puede cambiar la cantidad de la moneda de origen para que se refleje automáticamente el resultado en la moneda de destino.

La versión anterior ofrecía al usuario la interfaz en 5 idiomas distintos, pero ahora gracias a Google Maps se ofrecen los textos en el idioma original del usuario. La información monetaria de más de 170 paises la extrae del servicio web que ofrece la empresa webserviceX.

La aplicación tiene un sistema que detecta nuevas versiones y se instalan automáticamente sin que el usuario necesite hacer nada.

Todo el desarrollo está hecho en C# con Visual Studio 2005.

¿A qué esperas a probarlo? Te vendrá bien en tus próximas vacaciones por el extranjero.

Edito 19/07/2009:

Dado que el servicio web da problemas en muchas ocasiones he añadido la fuente del Banco Central Europeo para que al menos el resultado de las divisas más comunes sea inmediato.

Error de arquitectura

Hace tiempo que se sabía que la web de openbank no va fina. Dicen por ahí que es culpa de la plataforma BankSphere, que también esta implementada en Banesto.

Pues bien, hace cosa de 4 años un servidor se le ocurrió meterse en, por aquél entonces, Patagon para hacer una cuenta de ahorro. Pasó el tiempo y Patagon se convirtío en Openbank (como al principio de los tiempos) y un servidor recibió una oferta de que si domiciliaba mi nómina y un par de recibos me regalaban un ipod, cosa que hice.

Pero desde el año pasado hasta hoy estoy sufriendo la CHAPUZA de web que tiene la gente de Openbank: sólo funciona bien en internet explorer, estoy hasta las narices de que no se seleccione por defecto la pestaña Operativa cuando voy a hacer cualquier tarea, de que hay opciones que no funcionen como deben, de que cuando me quejo siempre me dicen que lo sienten y que están mejorando… Y hoy van y cuando intento entrar para ver mi cuenta me sale esto:

y cuando pulso en aceptar, sale esto otro:

Me parece que voy a ir cambiando de banco, porque uno que funciona así en estos tiempos me da muy poca confianza.

Edito unos 5 minutos después:

Ahora me salen con esta otra estupenda y maravillosa página. ¿De verdad que es un banco que promociona internet para su uso? …

Actualización 06/12/2008:

Y seguimos con el mal servicio. Hoy me he intentado conectar y me sale esta pantalla

Por supuesto, como no podía ser de otra forma, por mucho que meto los datos de cliente me vuelve siempre a la misma página.

Responsables de la web de openbank: Dejen de hacer experimentos con su web y hagan algo que funcione de verdad para que sus clientes no tengan una tan pésima opinión de cómo hacen las cosas. Sean serios, por favor.

Ejecutar algoritmos paralelos en la GPU (1/2)

Navegando por Internet me topé con un artículo de Kriptopolis en el cual hablan maravillas del proceso de las GPUs en comparación con las CPUs. Acto seguido me puse a buscar en Internet como usar la GPU de mi tarjeta NVDIA Geforce 8800 GTS y encontré el entorno CUDA (Compute Unified Device Architecture) de NVIDIA.

Este entorno está orientado a las tarjetas gráficas de la serie NVIDIA GeForce 8, 9, y 200; NVIDIA Tesla y muchos de los productos NVIDIA Quadro y está disponible para Windows, Linux y Mac. Tiene librerías específicas para transformadas rápidas de Fourier (FFT) y algebra lineal (BLAS) entre otras cosas. Existen plugins para MatLab y para Photoshop que usan CUDA para agilizar los cálculos que realizan. Existe otro entorno llamado BrookGPU aunque no lo he tratado a fondo parace algo más genérico.

Con una tarjeta de las mencionadas anteriormente se pueden ejecutar miles de hilos (threads) en cada uno de los nucleos que contiene la GPU a una velocidad superior que con una CPU actual.

Diferencias de GigaFlops entre CPUs y GPUs (Imágen de NVIDIA)

Diferencias de GigaFlops entre CPUs y GPUs (Imágen de NVIDIA)

Para trabajar con CUDA lo primero que hay que hacer es instalarse el último driver de la tarjeta NVIDIA (que ya posee soporte CUDA). Después hay que instalar el toolkit de Cuda y finalmente hay que instalarse el SDK de Cuda. Todo esto se puede bajar en http://www.nvidia.es/object/cuda_get_es.html, pero el driver recomiendo instalarlo desde la sección de drivers para obtener el más actualizado.

En el siguiente artículo explicaré como usar la potencia de cálculo de la GPU con CUDA y Visual Studio 2005, haciendo un pequeño ejemplo.

GuideMe: 2º premio del 3er concurso de Open Movil Forum

Pues finalmente y tal como aparece en la web: http://open.movilforum.com/concurso/3/ganadores GuideMe consigue el segundo puesto con un premio de 2000 €. Enhorabuena al 1er y 3er galardonados.

Lo estúve pensando el otro día y creo que para repartir los premios deberían haber seguido una fórmula de proporciones. Si el premio a repartir son 10000 € y son 3 ganadores, la formula que propondría sería 3x + 2x +x = 10000. Eso sería 6x = 10000, con lo que x ≈ 1667. Finalmente el ganador tendría la proporción 3x, por lo que se llevaría 5001 €, el segundo 3334 € (2x) y el tercero 1667 € (x).

Espero que en siguientes concursos lo hagan de esa manera para premiar al 1, 2 y 3 equitativamente.

Zaapa CIPRW (ZA-CIPRW)

Tenía en mente desde hace tiempo el comprarme una cámara ip inalámbrica para vigilar mi casa cuando yo no estuviese (bien sea por vacaciones, por trabajo o lo que sea).

El caso es que estas cámaras hasta hace poco tenían un precio prohibitivo, y digo hace poco porque hace unos días recibí publicidad del carrefour con una oferta de una cámara ip wifi de la marca zaapa por 99€. Viendo sus caracterísitcas me animé a comprarla y una vez que la he recibido me he animado a hacer este artículo para describirla.

La cámara en sí es bastante bonita. Tiene un color negro que le da elegancia a la par que disimulo. Su tacto de goma es suave y agradable. Pero son sus carácteristicas por las que sobresale esta cámara:

  • Manejo de la cámara desde un navegador web (sólo con Internet Explorer)
  • Se puede conectar a nuestro router por LAN o por Wifi
  • Visión nocturna con infrarrojos (hasta 5 metros)
  • Motor de giro vertical de 90º y giro horizontal de 120º
  • Detección de movimiento (nos envía el video fotogramas por email o por ftp)
  • Permite conectarse con 3 roles (administrador, operador y observador)

Otro tipo de características son que tiene un sensor CMOS de 300.000 pixeles, compresión MJPEG para la transmisión, DNS Dinámico con DynDNS y provee pins para conectar una alarma externa.

La cámara viene con la antena wifi, una fuente de alimentación, manual del usuario, cd con software, un cable de red ethernet y un soporte de montaje.

La primera vez se debe lanzar una aplicación llamada IP Camera Tool con la cual podemos configurar la IP de la cámara o actualizar el firmware de esta. Luego ya configurada la IP podemos acceder a la cámara mediante el Internet Explorer (sólo nos deja este porque debe instalar un control activeX).

La interfaz web es sencilla y dependiendo de si entramos como administrador, operador u observador se nos presentarán distintas opciones.

Interfaz de observador:

Puede voltear la imagen, hacer espejo de la imágen, mostrar fecha y hora en el video, grabar un video o capturar un fotograma.

Interfaz de operador:

Además de poder hacer lo mismo que el perfil del observador, puede también mover la cámara verticalmente u horizontalmente (incluido el modo continuo donde la cámara se mueve indefinidamente), activar o desactivar los pins de la alarma externa (con ello se puede conectar por ejemplo una alarma de incendio que si se activa manda una señal a la cámara para que empiece a grabar), cambiar la resolución de visionado (320×240 o 640×480), cambiar el modo de trabajo (50 hercios, 60 hercios o exterior) y ajustar el contraste y el brillo.

Interfaz de administrador:

Además de poder hacer lo mismo que el perfil del operador, puede configurar el resto de opciones que la cámara provee.

Hay una cosa curiosa y es que aunque esta cámara es de la marca zaapa, si se accede a la web de la marca y se busca el producto CIPRW o ZA-CIPRW no se encuentra por ningún lado. Pregunté a Zaapa Ibérica por este modelo en concreto y me han dado la callada por respuesta.

Finalmente dejo un par de videos que muestran el funcionamiento de la cámara.

Desde fuera:

Desde la cámara:

Editado 23/09/2008:

Buscando por internet veo que el fabricante de la cámara es la empresa de origen chino foscam, cuyo modelo original es FI8901W. De hecho en su web podeis descargaros el manual y el último firmware.