Página principal
Sensor de
temperatura
Protocolo TFA
Arduino
Mi primera intención era hacer un sensor para una serie de
estaciones meteorológicas que tenía sin sensor. Eran de la marca
oregon cientific. Esta marca fue una referencia por su buena
calidad, pero esta marca fue comprada por otra compañía, y es muy
difícil de encontrar sensores, además si se encontraban eran de
precio alto, por lo cual no merecía la pena.

Existe muchos modelos, más de 20, y unos no son compatibles con
otros.

Hay 3 protocolos de transmisión, pero la documentación es escasa en
cuanto a los diferentes sensores.

Existe una documentación que la sacó alguien con ingeniería inversa.
Leyendo está documentación encontré que los sensores emiten un byte
una variable aleatoria. Después de algunas pruebas, creo que esta
variable aleatoria no es tan aleatoria como debería ser. Algunas
estaciones base, leen durante algunas horas los sensores
perfectamente al resetear los sensores y la estación base, para
dejar de leer después, a pesar de que los sensores siguen mandando
datos.
Mi sospecha es que la variable aleatoria es una secuencia de bytes
que pertenece a un modelo concreto de base, después de ciertas
lecturas si no corresponde a la base en concreta, deja de
proporcionar dados de ese sensor. Es una forma de asegurarse de que
ningún sensor de otra marca ajena funcione en su estación base. Por
este motivo no existen sensores chinos compatibles. Desaparecida la
marca, ya puedes tirar la estación base.
Como era muy difícil de realizar este tipo de sensores, empecé con
otro.
Tengo 3 bases meteorológicas que funcionan con el protocolo TFA, es
sencillo y solo transmite temperatura. Solo tengo 1 sensor que leen
las 3 estaciones bases, por lo que en este montaje crearé un segundo
sensor que funcione en el canal 2.

Existe un programa que lee muchos protocolos de diferentes sensores,
desde coches hasta sensores de temperatura. Este programa se llama
RTL_433 y utiliza un decodificador USB de televisión digital para la
recepción de señales.

Mirando en su código fuente, se puede ver la estructura del
protocolo TFA.
Gracias Alexandre Coffignal (rtl_433) por su magnífico programa.
Data layout:
CCCCIIII IIIITTTT TTTTTTTT DDBF
- C: checksum, sum of nibbles - 1
- I: device id (changing only after reset)
- T: temperature
- D: channel number
- B: battery status
- F: first transmission
Como me gusta investigar por mí mismo, voy grabar la señal mediante
el programa Gqrx .
Lo analizo con el programa de audio Audacius para la medir los
tiempos.
Descubro que los datos se repiten 7 veces y los tiempos son los que
se ven en la imagen.

Se puede observar que entre bits el pulso de separación es de
475 micro Segundos. Si se quiere mandar un cero la separación entre
pulsos es de 2500 mS, y si es 1 la separación es 5000 mS. La
separación entre las 7 repeticiones es de 10mS. Al inicio de la
transmisión debe existir un pulso y una separación de 10mS.
Ahora comienza la programación en Arduino para generar este patrón
de datos. Mediante un analizador digital barato (7) compruebo la
señal generada. Es un patrón de 7 grupos de 4bits, el primero es el
la suma de los otros 6 grupos 1 .


A final los diferentes tiempos de la señal son los siguientes.
#define SENAL_ALTA 500
#define SENAL_0 2400
#define SENAL_1 5000
#define SEPARACION 10000

El circuito utiliza el AHT20 como sensor, que utiliza
la comunicación I2C. La parte de humedad de este sensor no se
utiliza, por lo que me planteo para una revisión posterior el
utilizar 18B20 como sensor de temperatura.

Por el pin 13 del arduino se manda la señal a un transmisor de
radiofrecuencia en 433MHz cada 36 segundos.
En los pines 3 y 4 se selecciona el canal y el pin 2 se puede
utilizar para transmitir la señal cuando se quiera.

El programa está diseñado para la depuración por el puerto serie,
aunque el que quiera puede eliminar todo lo relativo a la
comunicación serie.
Todo está montado y probado en una protoboard utilizando el arduino
nano.

Como lo importante en un sensor es la medición correcta de la
temperatura y la autonomía de la batería, utilizo la librería
LowPower para dormir el microprocesador mientras no hace nada.
Se puede ver en la imagen los diferentes consumos dependiendo de la
alimentación, de cuando está despierto y dormido. Aún así el consumo
es alto para un este tipo de sensores.
En este otro montaje solo monto el ATMEGA328 y los componente
mínimos.

Esto es otra cosa, el consumo baja hasta los 0.10 mA cuando está
dormido, y 7 mA cuando está despierto y transmitiendo.
Haciendo unos cálculo rápidos si demasiada precisión.
Con una batería de 1000mA/H y el micro siempre dormido la
autonomía sería de 10000 horas o lo que es lo mismo 416 días.
Como hay que ser más realista y pensando que cada 60 segundos está
despierto 4 segundos podría durar la batería 90 días más o menos.
Ahora nos toca el diseño del Circuito integrado y su creación.
Utilizo el programa KIDcad para el diseño de la PCB. Y utilizo el
método láser para la creación del circuito impreso.

Colocados los componentes, el prototipo queda bastante compacto,
aunque si se soldarían los componentes al circuito impreso
directamente quedaría aún más pequeño.
Me lo he pasado bastante bien experimentando con señales, vosotros
podéis probar otro tipo de sensores.
Programa
VIDEO
Saludos.
Juan Galaz
Bibliografía:
http://seta43.duckdns.org/ard433.html
http://seta43.duckdns.org/termot.html
http://seta43.duckdns.org/temt3.html