// SPDX-License-Identifier: MIT // Desafio de criação: sensor de nível de reservatório (ESP32-S3 DevKitC-1 N16R8) // // Mesma ideia da versão do Uno. O que muda: 3,3 V, 12 bits, GPIO4 no lugar de A1 e o // LED RGB da placa no lugar do LED do pino 13 (vermelho abaixo do mínimo, verde acima). // // Ligação: trimpot de 10 kΩ entre 3V3 e GND, cursor no GPIO4 (ADC1_CH3). // NUNCA alimente o trimpot pelo 5V: 5 V num pino desta placa pode queimar o chip. // // Arduino IDE: placa "ESP32S3 Dev Module", PSRAM "OPI PSRAM", Flash Size "16MB (128Mb)", // USB CDC On Boot: "Enabled". const int PINO_BOIA = 4; // GPIO4 = ADC1_CH3 (funciona com o Wi-Fi ligado) const int FUNDO_DE_ESCALA_MV = 3100; // fim da faixa que a atenuação padrão consegue medir const int NIVEL_MINIMO_PCT = 20; const unsigned long INTERVALO_MS = 500; unsigned long ultimoEnvio = 0; void setup() { Serial.begin(115200); Serial.println("nivel(%)\talarme"); // O LED RGB da placa é um WS2812: não usa pinMode nem digitalWrite, usa neopixelWrite(). } void loop() { if (millis() - ultimoEnvio < INTERVALO_MS) return; ultimoEnvio = millis(); uint32_t mV = analogReadMilliVolts(PINO_BOIA); // leitura calibrada, em milivolts int nivel = (int)(mV * 100L / FUNDO_DE_ESCALA_MV); if (nivel > 100) nivel = 100; // o topo do curso satura antes do fim bool baixo = (nivel < NIVEL_MINIMO_PCT); if (baixo) { neopixelWrite(RGB_BUILTIN, 40, 0, 0); // vermelho fraco: nível abaixo do mínimo } else { neopixelWrite(RGB_BUILTIN, 0, 40, 0); // verde fraco: nível em ordem } Serial.print(nivel); Serial.print('\t'); Serial.println(baixo ? "BAIXO" : "ok"); } // RGB_BUILTIN já vem definido pelo núcleo Arduino-ESP32 para esta placa (GPIO48 na rev. v1.0, // GPIO38 na v1.1). Se o LED não acender, confira a serigrafia e defina o número na mão. // // Próximo passo, quando a trilha chegar ao Wi-Fi: em vez de acender um LED na bancada, // mandar esse mesmo número para um servidor ou para o celular. A leitura continua sendo // esta única linha; o que muda é para onde ela vai.