/*programa sem biblioteca, com um sensor dht11
um sensor de umidade analogico na porta 6, um
led verde na porta 8, um led vermelho na porta 10.
e um led azul na porta 11, se a temperatura
marcar mais de 20 gruas acionar o led azul em
analogWrite(11,50) se a temperatura for 25 em 100
se for 30 graus em 150 e assim até 255 de potencia.
se a humidade ficar baixo de 40% acionar led vermelho.
se a temperatura passar de 50graus piscar led vermelho.
seo sensor de umidade detectar agua fazer led verde
e vermelho acesso e faer sinal sonoro com buzzer com
tone(13,440) na porta 13.*/
#define DHTPIN 2 // Pino digital conectado ao DHT11
#define sensorUmidade A6 // Sensor de umidade analógico na porta A6
#define ledVerde 8
#define ledVermelho 10
#define ledAzul 11
#define buzzer 13
byte data[5];
void setup() {
Serial.begin(9600);
pinMode(ledVerde, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledAzul, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(DHTPIN, OUTPUT);
}
void loop() {
int umidadeAnalogica = analogRead(sensorUmidade); // 0 a 1023
float temperatura = lerDHT();
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C | Umidade Analogica: ");
Serial.println(umidadeAnalogica);
// LED AZUL proporcional à temperatura
if (temperatura >= 20 && temperatura <= 50) {
int intensidade = map(temperatura, 20, 50, 50, 255);
analogWrite(ledAzul, intensidade);
} else if (temperatura < 20) {
analogWrite(ledAzul, 0);
}
// LED vermelho se temperatura > 50: piscar
if (temperatura > 50) {
digitalWrite(ledVermelho, HIGH);
delay(300);
digitalWrite(ledVermelho, LOW);
delay(300);
} else {
// LED vermelho se umidade estiver baixa (< 40%)
if (umidadeAnalogica < 400) {
digitalWrite(ledVermelho, HIGH);
} else {
digitalWrite(ledVermelho, LOW);
}
}
// Se umidade analógica for muito baixa (água detectada)
if (umidadeAnalogica < 100) {
digitalWrite(ledVerde, HIGH);
digitalWrite(ledVermelho, HIGH);
tone(buzzer, 440);
delay(500);
noTone(buzzer);
} else {
digitalWrite(ledVerde, LOW);
}
delay(1000);
}
// Função manual para ler DHT11
float lerDHT() {
byte bits[5];
byte cnt = 7;
byte idx = 0;
for (int i = 0; i < 5; i++) bits[i] = 0;
pinMode(DHTPIN, OUTPUT);
digitalWrite(DHTPIN, LOW);
delay(20);
digitalWrite(DHTPIN, HIGH);
delayMicroseconds(40);
pinMode(DHTPIN, INPUT);
// Espera por resposta do DHT
if (pulseIn(DHTPIN, LOW, 100) == 0) return -1;
if (pulseIn(DHTPIN, HIGH, 100) == 0) return -1;
for (int i = 0; i < 40; i++) {
if (pulseIn(DHTPIN, LOW, 100) == 0) return -1;
unsigned long length = pulseIn(DHTPIN, HIGH, 100);
if (length == 0) return -1;
bits[idx] <<= 1;
if (length > 40) bits[idx] |= 1;
if (cnt == 0) {
cnt = 7;
idx++;
} else cnt--;
}
byte checksum = bits[0] + bits[1] + bits[2] + bits[3];
if (bits[4] != checksum) return -1;
int temp = bits[2]; // byte de temperatura inteira
return (float)temp;
}