Início
/
Projetos Arduino
/
Projetos Squids
/
Intermediário
/
I16 - Como medir distâncias por meio de um sensor ultrassônico HC-SR04 com Arduino e display LCD (régua eletrônica)
I16 - Como medir distâncias por meio de um sensor ultrassônico HC-SR04 com Arduino e display LCD (régua eletrônica)
Angelo Luis Ferreira | 21/03/2022
Acessos: 9.894
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 |
|
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 |
|
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:
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 C, Ponteiro 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