Conexión de Componentes en ESP32
2:20
Nota importante:
- El sensor BH1750 sólo opera en dos direcciones (normalmente 0x23 y 0x5C). En este ejemplo se asume que dispones de tres sensores BH1750 (uno para cada función), asignando la dirección adicional 0x5D para el sensor de luz usado en los servos. En la práctica, para usar tres sensores necesitarás un multiplexor I²C o un sensor alternativo.
- La conversión de lectura de luz a temperatura es simplemente simulada mediante la función
readSimulatedTemperature(); para un diseño real deberás usar un sensor de temperatura adecuado.
Cpp
#include #include #include // ========================= // PARTE 1: CONTROL DE VENTILADORES // ========================= const int fan1Pin = 5; // Pin para el ventilador 1 const int fan2Pin = 12; // Pin para el ventilador 2 const float tempThreshold = 35.0; // Umbral de "temperatura" (en °C, simulado) // Direcciones I2C para sensores BH1750 de temperatura simulada #define CRITICO_ADDR 0x23 #define AMBIENTE_ADDR 0x5C BH1750 sensorCritico; // Sensor para temperatura crítica BH1750 sensorAmbiente; // Sensor para temperatura ambiente // Función para simular la conversión de lux a temperatura float readSimulatedTemperature(BH1750 &sensor) { float lux = sensor.readLightLevel(); // Simulación: se mapea el rango de lux (0 a 1000) a un rango de temperatura (20 °C a 40 °C) long mappedValue = map((long)lux, 0, 1000, 20, 40); return (float)mappedValue; } // ========================= // PARTE 2: SENSOR DE HUMEDAD Y CONTROL DE BOMBA // ========================= const int sensorHumedadPin = 36; // Pin ADC para el sensor FC-28 (humedad del suelo) const int relePin = 15; // Pin para controlar el relé (bomba de agua) // Umbrales para la humedad del suelo (ajusta según tus pruebas) const int humedadSeco = 2000; const int humedadHumedo = 1000; // ========================= // PARTE 3: CONTROL DE SERVOMOTORES CON SENSOR DE LUZ // ========================= // Nota: Se asume un tercer BH1750 con dirección 0x5D. En la práctica se requiere un multiplexor I2C o sensor alternativo. #define LIGHT_ADDR 0x5D BH1750 sensorLight; // Sensor de luz para control de servos Servo servo1; Servo servo2; const int servo1Pin = 13; // Pin para Servo 1 const int servo2Pin = 26; // Pin para Servo 2 // Posiciones de los servos y tiempos const int posStop = 90; // Posición de reposo const int pos1Forward = 0; // Servo1: posición "adelante" const int pos1Backward = 180; // Servo1: posición "atrás" const int pos2Forward = 180; // Servo2: posición "adelante" (invertido) const int pos2Backward = 0; // Servo2: posición "atrás" (invertido) const int moveTime = 3000; // Duración del movimiento (en ms) const float lightThreshold = 50.0; // Umbral de luz (en lux) para cambiar de modo // ========================= // SETUP // ========================= void setup() { Serial.begin(115200); Wire.begin(); // Inicializar sensores BH1750 para el control de ventiladores if (!sensorCritico.begin(CRITICO_ADDR)) { Serial.println("Error iniciando sensorCritico BH1750"); } if (!sensorAmbiente.begin(AMBIENTE_ADDR)) { Serial.println("Error iniciando sensorAmbiente BH1750"); } // Inicializar el sensor de luz para servos if (!sensorLight.begin(LIGHT_ADDR)) { Serial.println("Error iniciando sensorLight BH1750"); } // Configurar pines de salida para ventiladores pinMode(fan1Pin, OUTPUT); pinMode(fan2Pin, OUTPUT); digitalWrite(fan1Pin, LOW); digitalWrite(fan2Pin, LOW); // Configurar pines para el sensor de humedad y el relé (bomba) pinMode(sensorHumedadPin, INPUT); pinMode(relePin, OUTPUT); digitalWrite(relePin, LOW); // Inicializar servos ESP32PWM::allocateTimer(0); ESP32PWM::allocateTimer(1); ESP32PWM::allocateTimer(2); ESP32PWM::allocateTimer(3); servo1.setPeriodHertz(50); servo1.attach(servo1Pin, 500, 2400); servo2.setPeriodHertz(50); servo2.attach(servo2Pin, 500, 2400); // Poner servos en posición de reposo servo1.write(posStop); servo2.write(posStop); Serial.println("Sistema unificado de control iniciado"); } // ========================= // LOOP PRINCIPAL // ========================= void loop() { // ----- Bloque 1: Control de Ventiladores (simulación de temperatura con BH1750) ----- float tempCritica = readSimulatedTemperature(sensorCritico); float tempAmbiente = readSimulatedTemperature(sensorAmbiente); Serial.print("Temp Critica: "); Serial.print(tempCritica); Serial.print(" °C | Temp Ambiente: "); Serial.print(tempAmbiente); Serial.println(" °C"); if (tempCritica > tempThreshold) { digitalWrite(fan1Pin, HIGH); digitalWrite(fan2Pin, HIGH); Serial.println("Temp critica alta - Ventiladores ENCENDIDOS"); } else { digitalWrite(fan1Pin, LOW); digitalWrite(fan2Pin, LOW); Serial.println("Temp critica normal - Ventiladores APAGADOS"); } delay(2000); // ----- Bloque 2: Control de Humedad y Bomba ----- int lecturaHumedad = analogRead(sensorHumedadPin); Serial.print("Lectura de humedad: "); Serial.println(lecturaHumedad); if (lecturaHumedad > humedadSeco) { digitalWrite(relePin, HIGH); Serial.println("Suelo seco - Relé ACTIVADO (bomba encendida)"); } else if (lecturaHumedad < humedadHumedo) { digitalWrite(relePin, LOW); Serial.println("Suelo húmedo - Relé DESACTIVADO (bomba apagada)"); } delay(2000); // ----- Bloque 3: Control de Servomotores basado en Sensor de Luz ----- float lux = sensorLight.readLightLevel(); Serial.print("Nivel de luz (servo): "); Serial.print(lux); Serial.println(" lx"); if(lux > lightThreshold) { Serial.println("Modo con luz - Movimiento en Sentido A"); servo1.write(pos1Forward); servo2.write(pos2Forward); delay(moveTime); stopServos(); } else { Serial.println("Modo sin luz - Movimiento en Sentido B"); servo1.write(pos1Backward); servo2.write(pos2Backward); delay(moveTime); stopServos(); } delay(1000); // Pausa breve antes de iniciar la siguiente iteración } // Función para detener los servos (posición de reposo) void stopServos() { servo1.write(posStop); servo2.write(posStop); delay(100); }
Ready.
Reviews
Des | Net | Des | Net | ... | |
|---|---|---|---|---|---|
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
None | |||||
Name | |
|---|---|
Inspect
Confident Blush Time Machine
Controls
Properties
Availability & Pricing
| Distributor | Qty 1 | |
|---|---|---|
| Arrow | $2.93 | |
| Digi-Key | $4.80 | |
| Mouser | $4.53 | |
| Verical | $4.11 | |
Assets
Welcome 👋
Flux helps you build PCBs faster with an AI teammate!
Create your account to collaborate, stay updated, fork your own version, and get instant answers from our AI agent.