O objetivo deste sistema é automatizar a abertura da tampa de uma lixeira pela aproximação. Quando a pessoa se aproximar de uma determinada distância (ajustável no código) o sensor ultrassônico acionará o servo motor que por sua vez tem a função de abrir a tampa da lixeira, essa tampa permanece aberta por alguns segundos e depois se fecha.
#include
Servo servo;
int trigPin = 6;
int echoPin = 7;
int servoPin = 5;
long duracao, distancia, media;
long medias[3];
void setup() {
Serial.begin(9600);
servo.attach(servoPin);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.write(0); //close cap on power on
delay(100);
servo.detach();
}
void medir() {
digitalWrite(10,HIGH);
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duracao = pulseIn(echoPin, HIGH);
distancia = (duracao / 2) / 29.1;
}
void loop() {
for (int i = 0; i <= 2; i++) { // distância média
medir();
medias[i] = distancia;
delay(10); //atraso entre as medicões
}
distancia = (medias[0] + medias[1] + medias[2]) / 3;
if ( distancia <= 20 ) {
servo.attach(servoPin);
delay(1);
servo.write(0);
delay(3000);
servo.write(150);
delay(1000);
servo.detach();
}
Serial.print(distancia);
Serial.println("cm");
}