Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Termostato inteligente y control de iluminación con Bluetooth

Componentes y suministros

Arduino Nano R3 1
Módulo Bluetooth HC-05 1
Termómetro digital DS18B20 (1-Wire, resolución programable) 1
Pantalla OLED bicolor I2C 1306 (128x64) 1
Controlador de 4 relés I2C (ControlEverything.com) 1

Aplicaciones y servicios en línea

Sobre el proyecto

Introducción

Proyecto DIY simple pero útil de termostato Arduino con Bluetooth.

Una rutina inteligente de termostato controla la caldera de gas, y el sistema conmuta las luces de la cocina y el ventilador de aireación del baño mediante relés – controlables por botones y dispositivo Android u ordenador vía Bluetooth. Disponible en versiones Celsius y Fahrenheit ¡Todos los componentes son artesanales!

Termostato inteligente y control de iluminación con Bluetooth

Desarrollado en Arduino Nano (o superior), usa sensor de temperatura Dallas DS18B20, adaptador Bluetooth HC-05/06, pantalla OLED bicolor I2C 128x64 – puedes elegir otras pantallas LCD/OLED, la librería u8glib soporta muchos tipos.

Termostato inteligente y control de iluminación con Bluetooth

Vídeo

El vídeo muestra todas las formas de funcionamiento importantes y da ideas para construir el proyecto desde el principio.

Modos de funcionamiento de la calefacción

  1. Calefacción única temporizada (15 min), útil en tardes de primavera/otoño
  2. Modo termostato (prioridad alta), la temperatura objetivo ajustada se almacena en memoria EEPROM

Algoritmo de protección de la caldera

El encendido y apagado frecuente y de corta duración acortaría la vida útil de la caldera de gas. Para evitarlo, el programa usa valores de corrección que declaran el grado de sobrecalentamiento y enfriamiento posterior. Una temperatura objetivo más baja exige valores de corrección mayores, porque las paredes están más frías y absorben mejor el calor del aire recién calentado, intensificando el efecto descrito.

Termostato inteligente y control de iluminación con Bluetooth

Detección de ventana abierta

El programa detecta si hay una ventana abierta: si la temperatura cae al menos -0,2 °C (-0,36 °F) en un minuto, la calefacción se detiene o no arranca, y el ventilador de aireación se enciende para renovar el aire. Cuando el aire se calienta al menos +0,12 °C (+0,216 °F) gracias a la capacidad térmica del entorno, el sistema vuelve al modo normal y se cancela la "Alerta de ventana".

Detección de errores

Temperaturas medidas bajo 0 °C (32 °F) o sobre 40 °C (104 °F) se evalúan como fallo u otro problema (error, ventana rota, incendio, etc.), y todos los dispositivos se apagan.

Comunicación Bluetooth

La app GUI para Android tiene 8 botones, envía letras mayúsculas y minúsculas para encender ('A') o apagar ('a') la calefacción temporizada, 'B' y 'b' el ventilador, 'C' y 'c' las luces…

Termostato inteligente y control de iluminación con Bluetooth

Otra fortaleza es el uso de terminal serie Bluetooth "geek-friendly". Solo chatea con el sistema vía Bluetooth usando un terminal serie – puede ser una app Android, pero también un PC normal, como el Monitor Serie del IDE Arduino.

El controlador envía informes de temperatura cada minuto automáticamente, e informes instantáneos sobre todos los eventos: dispositivo encendido/apagado, rutina termostato activada, etc.

Termostato inteligente y control de iluminación con Bluetooth

Códigos de control

Acepta códigos de control y envía mensajes de confirmación. Mi estructura de comandos se basa en números de dos dígitos 'XY' donde:

Versión Fahrenheit

Convertí todas las variables de corrección, referencias y ratios, manteniendo los cálculos y particularidades de funcionamiento.

Termostato inteligente y control de iluminación con Bluetooth

Solo unas pocas modificaciones. Los nuevos códigos de dispositivo en la versión Fahrenheit:

La secuela

ACTUALIZACIÓN: ¡Sistema completo de domótica con enlace Bluetooth interno y control por voz!

Librerías y enlaces

DallasTemperature, elapsedMillis, OneWire, SoftwareSerial, olikraus/u8glib

Si usas resistencias de botón distintas o necesitas comprobar lecturas en A0, te sugiero consultar:

https://blog.codebender.cc/2015/07/20/tutorial-multiple-buttons-on-1-analog-pin/

Código

Thermostat v11 - Versión Celsius.ino Arduino

El código se explica solo, útil para principiantes. Bien comentado, describe cada paso importante: qué, por qué y cómo. Dividido en módulos por funciones, fácil de revisar.

// Versión Celsius v1.1 // Código de programa de un termostato inteligente Arduino para smarthome,
// basado en Arduino Nano (o superior), sensor termo DS18B20, adaptador Bluetooth HC-05, pantalla OLED bicolor I2C 128x64.
// El sistema se controla por botones y smartphone Android vía bluetooth.
// Maneja la CALDERA de gas, el VENTILADOR de baño y la ILUMINACIÓN de cocina - conmutados con relés.
// La calefacción tiene dos modos. 1: Calefacción única temporizada (15 min), 2: Modo termostato (prioridad alta). La temp. objetivo ajustada se guarda en EEPROM.
// El programa detecta errores de hardware y apertura de ventana - en estos casos la calefacción se detiene y/o no arranca.
// Diseñado y programado por Gyula Osi. Todos los derechos reservados.
// ------------------------------------------------------------------------------------------------------------------------------------
// ---- Display I2C Bus, SDA(TX) -> A4, SCL(RX) -> A5
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // constructor display
byte frame = 0; // puntero logo inicio
// ---- Puertos y declaraciones relacionadas
const byte buzzer = 9; // buzzer a D9
int btnVal; // almacena valores analógicos de botones
const byte relayA = 11; // ventilación
bool aState = 0;
bool aStateByCmd; // si "alerta ventana" desaparece, control ventilación vuelve al estado original
const byte relayL = 13; // iluminación
bool lState = 0;
const byte relayH = 10; // calefacción
const byte ledH = 6; // puertos PWM permiten ajuste de nivel de salida para cambiar brillo
const byte ledA = 5;
const byte ledL = 3;
const byte bright[3] = {0, 10, 100};
byte brightHeat = bright[2];
#define ledInterval 1000 // intervalo parpadeo led calefacción
unsigned long prev = 0;
// ---- Cadenas para Display e Informes Serie
#define STATE_ITEMS 3 // cadenas indicadoras de estado de dispositivos para salidas
// i -> 0 1 2
const String state_str[STATE_ITEMS] = {"on.", "off.", "auto."};
String heaterState;
String airingState;
String lightingState;
#define FUNCT_ITEMS 11 // i -> 0 1 2 3 4 5 6 7 8 9 10
String funct_str[FUNCT_ITEMS] = {"Heater is ", "Airing is ", "Lighting is ", "Window Alert!", "Hardware Error!", "Hit a Key >>", "or send a Code!", "Target tempr = ", "Temperature = ", " * ", " -"};
// ---- Medición de Temperatura y Características Relacionadas con Calefacción
#include 
elapsedMillis timer0; // temporizador PWM 8-bit, usado por función elapsedMillis()
#define sftyTmrInterval 15 * 60000 // intervalo modo calefacción única (15 min) [ms]
bool sftyTmrEnded; // booleano inicio, timer0 ha terminado
#include 
byte tTarget; // temp. objetivo ajustada
const int addr = 0; // dirección actual de variable tTarget en memoria EEPROM
bool hState = 0; // estado booleano calefacción
bool hThermostat = 0; // estado booleano termostato
#include "OneWire.h"
#include "DallasTemperature.h"
#define DS18B20 2 // configura bus OneWire en D2
OneWire temprWire(DS18B20); // configura DS18B20 para trabajar en bus OneWire
DallasTemperature sensors(&temprWire);
float tempr; // valor medido
float temprPrev; // copia valor medido para análisis de tendencia
bool windowAlrt = 0; // grado especificado de caída temp.
bool measError = 0; // valor temp. medido fuera de rango normal
const long temprInterval = 60000; // intervalo medición cíclica temp. [ms]
unsigned long temprTmrPrev = 0; // elapsed será previo cuando se llame temprMeas()
float heatCorrVal; // declara grado de sobrecalentamiento y enfriamiento, ver tempMeas()
// ---- Configuración Comunicación Serie en RXD/TXD virtuales
#include 
// pines SW serial RX & TX para HC-05
const int RX1 = 8;
const int TX1 = 4;
SoftwareSerial sUART(RX1,TX1);
char RX[2]; // almacena datos serie recibidos
bool errMsgSentBySys = 0;
bool startup = 1; // evita informe BT duplicado al inicio
const uint8_t frame1[] U8G_PROGMEM = { /* mapa XBM omitido por brevedad */ };
void setup() {
  sUART.begin(9600);
  pinMode(relayH, OUTPUT);
  relayHandlerH(4); // obtener estado funcionamiento
  pinMode(ledH, OUTPUT);
  pinMode(relayA, OUTPUT);
  relayHandlerA(4);
  pinMode(ledA, OUTPUT);
  pinMode(relayL, OUTPUT);
  relayHandlerL(4);
  pinMode(ledL, OUTPUT);
  pinMode(buzzer, OUTPUT);
  sensors.begin(); // inicia DS18B20
  temprMeas(); // no esperar timer medición, llamar función una vez al inicio
  tTarget = EEPROM.read(addr); // leer tTarget guardado previamente en EEPROM al inicio
  startup = 0;
  if (!measError) { sTX(8); } else { sTX(2); }
}
void loop() {
  temprTimer();
  ledHandler();
  btnReadings();
  sRX();
  safetyTmr();
  u8g.firstPage(); // bucle pantalla
  do { draw(); } while( u8g.nextPage() );
  if (frame == 0) { delay(3000); frame = 1; clrScr(); }
}
// ... (resto del código omitido por brevedad, disponible en repositorio)
Thermostat v11 - Versión Fahrenheit.ino Arduino

Funciona en Fahrenheit, solo cambié valores de temperatura objetivo (50-76) y códigos de dispositivo (1, 2, 3).

// Versión Fahrenheit v1.1 // Código de programa de un termostato inteligente Arduino para smarthome,
// basado en Arduino Nano (o superior), sensor termo DS18B20, adaptador Bluetooth HC-05, pantalla OLED bicolor I2C 128x64.
// El sistema se controla por botones y smartphone Android vía bluetooth.
// Maneja la CALDERA de gas, el VENTILADOR de baño y la ILUMINACIÓN de cocina - conmutados con relés.
// La calefacción tiene dos modos. 1: Calefacción única temporizada (15 min), 2: Modo termostato (prioridad alta). La temp. objetivo ajustada se guarda en EEPROM.
// El programa detecta errores de hardware y apertura de ventana - en estos casos la calefacción se detiene y/o no arranca.
// Diseñado y programado por Gyula Osi. Todos los derechos reservados.
// ------------------------------------------------------------------------------------------------------------------------------------
// (Código similar a versión Celsius con adaptaciones para °F)

Esquemáticos

Para prueba con cables jumper...
Termostato inteligente y control de iluminación con Bluetooth
Hay que soldarlo
Termostato inteligente y control de iluminación con Bluetooth

Proceso de manufactura

  1. Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
  2. Mando universal Android con Arduino, 1Sheeld y control IR
  3. Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
  4. Sistema automático de riego para plantas con Arduino
  5. Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
  6. Zapatillas Inteligentes Autoajustables con Cosecha de Energía Integrada
  7. Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
  8. Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
  9. Electrodomésticos activados por voz: Control Bluetooth con Google Assistant
  10. Control remoto de coche con Arduino Uno y Bluetooth: Guía paso a paso
  11. Cargador inteligente de baterías avanzado con multiplexación y display digital