En este tutorial veremos como hacer un alimentador de peces controlado por telegram con esp32, un motor paso a paso 28byj-48 con su respectiva controladora. Este dispositivo también incluye la posibilidad de conocer la temperatura del agua, con un sensor de temperatura ds18b20 en su versión sumergible con encapsulado metálico, y tiene la función de encender una luz de 110V/220V.
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
Componentes electrónicos
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.
Pines Hembra
Un Foco
Un resistor de 4,7 Kohm
Un sensor de temperatura ds18b20
*poner un resistor de 4,7 Kohm entre el cable de 5 voltios y el de datos.
Cables dupont
Un motor paso a paso 28byj-48 con su controladora
Los parámetros de este motor paso a paso son:
- Modelo: 28BYJ-48 – 5V
- Tensión nominal: 5V (o 12 V, valor indicado en la parte trasera).
- Cantidad de fases: 4.
- Reductor de velocidad: 1/64
- Ángulo de paso: 5,625° / 64
- Frecuencia: 100Hz
- Resistencia en CC: 50Ω ±7 % (25° C)
- Frecuencia con tracción: > 600Hz
- Frecuencia sin tracción: > 1000Hz
- Torque con tracción: >34,3mN.m (120Hz)
- Torque en autoposicionamiento: >34,3mN.m
- Torque con fricción: 600-1200 gf.cm
- Arrastre en torque: 300 gf.cm
- Resistencia de aislación > 10MΩ (500V)
- Aislación eléctrica: 600VAC/1mA/1s
- Grado de aislación: A
- Aumento de temperatura: < 40K (120Hz)
- Ruido: < 35dB (120Hz, sin carga, 10cm)
ULN2003APG
Especificaciones principales:
- 500 mA de corriente de colector nominal (de salida única)
- 50 V de salida (hay una versión que soporta 100 V de salida)
- Incluye diodos de retorno de salida
- Entradas compatibles con TTL y 5-V CMOS lógica
Un pcb
Descargar archivo gerber –> Gerber_esp32
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
Archivos STL
Circuito
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 165 166 |
//Alimentador de peces x telegram #include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #include <DallasTemperature.h>//Librería para el manejo del sensor de temperatura ds18b20 #define sensorTem4 4 //Pin número 4 para el sensor de temperatura ds18b20 OneWire ourWire(sensorTem4); //Se establece el pin declarado como bus para la comunicación OneWire DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature // Reemplazar con los datos de tu red wifi #define WIFI_SSID "Tu_red_Wifi" #define WIFI_PASSWORD "Tu_clave" //Token de Telegram BOT se obtenienen desde Botfather en telegram #define BOT_TOKEN "Tu_token" const unsigned long tiempo = 1000; //tiempo medio entre mensajes de escaneo WiFiClientSecure secured_client; UniversalTelegramBot bot(BOT_TOKEN, secured_client); int inicio = 1; String chat_id; #define ID_Chat "Tu_ID"//ID_Chat se obtiene de telegram unsigned long tiempoAnterior; //última vez que se realizó el análisis de mensajes const int led14 = 14;//Pin 14 para en control de la luz int estadoLed14 = 0; // Pines para controlar el motor paso a paso #define IN1 16 #define IN2 17 #define IN3 5 #define IN4 18 // Secuencias del motor paso a paso int paso [4][4] = { {1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 1} }; void mensajesNuevos(int numerosMensajes) { for (int i = 0; i < numerosMensajes; i++) { String chat_id = bot.messages[i].chat_id; String text = bot.messages[i].text; //////////Luz 1 en el pin 12////// if (text == "/Alimentar") { //Movemos el motor paso a paso algunos grados for (int m = 0; m < 51; m++){ for (int p = 0; p < 4; p++) { digitalWrite(IN1, paso[p][0]); digitalWrite(IN2, paso[p][1]); digitalWrite(IN3, paso[p][2]); digitalWrite(IN4, paso[p][3]); delay(10); } } bot.sendMessage(chat_id, "Alimento depositado", ""); } if (text == "/Temperatura") { sensors.requestTemperatures(); //Prepara el sensor para la lectura float datoSensor = sensors.getTempCByIndex(0); // getTempCByIndex(0) se refiere al primer sensor si es que tubieramos más de uno conectado en el cable //Imprimimos en el terminal serial el valor de la lectura tomada en el sensor de temperatura Serial.print("Temperatura en celcius: "); Serial.println(datoSensor); String stringT = String(datoSensor); String datos ="Temperatura: "+ stringT; bot.sendMessage(chat_id, datos, ""); } //////////Luz en el pin 14////// if (text == "/Luzon") { digitalWrite(led14, HIGH); estadoLed14 = 1; bot.sendMessage(chat_id, "Luz encendida", ""); } if (text == "/Luzoff") { estadoLed14 = 0; digitalWrite(led14, LOW); bot.sendMessage(chat_id, "Luz apagada", ""); } ////////Estado de la luz /////// if (text == "/Estado") { ////Estado luz //// if (estadoLed14) { bot.sendMessage(chat_id, "Luz encendida", ""); } else { bot.sendMessage(chat_id, "Luz apagada", ""); } } if (text == "/Ayuda") { String ayuda = "Bienvenido al sistema de control con Esp32, " ".\n"; ayuda += "Estas son tus opciones.\n\n"; ayuda += "/Alimentar: Alimenta a los peces \n"; ayuda += "/Temperatura: Temperatura de la pecera \n"; ayuda += "/Luzon: para encender la Luz \n"; ayuda += "/Luzoff: para apagar la luz \n"; ayuda += "/Estado : devuelve el estado actual de las luz\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); sensors.begin(); //se inicia el sensor ds18b20 // Todos los pines como salida pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); delay(1000); pinMode(led14, OUTPUT); //inicializar pin 14 digital como salida. digitalWrite(led14, LOW); // 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() { //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(); } } |
Descargar Librería –> Universal-Arduino-Telegram-Bot-master
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
VIDEO RECOMENDADO
Buenas!
Tu trabajo es increíble y queria contactarte de alguna manera. Estoy terminando de integrar algo similar (de muchisimo menor nivel) pero alimentado por energia solar. Voy a seguir tus tutoriales y para eso quería saber si es viable este mismo código para ESP8266 en lugar de ESP32.
Muchas gracias!