Sensor ultrassônico com ESP32



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.




Buzzer contínuo


Leds


São 4 diodos emissores de luz coloridos com resistores de 220 ohms.




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:




Nenhum comentário:

Tecnologia do Blogger.