viernes, 30 de agosto de 2013

JDomo, sensores de temperatura DS18B20

NOTA: Este blog se ha trasladado a trasteandoarduino.com.
Ayer estuve añadiendo un nuevo sensor de temperatura al nodo central del sistema JDomo. Ahora, además del sensor interno de la caja y el sensor interno de la Raspberry Pi, tenemos un sensor externo (fuera de la caja), que he colocado usando un prensaestopas y un DS18B20 para exteriores.

El montaje seria algo parecido al siguiente esquema:


Si no me he equivocado en el esquema, los terminales de VCC y GND de los DS18B20 van conectados (los dos) al terminal GND de la placa Arduino, y los de datos a 5v a través de una resistencia de 4700 Ohmios.

Aunque en el esquema se vean los sensores directamente conectados a la placa de prototipos, en realidad tienen un cable a prueba de agua de un metro para poder colocarlos donde mas nos interese, en este caso: uno dentro de la caja estanca, y otro fuera, a través de un prensaestopas que nos asegura que la caja sigue siendo estanca.

Durante el montaje y las pruebas me topé con un inconveniente que hasta ahora no había sufrido. Durante las pruebas en casa con otra placa Arduino lo tenía todo conectado tal y como veis en el esquema pero al llegar al campo, donde tengo el sistema JDomo funcionando, lo conecté al pin 10 (y en el código también especifique que el pin usado era el 10). Hasta aquí todo parece correcto, salvo que cuando le colocamos un shield ethernet a nuestra placa Arduino, hay ciertos pins que ya no podemos usar, y... ¿lo adivináis? el 10 está entre ellos... del pin 10 al 13 se usa para la comunicación SPI con el chip Wiznet de la shield. Hasta que me di cuenta, pasó casi una hora y media de pruebas... Uff... 

En casa en el pin 9 funcionaba. En el campo en el pin 10 usando solo un programa de ejemplo que se limitaba a leer los sensores funcionaba, pero en cuando le cargaba el software JDomo que hace uso de la shield ethernet, dejaba de funcionar... 

Moraleja: siempre que uses una shield o varias, ¡comprueba la compatibilidad entre ellas! ya que si usan algún pin en común seguramente el montaje os dará errores extraños, aleatorios o incluso no funcionará nada en absoluto...

Para finalizar os dejo una imagen para que veais que tal funciona el sistema:

En azul, las lecturas del nuevo sensor DS18B20

PUEDE COMENTAR ESTA ENTRADA AQUÍ

miércoles, 28 de agosto de 2013

JDomo, un mes funcionando

NOTA: Este blog se ha trasladado a trasteandoarduino.com.
 
Hola de nuevo.

¡Qué rápido pasa el tiempo! Ya hace un mes que monté el nodo principal del sistema domótico y tengo unas gráficas que os podrían interesar, así como algunas modificaciones y curiosidades.

Ya me pensaba yo que al empeorar la situación meteorológica la señal 3G mejoraba. Pues sí, y aquí va la prueba. Nada menos que un 10% de mejora de la señal nada mas empezar a empeorar el tiempo... ¿casualidad? ya lo iremos viendo...

Mejora de la señal al empeorar el tiempo.



Otras gráficas interesantes son las de temperatura, dentro de la caja (temperatura ambiente del sistema), y la del micro de la Raspberry Pi. Según las especificaciones se consideran temperaturas normales aunque no estaría de más bajarlas unos 10 grados para intentar alargar al máximo la vida de todos los componentes.

Temperatura dentro de la caja.

Temperatura de la Raspberry Pi.

En este punto he de decir que he detectado picos de 85 grados en las lecturas de la sonda DS18B20 que instalé dentro de la caja. Estaba algo extrañado pero leyendo el datasheet de la DS18B20 vi que cuando se inicia, la temperatura por defecto que almacena en su memoria son esos 85 grados, cosa curiosa...

Más gráficas. Uso de memoria. Cuando programamos un sistema, creamos scripts, los tuneamos... lo más normal es que de vez en cuando algo falle y se queden procesos pendientes de alguna entrada, o que fallen y se queden zombis en memoria, que se repliquen hasta el infinito, etc, etc... Algo así me paso con los scripts que analizaban los datos enviados por la placa Arduino. Una vez que te das cuenta del problema, reprogramas los scripts y además añades un sysctl -w vm.drop_caches=3 para que se ejecute diariamente como una tarea más del cron, y se libere la máxima memoria posible, obtenemos esta gráfica:

Solucionados los problemas de gestión de memoria.

De momento esto es lo que he ido viendo, si tenéis alguna pregunta o recomendación, será bienvenida :)

PUEDE COMENTAR ESTA ENTRADA AQUÍ

martes, 6 de agosto de 2013

Programar Arduino desde la linea de comandos, fácil y rápido

NOTA: Este blog se ha trasladado a trasteandoarduino.com.

Esta vez os voy a contar como programar un Arduino sin todas las molestias que nos causa el tener que usar el entorno gráfico del IDE oficial. Bueno, para mi es una molestia el tener que cargar un entorno gráfico, y un entorno de programación que no aporta nada a una simple linea de comandos de toda la vida. Además si tienes que programar por SSH, a través de una linea lenta, es todavía peor.

Vamos allá.

La herramienta que vamos a usar se llama INO, se trata de unos scripts que nos permitirán inicializar un proyecto, compilarlo, subirlo al Arduino y mostrar una consola serial si la necesitamos.

En el sitio web del proyecto podéis encontrar la información más detallada. En mi caso la instalación bajo Ubuntu es bastante sencilla:

apt-get install git python-setuptools python-configobj python-jinja2 python-serial picocom
git clone git://github.com/amperka/ino.git
cd ino
make install

Con la primera linea instalamos los prerrequisitos de INO y el programa picocom, que es el que usará para conectar de forma serial con Arduino para mostrar la consola. Con la segunda nos bajamos la última versión disponible en el repositorio. Con las dos siguientes lo compilamos e instalamos.

Es posible que necesitéis instalar el paquete build-essential si no tenéis instaladas las herramientas de desarrollo.

Una vez que lo tenemos todo ejecutamos el script:

jose@titanio:~$ ino -h
usage: ino [-h] {build,clean,init,list-models,preproc,serial,upload} ...

Ino is a command-line toolkit for working with Arduino hardware.

It is intended to replace Arduino IDE UI for those who prefer to work in
terminal or want to integrate Arduino development in a 3rd party IDE.

Ino can build sketches, libraries, upload firmwares, establish
serial-communication. For this it is split in a bunch of subcommands, like git
or mercurial do. The full list is provided below. You may run any of them with
--help to get further help. E.g.:

    ino build --help

positional arguments:
  {build,clean,init,list-models,preproc,serial,upload}
    build               Build firmware from the current directory project
    clean               Remove intermediate compilation files completely
    init                Setup a new project in the current directory
    list-models         List supported Arduino board models
    preproc             Transform a sketch file into valid C++ source
    serial              Open a serial monitor
    upload              Upload built firmware to the device

optional arguments:
  -h, --help            show this help message and exit

Para crear un proyecto, creamos una carpeta vacía con mkdir proyecto1, y dentro de ella ejecutamos ino init para crear la estructura básica del proyecto, modificamos el fichero sketch.ino de la carpeta src, añadimos las librerías que consideremos oportunas a la carpeta lib y compilamos con ino build. Si todo ha ido bien podremos subir el programa con ino upload y ver la consola con ino serial.

Fácil ¿verdad?

PUEDE COMENTAR ESTA ENTRADA AQUÍ

jueves, 1 de agosto de 2013

JDomo, montando en nodo principal

NOTA: Este blog se ha trasladado a trasteandoarduino.com.
 
Vamos avanzando en el proyecto de control domótico y ya tengo montado y funcionando (en pruebas) el nodo principal de los que será lo que he bautizado como JDomo (de José y Domótica). 

El sistema está formado por una Raspberry Pi conectada a:
  • un Arduino para control eléctrico de los componentes, control de consumo eléctrico, y sensores de temperatura (por Ethernet),
  • un router Tp-Link MR3420 que nos dará la cobertura Wifi, y la conexión con internet mediante un modem 3G Huawei E220 (por Ethernet),
  • un hub USB con alimentación de 3A al que conectaremos todos los periféricos de la Raspberry,
  • otro modem 3G Huawei E220, para envío de SMS (por USB).
  • un módulo PLC Tp-Link PA411-Kit (por Ethernet)
 Todo el sistema se alimenta desde una regleta estabilizadora APC Essential SurgeArrest 5, y está montado en una caja de PVC estanca.
JDomo (hacer clic para agrandar)
El proceso de montaje fue bastante entretenido: cortando el metacrilato con la sierra de calar y viendo que a medida que lo cortaba se quedaba soldado por donde ya lo había cortado (hasta que probé con la radial y todo fue como la seda), intentando colocar bien los cables eléctricos por debajo de la plancha de metacrilato que sirve de soporte a todo, o aprovechar los agujeros de la carcasa del router para anclarlo al meta... jajajaja, se aprende bastante haciendo bricolaje casero... Ahí van algunas fotos del proceso aunque hay alguna que ha salido algo borrosa:

Caja con el soporte base de metacrilato.
Añadimos la regleta de corriente.

Desmontando el router.

Tornillos para anclar la base del router.

Router y soporte base en una pieza :)
Soporte secundario para la Raspberry, el Arduino, los relés, ...

Electrónica para el control del sistema domótico.
Finalmente, y tras un buen rato de sufrir para colocar la caja en su lugar:

JDomo, nodo central en su lugar.

Tras la instalación llega el momento de más nervios, de comprobar si la cobertura 3G es lo suficientemente fuerte en una casa de campo y dentro de la caja estanca, y de comprobar los datos del sensor de temperatura.

Aprovechando que los datos de la señal 3G nos los da el router desde su página de status, con un pequeño script y el sistema de monitorización Cacti 0.8.8a obtenemos la siguiente gŕafica:


La primera mitad de la gráfica corresponde a la calidad de la señal en las pruebas hechas en casa, mientras montaba todos los componentes (antes de Thu). A partir de ese día se instaló la caja en su ubicación definitiva y se puede ver que la calidad de la señal es bastante estable en torno al 50%. No está mal. ¡Prueba superadaaaa!
Prueba de temperatura. Ya os imagináis el resultado, ¿no?. Yo también me lo imaginaba. Una caja estanca, con componentes electrónicos, a pleno sol, en la zona de Alicante, agosto, ola de calor... mala combinación. El sensor de temperatura que monté dentro de la caja es un DS18B20, que por cierto, no se ve en las imágenes porque lo puse en el último momento:

Como en la gráfica anterior, la primera mita corresponde con las pruebas durante el montaje. El primer pico no muy alto se debe a que por un olvido mio me deje la caja sin cerrar del todo y se abrió a media mañana del día siguiente al que la instalé. ¡51 grados de temperatura ambiente dentro de la caja! Veamoslo con más detalle...


Ni que decir tiene que al ver esto, tuve que reaccionar y el día 30 hice una prueba. ¿Que pasaría si pusiese algo para evitar que le diese directamente el sol a la caja? La temperatura debería bajar, pero ¿cuanto? Veamos los últimos días con más detalle:

El martes a media tarde, cuando más fuerte era el sol, y aprovechando que tenía que ir a por unas cosas al campo, se me ocurrió una prueba rápida, y ya veis que en una hora bajó 10 grados la temperatura, y al día siguiente (hoy), parece que la máxima se ha mantenido 5 o 6 grados por debajo de las máximas anteriores. Todo un logro para esta solución/prueba:

Maravilla de la ciencia moderna...
Sí, un simple cartón enganchado por la parte de arriba a la caja y por la parte de abajo con unas rasillas para que no se vuele, y da ese excelente resultado. Ahora falta buscar una implementación mejor esta solución (algo que no se lleve de bichos, avisperos, y demás...). Se aceptan sugerencias...

Al ver que aumentaba tanto la temperatura ambiente dentro de la caja, activé la monitorización de la temperatura interna de la Raspberry Pi para ver si trabajaba dentro de los parámetros razonables, y esto es lo que obtuve:

Picos de más de 66 grados, con la Raspberry Pi en reposo, porque de uso de CPU no llega ni al 10%:

Con la solución del cartón pasamos a picos de 62 grados de máxima, 4 grados menos. No es mucho, pero algo es algo. El próximo paso será añadirle unos disipadores como a mi otra Raspberry Pi, y comprobar los resultados. O incluso ponerle un pequeño ventilador que haga que no se concentre el calor sobre el procesador y que se reparta mejor por toda la caja... Lo probaré...

Bueno, y como ya es hora de irse a dormir, como decimos por aquí: ¡bona nit!

PUEDE COMENTAR ESTA ENTRADA AQUÍ