#include <SoftwareSerial.h>
#include <DHT.h>
#include <Servo.h>
// Configuración del puerto serie de software para el módulo Bluetooth
SoftwareSerial BTSerial(10, 11); // RX, TX
const int relay1 = 2; // Pin para el relevador 1
const int relay2 = 3; // Pin para el relevador 2
const int relay3 = 4; // Pin para el relevador 3
#define DHTPIN 5 // Pin al que el sensor DHT está conectado
#define DHTTYPE DHT22 // Puede ser DHT11 o DHT22, según el modelo
const int lightSensorPin = A0; // Pin analógico para el LDR
const int lightThreshold = 500; // Umbral para detectar la presencia de luz
Servo servo1; // Crear objeto Servo 1
const int servo1Pin = 6; // Pin de control para Servo 1
Servo servo2; // Crear objeto Servo 2
const int servo2Pin = 7; // Pin de control para Servo 2
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
// Configurar pines de relevadores como salida
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
// Inicializar relevadores a apagado
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
// Inicializar el sensor DHT
dht.begin();
// Inicializar servos
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
// Mover servos a posición inicial
servo1.write(0);
servo2.write(0);
}
void loop() {
// Leer el nivel de luz
int lightLevel = analogRead(lightSensorPin);
// Comprobar condiciones de luz y activar/desactivar relevador y servos
if (lightLevel > lightThreshold) { // Detecta la presencia de luz
digitalWrite(relay3, LOW); // Desactiva el relevador 3 si hay luz
// Mover servos 90 grados cuando hay luz
servo1.write(90);
servo2.write(90);
} else { // Sin luz
digitalWrite(relay3, HIGH); // Activa el relevador 3 cuando hay poca luz
// Retornar servos a posición inicial
servo1.write(0);
servo2.write(0);
}
// Lee los datos recibidos desde el módulo Bluetooth
if (BTSerial.available()) {
char command = BTSerial.read();
Serial.println(command);
// Controlar relevadores según el comando recibido
switch (command) {
case '1':
digitalWrite(relay1, HIGH);
break;
case '2':
digitalWrite(relay1, LOW);
break;
case '3':
digitalWrite(relay2, HIGH);
break;
case '4':
digitalWrite(relay2, LOW);
break;
case '5':
digitalWrite(relay3, HIGH);
break;
case '6':
digitalWrite(relay3, LOW);
break;
case 'T': // Enviar temperatura y humedad
enviarDHTData();
break;
case 'L': // Enviar nivel de luz
enviarLightSensorData();
break;
default:
Serial.println("Comando no reconocido.");
break;
}
}
// Esperar un poco antes de la siguiente lectura para evitar spam
delay(500);
}
// Función para leer y enviar los datos del DHT
void enviarDHTData() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
BTSerial.println("Error de lectura del DHT!");
return;
}
BTSerial.print("Humedad: ");
BTSerial.print(h);
BTSerial.print(" %\t");
BTSerial.print("Temperatura: ");
BTSerial.print(t);
BTSerial.println(" *C");
}
// Función para leer y enviar los datos del sensor de luz
void enviarLightSensorData() {
int lightLevel = analogRead(lightSensorPin);
BTSerial.print("Nivel de Luz: ");
BTSerial.println(lightLevel);
}