Código Arduino e vídeo para o módulo de distância IR Sharp com LCD1602 e módulo I2C
Este guia do projeto vai orientá-lo na construção de um sistema de medição de distância simples, porém eficaz, usando um sensor de distância infravermelho Sharp (IR) e um display LCD1602. Essa configuração permite medir distâncias com precisão dentro de uma faixa específica e exibi-las diretamente em uma tela, tornando-a ideal para várias aplicações de eletrônica faça-você-mesmo.

Exemplos práticos de uso e ideias de projetos para este sistema incluem:
- Construindo um sistema automatizado de assistência ao estacionamento para evitar danos no para-choque.
- Criando um sensor de nível de água simples para tanques ou poços.
- Desenvolvendo um dispensador de líquidos sem contato.
- Implementando um alarme de segurança básico por meio da detecção de proximidade.
- Criando um indicador de nível de enchimento para tolvas ou silos.
- Projetando um sistema de evitamento de colisões para pequenos robôs ou veículos de controle remoto.
Hardware/Componentes
Para concluir este projeto, você precisará dos seguintes componentes:
- Placa Arduino Uno ou compatível
- Sensor de distância infravermelho Sharp (modelo GP2Y0A41SK0F, medindo 4 a 30 cm)
- LCD1602 com módulo I2C (para facilitar a fiação)
- Protoboard (opcional, para prototipagem)
- Cabos jumper
- Cabo USB para alimentação e programação do Arduino
Guia de Fiação

Conectar o sensor IR Sharp e o LCD1602 com módulo I2C ao seu Arduino é simples, graças ao módulo I2C, que reduz o número de fios necessários para o LCD.
O sensor Sharp IR tem três fios: Vermelho (5V), Preto (GND) e Amarelo (Saída). Conecte o fio vermelho ao pino 5V do Arduino, o fio preto a qualquer pino GND do Arduino e o fio amarelo de saída ao pino analógico A0 do Arduino (no vídeo em 03:55).
O LCD1602 com módulo I2C tem quatro fios: VCC, GND, SDA e SCL. Conecte o pino VCC ao 5V do Arduino e o pino GND ao GND do Arduino. O fio SDA (Serial Data Line) deve ser conectado ao pino analógico A4 do Arduino, e o fio SCL (Serial Clock Line) deve ser conectado ao pino analógico A5 do Arduino (no vídeo em 02:42).
Explicação do código
O código Arduino fornecido utiliza duas bibliotecas principais:Wire.hpara comunicação I2C eLiquidCrystal_I2C.hpara controlar o LCD, eSharpIR.hpara o sensor Sharp IR. As partes do código configuráveis pelo usuário estão principalmente relacionadas à definição do sensor e à inicialização do LCD.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
A linhaLiquidCrystal_I2C lcd(0x27, 16, 2);inicializa o objeto LCD. O primeiro parâmetro,0x27(no vídeo em 03:26), é o endereço I2C padrão para a maioria dos módulos LCD I2C baseados no PCF8574. Se o seu LCD não funcionar, talvez seja necessário encontrar o endereço correto (alternativas comuns são0x3F). O segundo parâmetro,16, especifica que seu LCD tem 16 caracteres por linha, e o terceiro parâmetro,2, indica que tem 2 linhas.
#include <SharpIR.h>
#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
* GP2Y0A02YK0F --> "20150"
GP2Y0A21YK --> "1080"
GP2Y0A710K0F --> "100500"
GP2YA41SK0F --> "430"
*/
SharpIR SharpIR(IR, model);
Estas linhas configuram o sensor infravermelho Sharp.#define IR A0define o pino analógico do Arduino ao qual o fio de saída do sensor IR Sharp está conectado.#define model 430(no vídeo em 04:27) é crucial, pois especifica o modelo exato do seu sensor Sharp IR. A biblioteca usa esse número de modelo para aplicar a conversão matemática correta da saída de tensão analógica do sensor para uma distância em centímetros. O bloco de comentários lista vários modelos Sharp IR e seus valores inteiros correspondentes que devem ser usados aqui. Por exemplo, se você estivesse usando um GP2Y0A21YK, você alteraria430para1080.
void setup()
{
lcd.begin();
lcd.backlight();
}
Nosetup()função,lcd.begin()inicializa o LCD, elcd.backlight()liga a sua retroiluminação, tornando o visor visível.
void loop()
{
lcd.clear();
lcd.print("Robojax IR Test");
lcd.setCursor (0,1); // go to start of 2nd line
int dis=SharpIR.distance();// gets the distance in cm
String distance = String(dis);
distance ="Distance: "+distance+"cm";
lcd.print(distance);
delay(500);
}
Dentro deloop()função:
lcd.clear();apaga qualquer texto anterior no visor.lcd.print("Robojax IR Test");imprime uma mensagem estática na primeira linha.lcd.setCursor (0,1);move o cursor para o início da segunda linha (0 é a primeira coluna, 1 é a segunda linha, já que as linhas são indexadas a partir de 0).int dis=SharpIR.distance();chama odistance()função da biblioteca SharpIR para ler o valor do sensor e convertê‑lo em um inteiro que representa a distância em centímetros (no vídeo em 05:06). Esta é a função central para obter a medição.String distance = String(dis);converte a distância inteira em uma string, pois você não pode concatenar diretamente inteiros com strings para impressão.distance ="Distance: "+distance+"cm";formata a string para incluir "Distância: " antes do valor e "cm" depois delelcd.print(distance);exibe a string de distância formatada no LCD.delay(500);introduz uma pausa de 500 milissegundos (no vídeo em 06:00). Esse atraso é importante para a precisão e estabilidade do sensor Sharp. Você pode ajustar esse valor: aumentá-lo pode melhorar a precisão, mas atrasar as atualizações, enquanto diminuí-lo acelerará as atualizações, mas pode reduzir a precisão.
Projeto/Demonstração ao vivo
Depois que os componentes estiverem conectados e o código for carregado no seu Arduino, o sistema começará a medir e exibir distâncias. O projeto demonstra medições precisas em distâncias mais curtas, por exemplo, mostrando 12 cm quando o objeto está a 12 cm (no vídeo em 00:31) e 10 cm para 10 cm (no vídeo em 00:37).
No entanto, à medida que o objeto se afasta, especialmente além de 15-20 cm, a precisão pode diminuir. Por exemplo, a 20 cm o visor pode mostrar 21 cm (no vídeo em 07:06), e a 25 cm pode indicar 28 ou 29 cm (no vídeo em 07:32). Esse comportamento é característico desses sensores infravermelhos. O sensor Sharp IR fornece uma tensão analógica que varia com a distância: à medida que a distância aumenta, a tensão de saída diminui (no vídeo em 07:56).
A relação entre distância e saída de tensão é não linear, especialmente nos extremos do alcance do sensor. Essa não linearidade explica por que a biblioteca SharpIR é útil, pois contém dados de calibração para converter essas tensões variáveis em leituras de distância mais precisas. Para aplicações que exigem maior precisão em alcances mais longos, pode ser necessário escolher um modelo Sharp IR diferente projetado para essas distâncias ou implementar curvas de calibração personalizadas.
Capítulos
- [00:06] Introdução e Visão Geral do Projeto
- [01:10] Detalhes e pinagem do sensor IR Sharp
- [02:09] Fiação do Módulo LCD I2C
- [02:58] Explicação do Código Arduino
- [06:36] Demonstração de Medição de Distância
- [07:47] Características do Sensor e Limitações de Precisão
- [08:48] Considerações Finais e Recursos
/*
* Sharp IR 555 (infrared) distance measurement module with LCD1602 and I2C for Arduino
* Measures the distance in cm.
* Watch the video https://youtu.be/RHgMwtKLEnE
* *
Original library: https://github.com/guillaume-rico/SharpIR
// Written and updated by Ahmad for Robojax.com
// on January 3, 2018 at 20:01 in Ajax, Ontario, Canada
// Get this code and other Arduino codes from Robojax.com
// Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
// all in one place.
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
///////////////////***** start of Sharp IR
#include <SharpIR.h>
#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
* GP2Y0A02YK0F --> "20150"
GP2Y0A21YK --> "1080"
GP2Y0A710K0F --> "100500"
GP2YA41SK0F --> "430"
*/
SharpIR SharpIR(IR, model);
/////////////////////**** end of Sharp IR
void setup()
{
// Robojax code for LCD with I2C
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
// Robojax code for LCD with I2C
}
void loop()
{
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("Robojax IR Test");
lcd.setCursor (0,1); // go to start of 2nd line
int dis=SharpIR.distance();// gets the distance in cm
String distance = String(dis);
distance ="Distance: "+distance+"cm";
lcd.print(distance);
//lcd.print(millis() / 1000);
delay(500);
//end of loopcode Robojax code for LCD with I2C
}
Coisas que você pode precisar
-
AmazonasCompre o LCD1602-I2C na Amazonamzn.to
-
Amazonas
Recursos e referências
Ainda não há recursos.
Arquivos📁
Bibliotecas do Arduino (zip)
-
Biblioteca Arduino para sensor de distância IR Sharp
robojax-sharp_IR-master.zip
Arquivo Fritzing
-
Módulo LCD LCD1602-I2C com 4 fios
LCD1602-I2C.fzpz0.01 MB -
sensor infravermelho GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz