I16 - Como medir distâncias por meio de um sensor ultrassônico HC-SR04 com Arduino e display LCD (régua eletrônica)

Intermediário - Projeto 16

Medir distâncias com sensor HC-SR04, display LCD e Arduino

Objetivo

Utilizar o sensor ultrassônico HC-SR04 junto com o Arduino para medir distâncias entre o sensor e um objeto qualquer e exibir o resultado em um display LCD. Neste projeto utilizaremos a biblioteca HCSR04 que irá simplificar muito a programação com o sensor ultrassônico HC-SR04. Esta biblioteca calcula as distâncias e exibe os resultados diretamente em mm, cm e polegadas.

Obs.: Se você desejar conhecer melhor os princípios de funcionamento do sensor HC-SR04 veja o projeto  I15 - Como usar o sensor ultrassônico HC-SR04 com Arduino sem o auxílio de biblioteca.

Definições

Sensor de Distância Ultrassônico HC-SR04 possui função de medição sem contato entre 2 cm e 4 metros, com precisão de aproximadamente 3mm. O módulo é composto por transmissor ultrassônico, receptor e circuito de controle:

  • Transmissor Ultrassônico – Emite as ondas ultrassônicas que serão refletidas pelos obstáculos;
  • Um receptor – Identifica o eco do sinal emitido pelo transmissor;
  • Circuito de controle – Controla o conjunto transmissor/receptor, calcula o tempo entre a emissão e recepção do sinal;

Ondas ultrassônicas: São ondas mecânicas de alta frequência, acima de 20.000 Hz, que se propaga na velocidade do som. Neste caso, o som não pode ser ouvido pelos seres humanos. O ultrassom é muito utilizado para exames clínicos, sensores, sonares, etc. O módulo HC-SR04 emite ondas com frequência de 40.000 Hz.

Princípio de funcionamento do HC-SR04: O funcionamento do HC-SR04 se baseia no envio de sinais ultrassônicos pelo transmissor do sensor, que aguarda o retorno (echo) do sinal, e com base no tempo entre envio e retorno, calcula a distância entre o sensor e o objeto detectado no circuito de controle:

Aplicação

Para fins didáticos e projetos onde o HC-SR04 pode ser utilizado para fazer leituras de distâncias entre o sensor e um objeto, acionar alarmes, detectar objetos e corrigir continuamente a trajetória de um robô ao detectar um obstáculo, por exemplo, entre outras aplicações em robótica.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard

Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 400 pontos

Jumpers Kit cabos ligação macho / macho 1  
Módulo Sensor Ultrassônico HC-SR04

Sensor Ultrassônico HC-SR04

1  

- Tensão de Alimentação 5V DC
- Corrente consumida 15mA
- Frequência de operação 40kHz
- Distância (min) 2cm / (max) 4m
- Precisão 3mm
- Ângulo de medição 15graus
- Sinal de entrada [Trigger] Pulso TTL (5V) de 10us
- Sinal de saída [Echo] Pulso TTL (5V) proporcional à distânia detectada

(datasheet)

Display LCD Display LCD 16X2 1

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C para display LCD

Módulo I2C com CI PCF8574

(opcional)

1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador.

Push Button Push button 6X6X5mm 1  
Arduino UNO Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. O Arduino deve estar totalmente desconectado da fonte de energia enquanto você monta o circuito.

Atenção

1. A montagem do módulo HC-SR04 deve seguir a configuração abaixo:

  • Vcc – Deve ser conectado a um pino 5V do Arduino.
  • Trig – Deve ser conectado a um pino digital configurado como saída. Utilizamos o pino 8 do Arduino.
  • Echo – Deve ser conectado a um pino digital configurado como entrada. Utilizamos o pino 9 do Arduino.
  • Gnd – Deve ser conectado a um pino GND do Arduino.

2. Neste projeto vamos utilizar um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. 

3. Para a montagem do display com adaptador, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:

Módulo I2C - Detalhes

3.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.

3.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.

3.3. A seleção de endereço do adaptador I2C para display LCD, na maioria dos módulos fornecidos no mercado já vêm configurados com o com o endereço 0x27. Se você não sabe qual endereço que o seu módulo I2C e/ou módulo RTC DS3231 está configurado, baixe o seguinte "sketch":

DOWNLOAD - I2C_scanner.ino

3.3.1 Após instalar e rodar o sketch acima, abra o monitor serial que mostrará qual é o endereço que o seu módulo I2C e o módulo RTC DS3231 está configurado:

3.3.1.1 Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto.

3.4. Para saber mais sobre a montagem e utilização de display LCD com módulo I2C leia: Projeto 48 - Como controlar um display LCD com o módulo I2C.

4. Monte o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do Arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Assista o vídeo Arduino: Botão e Resistor de Pull Up Interno e leia os artigos Como usar push button com Arduino (programação) e Onze maneiras diferentes de ligar e desligar um led com push button e Arduino.

4.1. No nosso exemplo conectamos o botão no pino digital 2 do Arduino.

5. A montagem do nosso projeto foi realizada em um protoboard de 400 pontos:

Incluindo a biblioteca HCSR04

Para utilizarmos o módulo HCSR04 sem precisar fazer cálculos para determinar as distâncias entre o sensor e um objeto qualquer, vamos usar a biblioteca HCSR04. Esta biblioteca foi desenvolvida para calcular distâncias, cujos os resultados podem ser exibidos diretamente em milímetros, centímetros e polegadas sem a necessidade de conversão e/ou de qualquer cálculo. Os valores também são expressos também em números reais (decimais), mas mantendo a precisão do sensor que é de aproximadamente 3mm.

Observações do uso biblioteca na programação:

1. Para definirmos a variável responsável pela exibição do resultado, devemos obrigatoriamente setá-la como o uso de ponteiro para um double. Exemplo: double *result;

1.1. Se você quiser saber mais sobre ponteiros em C, veja os links: Ponteiro em CPonteiro em C: definição e Ponteiros.

2.  Como a variável global responsável pela exibição do resultado foi definida como um ponteiro para o tipo double (precisão com até 10 casas decimais), o resultado será um array, onde deveremos obter o primeiro item dele. Exemplo: lcd.print(result[0]);

Download dos arquivos da biblioteca HC-SR04

 DOWNLOAD - HC-SR04-master.zip

Para saber detalhes desta biblioteca clique aqui.

Instalação das biblioteca

Após fazer o download do arquivo HC-SR04-master.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Incluindo biblioteca LiquidCrystal_I2C

Atenção: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.

Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para módulos.

Download dos arquivos da biblioteca LiquidCrystal_I2C

 DOWNLOAD - NewliquidCrystal_1.3.4.zip

Para saber detalhes desta biblioteca clique aqui.

Instalando a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo NewliquidCrystal_1.3.4.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Utilizando a biblioteca LiquidCrystal_I2C

Para instalação e utilização da biblioteca para o módulo I2C como comunicação para um display LCD siga o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C .

Código do Projeto (Sketch)

1. Faça o download e abra o arquivo projetoI16.ino no IDE do Arduino: DOWNLOAD - projetoI16.ino

2. Se preferir, copie e cole o código abaixo no IDE do Arduino.

/*******************************************************************************
*
*    I16 - Sensor ultrassonico como régua eletrônica - display LCD
*    Autor: Angelo Luis Ferreira
*    15/03/2022
*    http://squids.com.br/arduino
*
*******************************************************************************/
#include                    // inclui a biblioteca do módulo HC-SR04
#include        // inclui a biblioteca LCD com I2C

// define pinos de entrada e saída do Arduino
const byte pinTrig = 8; // pino usado para disparar os pulsos do sensor
const byte pinEcho = 9; // pino usado para ler a saida do sensor
const byte pinBut = 2;  // pino usado para o push button

// instancia objetos das bibliotecas
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);  // cria o objeto lcd

// define variáveis globais
byte state = 1;          // estado do menu
byte decimal = 0;        // número de casas decimais
String unity = "cm";     // descrição das unidades
double *result;          // uso do ponteiro para um double (obrigatório)

void setup(){
  // pin mode - definie entradas e saídas digitais
  pinMode(pinBut, INPUT_PULLUP);   // pullup interno do Arduino

  // inicializa o senor HC-SR04
  HCSR04.begin(pinTrig,pinEcho);
  
  // Inicializa a porta serial
  Serial.begin(9600);

  // inicializa o lcd 16X2 com I2C
  lcd.begin(16,2);          
}

void loop(){ 
  readPushButton(); // verifica se o pushbutton foi acionado
  sowDisplay();     // exibe a distância no display lcd
  delay(150); // delay de 150us
}

void readPushButton() { // verifica se o botão foi acionado - altera para cm, mm ou pol
  if (!digitalRead(pinBut)) { // verifica se o botão foi acionado = LOW
    state >= 3 ? state = 0 : state = state;  
    state++;  
    while (!digitalRead(pinBut)) {} // aguarda soltar o botão
    lcd.clear();
    delay(150); // delay para reduzir o efeito bouncing
  }
}

void sowDisplay() { // exibe resultados no display LCD
  // faz leitura de acordo com o valor da variável state
  switch (state) {
    case 1:
    result = HCSR04.measureDistanceCm();
    decimal = 0;
    unity = " cm";
    break;
    
    case 2:
    result = HCSR04.measureDistanceMm();
    unity = " mm";
    decimal = 0;
    break;

    case 3:
    result = HCSR04.measureDistanceIn();
    unity = " pol";
    decimal = 1;
    break;
  }
  
  //Exibe no display as distâncias em cm, mm ou em polegadas (inchies)
  lcd.setCursor(0,0);
  lcd.print("      "); 
  lcd.print(result[0],decimal);    //Exibe no display as medidas de distância em cm, mm e polegadas
  lcd.print(unity);
  lcd.print("       ");
  lcd.setCursor(1,1);
  lcd.print("Squids Arduino");
}

Vídeo

Como o projeto deve funcionar

1. Ao iniciar o programa já começa a medir a distância do sensor até o obstáculo mais próximo e exibe o resultado no display LCD.

1.1. O resultado inicialmente é exibido em centímetros (cm).

2. Movendo o obstáculo ou o sensor, a distância entre ambos irá variar também.

3. Para verificar se as distâncias estão corretas, você pode utilizar uma régua para chegar as medidas, lembrando que a precisão da medida com o sensor é de 3mm.

3.1. Alinhe a régua na mesma posição da borda do sensor.

3.2. Coloque um objeto em um ponto da régua e faça a leitura. A distância exibida deverá ser o valor aproximado medido pela régua. Obs.: A leitura do sensor ultrassônico pode ser realizada entre 2cm e 4 metros.

4. Para converter as unidades também em milímetros (mm)  e polegadas (pol), clique no botão (push button).

5. São realizadas leituras a cada 150 microssegundos.

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 93

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores