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