Arduinomaster
Published © CC BY-NC-SA

DistanceOmeter

For HC-SR05 ultrasonic sensor.

IntermediateProtip723
DistanceOmeter

Things used in this project

Story

Read more

Schematics

fj49d71jxb7gani_tqVcMZmjl5.jpg

Code

Untitled file

Arduino
#include<LiquidCrystal.h> 

LiquidCrystal lcd(2, 4, 7, 8, 9, 10);

// definiçao de constantes para pinos 
#define TRIG_PIN 13
#define ECHO_PIN 12

#define RED 6
#define GREEN 5
#define BLUE 3

// definiçao de constantes para facilitar a manutençao das distancias 
#define BLUE_LONG 60
#define BLUE_SHORT 30
#define GREEN_LONG 45
#define GREEN_SHORT 15
#define RED_LONG 30
#define RED_SHORT 0
 
void setup() {
  // inicia o display LCD
  lcd.begin(16,2);
  
  // seta o modo dos pinos do LED
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
 
  // seta o modo dos pinos do HC-SR05
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // apaga o LED (anodo comum, apaga com HIGH) 
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN, HIGH);
  digitalWrite(BLUE, HIGH);
}
 
void loop() {
  // declaracao de variaveis
  long duration, distance;
 
  // le a distancia e converte para cm
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  duration = pulseIn(ECHO_PIN, HIGH);
  distance = (duration/2) / 29.1;
  
  // de acordo com a distancia, mapeia a cor do led usando pwm
  // azul: de 60cm a 30cm
  // verde: de 45cm a 15cm
  // vermelho: de 30cm a 0cm
  
  if (distance > RED_LONG)
    digitalWrite(RED, HIGH);
  else
    analogWrite(RED, map(distance, RED_LONG, RED_SHORT, 255, 0));
  
  if ((distance > GREEN_LONG) || (distance < GREEN_SHORT))
    digitalWrite(GREEN, HIGH);
  else
    analogWrite(GREEN, map(distance, GREEN_LONG, GREEN_SHORT, 255, 0));
  
  if ((distance > BLUE_LONG) || (distance < BLUE_SHORT))
    digitalWrite(BLUE, HIGH);
  else
    analogWrite(BLUE, map(distance, BLUE_LONG, BLUE_SHORT, 255, 0));
  
  // escreve a distancia no display
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("simaopintocorreia");
  lcd.setCursor(0,1);
  lcd.print("Distancia: ");
  if (distance > 450)
    lcd.print("> 50");
  else
    lcd.print(distance);
  lcd.print(" cm");
  
  // aguarda para poder ler o sensor novamente
  delay(400);
}

Credits

Arduinomaster
0 projects • 1 follower

Comments