Menu
CoddyTech

Sensor de Estacionamento: Visor

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

A última etapa exibe a distância exata na tela. O LCD 16x2 é conectado da maneira usual: RS no 12, E no 11, D4 a D7 nos pinos 5, 4, 3 e 2.

#include <LiquidCrystal.h>

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

A linha superior nunca muda, então escreva Distance: uma vez em setup(), depois de lcd.begin(16, 2). Somente a linha inferior é atualizada em loop().

Um LCD mantém cada caractere até que algo o substitua. Ao passar de 250 cm para 8 cm, imprimir 8 cm sobre 250 cm deixa o final antigo da linha para trás, e a tela exibe 8 cmcm. Imprima alguns espaços depois do texto para cobrir qualquer sobra de um número mais longo:

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

Os espaços também evitam a cintilação de lcd.clear(), que apagaria a tela inteira dez vezes por segundo.

challenge icon

Desafio

Fácil

Exiba a distância no LCD:

  • inclua LiquidCrystal.h e crie lcd(12, 11, 5, 4, 3, 2)
  • em setup(): lcd.begin(16, 2) e Distance: na linha superior
  • em loop(): a distância e cm na linha inferior, como 57 cm, com espaços depois

Mantenha as luzes, os bipes e a impressão. Pressione Run e, em seguida, Check.

Experimente você mesmo

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

unsigned long lastBeep = 0;  // quando o último bipe começou

// 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 está livre, 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);
  }
}

// Emite bipes mais rápidos à medida que o objeto se aproxima.
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // perto demais: um som contínuo
  } 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 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