O Sensor Ultrassônico HC-SR04 é um módulo que se faz necessário em alguns projetos, (em nosso caso) utilizando o Arduino quando necessitamos: medir, calcular determinadas distâncias em qualquer escala de medida, seja em metros, centímetros, polegadas, etc (até 4m máx), e permite que a gente realize leituras de distâncias entre 3 cm (distância menor que 3cm gera alguns bugs, erros na leitura do sensor) a 4 metros, com precisão de 3mm. 😯
O HC-SR04 pode ser utilizado simplesmente para medir a distância entre o sensor e um objeto, assim como, pode ser utilizado para acionar portas do microcontrolador, desviar um robô de barreiras, acionar luzes, acionar alarmes, acionar outros circuitos, etc enfim, as possibilidades são infinitas! 💡
O princípio de funcionamento do sensor ultrassônico (HC-SR04 >> datasheet) é completamente baseado na seguinte sistemática: o transmissor (Tx) do sensor envia sinais ultrassônicos, e neste momento o receptor (Rx) do sensor fica no estado de “alerta” esperando receber o sinal de retorno, que na verdade é o próprio sinal de (echo), e com base no tempo entre o envio do sinal e o retorno do mesmo, então é calculada a distância entre o sensor e o objeto detectado (o objeto que serviu como obstáculo para os sinais de ultra-som baterem e voltarem). 🙂
Primeiramente o sensor envia um pulso de 10µs, o que indica o início da transmissão. Depois disso, são enviados 8 pulsos de 40 KHz e neste momento o sensor passa então a aguardar o retorno do sinal ultrassônico enviado (em nível alto – 1), para podermos depois de receber o sinal de retorno (echo), utilizar nosso código (sketch) para determinar a distância entre o sensor e o objeto (obstáculo). Veja a imagem ilustrativa abaixo para melhor ideia do funcionamento do sensor HC-SR04:
Para conseguirmos realizar a conexão entre o sensor e o nosso Arduino, serão utilizados os 4 pinos do sensor, que são respectivamente: VCC, TRIGGER, ECHO e GND.
COMO INTERLIGAR O MÓDULO SENSOR HC-SR04 A NOSSA PLACA ARDUINO:
Para conectar o módulo HC-SR04 a nossa placa Arduino, nosso código (sketch) irá utilizar, além dos pinos de alimentação, os pinos digitais 4 para o Trigger, e 5 para o Echo, mas lembrando que poderíamos utilizar quaisquer outros pinos digitais do Arduino (PWM). A alimentação do circuito será realizada pelo pino 5V da placa Arduino:
Nosso código utiliza uma biblioteca externa chamada Ultrasonic, que você pode baixar aqui.
Descompacte a pasta Ultrasonic e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.
Copie e Cole o código abaixo no editor da sua IDE Arduino e Compile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/*Programa: Lendo Distâncias com Sensor Ultrassônico HC-SR04 e Arduino Autor: RODRIGO COSTA Em: 01/04/2017 REV.01: DISTANCIA EM CENTIMETROS NAO UTILIZA CASAS DECIMAIS POIS OS VALORES JÁ SÃO BEM PRECISOS (<=3MM). Detalhes do Projeto Completo em: https://eletronicaparatodos.com http://eletronicaparatodos.net */ // Carrega a biblioteca externa necessaria // para o funcionamento do sensor ultrassonico #include <Ultrasonic.h> // Definimos quais pinos PWM serao // utilizados para o TRIGGER e o ECHO #define pino_trigger 4 #define pino_echo 5 // Inicializamos o sensor com os pinos definidos acima Ultrasonic ultrasonic(pino_trigger, pino_echo); void setup() { // Inicializamos a comunicacao serial a // 9600 baud rate Serial.begin(9600); // Imprimimos mensagem inicial no monitor serial Serial.println("Lendo sensor..."); } void loop() { // Lemos as informacoes do sensor e apresentamos o // resultado no monitor serial da IDE em centímetros(cm) float cmMsec; long microsec = ultrasonic.timing(); cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); // Apresentamos a distancia em centimetros sem casas decimais. String cmMsecString = String(cmMsec, 0); // nesta linha pegamos a variavel que armazena os valores em // centimetros e no segundo argumento ("0") dizemos que nao queremos // nenhuma casa decimal (ou seja, numero intero apenas). RCosta. String cmMsecStringFinal = cmMsecString + " centimetros"; // As informacoes adquiridas e já calculadas são mostradas no serial monitor Serial.print("Distancia: "); Serial.println(cmMsecStringFinal); delay(500); } |
Nosso código acima mostra, que todo o cálculo matemático é feito por meio da biblioteca Ultrasonic. O sensor HC-SR04 é inicializado através dos pinos de TRIGGER e ECHO, e então efetua-se a leitura do receptor do sensor, atribuindo à variável cmMsec o valor da distância em centímetros. Um adendo nisto tudo pessoal, é que, como os resultados já são representados no monitor serial em “cm“, eu decidi retirar qualquer casa decimal do valor apresentado! Isso porque não vejo razão de mostrar por exemplo: 32,13 centímetros, pois para o tipo de projeto que pretendo utilizar esse “módulo”, este “circuito de sensor ultrassônico”, obter uma leitura de 32 centímetros já está satisfatório. A linha do código que realizo esse feito que descrevi é a linha:
1 |
String cmMsecString = String(cmMsec, 0); |
A leitura do receptor do sensor é colocada a mostra via Monitor Serial da IDE Arduino. Veja figura ilustrativa abaixo:
UM PEQUENO VIDEO DE DEMONSTRAÇÃO:
CURIOSIDADES SOBRE O SENSOR ULTRASSÔNICO – HC-SR04:
A corrente elétrica consumida pelo sensor em estado de espera (stand-by) é da ordem de apenas 2mA e quando em pleno funcionamento, a corrente elétrica consumida fica ao redor dos 15mA!
Abaixo vemos um pequeno gráfico que nos mostra a melhor angulação para que nosso sensor possa ser capaz de “enxergar”, ops, “escutar” sem “se perder”! 💡
Pessoal, então, é isso aí o que eu tinha pra falar neste momento sobre o sensor ultrassônico HC-SR04!
Se surgiram dúvidas, postem, comentem, perguntem, mandem sinal-de-fumaça, risos…qualquer coisa, que eu vou, tentar ajudar! 🙂
E aí, GOSTARAM do post?! Então comentem aí abaixo pessoal! 😎
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021
Boua noite, coloquei o programa com esta ai na demonstração, pois está dando um erro, ‘class Ultrasonic’ has no member named ‘timing’: dizendo que timing não tem um corpo pode me ajudar.
Fala Diego! Tudo Bom?!
Primeiramente agradeço sua mensagem! 🙂
Rapaz, antes de lhe responder, literalmente copiei e colei o código acima na IDE do Arduino e mandei compilar, resultado: compilação concluída com sucesso!
Dessa forma, acredito que você possa estar com uma versão da biblioteca “Ultrasonic” diferente da versão a qual digitamos este código/sketch na época. o.O
Minha recomendação é que você realize o download da biblioteca Ultrasonic novamente (disponível aqui no Blog) e instale-a na pasta “libraries” da sua IDE Arduino. Obs: Você pode fazer um “backup” da sua atual versão e instalar esta disponível aqui no Blog (que com certeza é mais antiga que a versão atual, MAS, aí é que mora o “perigo”, pois já percebi que versões mais recentes desta mesma biblioteca vêm apresentando erro na hora de compilar)!
Link Download direto da Biblioteca Ultrasonic: https://eletronicaparatodos.com/download/826/
Espero que consiga solucionar o problema!
Sucesso!
Um Abraço,
Rodrigo Costa do Canal Youtube,
https://youtube.com/EletronicaParaTodos