Última actualización 25/11/2021.

Después de tantos años el sensor de temperatura dejó de funcionar. Comenzó a devolver temperaturas extrañas (85º y 127º). tras comprobar el cableado y la conexión lo dí por perdido.

Ahi tenía la disyuntiva, comprar otro o reemplazar la estación. Llevaba ya estos últimos años con la tentación de comprar una completa. Al final la rotura me empujó a tomar la decisión y la he comprado.

Sainlogic WLAN

La he colocado en el jardín, alejada de la pared de la casa y sobre un mástil, para ganar algo de elevación.

La estación tiene los siguientes sensores:

  • Temperatura: exterior e interior.
  • Humedad: exterior e interior.
  • Presión atmosférica.
  • Lluvia (pluviómetro)
  • Anemómetro.
  • Veleta.

Además tiene WiFi y conexión con varios servicios de meteorología como Weather Underground.

Aquí os dejo el link a mi estación en WU.

2021-11-25_11-06-24.png

Última actualización 10/02/2015.

Como se acerca mi cumple este año me he autoregalado un Smartwatch Android. No es que esto sea un blog de tecnología, por lo que no hablaré del reloj. Ahora bien, como apasionado de saber qué tiempo hace en mi casa aunque no esté en ella, al igual que en su día hice un widget para el móvil poco he tardado en hacer lo propio con el SmartWatch.

Al día siguiente de tenerlo ya estaba actualizando el Android Studio y preparando el entorno para comenzar. Un día después y tras lidiar con el sistema de sincronización RelojMóvil pues ya lo tengo.

DSC_0033.JPG

Última actualización 15/01/2015

Hace bastante tiempo que no actualizo la estación, aunque algún cambio he hecho ha sido en la parte software sobre todo. También he comprado un Arduino con el fin de solucionar un problema originado por la capacidad multitaréa de la pi. Algunos de los sensores, especialmente el sensor de humedad DHT11 están basados en secuencias de tiempo, es decir, se envían secuencias de 1s y 0 con pausas entre medias de intervalos de tiempo específicos. Si durante la lectura el SO roba el procesador a mi programa habrá pasado más tiempo del correcto en la lectura y por tanto no se leerán valores correctos. Con el Arduino eso no pasa, puesto que la ejecución es continua, sin interrupciones. Pasando los sensores al Arduino implica librarse de este problema. Si bien no he tenido tiempo de hacer nada, tener hijos y trabajo es lo que tiene :)

Hoy mismo he modificado el algoritmo de cálculo de la predicción del tiempo que fallaba mas que una escopeta de feria por otro basado en el algoritmo de Zambretti. Se supone que funciona casi perfecto, el tiempo lo dirá. Para más información sobre esto os animo a consultar google :)

También he añadido la sensación térmica, que está basada en una fórmula que necesita la velocidad del viento. Como el anemómetro no está terminado y de hecho está medio abandonado :( he optado por obtener la velocidad y dirección desde la web de la AEMET, que pone un xml a disposición de los usuarios con los datos del clima.

De modo que leo los dos valores de velocidad y dirección y los uso tanto para presentación como para realizar el cálculo de la predicción y la sensación térmica.

He dicho que el anemómetro está abandonado, bueno, es cierto a medias, tengo una parte hecha, con un motor de ventilador de PC al que he pegado un CD y al CD unas mitades de bola de ping pong. Al girar el motor genera corriente de salida. Con el Arduino era mi idea medir el voltaje de salida y usarlo para calcular la velocidad, pero de momento no he terminado con esto.

DSC_0019.JPG

Última actualización 18/11/2013

Tres meses después retomamos un poco el impulso. Tengo dos pasos pendientes, bueno, en realidad hay un par de cosas más en mente, aunque básicamente me cargué la mitad de los componentes así que para ese segundo paso me queda esperar un poco mas.

Primer paso, retomar el anemómetro. Acabo de comprar en dx un sensor fotoelectrico. El sensor consta básicamente de un emisor de luz infraroja, un receptor y un comparador LM393. El comparador pone su salid a 1 cuando se bloquea la luz y a 0 cuando no. Este sensor vale, entre otras cosas, para contar objetos (imagina una máquina que cuente monedas, al pasar la moneda por medio del sensor tapa la luz, eso genera una salida de 1 que puede usarse para sumar a un contador.

sku_150663_1.jpg

En nuestro caso, como ya expliqué en algún post anterior, básicamente el rotor que será movido por unas aspas o cazuelas (ya veremos) al rotar tendrá en algún punto del mismo un saliente que pasará a través del sensor (a ver si me consigo alguien con impresora 3D que me haga algo :P ) poniendo su salida a 1.

La salida irá en un puerto GPIO y mediante un software se capturará la interrupción cuando el puerto se ponga a 1, en este enlace o en este otropodeís ver cómo programar un contador mediante interrupciones. Para nuestro caso tendremos que modificar el software para que cuente el número de interrupciones cada cierto tiempo de modo que podremos calcular las RPM, luego, sabiendo el radio del círculo donde irá el saliente se puede calcular la velocidad rotacional en kilómetros por hora.

La fórmula es: v = 2πR × RPM × (60/1000) km/hr

clculo_velocidad.jpg

La segunda parte es incluir una cámara de seguridad con infrarojos. Tenía una vieja cámara usb con leds, cuatro, y compré 8 leds de infrarojos con la idea de sustituir los que llevaba la cámara, que incluye un sensor de luz, con lo que se apagan y encienden solos. Pues al desoldar los viejos led me he cargado las pistas :( demasiado calor, ya sabeis que no soy un experto soldador, solo aficionado y basta, aprendiendo, eso si. El caso es que ya no se detecta la cámara, así que me toca comprar otra, tiempo al tiempo.

Hay un tercer paso, me he comprado cable plano y conectores y es mi idea el dejar todo un poco mejor, que ahora no es que esté mal, es que si desconectas algún pin de la raspberry luego toca mirar el programa de nuevo para ver donde va cada uno. Así que la idea es pasar a cable plano.

Saludos.

 

Última actualización 16/08/2013

Hola.

Tras dos meses desde el último cambio hace dos semanas me animé a comprar otro sensor de humedad para intentar poner fuera. Llegó esta semana, uno similar al que ya tenía, modelo DHT11. Ayer me he puesto y además he encontrado la forma de ponerlo fuera. Además he eliminado el botón que tenía conectado a los led de la pantalla (la retroiluminación) porque no funcionaba bien optando por conectarla directamente a un puerto GPIO, así que ahora puedo encender y apagar la retroiluminación de manera remota.

Para proteger al nuevo sensor de humedad del agua he aprovechado la carcasa de plástico de un viejo microfiltro de ADSL que tenía por ahi tirado. Le he quitado el circuito del microfiltro y he metido dentro el sensor DHT11, cerrando luego con cinta aislante para protegerlo más. He soldado el sensor con 3 cables de 20 cm (mas o menos).

20130815_171726.jpg

También he desoldado el sensor de temperatura externo.

Para salvar la distancia he comprado cable de altavoz, 10 metros, aunque no he usado tanto.

20130815_171720.jpg

Para no tener que dejar la ventana abierta, como tenía hasta ahora, he sacado el cable por el cajetín de la persiana y de ahi al exterior. Así que ahora tengo ambos sensores en el exterior.

 20130815_172019.jpg

Por supuesto he tenido que modificar el software para recoger el valor del nuevo sensor. Ahora mismo la estación recoge:

Temperatura exterior.

Temperatura interior.

Presión atmosférica.

Humedad exterior.

Humedad interior.

He añadido también el valor del punto de rocío, por curiosida de cómo se calcula, básicamente.

Los siguientes pasos serán:

Aplicación para Windows 8 en interfaz metro. (Mi tablet es Windows 8 :D)

Anemómetro. He visto poca información para Raspberry Pi, aunque pensando en cómo se mide quizás sea más sencillo de lo que parece. Básicamente tenemos una veleta con un rotor en medio y unas cazoletas para que el aire las mueva.

En la veleta podemos poner, por ejemplo, un sensor mágnético (brújula electrónica) como esta que vi en DX GY-273 HMC5883L 3-Axis Magnetic Electronic Compass - Blue (3~5V) que emplea el protocolo I2C por lo que no ocuparía puertos GPIO (que ya van escaseando).

Para la velocidad, pensando en los viejos ratones, los que llamaban ópticos y tenían una bola. La bola hacía girar dos ejes conectados a una rueda con muescas. La rueda se encontraba entre un emisor y un sensor de infrarojos, al girar las muescas interrumpían o dejaban pasar el haz de luz. Eso se traducía en el sensor en una salida digital de 1 o 0. Contando el número de transiciones de 0 a 1 a lo largo de un intervalo de tiempo se puede calcular la velocidad. Podemos entonces o bien desguazar un antiguo ratón (a ver si encuentro uno) o comprar en DX este módulo LM393 Comparator Speed Sensor Module for Arduino (Works with Official Arduino Boards). La pega de este módulo es que no tiene los ejes ni nada, pero realmente no necesitamos más que una sola muesca por vuelta, nos intersará contar el número de vueltas, no necesitamos tanta precisión como un ratón.

Por el momento intentaré hacerme con un viejo ratón para ir trasteando, no tiene mucho sentido ahora mismo poner el anemómetro porque mi casa está muy resguardada del viento y la medición sería poco fiable, pero de todos modos seguramente lo construiré todo igualmente.

Con el anemómetro podremos obtener los valores de velocidad y dirección del viento y conjuntamente con la temperatura me serviría para calcular la sensación térmica.

Última actualización 17/06/2013

Pues nada, cuando me pongo me pongo. Me he buscado un manual de soldadura, he comprado estaño más fino (ahi estaba la clave) y me he puesto este fin de semana a soldar, el resultado:

20130614_204549.jpg

Ya he soldado todos los componentes en una placa, así que están mas estables, los valores han mejorado en precisión, la pantalla LCD ya no hace cosas raras. También he sustituido el cable, que para poder usarlo mejor en la caja de prototipos había elegido uno no flexible, con un solo cable en su interior, por lo que ahora ya puedo doblar, lo que me permite cerrar de nuevo la Raspberry Pi en su caja, el conjunto es como sigue.

20130615_113229.jpg

Una vez que terminé de soldar y probar todo de nuevo también he hecho algunas modificaciones en el código que maneja el LCD, he cambiado la forma de presentar los datos y he añadido la temperatura interior y exterior. Además del gráfico de la predicción. Como veis en la imagen la Raspberry está ahora cerrada de nuevo.

El siguiente paso será un sensor de humedad más para el exterior y encerrar la placa en una cajita, para que quede un poco más fino.

Saludos.

Última actualización 13/06/2013

El martes me llegó el sensor externo de temaperatura. Ayer fui a comprar a una tienda de electrónica un soldador nuevo, placa de fibra de vidrio, cables nuevos y un par de resistencias. en cuanto pude, a la noche, me puse a intentar soldar a la placa nueva, he descubierto que no se soldar tan pequeño, jejeje. Así que por el momento, hasta que aprenda, quedarán los componentes en la placa de prototipos.

20130613_211632.jpg

De todos modos ahora por fin tengo temperatura exterior. He colocado el sensor en la placa, he cambiado el pin del sensor de humedad que ocupaba la patilla del protocolo 1-Wire (leed la sección de hardware para ver más detalle en la sección del nuevo sensor) y he modificado el software para que lea el nuevo valor. Estoy almacenando igualmente la interior, así que tengo ambos valores. Podeís ver en la página de la estación la diferencia entre ambos valores.

20130613_211618.jpg

Próximo paso, aprender a soldar :D Lo siguiente será comprar sensor de humedad de exteriores también.

Última actualización 05/06/2013.

Ayer me llegó de DealExtreme la pantalla LCD. Como niño con zapatos nuevos me dispuse a conectarla. Tuve algún problema que otro por los pines, dado que wiringPi los numera de una forma diferente a como aparecen en los esquemas de los puertos de la Raspberry Pi, tras un poco de google ya pude conectarlo. Aqui teneís el resultado.

20130604_222522.jpg

Aunque parezca todo bien en realidad presenta algunos problemas de sincronización en la imagen a veces. Es una primera prueba, aún tengo que integrar el código, así que, poco a poco. Seguramente prepare programa externo al de captura de datos, el motivo es porque quiero varias ventanas diferentes y poder pasar de unas a otras, para eso tendré que añadir algunos switch también. Pero eso será posteriormente. Antes de poder hacer eso necesitaría pasar los componentes a una placa. Me he dado cuenta que los voltajes en los pines varían ante cualquier mínimo movimiento de la caja de prototipos, se ve que las conexiones no son estables. Por eso me decido a ir pasando a placa de silicio, pero para eso necesito primero un soldador en condiciones.

Próximo paso, en cuanto venga el sensor externo de temperatura, colocarlo y adaptar el código y la web para presentar temperatura exterior e interior. Una vez hecho esto, hacerme con un soldador y comprar placas de silicio para ir fijando los componentes.

Un saludo.

Última actualización 03/06/2013.

Aunque en principio no tengo necesidad de añadirlo este fin de semana he desguazado un aparato que tenía por ahi tirado con el fin de aprovechar algún componente y me he topado, además de los switch que estaba buscando con un display led de 4 dígitos y 7 segmentos.

20130602_234313.jpg

Los switch los quiero para controlar el display LCD, tanto la luz de fondo, para lo que tendremos un botón que al pulsarlo encenderá el led de la pantalla durante N segundos (como un reloj) como otro par para controlar lo que se visualiza en la pantalla, es decir, tendremos varias pantallas distintas (en cuanto tenga montado el display lo haré y lo explicaré en detalle). De hecho, por utilizar botones tendré que separar en una capa mas la parte visualización, con lo que tendré que modificar la parte software. Los switch se conectan de manera similar a un led. En Adafruit tenemos un tutorial para arduino, nos vale aunque la parte software será diferente. Como vereís en ese tuto no es tan sencillo como conectar un pin a 3,3V y el otro a un puerto GPIO, haciendo esto lo que sucede es que cuando no está pulsado el botón en el puerto GPIO mandamos, nada, por lo que la lectura no es correcta, lo que hay que conseguir es mandar un 0 lógico cuando no está pulsado y un 1 lógico cuando lo está, esto lo conseguimos con resistencias pull-up y pull-down básicamente ponemos conectamos el pin de entrada a 5V y el de salida al puerto GPIO y a tierra con resistencias de 10KOhm a tierra y 100Ohm al puerto GPIO. Cuando el switch no está pulsado el puerto y tierra están conectados, la resistencia es alta, pero lo que queremos es un cero lógico por lo que con que estén conectados es suficiente, cuando el switch está pulsado los 3,3V van al puerto GPIO por un lado, con y por el otro a tierra, pero con la resistencia de 10KOhm por medio. Para la lectura del pin, usando wiringPi fijamos el puerto GPIO a lectura y leemos el valor en ese puerto GPIO y listo.

El Display LED de 4 dígitos y 8 componentes es un elemento muy atractivo para mi proyecto. Podría sacar la hora actual, por ejemplo, o la temperatura, o presión, etc... Por ejemplo, conectando también los switch podría sacar por este display diferente información. Si no hubiese pedido el display seguramente lo habría hecho, pero tiene una pega, son 12 conectores, por lo que sale "caro" en puertos. Hay componentes que pasan de binario a 7 segmentos, por lo que podría reducir de 12 a 8. También hay microcontroladores que nos permitirían usar I2C para el display, pero como solo tenemos un puerto I2C y lo está usando el sensor de presión atmosférica, pues eso, de momento no lo usamos, pero como curiosidad explico como funciona. Gordon @ Drogon lo explica en su web.

led2.jpg

La idea básica, se llaman de 7 segmentos (aunque en realidad son 8, el punto decimal es uno más) porque cada dígito está construido por 7 leds (mas uno), siendo cada uno de ellos un segmento que se iluminará para pintar un número. El uno, por ejemplo, se crea encendiendo los dos segmentos de la derecha y dejando el resto apagados, bueno, no hace falta que me extienda en esto, todos teneís seguro algún reloj digital.

Tenemos 4 dígitos, así que deberíamos tener 8 pines en el display por cada uno de ellos, si bien el display tiene 12. 4 de los 12 son un selector de dígito, es decir, con estos 4 controlamos qué dígito va a estar encendido. Los otro 8 pines son los segmentos y son compartidos por los 4 dígitos. Es decir, ponemos el número en los segmentos y decimos con los otros 4 qué dígito se va a encender. Pero esto solo nos permitiría escribir un dígito, así que el "truco" consiste en encenderlos uno tras otro muy rápido, lo suficiente como para que nuestro ojo no lo note. En la imagen anterior vemos el número 1234. Lo que se hace es: primer ciclo, ponemos el 1 en los segmentos y en el control seleccionamos el primer digito; segundo ciclo, apagamos el pirmer dígito; tercer ciclo, ponemos el 2 en los segmentos y seleccionamos el segundo dígito; cuarto ciclo, apagamos el segundo dígito; quinto ciclo, ponemos el 3 en los segmentos y seleccionamos el tercer dígito; sexto ciclo, apagamos el tercer dígito; séptimo ciclo, ponemos el 4 en los segmentos y seleccionamos el cuarto dígito; octavo ciclo, apagamos el cuarto dígito. Repetimos estos ciclos indefinidamente. Haciendo esto lo suficientemente rápido el ojo ni se da cuenta (las televisiones hacen lo mismo) y al final lo que vemos es el número 1234 en el display.

Así que para poder controlar el display directamente conectaríamos los pines a puertos GPIO de la raspberry y mediante wiringPi y el procedimiento que hemos descrito escribir lo que queramos en el display. Lo malo es, 12 pines usados, y la raspberry no tiene demasiados.

Un saludo.

 

Última actualización 27/05/2013

Hola.

Este fin de semana he hecho algunas fotos de cómo está la estación ahora mismo.

Podeís ver en ellas los distintos sensores, la placa de prototipos y la raspberry.

Como ya comenté en el post anterior actualmente tenemos 3 leds, sensor BMP085 de presión y sensor DHT11 de temperatura. Está pedida la pantalla LCD y un sensor de temperatura más, externo. Esta semana también miraré para comprar una placa de silicio para empezar a soldar y dejarlo todo un poco menos "prototipado".

Sensores en placa de prototipos.

En esta primera foto podéis ver los sensores y el cableado. de la Raspberry salen dos cables del conector de 3,3V y de tierra que es luego conectado a la placa de prototipos y compartido por todos los sensores. Es decir, la conexión de VCC de los sensores va al conector de la placa donde hemos conectado los 3,3V de la Raspberry. Lo mismo con la tierra. Luego, de cada sensor salen los cables que ya van conectados a los puertos GPIO de la raspberry.

Raspberry Pi Modelo B

En esta otro podeís ver la Raspberry y los puertos GPIO donde van conectados los sensores.

Raspberry Pi + Sensores

En esta podeís ver ambas partes.

Última actualización 22/05/2013.

Esta sección será la más cambiante de toda la Web. Aqui podrás encontrar el diagrama integrado de todos los componentes de la estación junto con fotos y descripciones de los pasos que iré dando a medida que construyo, mejoro y actualizo la estación.

En la actualidad la estación cuenta con una página web donde se muestra información instantanea así como gráficas de la información de históricos almacenada en base de datos, diaríos (por hora) y semanales (máximos y mínimos por día). La estación se encuentra todavía en el interior de mi casa, y el sensor de temperatura externo y panel LCD todavía no están instalados, la salida de predicción la hago a través de 3 LED (Rojo - Mal tiempo, Amarillo - Nomal y Verde - Buen tiempo) por lo que la información de temperatura y humedad corresponden a la de la habitación y no la exterior.

Espero poder instalar en breve el panel y el sensor externo y pasar dicho sensor al exterior por lo que la información será un poco mejor.

Un saludo.