Menu
CoddyTech

Sensor de estacionamiento: pitidos

Parte de la sección Proyectos del Journey de Arduino de Coddy. Lección 11 de 24.

Un sensor de estacionamiento habla y también muestra: cuanto más cerca está la pared, más rápido pita, hasta que mantiene un tono continuo que significa detenerse. El zumbador está conectado al pin 8.

El intervalo entre pitidos depende de la distancia: la distancia multiplicada por 10, en milisegundos. A 70 cm, un pitido cada 700 ms; a 20 cm, cada 200 ms. Un temporizador millis() decide cuándo debe sonar el siguiente pitido:

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

Hay otros dos casos. A menos de 10 cm, reproduce tone(buzzerPin, 1000) sin duración: suena hasta que algo lo detiene. A 100 cm o más, permanece en silencio y llama a noTone(buzzerPin) para detener también cualquier tono continuo que haya quedado sonando.

challenge icon

Desafío

Intermedio

Añade los pitidos:

  • 100 cm o más: sin sonido (llama a noTone())
  • De 10 a 99 cm: un pitido de 50 ms a 1000 Hz cada cm * 10 ms, cronometrado con millis()
  • Menos de 10 cm: un tono constante de 1000 Hz

Mantén las luces y la impresión. Pulsa Run, acerca el objeto y después Check.

Pruébalo tú mismo

// El sensor de distancia
const int trigPin = 9;
const int echoPin = 10;
// Las luces de advertencia
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Envía un pulso y devuelve la distancia en 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 cuando no hay obstáculos, amarillo cuando están cerca y rojo cuando están demasiado cerca.
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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Proyectos

Practica por tu cuenta: Playground de Arduino