// SPDX-License-Identifier: MIT // Desafio de criação: sensor de nível de reservatório (Arduino Uno) // // O trimpot faz o papel da boia: cursor no fim ligado ao GND = reservatório vazio, // cursor no fim ligado ao 5V = reservatório cheio. O programa converte a leitura em // porcentagem e acende o LED da placa quando o nível cai abaixo do mínimo. // // Ligação: trimpot de 10 kΩ entre 5V e GND, cursor em A1. LED "L" da placa, no pino 13. const int PINO_BOIA = A1; const int PINO_ALARME = 13; const int NIVEL_MINIMO_PCT = 20; // abaixo disso, alarme const int CODIGO_MAXIMO = 1023; // topo da escala de 10 bits const unsigned long INTERVALO_MS = 500; // uma medida a cada meio segundo unsigned long ultimoEnvio = 0; void setup() { pinMode(PINO_ALARME, OUTPUT); Serial.begin(9600); Serial.println("nivel(%)\talarme"); } void loop() { if (millis() - ultimoEnvio < INTERVALO_MS) return; ultimoEnvio = millis(); int valor = analogRead(PINO_BOIA); int nivel = valor * 100L / CODIGO_MAXIMO; // o "L" evita estourar o int em valor * 100 bool baixo = (nivel < NIVEL_MINIMO_PCT); digitalWrite(PINO_ALARME, baixo ? HIGH : LOW); Serial.print(nivel); Serial.print('\t'); Serial.println(baixo ? "BAIXO" : "ok"); } // Variações para você criar: // 1. Histerese: o alarme liga em 20% e só desliga em 25%, para não piscar no limite. // 2. Média de 8 leituras antes de decidir, para o ruído não disparar o alarme. // 3. Dois patamares: aviso em 40% e alarme em 20%. // 4. Trocar o trimpot por um sensor de verdade (LDR, umidade do solo): a leitura é a mesma.