Nossa montagem de hoje consiste em um Sensor de Ré. Para tal, usamos o ESP32, um buzzer, quatro leds indicadores e o próprio sensor ultrassônico. O
objetivo é criar um simulador de sensor de ré, do tipo que é utilizado em carros.
Para isso, utilizamos ainda um display (7 segmentos) de 4 dígitos.
Portanto, vamos
ler o sensor ultrassônico e jogar a distância no display. Conforme a distância
chegar a um espaço “perigoso”, os leds acendem gradativamente do azul para o
verde, amarelo e, por fim, o vermelho, de acordo com o
encurtamento da distância. Um alarme dispara quando chegar ao limite de espaço.
WiFi NodeMCU-32S ESP-WROOM-32
Os detalhes
do NodeMCU ESP32 são expostos no PDF, o qual pode ser baixado logo abaixo.
Display
Quanto ao display, nesta montagem mostramos como usar o I2C, que possibilita o envio de vasta informação por apenas dois fios.
Sensor ultrassônico
Explicamos o HC-SR04, sensor ultrassônico mais comum, muito utilizado no Arduino, também é barato e fácil de encontrar. Lembramos que o mínimo que ele consegue medir de distância é 2 centímetros e o máximo é 4 metros. Outro detalhe é que ele é alimentado com 5 volts.
Montagem
Detalhe do HC-SR 04 é que ele tem alimentação, depois ele usa dois pinos: o trigger e o Echo, que aparecem no código-fonte.Bibliotecas
Nesta
montagem, usamos duas Bibliotecas: TM1637Display e Ultrasonic. No arquivo PDF
estão os links para download de ambas.
Código fonte
Nesta parte é possível ver uma demonstração sobre o funcionamento do projeto. Já no código, declaramos TM1637Display e Ultrasonic, intervalo de leitura 250 milissegundos, tempo escolhido para o número não ficar mudando muito rápido. Na sequência vem a definição dos pinos que utilizamos para os leds e o buzzer. Declaro ainda uma outra variável, a “unsigned int”, que vai guardar a distância do dispositivo.//Biblioteca responsável para comunicação com o display de 7 segmentos #include < tm1637display.h> //Carrega a biblioteca do sensor ultrassonico #include < ultrasonic.h> #define INTERVALO_LEITURA 250 //(ms) //definição dos PINOS que utilizaremos para os LEDS e o BUZZER #define PIN_BLUE_LED 16 #define PIN_GREEN_LED 17 #define PIN_YELLOW_LED 18 #define PIN_RED_LED 19 #define PIN_BUZZER 21 //variável responsável por armazenar a distância lida pelo sensor ultrassônico unsigned int distancia = 0;
Sensor e display
Nesta etapa, definimos os pinos e os construtores dos objetos que usamos para controlar o sensor ultrassônico e o display.
//conexão dos pinos para o sensor ultrasonico #define PIN_TRIGGER 4 #define PIN_ECHO 5 //Inicializa o sensor nos pinos definidos acima Ultrasonic ultrasonic(PIN_TRIGGER, PIN_ECHO); // Module connection pins (Digital Pins) #define CLK 14 #define DIO 13 //Inicializa o display nos pinos definidos acima TM1637Display display(CLK, DIO);
Setup
Nesta função inicializamos a serial com velocidade 9600, configuramos os pinos e configuramos o brilho para o display.void setup()
{
Serial.begin(9600);
configurarPinos();
//configura o brilho do display com valor máximo
display.setBrightness(0x0a);
Serial.println("Setup...");
}
Configuração
dos pinos
Aqui configuramos os quatro leds bem como o buzzer como pinMode, todos OUTPUT, isso porque são saídas.
/*
CONFIGURA O MODOS DE CADA UM DOS PINOS QUE UTILIZAREMOS COMO SAIDA
*/
void configurarPinos()
{
pinMode(PIN_BLUE_LED, OUTPUT);
pinMode(PIN_GREEN_LED, OUTPUT);
pinMode(PIN_YELLOW_LED, OUTPUT);
pinMode(PIN_RED_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
}
Loop
Na função Loop, temos a verificação da distância e o delay, ou seja, o intervalo de leitura.void loop()
{
verificarDistancia();
delay(INTERVALO_LEITURA);
}
getDistance
Agora, partimos para a leitura da distância atual calculada pelo sensor./*
FAZ A LEITURA DA DISTANCIA ATUAL CALCULADA PELO SENSOR
*/
int getDistance()
{
//faz a leitura das informacoes do sensor (em cm)
int distanciaCM;
long microsec = ultrasonic.timing();
// pode ser um float ex: 20,42 cm se declarar a var float
distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM);
return distanciaCM;
}
verificarDistancia
Vamos verificar a distância que será mostrada no display de 4 dígitos. Depois, apagamos os 4 leds e silenciamos o buzzer. Esse tipo de situação pode ser usado em várias aplicações./*
VERIFICA A DISTANCIA ATUAL QUE O SENSOR ULTRASONIC ESTA LENDO
E EM SEGUIDA, IMPRIME O VALOR NO DISPLAY, E ACENDE O LED CORRESPONDENTE
*/
void verificarDistancia()
{
//recupera a distância atual lida pelo sensor
distancia = getDistance();
//imprime no display o valor lido
display.showNumberDec(distancia);
//esse FOR tem como objetivo apagar todos os LEDS que estejam acesos.
for(int i=PIN_BLUE_LED; i<=PIN_RED_LED; i++)
{
digitalWrite(i, LOW);
}
//desliga o BUZZER
digitalWrite(PIN_BUZZER, LOW);
//caso a distancia lida seja menor ou igual a 5, tomaremos como uma distância de perigo
//então acenderemos o LED VERMELHO e ligaremos o BUZZER
if( distancia <= 5 )
{
digitalWrite(PIN_RED_LED, HIGH);
digitalWrite(PIN_BUZZER, HIGH);
}
//caso a distancia seja maior que 5 e menor ou igual a 20,
//tomaremos como uma distância de atenção, e ligaremos o LED AMARELO
else if(distancia <=20)
{
digitalWrite(PIN_YELLOW_LED, HIGH);
}
//caso a distancia seja maior que 20 e menor ou igual a 40,
//tomaremos como uma distância segura, e ligaremos o LED VERDE
else if(distancia <= 40)
{
digitalWrite(PIN_GREEN_LED, HIGH);
}
//para distâncias maiores que 40, tomaremos como uma distância sem perigo
//acenderemos o LED AZUL para indicar
else
{
digitalWrite(PIN_BLUE_LED, HIGH);
}
}
Links para download:








6 Comentários
ResponderExcluirola professor fiz o download do arquivo em ino e tentei abri no meu arduino deu erro acerca do sequema(could not crete sketch) tem como enviar o link com o esquema ?Professor
professor tem como me enviar o esquema do projecto feito em uma applicacao tipo o projecto funcionando no computador sem usar ainda os componenetes so testando
ResponderExcluirFernando, conectando diretamente trigger e echo nos pinos do ESP não vai queimar as portas ou danificar o uC? Nao é necessário um level shifter?
ResponderExcluirEssa é minha dúvida também...
ExcluirVc teve resposta????
Boa noite, estou adorando os seus vídeos! Uma dúvida, professor, existe a possibilidade de montar este projeto no carro e fazer uma app para mostrar os valores no android do carro ao invés de mostrar no display?
ResponderExcluirMuito bom
ResponderExcluir