// ULTRASONIDO
const int trigPin = 15; // Pin de trigger conectado a GPIO25
const int echoPin = 2; // Pin de echo conectado a GPIO33
// FOTO RESISTENCIA
const float GAMMA = 0.7;
const float RL10 = 50;
// DHT 22, PERO EN EL CODIGO REAL SOLO SE TOMARA LA TEMPERATURA
#include <DHT.h>
#define DHTPIN 4 // Usa un pin válido (GPIO4, 2, 15, etc.)
#define DHTTYPE DHT22 // O DHT11 si es tu caso
DHT dht(DHTPIN, DHTTYPE);
// ELECTROVALVULA
const float Electrovalvula = 16;
void setup() {
// ULTRASONIDO
Serial.begin(115200); // Inicializa comunicación serial a 115200 baudios
pinMode(trigPin, OUTPUT); // Configura pin de trigger como salida
pinMode(echoPin, INPUT); // Configura pin de echo como entrada
delay(100); // Pequeña pausa para estabilización
Serial.print("Iniciando sistema de Riego Digital.......");
// DHT 11
dht.begin();
pinMode(Electrovalvula, OUTPUT);
}
void loop() {
// ULTRASONIDO
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
bool h;
if (distance < 20) {
h = 0;
}
if (distance >= 20) {
h = 1;
}
// FOTO RESISTENCIA
int analogValue = analogRead(32);
float voltage = analogValue / 4095.0 * 3.3;
float resistance = (3.3 * 2000.0) / (3.3 - voltage);
float lux = pow(RL10 * 1000.0 * pow(10, GAMMA) / resistance, (1.0 / GAMMA));
bool L;
if (lux < 5) {
L = 0;
}
if (lux >= 5) {
L = 1;
}
delay(2000);
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(humedad) || isnan(temperatura)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
float hif = dht.computeHeatIndex(f, humedad);
float hic = dht.computeHeatIndex(temperatura, humedad, false);
bool T;
bool H;
if (temperatura < 30) {
T = 0;
}
if (temperatura >= 30) {
T = 1;
}
if (humedad < 40) {
H = 0;
}
if (humedad >= 40) {
H = 1;
Serial.print(T);
Serial.print(H);
Serial.print(L);
Serial.println(h);
Serial.print(temperatura);
Serial.print("°C ");
Serial.print(humedad);
Serial.print("% ");
Serial.print(lux);
Serial.print("lux ");
Serial.print(distance);
Serial.println("Cm");
}
bool E = (!T && !H && h) || (T && h) || (L && h);
digitalWrite(Electrovalvula, E);
delay(500);
}