En este tutorial veremos como hacer un sistema de control de temperatura automático, con esp32, un sensor de temperatura y humedad DHT11. El sistema permite el encendido del motor (cooler) en forma automática al elevarse la temperatura, y se desactiva solo cuando esta desciende de cierto valor. Adicionalmente podemos visualizar en cualquier momento la temperatura y humedad a través de telegram, enviando un mensaje, o activar o desactivar el cooler también enviando otros mensajes.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Crear Bot en Telegram
En telegram buscamos BotFather
Escribimos /start y nos aparecerá algo similar a esto
Escribimos /newbot
Nos apareceré el nombre del bot, y inventamos un nombre para nuestro bot, debe tener el formato «usuario_bot»
Obtendremos un token que vamos a usar en el código fuente
Ahora buscaremos IDBot, y lo iniciamos
Escribimos /getid y nos entregará el user_id que debemos colocar en el código fuente
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
#include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #include "DHT.h" // Reemplazar con los datos de tu red wifi #define WIFI_SSID "Tu_Red_wifi" #define WIFI_PASSWORD "Tu_clave_wifi" //Token de Telegram BOT se obtenienen desde Botfather en telegram #define BOT_TOKEN "Tu_Token_de_telegram" #define ID_Chat "Tu_id_chat"//ID_Chat se obtiene de telegram const unsigned long tiempo = 1000; //tiempo medio entre escaneo de mensajes String datos; String stringT; String stringH; String chat_id; WiFiClientSecure secured_client; UniversalTelegramBot bot(BOT_TOKEN, secured_client); unsigned long tiempoAnterior; //última vez que se realizó el análisis de mensajes const int pin22 = 22; int motorStatus = 0; int estadoM = 1; int inicio = 1; // Descomenta la linea dependiendo del sensor que vallas a usar #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 //#define DHTTYPE DHT22 // DHT 22 #define DHTPin 23 //Pin del sensor DHT; DHT dht(DHTPin, DHTTYPE); float t; float h; void mensajesNuevos(int numerosMensajes) { for (int i = 0; i < numerosMensajes; i++) { chat_id = bot.messages[i].chat_id; String text = bot.messages[i].text; if (text == "TyH") { h = dht.readHumidity();//Lectura de la humedad t = dht.readTemperature();//Lectura de la temperatura stringT = String(t); stringH = String(h); Serial.print("T:" ); Serial.println(t); Serial.print("H:" ); Serial.println(h); datos = "Temperatura: "+ stringT + " Humedad: " +stringH; bot.sendMessage(chat_id, datos, "");//Enviamos la temperatura y humedad } //////////Pin 22 para el control del motor////// if (text == "Moton") { digitalWrite(pin22, HIGH); motorStatus = 1; bot.sendMessage(chat_id, "Motor encendido", ""); } if (text == "Motoff") { digitalWrite(pin22, LOW); motorStatus = 0; bot.sendMessage(chat_id, "Motor apagado", ""); } ////////Estado del motor /////// if (text == "Estado") { ////Estado motor//// if (motorStatus) { bot.sendMessage(chat_id, "Motor encendido", ""); } else { bot.sendMessage(chat_id, "Motor apagado", ""); } } if (text == "Ayuda") { String ayuda = "Bienvenido al sistema de Internet de las cosas, con ESP32 " ".\n"; ayuda += "Estas son tus opciones.\n\n"; ayuda += "TyH: Muestra la Temperatura y Humedad \n"; ayuda += "Moton: Enciende el motor \n"; ayuda += "Motoff: Apaga el motor \n"; ayuda += "Estado : devuelve el estado actual del motor\n"; ayuda += "Ayuda: Imprime este menú \n"; ayuda += "Recuerda el sistema distingue entre mayuculas y minusculas \n"; bot.sendMessage(chat_id, ayuda, ""); } } } void setup() { Serial.begin(115200); dht.begin();//Inicializar el sensor DHT pinMode(pin22, OUTPUT); //inicializar pin 22 digital como salida. digitalWrite(pin22, LOW);// La colocamos en estado bajo // Intenta conectarse a la red wifi Serial.print("Conectando a la red "); Serial.print(WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); //Agregar certificado raíz para api.telegram.org while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.print("\nConectado a la red wifi. Dirección IP: "); Serial.println(WiFi.localIP()); if(inicio == 1){ Serial.println("Sistema preparado"); bot.sendMessage(ID_Chat, "Sistema preparado!!!, escribe Ayuda para ver las opciones", "");//Enviamos un mensaje a telegram para informar que el sistema está listo inicio = 0; } } void loop() { lecturaTyH(); //Verifica si hay datos nuevos en telegram cada 1 segundo if (millis() - tiempoAnterior > tiempo) { int numerosMensajes = bot.getUpdates(bot.last_message_received + 1); while (numerosMensajes) { Serial.println("Comando recibido"); mensajesNuevos(numerosMensajes); numerosMensajes = bot.getUpdates(bot.last_message_received + 1); } tiempoAnterior = millis(); } } void lecturaTyH(){ h = dht.readHumidity();//Lectura de la humedad t = dht.readTemperature();//Lectura de la temperatura if(t >= 30 && estadoM == 1){ digitalWrite(pin22, HIGH); stringT = String(t); stringH = String(h); Serial.println(t); datos = "Motor encendido automaticamante, Temperatura: "+ stringT + " Humedad: " +stringH; bot.sendMessage(ID_Chat, datos, "");//Enviamos la temperatura Serial.println("Motor encendido automaticamente"); estadoM = 0; } if(t <= 29 && estadoM == 0){ digitalWrite(pin22, LOW); stringT = String(t); stringH = String(h); datos = "Motor apagado automaticamente, Temperatura: "+ stringT + " Humedad: " +stringH; bot.sendMessage(ID_Chat, datos, "");//Enviamos la temperatura Serial.println("Motor apagado automaticamente"); estadoM = 1; } } |
Descargar Librería –> Universal-Arduino-Telegram-Bot-master
Componentes electrónicos
Un transistor 2N3904
Pines hembra
Un Esp32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Un resistor de 1k (Marrón negro rojo dorado)
Un diodo 1N4007
Un cooler de 5 voltios
Un Sensor de temperatura y humedad DHT11
Este módulo consta de un sensor digital de humedad y temperatura DHT11 y una resistencia de 1 kΩ. El DHT11 utiliza un termistor interno y un sensor de humedad capacitivo para determinar las condiciones ambientales, un chip interno es responsable de convertir las lecturas a una señal digital en serie.
Tensión de funcionamiento | 3.3V a 5.5V |
Rango de medición de humedad | 20% a 90% HR |
Precisión de medición de humedad | ± 5% HR |
Resolución de medición de humedad | 1% HR |
Rango de medición de temperatura | 0ºC a 50ºC [32ºF a 122ºF] |
Precisión de medición de temperatura | ± 2ºC |
Resolución de medición de temperatura | 1ºC |
Rango de transmisión de señal | 20m |
Un pcb
Descarga el archivo gerber desde —> Control motor por telegram y temperatura y humedad
PROYECTO RECOMENDADO