// Código sensor Ultrassônico HC-SR04 com LCD I2C
#include <LiquidCrystal_I2C.h>
int pin_trigger = 5;
int pin_echo = 4;
int ledR = 15;
int ledY = 2;
int ledG = 18;
float tempoEcho = 0;//armazenar o tempo de retorno do sinal
const float velocidadeSom = 0.000340;//velocidade do som em m/us
float distancia = 0;//armazenar a distância entre sensor e obstáculo
#define endereco 0x27
#define colunas 16
#define linhas 2
LiquidCrystal_I2C lcd(endereco, colunas, linhas);
void setup()
{
pinMode(ledR, OUTPUT);
pinMode(ledY, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(pin_trigger, OUTPUT);//define pino do trigger como saída
digitalWrite(pin_trigger, LOW);//inicializa pino do trigger em 0V
pinMode(pin_echo, INPUT);//define pino do echo como entrada
Serial.begin(115200);//inicializa comunicação Serial
lcd.init();//inicia o display lcd
lcd.backlight();//liga o backlight
}
void enviaSinal()//método para envio do sinal do trigger
{
digitalWrite(pin_trigger, HIGH);
delayMicroseconds(10);
digitalWrite(pin_trigger, LOW);
}
void loop()
{
lcd.clear();//limpar o lcd
enviaSinal();
tempoEcho = pulseIn(pin_echo, HIGH);//tempo de retorno do sinal
distancia = (tempoEcho*velocidadeSom)/2;//cálculo da distância em metros
Serial.print("Distancia em metros: ");
Serial.println(distancia);
lcd.print(" Distancia em");//escreve a informação no lcd
lcd.setCursor(0, 1);//coloca cursor na coluna 0 e linha 1
lcd.print("metros: ");
lcd.print(distancia);
lcd.print("m");
delay(1000);
lcd.clear();
lcd.print(" Distancia em");//escreve a informação no lcd
lcd.setCursor(0, 1);//coloca cursor na coluna 0 e linha 1
lcd.print("cm: ");
lcd.print(distancia*100);
lcd.print("cm");
Serial.print("Distancia em centimetros: ");
Serial.println(distancia*100);
if(distancia <= 0.15)
{
digitalWrite(ledG, HIGH);
digitalWrite(ledY, LOW);
digitalWrite(ledR, LOW);
}
else
{
if(distancia <= 0.35)
{
digitalWrite(ledG, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledR, LOW);
}
else
{
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
}
}
delay(2000);
}