Menu
CoddyTech

Sensor de estacionamiento: pantalla

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

El último paso muestra la distancia exacta en la pantalla. La pantalla LCD de 16x2 está conectada de la forma habitual: RS en 12, E en 11, D4 a D7 en 5, 4, 3 y 2.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

La fila superior nunca cambia, así que escribe Distance: una vez en setup(), después de lcd.begin(16, 2). Solo se actualiza la fila inferior en loop().

Una pantalla LCD conserva cada carácter hasta que algo lo reemplaza. Al pasar de 250 cm a 8 cm, imprimir 8 cm sobre 250 cm deja el final antiguo de la línea, y la pantalla muestra 8 cmcm. Imprime algunos espacios después del texto para cubrir lo que haya dejado un número más largo:

lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm    ");

Los espacios también evitan el parpadeo de lcd.clear(), que borraría toda la pantalla diez veces por segundo.

challenge icon

Desafío

Fácil

Muestra la distancia en la pantalla LCD:

  • incluye LiquidCrystal.h y crea lcd(12, 11, 5, 4, 3, 2)
  • en setup(): lcd.begin(16, 2) y Distance: en la fila superior
  • en loop(): la distancia y cm en la fila inferior, como 57 cm, con espacios después

Mantén las luces, los pitidos y la impresión. Pulsa Run 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;
// El zumbador
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // cuándo comenzó el último pitido

// 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á cerca y rojo cuando está 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);
  }
}

// Emite pitidos más rápidos a medida que el objeto se acerca.
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // demasiado cerca: un tono continuo
  } else if (millis() - lastBeep >= cm * 10) {
    lastBeep = millis();
    tone(buzzerPin, 1000, 50);
  }
}

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);
  beep(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