Nueva placa: ST Nucleo

Me he comprado una nueva placa de desarrollo, similar a Arduino pero algo más potente, de hecho es compatible pin a pin con Arduino, pero tiene bastantes pines adicionales macho, tanto en la cara de arriba como en la de abajo.

Lo que más me gusta es el microcontrolador ARM Cortex-M4 que monta. Tenía ganas de cacharrear con la arquitectura ARM un poco, el Cortex-M4 es la evolución del tan utilizado Cortex-M3 pero que además incorpora instrucciones de DSP.

No tengo ningún proyecto en concreto para trabajar con él pero sí me gustaría probar opciones que he encontrado por Internet, como programarlo con JavaScript o hacer que corra un kernel Linux.

Red de Vehículo

Tesla model S.

Gracias a los enlaces de entramado descubro una noticia muy interesante que ha compartido Pablo, el descubrimiento de un puerto Ethernet en el Tesla S, el coche utiliza un Ubuntu para gestionar su contenido multimedia y los diseñadores le han provisto de un puerto Ethernet conectado a la red del coche, una red con 3 dispositivos, independiente de las redes más críticas del coche. Es decir que además de las interfaces y redes ya comunes en el resto de coches como ODB II o CAN, debido al auge del coche multimedia, ahora se suman al coche las redes que tradicionalmente han sido de PC. Esto a parte de un posible jailbreak del Tesla del que ya se habla implica otras cosas también interesantes, la posibilidad de ampliar a tu gusto la red tu coche, conectar los dispositivos que le vengan en gana, colocarle un punto de acceso Wifi,comunicarte con una antena con los coches de alrededor, unir tu coche a tu red de hogar… En fin, miles de posibilidades que se harán posibles, siempre que los fabricantes no nos blinden el acceso a estas redes, que es muy posible. ¿El futuro? Próximamente, en las pantallas de tu coche.

El paradigma pasivo frente al activo

Fey Ilyas / Foter / CC BY-SA

Hace poco conocí en persona por fin a Ester y Alfonso de Arrsa, tuvimos una fructífera conversación sobre nuestros actuales proyectos y me hablaron sobre el paradigma de construcción pasiva que se está imponiendo en edificación y sus ideas sobre como enfrentar el problema del confort en edificios de una forma más «activa», estoy seguro de que ellos os lo pueden explicar mejor que yo, así que les cedo el testigo en esta parte, hoy voy a hablar de un caso distinto.

Una de las ideas que me vino a la mente días después cuando repensaba estos conceptos es que ya existía algo parecido en un campo más cercano al mío, pero en este caso no son ideas opuestas, sino que se complementan,
y lo encontramos en los auriculares, todo un ejemplo de ingeniería moderna.

Sí, podemos comprarnos unos auriculares baratos de baja tecnología, pero hay quién busca algo más  y ahí aparecen las tecnologías de reducción del ruido. Pues es aquí mismo donde encontramos esas dos formas de solucionar el problema, la reducción del ruido activa y la pasiva.

Reducción Pasiva

Esto es relativamente sencillo, consiste en añadir capas de material aislante sonoro para eliminar ruidos externos. Cuanto más aislante más reducción, pero encarecemos y hacemos más pesado el producto. Este tipo de aislamiento funciona como un filtro paso-bajo, es decir que elimina las altas frecuencias.

Reducción Activa

En este caso se utilizan las propiedades de las ondas para cancelar los sonidos externos de forma activa, es decir mediante electrónica. Se coloca uno o varios micrófonos y sabiendo su ubicación se calcula como cancelar la onda recibida en el interior del oído. Esto es importante saberlo, sólo se cancela el sonido en un punto, en este caso el oído, puesto que debido a las propiedades de las ondas, la cancelación en un punto provocará un aumento en otro punto.

Esta es una idea interesante, ya que no estamos aplicando la «fuera bruta» del aislamiento, no necesitamos una envolvente, sólo unos sensores, unos actuadores y un procesador de señal que realice el control y ésta es una idea que se puede aplicar a muchos problemas de este estilo, entre ellos el confort en viviendas.

Para acabar de rematar la jugada tengo que decir que la reducción activa funciona bien para ruidos de bajas frecuencias, normalmente se utilizan miden ruidos de frecuencias bajas para cancelarlos, es decir que actúa como un filtro paso-alto. Esto lo hace perfecto para complementar la reducción pasiva de ruido, eliminando el ruido en todas sus frecuencias. La mejor solución como en muchos otros casos es una síntesis de dos ideas diametralmente opuestas.

Accediendo al sistema de archivos de Raspberry Pi

Hasta ahora había escrito sobre como acceder a una terminal de forma remota en Raspberry pero hoy quiero explicar como acceder directamente al sistema de archivos para subir y bajar ficheros de forma simple.

Una opción es hacer uso del conocido sistema FTP para la transferencia de archivos, pero esto conllevaría instalar un servidor FTP en la RPi sobrecargando aún más la no muy potente Raspberry.

La solución que he adoptado es mucho más sencilla, vamos a hacer uso del protocolo SFTP, un protocolo de transferencia de ficheros sobre SSH y como ya tenemos funcionando SSH no necesitamos instalar ningún nuevo servidor. El procedimiento es así de simple:

Instalamos FileZilla en nuestro PC, una herramienta muy recomendable.

Lo abrimos y pinchamos en el Gestor de sitios, primer icono arriba a la izquierda. Nos aparecerá una ventana como la siguiente:

Configuración de SFTP en Raspberry.
Configuración de SFTP en Raspberry.

Creamos un nuevo sitio, le ponemos el nombre que queramos, en este caso Raspberry, y rellenamos la parte de la derecha. En servidor la IP de la RPi, protocolo SFTP, modo de acceso normal y nuestro usuario y contraseña.

Pinchamos en «Conectar» y en un momento se conectará y tendremos acceso en el panel derecho el sistema de archivos de nuestra pequeña computadora.

Este sencillo truco sirve para cualquier sistema empotrado, dándonos un acceso fácil al sistema de archivos en ejecución.

Monitorizar la temperatura desde Raspberry Pi

En este pequeño tutorial os voy a enseñar como monitorizar la temperatura de una habitación con sólo una Raspberry Pi, un sensor de temperatura DS18S20 y un poco de software.

Vamos a utilizar Emoncms, del que ya os he hablado anteriormente, instalarlo es realmente fácil, no tengáis miedo de seguir estas instrucciones, enseguida lo tendréis funcionando.

El siguiente paso va a ser conectar a la Raspberry Pi el sensor DS18S20+, podéis pedir una muestra gratuita a Maxim Integrated. El sensor se conecta usando los pines que tenemos disponibles en la RPi. Para conectarlo hay que seguir el siguiente esquema:

DS18s20 conectado a Raspberry Pi.
DS18S20 conectado a Raspberry Pi.

Es muy sencillo de conectar utilizando unos conectores para jumpers, yo he reciclado los que venían para la placa base de un PC de sobremesa antiguo, los que la conectan con los LEDs y los botones de encender y reiniciar.

El siguiente paso es poner en marcha una aplicación que recoja la temperatura del sensor y la envíe al servidor EmonCMS. Para ello voy a utilizar Python, un lenguaje interpretado muy sencillo que se utiliza mucho en la comunidad Raspberry Pi. El acceso al sensor se realiza a través de un driver que nos proporciona ya nuestra distribución de Raspbian.

El siguiente código es plenamente funcional, aunque posiblemente algo espartano, es necesario que añadáis vuestra apikey de Emoncms, la encontraréis entrando a vuestro servidor Emoncms, en la ruta /emoncms/input/api, hay que elegir la «Read & Write:» puesto que vamos a escribir los valores.

También podéis modificar cada cuanto tiempo queréis que se envíen los datos, en este caso cada 10 segundos, pero es posible modificar la línea «time.sleep(10)» por el número de segundos que queráis.

import os
import glob
import time
import urllib2, httplib
os.system('sudo modprobe wire')
os.system('sudo modprobe w1-gpio')
os.system('sudo modprobe w1-therm')
base_dir = '/sys/bus/w1/devices'
f = open(base_dir + '/w1_bus_master1/w1_master_slave_count', 'r');
sensorCount = f.readlines()
sensorCount = [int(l[0]) for l in sensorCount]
f.close()
f = open(base_dir + '/w1_bus_master1/w1_master_slaves', 'r');
devices = f.readlines()
f.close()
def read_temp_raw(sensor):
device_file = base_dir + '/' + devices[sensor][:-1] + '/w1_slave'
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines

def read_temp(sensor):
lines = read_temp_raw(sensor)
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw(sensor)

equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
return temp_string[0:4]

while True:
url = "http://localhost/emoncms/input/post?json={"
for x in range(0, sensorCount[0]):
url = url + devices[x][:-1] + ":" + read_temp(x) + ","
url = url[:-1]+"}&apikey=LA_APIKEY_VA_AQUI"
print(url)
urllib2.urlopen(url)
time.sleep(10)

Acordaos de respetar la indentación (tabuladores) en el código, si no no funciona bien en Python. Guardamos este código como un archivo .py, por ejemplo temperatura.py y ya lo podemos ejecutar de la siguiente forma:

python temperatura.py

Ahora ya nos podemos ir a Inputs en Emoncms y encontrar la entrada correspondiente a nuestro sensor de temperatura. En su configuración añadiremos un proceso «x 0.01» para que nos muestre la temperatura en ºC y bajo de eso un «Log to feed» para poder mostrarla. Ahora ya aparecerá en la pestaña Feeds, donde la editaremos y la seleccionaremos como REALTIME. Por último en la pestaña Vis seleccionamos el visor Realtime y el feedid de nuestro sensor de temperatura. El resultado será algo parecido a esto:

Temperatura en tiempo real.
Temperatura en tiempo real.

Ahora podemos poner este visualizador en el Dashboard y habremos terminado.

Actualización: Ahora puedes bajar el archivo python desde mi Github: https://github.com/carsanbu/tipi-web/blob/master/utils/temp_DS18S20_emoncms.py

Muerte al datasheet

¡Open Data en electrónica o guerra!

Cualquiera que ha hecho un pequeño estudio de mercado sobre algún producto sabe lo tedioso que es este proceso. Si a ello le unimos las particularidades del mundo electrónico, con sus datasheets en roñosos PDFs, su falta de información o su secretismo, nos encontramos con un panorama desolador.

¡Pero ya está bien! Estamos entrando en la era del Open Data, de la información liberada de una forma entendible tanto a máquinas como a humanos. ¿Por qué nos tenemos que encadenar al datasheet? Las hojas de características son algo heredado de aquella época en que la información se manejaba en papel y había una escasez de información tremenda, en esa época cuando comprabas un sencillo chip te venía con unas cuantas hojas donde numeraba una por una sus características en el orden que al fabricante le pareciera.

¿Pero hoy? ¡Hoy tenemos ordenadores! Podemos procesar la información a velocidades impensables en aquella época. ¿Por que tenemos que seguir con el mismo formato con la única diferencia de que ahora manejamos archivos digitales? Tenemos opciones mucho mejores.

Open Data de calidad

No digo sólo que mostremos las características en archivos de texto planos como pudiera ser un HTML en una web o incluso datos más o menos estructurados en XML, eso es un cambio mínimo que cualquier empresa puede hacer con muy poco esfuerzo. La verdadera innovación es ofrecer las características de tu producto en una base de datos accesible por internet, que podamos descargar información de una forma sencilla y minar los datos para sacar conclusiones de forma rápida. ¿Estás dispuesto a ser el primero? Por que el segundo ya no obtendrá los beneficios de la apertura.

Y si no, la guerra

Aún así me parece que los fabricantes no están muy por la labor de liberar sus datos. Pero es posible plantar cara a la cabezonería creando nuevas empresas de inteligencia corporativa pero esta vez especializadas en producto, que destilen la información que a cuentagotas proveen los fabricantes y las vendan a un precio competitivo. De esta forma no sólo se crea una nueva forma de negocio, si no que se mejora la competencia y se contrarresta el efecto red que sufren algunos productos en electrónica.

¿Os acordáis de los PIC de Microchip antes de Arduino? ¿O los procesadores Intel antes de los smarphones? Eso es lo que hay que combatir y ahí está la forma.

Control aplicado a la electrónica

Nuestro curso de control libre y distribuido sigue dando guerra. En este caso voy a hablar de un ejemplo aplicado control en electrónica que ha diseñado Pablo Trujillo y nos muestra en su blog (ahora con dominio propio).

El objetivo es sencillo, se trata de una sencilla fuente de alimentación lineal, dada una tensión de referencia se pretende obtener esa tensión en la salida sin que se vea afectada por la carga que le coloquemos. Para obtener esto es necesario aplicar el principio fundamental del control, cerrar el bucle, y después implementar un controlador.

Para ello Pablo utiliza una implementación del controlador basada en electrónica analógica pura. Para ello utiliza un operacional en configuración restador, lo que nos proporcionará la señal de error.

Resta de señales referencia y salida.
Resta de señales referencia y salida.

En este caso podemos decir que el controlador es un proporcional con ganancia (Kp) 1, es decir que la acción de control y el error son iguales.

Veámoslo en el circuito:

Restador con un operacional.
Restador con un operacional.

Como hemos visto en el curso, este controlador tan sencillo puede producir un error en régimen permanente que para una fuente de tensión no es tolerable, la solución ya la conocemos, implementar un control PI, y eso mismo ha hecho su diseñador.

Esto en electrónica queda de la siguiente forma:

Restador + Integrador con un operacional.
Restador + Integrador con un operacional.

Como vemos lo único que ha cambiado es que en lugar de una resistencia en la realimentación del operacional hay un condensador. Esta configuración responde a la siguiente ecuación:

$latex u(t)= \frac{1}{RC} \int (y(t)-r) \mathrm{d}t$

O en Transformada de Laplace y sabiendo que y-r=e:

$latex u(s)= \frac{1}{RCs} e(s)$

Si pasamos la señal de error al otro miembro de la ecuación y subimos arriba la constante nos queda algo más parecido a una Función de Transferencia:

$latex \frac{u(s)}{e(s)}= \frac{\frac{1}{RC}}{s} $

Y ahí tenemos nuestro PI, con una ganancia ajustable de 1/RC.

Este es un ejemplo de una implementación de controladores de forma analógica, se puede implementar un controlador de muchas formas: mecánico, redes neuronales artificiales, lógica borrosa o analógico como éste, pero definitivamente la forma mas extendida es la digital, la que veréis en la mayor parte de PIDs comerciales.

Aunque este curso aún no se ha metido en cosas tan complejas como el desarrollo matemático y la implementación, siempre es recomendable pegarle una ojeada a los resultados finales que es posible obtener aplicando control.

Imágenes cortesía de mips & chips.

Poniendo a punto XBMC en Raspberry Pi

Skin predeterminado de XBMC.
Skin predeterminado de XBMC.

He seguido este tutorial de mi amigo Alex para instalar XBMC en la Raspberry Pi, pero con esto no es suficiente, lo quiero tunear para que tenga todo lo que yo gasto y de esto va esta entrada, todo lo que he hecho para poner a mi gusto XBMC.

 

 

Inicio automático

En primer lugar quiero que XBMC se inicie automáticamente nada más arrancar la RPi, para esto editamos el archivo /etc/default/xbmc para que quede de la siguiente forma:
# Set this to 1 to enable startup
ENABLED=1
# The user to run XBMC as
USER=pi
# Adjust niceness of XBMC (decrease for higher priority)
NICE=-10

De esta forma le estamos indicando que el usuario que vamos a usar para XBMC es el usuario pi, el que viene por defecto en Raspbian. Además estamos incrementando el nivel de prioridad de XBMC, par que vaya más fluido.

Activar apagado

Para permitir apagar la Raspberry directamente, modificamos el archivo /var/lib/polkit-1/localauthority/50-local.d/xbmc.pkla añadiendo lo siguiente:
[Actions for xbmc user]
Identity=unix-user:pi
Action=org.freedesktop.upower.*;org.freedesktop.consolekit.system.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Manejo

Una vez hecho esto ya podemos conectar la Raspberry Pi a nuestro televisor y manejarla con un teclado USB, el mando a distancia del televisor si tenemos HDMI CEC o como en mi caso utilizando el móvil, con la aplicación XBMC Remote, sólo tenemos que acordarnos de permitir la conexión mediante http, yo estoy utilizando el puerto 1025 porque ya tengo en uso el puerto 8080.

Servidor multimedia

Otra funcionalidad de XBMC que me está encantando es poder utilizarla como servidor UPnP (algo parecido y en cierto modo compatible con el famoso DLNA). Mediante UPnP puedo compartir toda mi colección de música, vídeos e imágenes con cualquier dispositivo de mi red local que lo soporte, es decir que puedo ver películas en mi PC aún que estén a varios metros de distancia en un disco duro conectado a la RPi o tener toda mi música (muchos GB) a mano en el móvil mientras voy de un sitio a otro por la casa. Para Android me ha venido muy bien la versión gratuita de Mediahouse. Para GNU/Linux podéis buscar información sobre Grilo.

Plugins

También podemos instalar plugins como el que os voy a mostrar a continuación. Pelisalacarta nos permite conectarnos a un montón de servicios de streaming, yo en concreto uso Series.ly y este se encuentra entre ellos, os voy a explicar como instalarlo desde SSH de una forma rápida.

Primero buscamos en la web del plugin su enlace, asegurándonos de que sea la última versión y que sea efectivamente para XBMC, lo copiamos y nos vamos a una terminal SSH:
wget http://blog.tvalacarta.info/descargas/pelisalacarta-xbmc-addon-frodo-3.2.63.zip

Y con esto se descarga el plugin en la versión actual. Despues desde XBMC, vamos a la sección de instalar plugins desde zip, lo buscamos en nuestra carpeta home (/home/pi) o donde lo hayamos descargado y lo instalamos sin más problemas (tarda un par de minutos).

Y con esto lo tengo todo, lo que aún tengo pendiente es encontrar un Skin bonito y ligero, muy ligero, que la RPi tampoco puede con mucho.

¿Micro-exploración espacial?

Me encantan las pequeñas editoriales que recibo cada mes con Elektor.POST en el correo, este mes hablan de exploración espacial, un tema del que ya hemos hablado en este blog y que se está poniendo cada vez más candente, ahí va la reflexión:

Crónicas Marcianas

La semana pasada, el vehículo explorador Curiosity entonó un solitario «cumpleaños feliz» en Marte, tras pasar un año en el planeta rojo. Aunque no esté relacionado directamente, cosas como ésta me hacen pensar en el futuro de la exploración espacial. Es muy probable que se base en financiación privada, al margen de la burocracia y en algunos casos hasta un poco bajo la filosofía del «hazlo tú mismo». La lista de empresas privadas dedicadas es impresionante, incluyendo las fundadas por célebres emprendedores como Richard Branson, Elon Musk, Burt Rutan, e incluso John Carmack (así es, una figura clave en la industria de los videojuegos). En los años 50, pretender diseñar nuestro propio sistema domótico habría sonado un poco a historia de ciencia ficción de Ray Bradbury: imposible. Hoy en día, la idea de explorar el suelo marciano cómodamente desde el sofá, con nuestro propio rover suena un poco… en fin… ¿lo adivináis?
Jaime | Elektor

PS: Se me olvidaba enlazar ésta entrada de Pablo que nos viene al pelo.