#include <Servo.h>
// Configuración de pines
const int smokePin = A0; // Pin del sensor de gas
const int ldrPin = A1; // Pin del LDR (fotorresistencia)
const int servoPin = 11; // Pin del servo motor
// Umbrales y constantes
const int smokeThreshold = 500; // Umbral de detección de humo
const float GAMMA = 0.7;
const float RL10 = 50;
// Pines de salida para controlar bombillas
const int outputPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 12};
const int numOutputPins = sizeof(outputPins) / sizeof(outputPins[0]);
// Objeto servo
Servo myServo;
void setup() {
// Configurar el servo
myServo.attach(servoPin);
// Configurar pines de entrada y salida
pinMode(smokePin, INPUT);
pinMode(ldrPin, INPUT);
for (int i = 0; i < numOutputPins; i++) {
pinMode(outputPins[i], OUTPUT);
}
// Iniciar comunicación serial
Serial.begin(9600);
}
void loop() {
// Leer valores del sensor de humo y LDR
int smokeValue = analogRead(smokePin);
int ldrValue = analogRead(ldrPin);
// Imprimir lectura del sensor de humo
Serial.print("SENSOR DE HUMO: ");
Serial.println(smokeValue);
// Control del servo en función del nivel de humo
if (smokeValue > smokeThreshold) {
myServo.write(0); // Mover el servo a la posición 0
} else {
myServo.write(90); // Mover el servo a la posición 90
}
// Calcular el nivel de luz (LUX)
float voltage = ldrValue * (5.0 / 1023.0); // Convertir lectura analógica a voltaje
float resistance = 2000 * voltage / (1 - voltage / 5); // Calcular resistencia
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, 1 / GAMMA); // Calcular LUX
// Imprimir lectura del sensor de humo
Serial.print("SENSOR DE Iluminación: ");
Serial.println(lux);
// Controlar las bombillas en función del nivel de luz
if (lux > 50) {
turnOnAllLights();
} else {
turnOffAllLights();
}
// Retardo mínimo para evitar saturación
delay(100);
}
// Función para encender todas las bombillas
void turnOnAllLights() {
for (int i = 0; i < numOutputPins; i++) {
digitalWrite(outputPins[i], HIGH);
}
}
// Función para apagar todas las bombillas
void turnOffAllLights() {
for (int i = 0; i < numOutputPins; i++) {
digitalWrite(outputPins[i], LOW);
}
}