Caixote do lixo automático — a tampa abre quando o sensor de obstáculos deteta uma mão a menos de 15 cm, e fecha automaticamente após 3 segundos. Um LED de 7 cores indica que o sistema está activo e um buzzer passivo confirma com um BIP curto cada abertura. O relé comanda o mecanismo de abertura (servomotor ou solenóide simulado).
| Módulo | Pino do módulo | Pino Arduino | Função |
|---|---|---|---|
| Sensor Obstáculos (#37) | VCC / GND / OUT | 5V / GND / D4 | Deteta mão — LOW = objeto detectado |
| Módulo Relé (#29) | VCC / GND / IN | 5V / GND / D7 | Comanda o mecanismo de abertura |
| LED 7 Cores (#35) | VCC / GND / S | 5V / GND / D13 | Indicador de sistema activo |
| Buzzer Passivo (#21) | VCC / GND / S | 5V / GND / D8 | Confirmação sonora |
| Mecanismo | Ligação ao relé | Complexidade | Adequado para |
|---|---|---|---|
| LED indicador (simulação) | LED + resistência entre COM e NO | ⬤ Iniciante | Demonstração em aula — sem construção mecânica |
| Servomotor SG90 | Relé não necessário — sinal direto D9 | ⬤ Intermédio | Tampa leve — angle 0°=fechado, 90°=aberto |
| Motor DC + driver L298N | Relé para ON/OFF do motor | ⬤ Avançado | Tampas mais pesadas com engrenagem |
Liga o sensor (OUT→D4, VCC→5V, GND→GND). Usa digitalRead(4) no Serial Monitor — deve ler LOW ao aproximar a mão. Ajusta a distância com o potenciómetro do sensor (tipicamente 2–30 cm).
Liga o relé (IN→D7). Lógica invertida: digitalWrite(7, LOW) ativa o relé (abre tampa); HIGH desativa (fecha). Liga o mecanismo escolhido aos terminais COM e NO do relé.
Liga o LED 7 cores (S→D13) e o buzzer passivo (S→D8). O LED fica sempre ligado quando o sistema está activo; o buzzer faz um BIP a cada abertura.
Carrega o sketch completo e ajusta TEMPO_ABERTO conforme a usabilidade pretendida (2–5 segundos é o habitual).
#define SENSOR_PIN 4 // Obstáculos — LOW = mão detectada
#define RELE_PIN 7 // Relé — LOW = ativa (abre tampa)
#define LED7_PIN 13 // LED 7 cores — sistema activo
#define BUZZER_PIN 8 // Buzzer passivo
#define TEMPO_ABERTO 3000 // ms que a tampa fica aberta
bool tampaAberta = false;
unsigned long tempoAbertura = 0;
void abrirTampa() {
if (tampaAberta) return; // Já está aberta
digitalWrite(RELE_PIN, LOW); // Ativa relé (lógica invertida)
tone(BUZZER_PIN, 1200, 80); // BIP de confirmação
tempoAbertura = millis();
tampaAberta = true;
Serial.println("Tampa: ABERTA");
}
void fecharTampa() {
digitalWrite(RELE_PIN, HIGH); // Desativa relé
tone(BUZZER_PIN, 600, 80); // BIP grave de fecho
tampaAberta = false;
Serial.println("Tampa: FECHADA");
}
void setup() {
pinMode(SENSOR_PIN, INPUT);
pinMode(RELE_PIN, OUTPUT);
pinMode(LED7_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(RELE_PIN, HIGH); // Garante tampa fechada ao início
digitalWrite(LED7_PIN, HIGH); // Sistema activo — LED 7 cores ON
Serial.begin(9600);
Serial.println("Eco-Caixote Inteligente — PRONTO");
}
void loop() {
bool maoDetectada = (digitalRead(SENSOR_PIN) == LOW);
// Abrir se detetou mão e tampa está fechada
if (maoDetectada) {
abrirTampa();
}
// Fechar automaticamente após TEMPO_ABERTO
if (tampaAberta && (millis() - tempoAbertura > TEMPO_ABERTO)) {
fecharTampa();
}
}servo.write(90) para abrir, servo.write(0) para fechar