Mostrando entradas con la etiqueta DIY. Mostrar todas las entradas
Mostrando entradas con la etiqueta DIY. Mostrar todas las entradas

jueves, 24 de marzo de 2016

Pronóstico del tiempo

Ya que tenemos sensores de temperatura, humedad, presión, velocidad del viento y demás, podremos predecir el tiempo?

Pues hay recursos por ahí para hacerlo, pero no es fácil, ni las agencias meteorológicas aciertan a veces... Con súper ordenadores dedicados a calcular modelos de predicción, satélites, sensores por todo el mundo y demás, tampoco pretendo competir con ellos.
  Pero encontré un modelo de principios de siglo muy curioso, que se basa en la variación de la presión, el modelo Zambretti, si es cierto lo que dicen, acierta en un 90% las predicciones leídas a las 9 de la mañana... Supongo que como se hacía en los barcos para predecir las tormentas mirando la velocidad de bajada del barómetro.
   El algoritmo tiene en cuenta un montón de combinaciones de datos de los sensores para elegir un pronostico entre la lista de 26 posibles estados del tiempo.
Las posibles predicciones traducidas que he incorporado en el algoritmo:
1.Bueno, estable
2.Buen tiempo
3.Bueno, mejorando
4.Bueno, un poco menos estable
5.Bueno, algun posible chubasco
6.Casi bueno, mejorando
7.Casi bueno, posible chubasco pronto
8.Casi bueno, posibles chubascos mas tarde
9.Chubascos pronto, mejorando
10.Variable, mejorando
11.Variable, probable lluvia
12.Mas bien inestable, aclarando luego
13.Inestable, probablemente mejorando
14.Lluvioso con intervalos de claros
15.Lluvioso, tendiendo a mas inestable
16.Variable, algo de lluvia
17.Inestable, algun corto intervalo de claros
18.Inestable, lluvia mas tarde
19.Inestable, algo de lluvia
20.En general inestable, algo mejor a veces
21.Lluvia ocasional, empeorando
22.Lluvia a veces, muy inestable
23.Lluvia intervalos frecuentes
24.Lluvia, muy inestable
25.Tormenta, puede mejorar
26.Tormenta, muy lluvioso

Los números se los he puesto para tener una idea de la escala y tener de un vistazo el grado de "bueno" de un tiempo bueno.

  Para calcular la variación de la presión de una manera simplificada, en vez de utilizar derivadas de la función resultante, lo que hace el algoritmo es calcular la media de los valores de los últimos 30 minutos y de los últimos 10 minutos, si ésta es mayor, la presión está subiendo y viceversa.

  En ThingSpeak está configurado como un plugin, os dejo el código HTML, CSS y JAVASCRIPT en un archivo de texto donde siempre  este plugin genera una visualización en una ventana como las de siempre, con el texto de la predicción.



  Se me ocurre ahora que sería fácil implementar un montaje decorativo como aquellos monjes que había de madera y cartón que hacían una especie de predicción del tiempo:


  Estos funcionaban con un pelo humano que hacía de higrómetro, según la humedad del aire se encogía o estiraba moviendo la mano del pobre fraile... Entonces pondría lluvioso cuando ya el aire estuviese húmedo.

  Pues con el algoritmo anterior adaptado al micro y un servo para mover el brazo, sería fácil de hacer, y además podría funcionar de manera autónoma sin conexión a internet, y supongo que mejor que lo del pelo...

  Esto es parte del invento de la caldera WiFi, el resto aquí y en las entradas posteriores.

martes, 9 de febrero de 2016

Tres Relojes

Poco a poco voy introduciendo más cosas en el invento de la caldera:


   La novedad son los dos cuadros de la izquierda, el de los tres relojes (que son los que antes tenía en cuadros separados), incluye además los botones de encender y apagar, que ejecutan el Talkback que cierra o abre el relé del invento que arranca o para la caldera.
  El cuadro de altura Nubes es una estimación teórica de la altura de la base de las nubes basada en la temperatura y el punto de rocio, suponiendo que la distribución del gradiente de temperaturas es lineal desde el suelo y dado que según subimos la temperatura baja, en algún punto la temperatura del aire alcanzará la temperatura del punto de rocio, con lo cual se condensará la humedad.
   Cálculo atura base nubes en Wikipedia, este es el método que he usado, pero he visto otros por ahí, la realidad es que desde que lo he montado, voy siguiendo estos días de invierno y cuando se ve un nivel de nubes bajo, suele amanecer con niebla o nuboso-lluvioso.
   Tampoco se puede relacionar con el  nivel exacto de las nubes, pero como indicador de niebla o nubes bajas, parece válido.

Aquí os dejo la actualización del análisys MATLAB que calcula las variables derivadas (altura base nubes, velocidad de viento, sensación térmica y punto de rocio):


readChannelID = 56115;
TemperatureFieldID = 1;
HumidityFieldID = 2;
tempC = thingSpeakRead(readChannelID,  'ReadKey','------------------------------', 'Fields', TemperatureFieldID, 'Timeout', 20);
url = 'https://api.thingspeak.com/apps/thinghttp/send_request?api_key=--------------------------------';
VViento = urlfilter(url, 'speed');
v=VViento*3.6;
Wch = (13.12+(0.6215*tempC)-(11.37*(power(v,0.16)))+(0.3965*tempC*(power(v,0.16))));
b = 17.62;
c = 243.5;
humidity = thingSpeakRead(readChannelID, 'ReadKey','---------------------------------------', 'Fields', HumidityFieldID, 'Timeout', 20);
gamma = log(humidity/100) + b*tempC ./ (c+tempC);
dewPoint = c*gamma ./ (b-gamma);
display(tempC, 'ºC temp actual');
display(Wch, 'ºC sensacion termica');
display(humidity, '% humedad relativa');
display(VViento, 'viento en m/s');
display(v, 'viento en km/h');
display(dewPoint, 'Dew point ºC');
altnubes=((tempC-dewPoint)/2.5)*304,799;
display(altnubes, 'Altura Base Nubes m.');
writeChannelID = 56115;
writeAPIKey = '-----------------------------';
thingSpeakWrite(writeChannelID, 'Fields',[4,5,6],'Values', [dewPoint,Wch,v], 'Writekey', writeAPIKey);
thingSpeakWrite(71070,'Fields',[2],'Values', [altnubes],'WriteKey','-------------------------------');

miércoles, 3 de febrero de 2016

Las cosas hablan!

Mi caldera me ha escrito un mail.

Hoy me ha llegado un correo de la caldera, como estaba previsto en el programa, al llegar a los 300l en el tanque de Gasoil, envió el siguiente mail:

Caldera calderadecasa@........com a traves de smtpcorp.com                                14:02(hace 7horas)
para mi

El nivel de Gasoil está al 30%
Temp=11,86ºC / Humedad=40%H.R. / Gasoil=293,47litros / Presion atm=1020,0hPa.


Es bastante emocionante a pesar de la sencillez del mensaje, sobre todo cuando no te lo esperas, ya ni me acordaba de que tenía que recibir el mensaje y fue una agradable sorpresa.
Ahora esperemos que llegue otro al llegar a los 200l, a los 100l, a los 75, a los 50... con un mensaje cada vez más dramático.

El resto del invento aquí.


martes, 5 de enero de 2016

Compensación de la presión

  Pues parece que los sensores de presión hay que compensarlos en altura...
  Después de poner el sensor de presión que me había cargado, el BMP180, y ver durante unos días que mide menos que el pronóstico del tiempo, y menos que los sensores de las páginas web con datos meteorológicos, investigando por ahí veo que parece que se compensan en altura.
  Es lógico, sino fuera así, las isobaras de los mapas del tiempo se deformarían sobre tierra firme dependiendo de la altura, según el datasheet:


El sensor se utiliza también para calcular la altura en aviones, drones, por eso al estar situado a 800 metros de altura mide menos que la presión a nivel del mar, despejando la presión a nivel del mar y sustituyendo la altura a la que está instalado el sensor, da que la presión a nivel del mar es igual a la presión medida dividido por 0,90873.

  En cuanto tenga un rato lo implemento en el hardware.

  El resto del montaje aquí

sábado, 12 de diciembre de 2015

Caldera WiFi

  Una caldera de Gasoil debe ser uno de los aparatos menos tecnológicos que quedan, pero como está tan de moda lo de "Internet de las cosas", vamos a darle un poco de inteligencia a la vieja caldera.
  Después de mucho tiempo invertido en el sistema de control de la caldera de Gasoil, varias entradas en este blog (aquí la última parte) y un montón de cacharros conectados para, al final, abandonarlo despues de casi dos años, vuelvo con un nuevo intento.
  Un sistema mucho más sencillo que se basa en una página web "Internet of Things" donde se registran todos los datos recogidos de la caldera y que simplifica muchísimo el sistema.
  En esencia es un microcontrolador con conexión wifi y tres sensores, como no hay cables para la conexión de red, todo es más sencillo y más limpio.
  Se trata de un ESP8266, un micro potente y capaz que en un encapsulado realmente pequeño integra, además de varios de los periféricos de un arduino, la capacidad de acceder a redes WiFi sin conectar hardware adicional, además se puede programar desde el IDE de Arduino, instalando una extensión como se explica aquí, lo que abre un montón de posibilidades.

  Esta historia empezó con el objetivo de tener la posibilidad de poder encender o apagar la caldera en remoto, desde el móvil o desde cualquier sitio con acceso a internet, pero una vez vistas las posibilidades que ofrece el cacharro junto con la página de ThingSpeak, se convirtió en algo mucho más completo, resumen de características:

  • Medición contínua del nivel de combustible, con envío de email automáticamente cuando se alcanzan unos niveles determinados.
  • Medición de:
    • Temperatura exterior.
    • Nivel de humedad relativa exterior.
    • Presión atmosférica.  
  • Capacidad de arranque/paro remoto.
  Además de las capacidades que añade ThingSpeak de registrar todos los datos que se le envien desde el micro, tenemos algunas variables adicionales calculadas en la nube y otras consultadas como la velocidad de viento, así tenemos:
  • Sensación térmica (calculada según la temperatura y la velocidad del viento).
  • Punto de rocío (calculada en base a la temperatura y humedad).
La velocidad del viento la consulto a Openweather.org programando un request ThngHTTP desde la página de Thingspeak.



   Al utilizar ThingSpeak no hace falta ni el reloj en tiempo real ni la tarjeta SD para guardar las lecturas, la plataforma en la nube que es ThingSpeak ya se ocupa de asociar a cada lectura la fecha y la hora correspondiente y de guardar las lecturas, según ellos sin límite de espacio (sí hay un límite en cuanto a la frecuencia de refresco que no puede ser en intervalos menores de 15 segundos).
  Hay un acceso público con algo menos de información aquí, donde podéis consultar datos en tiempo real y ver la temperatura o humedad en la Sierra antes de venir.

  Montaje:


  El ESP-12 (la versión del ESP8266 que estoy usando) es realmente pequeño, tanto que los pines están a menor distancia que la normal en los zócalos de circuitos integrados o de las protoboard, con lo que hay que buscar una forma de adaptarlo, yo utilicé una fila de pines estándar por cada lado soldados con unos trocitos de cobre, de los que se recortan de resistencias o condensadores.
Mide aproximadamente centímetro y medio por dos y medio.

  Una vez tenemos ya los pines  a la distancia estándar, ya lo podemos pinchar en la placa de prototipos y empezar a hacer pruebas:
  

  Como se puede ver en el prototipo hay varios sensores que pueden medir temperaturas, pero sólo se utiliza el BMP-180 para presión y temperatura, después de tener varios funcionando en paralelo, descarté el DS18b20, el DHT se utiliza sólo para la lectura de humedad, ya que su resolución de temperatura es muy pobre.
  El sensor de distancia por ultrasonidos se pone en la boca de llenado del tanque y nos mide la distancia hasta la superficie, con lo que podemos calcular la capacidad restante, está instalado como describía hace más de dos años aquí, y por cierto, está impecable, no le ha afectado ni la corrosión, ni los vapores del gasoil, ni nada parecido como se decía en algún comentario.
  Como este sensor funciona a 5V (el resto funcionan a 3,3V) necesitamos un divisor de tensión en su salida para adaptarlo a los niveles de entrada del ESP, que son las dos resistencias en la linea Echo del sensor.
  Los sensores de temperatura, humedad  y de presión atmosférica están, obviamente, en el exterior, al igual que el del tanque de gasoil que está en el trastero, todo cableado con un único cable UTP.
La placa ya funcionando.

Esquema:




Programa:


El programa está estructurado en funciones, dentro de la función principal, loop, se hace una lectura de cada sensor a través de una función de filtro, llamada medaianamodal, que hace 30 lecturas del sensor correspondiente, las ordena, descarta las de los extremos y calcula la media aritmética de los 10 valores centrales.
 Luego se comprueba el tiempo que ha pasado desde la última actualización y si han pasado más de 3 minutos, se llama a la función que sube los datos a ThingSpeak, además se comprueba si el nivel de combustible llega a unos valores que son:
   500l, envía un correo simplemente diciendo el nivel y las lecturas actuales.
   300l, envía un correo avisando de que el nivel está al 30%.
   200l, envía correo con el nivel al 20%.
   100l, envía correo avisando que queda un 10% y pidiendo repostar.
   50l, envía correo avisando que queda un 5% y pidiendo repostaje URGENTE.

  La rutina para enviar el correo está basada en la de jeanotP1314, en Instructables, Gracias por compartirlo, es un trabajo fantástico.
   Se comprueba si hay algún comando para ejecutar con la función getTalkBack() y se actúa sobre la salida que alimenta el relé.
  Y eso es todo el loop, el resto son funciones para ejecutar las acciones comentadas.

   El programa os lo dejo aquí.

  Hay una parte de programa que vive en la nube, es el programa que consulta la velocidad del viento en Openweathermap.org, calcula los datos de punto de rocio y sensación térmica y graba los datos en los canales correspondientes, es un programa de Matlab Analisys que os dejo en un archivo de texto aquí para copiar y pegar.
  Hay además una temporización, un TimeControl como le llaman en ThingSpeak que ejecuta el análisis cada 20 minutos.
  Por cierto, el cálculo de la sensación térmica está basado en la fórmula que os dejo en esta hoja excell, y que se puede imprimir para ver de un vistazo la sensación térmica.

Programa, esquema y demás aquí.

Conclusión:

  El utilizar una plataforma de almacenamiento en la nube como ThingSpeak, facilita mucho estos proyectos, además tiene varias funcionalidades que se pueden utilizar para ejecutar acciones cuando se den unas condiciones, p.e que la temperatura alcance un valor o cuando pase un tiempo determinado, para analizar los datos, etc.
  Por supuesto el montaje se puede utilizar para otras cosas, en este caso es una caldera pero igualmente se puede controlar un aire acondicionado, se puede utilizar otras salidas adicionales o podemos utilizar otros comandos, como veis en el programa, los comandos son cadenas de texto, no simplemente unos o ceros, con lo cual podemos enviar p.e. un comando que indique la temperatura que queremos y que el sistema funcione como un termostato, o un comando que indique el tiempo que queremos que esté encendida, o... las posibilidades son infinitas.
  Otra cosa que se puede hacer muy fácilmente es que el correo de aviso de nivel de combustible se envie directamente al proveedor para que venga a reponer, o que se genere un correo de alarma en caso de que se den otras circunstancias.
  En fin, se abren un montón de posibilidades.


miércoles, 8 de enero de 2014

Mando a distancia para mi ampli

El control remoto.

Una vez puesto en marcha, vimos que estaba empezando a generar un problema que podría llegar a convertirse en un verdadero conflicto con los vecinos.
El amplificador está en el sótano, que se utiliza como cuarto de juegos por los niños y a veces se hacía difícil llamarlos o simplemente ordenarles que bajen el volumen porque evidentemente no oían la voz desde el piso de arriba.
Entonces se hacía necesario un sistema de control que evitara tener que bajar o dar voces en la escalera y prevenir molestias a los vecinos, pero un mando a distancia convencional por infrarrojos no valdría porque sólo funcionan si hay linea de vista.

Encontré un mando vía radio como los de apertura de garaje y aquí podeis ver cómo funciona:




martes, 6 de agosto de 2013

Nivel de combustible y consumos

(3ª parte del invento de sistema de control de caldera de gasoil, post aquí)

Aun no he podido dedicar tiempo a la integración de la SD para el registro de datos, pero lso registro de forma manual, una o dos veces al día, con la hora que sí que está en la pantalla LCD y funciona perfectamente.
Los datos recogidos parecen indicar que el funcionamiento del sensor es un poco más estable al ir bajando el nivel del tanque, esto puede estar relacionado con la sensibilidad de la electrónica incluida en el sensor, posiblemente funcionará mejor midiendo tiempos de retorno más largos de los ultrasonidos.

lunes, 5 de agosto de 2013

Lecturas del DataLogger de la caldera

Datos de temperaturas recogidos.

(6ª parte del invento de control de caldera de gasoil, post aquí)

Una vez funcionando el data logger, aun con las limitaciones expuestas en post anteriores, ya podemos empezar a analizar los datos recogidos y casi tomar algunas decisiones.

A pesar de que la resolución de la toma de datos es demasiado alta, y el manejo de la hoja excell se hace muy lento, los datos son realmente buenos y permiten ampliar cualquier parte de la gráfica con gran detalle.


martes, 12 de febrero de 2013

Integración del módulo tajetas SD

(4ª parte del invento de sistema de control de caldera de gasoil, post aquí)

Esta vez me ha costado más de lo que esperaba, he perdido mucho tiempo con el lector de tarjetas SD, ya que no conseguía hacerlo funcionar.
El poco tiempo del que dispongo lo perdí algunas noches de las últimas dos semanas peleando con el lector de tarjetas que no funcionaba, conseguía identificar la tarjeta, la capacidad disponible, los archivos presentes, pero no grababa ni daba mensaje de error, probé de todo, hasta me puse a investigar dentro de las librerías, que a su vez llaman a otras librerías que se encargan de la comunicación serie y de las que sospechaba, ya que con el único sketch con el que leía la tarjeta, tenía una función para ajustar la velocidad del bus a la mitad.
Al final, después de muchas pruebas, casualmente probé otra tarjeta diferente (una Lexar de 2Gb) que tenía por ahí y funciona perfectamente.

lunes, 28 de enero de 2013

Integración del reloj en el sistema de control

El siguiente paso en el crecimiento del sistema pasa por integrar el reloj para que el sistema pueda saber fecha y hora para cuando recoja los datos pueda registrar el momento en que los toma.
El reloj que he utilizado es el DS1307 un integrado capaz de mantener la hora, fecha, el calendario discrminando los meses de 30 o 31 días, años bisiestos, etc, es capaz de mantener la hora sincronizada durante años sin la alimentación principal y sólo con una pila de botón.
Integra además un bus de comunicaciones serie  I2C para comunicarse con el microcontrolador mediante sólo dos cables, ahorrando así puertos de entrada/salida para poder usarlos luego para sensores.

martes, 8 de enero de 2013

Iluminación automática eco-suave.


Suave iluminación automática.

Este primer invento que me decido a publicar consiste en un montaje para controlar una iluminación LED mediante un detector de presencia pero controlando el encendido y apagado de forma que se hagan con suavidad.
La idea básica persigue el ahorro energético, la funcionalidad y la comodidad sin olvidar la estética, se compone de una etapa de alimentación de los LED, un led driver, un conjunto de LED de 1W cada uno, un microcontrolador para generar los patrones de subida, mantenimiento y bajada de intensidad luminosa y un detector de presencia para controlar cuando debe activarse.