Menu
CoddyTech

Sensor de Estacionamento: Bipes

Parte da seção Projetos do Journey de Arduino da Coddy. Lição 11 de 24.

Um sensor de estacionamento fala e também mostra: quanto mais perto da parede, mais rápido ele apita, até emitir um tom contínuo que significa parar. O buzzer está no pino 8.

O intervalo entre os bipes vem da distância: a distância vezes 10, em milissegundos. A 70 cm, um bipe a cada 700 ms; a 20 cm, a cada 200 ms. Um temporizador millis() decide quando o próximo bipe deve ocorrer:

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // um bipe de 50 ms
}

Há mais dois casos. A menos de 10 cm, toque tone(buzzerPin, 1000) sem duração: o som continua até que algo o interrompa. A 100 cm ou mais, mantenha o silêncio e chame noTone(buzzerPin) para interromper também um tom contínuo que tenha ficado tocando.

challenge icon

Desafio

Médio

Adicione os bipes:

  • 100 cm ou mais: sem som (chame noTone())
  • De 10 a 99 cm: um bipe de 50 ms a 1000 Hz a cada cm * 10 ms, cronometrado com millis()
  • Menos de 10 cm: um tom contínuo de 1000 Hz

Mantenha as luzes e a impressão. Pressione Executar, aproxime o objeto e, em seguida, Verificar.

Experimente você mesmo

// O sensor de distância
const int trigPin = 9;
const int echoPin = 10;
// As luzes de aviso
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Envia um pulso e retorna a distância em cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Verde quando não há obstáculos por perto, amarelo quando está perto, vermelho quando está perto demais.
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  delay(100);
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Projetos

Pratique por conta própria: Playground de Arduino