Saltar al contenido

Monitoreo de temperatura inalámbrico LOG

julio 11, 2021
FYRT1L5HK1DG6X0

Así que a este Lazy Old Geek (LOG) le encantan los gadgets. Mi amigo me contó y me envió un par de módulos NRF24L01 +.

Entonces, siendo un Geek, necesitaba una aplicación para ellos y me decidí por un grupo de módulos de temperatura inalámbricos que enviaban información a una ubicación central. De hecho, tengo que darle algo de crédito e inspiración a Maniacbug:
http://maniacbug.wordpress.com/2012/03/30/rf24network/

Paso 1: Módulo NRF24L01 +

Módulo NRF24L01 +

Entonces, ¿qué es un NRF24L01 +? Técnicamente, es ese pequeño chip negro en el medio de esos módulos en la imagen. Permite inalámbrica comunicaciones entre dispositivos similares. Así funcionan los teléfonos móviles. Así es como funciona el wi-fi. El chip se llama transceptor ya que tiene un transmisor y un receptor para que pueda enviar y recibir información. El ‘+’ es solo una versión mejorada del NRF24L01.

Sencillo: Básicamente, permite que dos dispositivos se comuniquen de forma inalámbrica a distancia. Es similar a Bluetooth.

TechnoGeek: Aquí está el sitio web del propio IC.
http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01

El módulo NRF24L01 + incluye toda la electrónica compatible para hacer un transceptor completo que se conectará fácilmente con un Arduino. Están disponibles en eBay por alrededor de $ 2 la pieza.
http://www.ebay.com/itm/Leatest-2-4Ghz-nRF24L01-RF-Transceiver-Module-ISM-/270986572433?pt=LH_DefaultDomain_0&hash=item3f180ef291

Advertencia: La mayoría de los módulos son bastante estándar con una interfaz de ocho pines, pero supongo que hay algunos con 10 pines.

Y hay una versión con amplificador y antena para mayor alcance:
http://www.ebay.com/itm/2-4G-Wireless-nRF24L01-PA-And-LNA-Module-/280924811830?pt=LH_DefaultDomain_0&hash=item41686c7236
Con algunas modificaciones de energía, este debería funcionar bien con mis PCB.

NRF24L01 + y Arduino: Como me gusta trabajar con Arduino, busqué una biblioteca Arduino para el NRF24L01 +. Mi favorito es el de Maniacbug, nuevamente:
http://maniacbug.github.io/RF24/
https://github.com/maniacbug/RF24Network
Y aquí hay información para comenzar:
http://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/

Paso 2: Sensor de temperatura DS18B20

Sensor de temperatura DS18B20

Hay muchos sensores de temperatura por ahí. He usado muchos de ellos en diferentes proyectos. El LM35 es bastante barato. Pero para este proyecto, elegí el DS18B20. Solo cuesta alrededor de $ 1.30:
http://www.ebay.com/itm/2PCS-IC-DALLAS-TO-92-DS18B20-/250814818630?pt=LH_DefaultDomain_0&hash=item3a65ba6946

Aquí está la hoja de datos
http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

La razón principal Seleccioné el DS18B20 es la precisión. Está calibrado a +/- 0.5C. La mayoría de los otros sensores de temperatura baratos tienen que (o deberían) calibrarse en varios puntos de temperatura para lograr una mejor precisión.
Información irrelevante: Calibración: Una calibración típica de dos puntos es utilizar la temperatura de congelación del agua, 32 ° F (0 ° C) y el punto de ebullición del agua, 212 ° F (100 ° C). ¡Pero espera! Este punto de ebullición solo es cierto al nivel del mar. Mi altitud es de aproximadamente 4600 pies, por lo que el agua hirviendo es de aproximadamente 203 ° F. De acuerdo, esto es mucho trabajo y soy PEREZO, así que simplemente asumiré que el DS18B20 es tan preciso como se afirma.
Razón secundaria: el DS18B20 es digital en lugar de analógico. La precisión de los sensores analógicos varía con los componentes asociados y el ruido. Los datos digitales no están sujetos a nada de eso.
Technobabble: Los datos del DS18B20 se transfieren en serie, específicamente SPI (Interfaz de periféricos en serie). Pero el serial es digital. Simplemente hablando, hay dos versiones de datos digitales, en serie y en paralelo.
Tercera razón: Este solo un Geek puede amar. El DS18B20 usa algo llamado bus de 1 cable. En teoría, lo que esto significa es que solo necesita un cable para conectar el DS18B20 al receptor (Arduino, en este caso). En la práctica, necesita dos cables, ya que el circuito necesita una conexión a tierra. Y divulgación completa, estoy usando tres.
Información mayoritariamente irrelevante: Algunos lectores pueden haber notado que la imagen muestra el DS18B20 etiquetado como Dallas, pero la hoja de datos es Maxim. Y estoy bastante seguro de que el DS en DS18B20 significa Dallas Semiconductor. Bueno, Dallas Semiconductor diseñó y fabricó muchos circuitos integrados realmente excelentes. Estoy bastante seguro de que desarrollaron los dispositivos de 1 cable. Por desgracia, Maxim los compró.

DS18B20 y Arduino: Entonces, por supuesto, el Arduino necesita una biblioteca especial para el DS18B20 o, en realidad, para el One wire. Creo que puede haber variantes en esta biblioteca o al menos versiones diferentes, pero usé esta:
http://www.pjrc.com/teensy/td_libs_OneWire.html

Aquí hay más información sobre DS18B20:
http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

También estoy usando la biblioteca de temperatura de Dallas. Creo que para lo único que lo estoy usando es la conversión de Centígrados a Fahrenheit, que podría haber escrito yo mismo. Sin embargo, hay muchas otras cosas que puede hacer con esta biblioteca.

Paso 3: armarlo

Poniendo todo juntoPoniendo todo juntoPoniendo todo junto

Entonces podría comprar un montón de Arduino UNO o clones y protectores de proto, pero eso se vuelve caro.
Como me dediqué a fabricar PCB, decidí hacer mi propio Arduino con módulos NRF24L01 +.
ADVERTENCIA: Si diseña sus propios PCB, tenga cuidado con el lugar donde coloca el módulo NRF24L01 +. En mis primeros PCB, lo tenía colgando sobre el Atmega328 IC y no pude hacer que funcionara. Estoy bastante seguro de que se debe a la interferencia de RF. El módulo NRF24L01 + y el AtMega328 tienen relojes de 8/16 MHz y estoy bastante seguro de que estaban interfiriendo entre sí. Moví el módulo para que se alejara del AtMega. Ver imagen.

Entonces, una PCB tiene el AtMega, un conector NRF24L01 y un DS18B20. Este necesitaba ser portátil, por lo que necesitaba energía de la batería.
Requerimientos de energía:
AtMega328 2.7Vdc Arduino (2.9Vdc ??)
Aparentemente, el AtMega con reloj de 16MHz no funcionará a menos de 3.78Vdc.
NRF24L01 + 1.9Vdc
DS18B20 3,0 V CC
De todos modos, decidí usar baterías de iones de litio 18650, que tienen voltajes desde aproximadamente 4.2Vdc hasta 2.0Vdc. Con este diseño, el módulo de temperatura funcionará a voltaje decreciente a medida que la batería se descarga con el tiempo.
ADVERTENCIA: Dado que los PCB LOG Temperature no tienen un regulador de voltaje, debe conectarles una batería 18650 incluso para cargar un boceto de Arduino.
Para complicar más el proyecto, decidí usar el AtMega328P a 8MHz para que pudieran trabajar a voltajes más bajos.

El segundo PCB tiene el AtMega328P, un conector NRF24L01 + y una pantalla LCD Nokia 5110.
Nokia 5110:
http://www.ebay.com/itm/1PCS-84X48-84-48-LCD-Module-with-White-Backlight-Adapter-PCB-For-Nokia-5110-/370820681047?pt=LH_DefaultDomain_0&hash=item5656a28d57

Esto mostrará las temperaturas y los voltajes de la batería de los PCB de temperatura.

PROBLEMA: Cuando probé algunos de los PCB de temperatura, noté que los voltajes de la batería eran un poco altos. Este diseño establece el Arduino usando su referencia interna de 1.1Vdc y usa un divisor de voltaje para llevarlo al rango utilizable.
SOLUCIÓN: Bueno, no sé si mis resistencias del divisor de voltaje están demasiado fuera de tolerancia o la referencia de 1.1V no es excelente, pero puse un factor de corrección en los bocetos. El multiplicador calculado es 4.2 pero intenté 3.9 para obtener mejores resultados.

Paso 4: consumo de energía

El consumo de energía

Algunos Arduinoites pueden haber visto Arduino 3.3V y notado que tienen relojes de 8MHz en lugar de los relojes usualmente de 16MHz. Por ejemplo:
https://www.sparkfun.com/products/10914
Bueno, hay una razón por la que funcionan a 8MHz en lugar de 16MHz:
https://www.sparkfun.com/tutorials/244
Si mis cálculos son correctos, esto significa que a 16MHz, se garantiza que el AtMega328P funcionará hasta aproximadamente 3.78V, por lo que no se garantiza que funcione hasta 3.3Vdc o menos. Sospecho que la mayoría de los AtMega328P funcionarán con voltajes más bajos, pero es posible que no.

Mis módulos de temperatura funcionan con baterías de iones de litio 18650. Espero permitir el funcionamiento a 3Vdc, así que decidí usar el de 8MHz.
Implementando 8MHz: El hardware es bastante fácil, solo use un cristal de 8MHz en lugar de los habituales 16MHz. El software es un poco más difícil. Para funcionar correctamente a 8MHz, el Arduino debe tener instalado un gestor de arranque de 8MHz.

Cargador de arranque de 8 MHz:
Es posible que algunos de ustedes ya tengan un método para hacer esto, pero aquí hay una forma bastante simple de hacerlo:

http://arduino.cc/en/Tutorial/ArduinoISP

Ahora tengo un cable ISP especial para hacer esto y recientemente convertí mi PCB MTS_Optiloader para hacer esto, pero utilizo el mismo procedimiento de software básico que el anterior.
Al seleccionar la carga de arranque Atmega328 8MHz, creo que lo siguiente funcionará:
Arduino Fio
Lilypad Arduino con Atmega328
Arduino Pro o Pro Mini (3.3V, 8 MHz) con ATmega328
Me gusta usar el último.
Una vez que se cargue el Atmega328P, le sugiero que lo etiquete como 8MHz.
Precaución: Siendo un GEEK, estoy programando muchos Arduinos, algunos de 16MHz y otros de 8MHz. Trate de recordar seleccionar el “tablero” correcto. Intenté programar un 8MHz con Arduino UNO seleccionado, no se pudo programar. Por lo que no debería causar mayor confusión.

Así que hice algunos de estos PCB y en funcionamiento. Instalé algunas baterías 18650 cargadas en los módulos Temp y las ejecuté.
PROBLEMA: Las baterías duraron menos de un día.
SOLUCIÓN: Dado que los módulos Temp no hacen nada entre muestras, decidí intentar ponerlos a dormir.
Bueno, encontré una pequeña biblioteca bastante agradable que hace lo que necesito:
https://code.google.com/p/narcoleptic/
https://code.google.com/p/narcoleptic/downloads/list

Esto se utiliza en los bocetos que funcionan con baterías para reducir el consumo de la batería.

Paso 5: PCB de registro

PCB de registroPCB de registro

Se muestran los esquemas de mi PCB de temperatura remota y de PCB TemperatureLCD5110. Los tableros están disponibles en el archivo ZIP de Eagle.

BOM de PCB de temperatura remota
1 PCB de temperatura remota
4 condensador de 0.01uFd
2 condensadores 22pF
1 condensador 47uFd
1 diodo 1n4148
1 sensor de temperatura DS18B20
1 microcontrolador Atmega328P
1 toma IC de 28 pines
1 módulo NRF24L01 +
1 resistencia de 10K
1 resistencia de 4.7K
1 resistencia de 240K
1 resistencia de 75K
1 resistencia de 1.5k
1 conector JST2.0
1 cristal de 8 MHz
1 pulsador táctil
1 LED de 3 mm
1 batería 18650 y soporte
Pines de cabecera macho y hembra

El costo total estimado es de aproximadamente $ 12 @

Temperatura LCD5110 PCB BOM
1 PCB de temperaturaLCD5110
1 conector JST2.0
4 condensador de 0.01uFd
2 condensadores 22pF
1 condensador 47uFd
1 sensor de temperatura DS18B20
1 microcontrolador Atmega328P
1 toma IC de 28 pines
1 módulo NRF24L01 +
1 pantalla LCD5110
5 resistencia de 10K
1 resistencia de 4.7K
1 resistencia de 1K
1 cristal de 16 MHz
1 pulsador táctil
1 regulador de voltaje L78L33
Pines de cabecera macho y hembra

El costo total estimado es de aproximadamente $ 17

Notas:

Ambos PCB son de un solo lado, por lo que se necesitan algunos puentes.
GN1 y GN2 son puntos de tierra. Normalmente engancho un cable entre ellos para realizar pruebas. Es un buen lugar para conectar multímetros digitales y / o osciloscopios.
El NRF24L01 + funcionará de 1.9 a 3.6Vdc. Dado que un 18650 completamente cargado tiene aproximadamente 4.2V, se agrega el diodo, D1, para que el voltaje a NRF24L01 + no exceda los 3.6Vdc.
La PCB TemperatureLCD5110 puede ser alimentada por USB o por una fuente de 5Vdc. Hay lugares para dos sensores de temperatura DS18B20 en esta PCB, pero el boceto solo admite uno.

Archivos adjuntos

Paso 6: Configuración del boceto

Configuración de croquisConfiguración de croquisConfiguración de croquis

Así que este es un proyecto bastante complicado para los bocetos de Arduino.
Usé la versión Arduino 1.0.3.
Es necesario agregar las siguientes bibliotecas. Están en un archivo zip:
Adafruit_GFX LCD5110
Adafruit_PCD8544 LCD5110
Dallas Temperatura DS18B20
Un cable DS18B20

close