Temperatura (DS18B20) + LCD I2C

5 Sep 2019
127
Leioa
Provincia
Bizkaia
Hola,

Otro proyecto de referencia para los que quieran leer la temperatura de sus acuarios y visualizarla en una LCD.
Materiales:
- Arduino nano
- LCD + I2C
- Sonda DS18B20 (con recubrimiento metálico)
- Resistencia 4k7 (para el pull up de la conexión one-wire).
En total unos 10€.

En mi caso las sondas de temperatura son 2 y para saber qué sonda estoy leyendo en cada momento uso su dirección hexadecimal, en caso de usar una única sonda no haría falta saber la dirección y podríais acceder por índice. Os dejo unos enlaces donde explican muy bien todo esto:
https://www.luisllamas.es/temperatura-liquidos-arduino-ds18b20/
https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/
Para saber la dirección de cada sonda hay que conectar una sóla al arduino y leer la dirección por el índice (en los enlaces se explica cómo hacerlo) en mi caso usé un pequeño sketch de arduino para esto y luego apunté las direcciones en las sondas. Si os fijáis he recubierto las sondas metálicas con una goma termoretráctil y un poco de pegamento térmico para que el metal no entre en contacto con el agua del acuario, muy importante.
Si alguno quiere activar algún relé o algo en dependencia de la temperatura sería bastante fácil a partir de aquí, iba a hacerlo en este ejemplo pero no tengo cable dupont hembra/macho para la placa del relé (y mira que tengo cosas...).

En todos mis proyectos intento usar el mínimo posible de E/S del arduino y siempre que sea posible uso placas comunicadas que simplifiquen el trabajo del arduino (I2C, onewire, serie...), estoy a la espera de que me llegue una tarjeta PCA9685 para poner un ejemplo de múltiples canales PWM (16 o más) desde un único arduino mediante I2C.

Os adjunto sketch de arduino, plano de conexión y fotos como siempre (las bornas de conexión no hacían bien contacto en la protoboard y tenía que apretarlas con el dedo y en una de las fotos aparecen las temperaturas en fallo (-1ºC) ). La diferencia entre temperaturas es porque calenté una de ellas para probarla.
 

Archivos adjuntos

  • Proyecto DS18B20.zip
    4,6 MB · Visitas: 157
5 Sep 2019
127
Leioa
Provincia
Bizkaia
Muy interesante seguro pero, a mi me ha sonado a suajili XD
:yb624[1]:
Si, es cierto que suena un poco enrevesado, pero la idea es que cualquiera con estos 3 módulos, una docena de cables y una resistencia sea capaz de empezar a hacer un control de temperatura. Lo mejor es descargar los archivos, hacer el esquema eléctrico y cargar el sketch de arduino... Intento que los que saben poco/nada vean que no es tan difícil hacer estas cosas, si alguien se anima y tiene cualquier problema prometo ayudarle todo lo que pueda. Por ejemplo, la primera vez que conectamos las sondas no sabemos sus direcciones y hay que leerlas de otra forma distinta a como he puesto en mi sketch, no hay problema, si alguien lo tiene y quiere probar le paso el código de arduino para hacerlo.
Ya sé que existen alternativas baratas a todo esto como controladores de temperatura que por el mismo precio no hay que cablear, programar ni nada de nada. Pero de esta forma tenemos mucha flexibilidad para hacer cosas a medida.
 
5 Sep 2019
127
Leioa
Provincia
Bizkaia
Os agrego un reloj RTC al proyecto original para que veáis cómo hacerlo:
- RTC DS1307 (recomiendo usar otro reloj RTC que tenga compensación de temperatura como el DS3231, el 1307 tiende a perder precisión y hay que reajustarlo)

Modificaciones respecto al programa original:
- Dado que el RTC también comunica por el bus I2C, sólo hay que añadirlo en serie.
- He creado un carácter especial en el LCD para que veáis como se hace, se trata del símbolo de grados º. En el proyecto inicial aparecía la temperatura como xxx.x C y ahora aparece xxx.xºC.
- He hecho una transición en la LCD, dado que tengo que mostrar 4 líneas y sólo hay 2. El texto corre hacia arriba cada 1s.
- He comentado un poco más el código y lo he ordenado un poco, he visto que tenía alguna cosa incongruente por ahí.
- He modificado la resolución de los DS18B20 de 12 a 11bits (menos resolución pero mayor rapidez de conversión), para que se vea cómo hacerlo.

La pila de mi DS1307 estaba agotada, por lo que cada vez que le quito tensión pierde la fecha y hora... He forzado la fecha/hora de compilación como fecha/hora de arranque .
Adjunto sketch, plano de conexión y un vídeo.
 

Archivos adjuntos

  • Proyecto DS1307.zip
    13,3 MB · Visitas: 104
Arriba