Olá caros leitores deste humilde blog, como prometido, vou postar meu primeiro projeto utilizando Arduino e o sensor ultrasônico HC-SR04.
Primeiramente vamos a uma breve explicação do que é esse sensor:
O sensor ultrasônico HC-SR04 funciona como um detector de objetos e permite medir distancias mínimas de 2 centímetros podendo chegar a distancias máximas de até 5 metros com uma precisão de 3 milímetros . Estes sensores emitem um sinal ultrasônico que reflete em um objeto e retorna ao sensor (eco). O sinal de retorno é captado, permitindo-se deduzir a distância do objeto ao sensor tomando o tempo de trânsito do sinal.
A velocidade do sinal ultrasônico é de aproximadamente 340 m/s, assim, se o sensor estiver a uma distância d do objeto, o sinal percorrerá uma distância equivalente a 2d para sair e retornar ao sensor. Sabendo esses conceitos é possível calcularmos a distancia de um objeto pela formula:
O sensor é composto por 4 pinos, sendo eles:
- VCC : alimentação de 5V
- TRIG : pino de gatilho
- ECHO : pino de eco
- GND : terra
Inicio da montagem do projeto:
Esquema montado na mini protoboard:
A montagem do circuito foi feita da seguinte maneira:
1° – O jumper de cor azul é ligado ao pino GND (terra) do arduino e ligado ao pino GND (terra) do sensor.
2° – O jumper de cor amarela é ligado ao pino 13 do arduino e ligado ao pino ECHO (eco) do sensor.
3° – O jumper de cor branca é ligado ao pino 12 do arduino e ligado ao pino TRIG (emisso) do sensor.
4° – O jumper de cor vermelha é ligado ao pino de 5V (corrente) do arduino e ligado ao pino VCC (corrente) do sensor.
Embora, na foto parece que os pinos estejam ligados em lugares diferentes dos descritos acima, você deverá seguir os passos citados para que a montagem fique de forma correta.
Após o montagem do circuito você deverá carregar o código na IDE do arduino. O codigo usado foi escrito usando a biblioteca do sensor ultrasonico, o download da biblioteca pode ser feito AQUI. O datasheet do sensor pode ser encontrado AQUI.
Código usado:
#include "Ultrasonic.h" #define echoPin 13 //Pino 13 recebe o pulso do echo #define trigPin 12 //Pino 12 envia o pulso para gerar o echo //iniciando a função e passando os pinos Ultrasonic ultrasonic(12,13); void setup() { Serial.begin(9600); //inicia a porta serial pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe) pinMode(trigPin, OUTPUT); // define o pino 12 como saida (envia) } void loop() { //seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0 digitalWrite(trigPin, LOW); // delay de 2 microssegundos delayMicroseconds(2); //seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1 digitalWrite(trigPin, HIGH); //delay de 10 microssegundos delayMicroseconds(10); //seta o pino 12 com pulso baixo novamente digitalWrite(trigPin, LOW); // função Ranging, faz a conversão do tempo de //resposta do echo em centimetros, e armazena //na variavel distancia int distancia = (ultrasonic.Ranging(CM)); Serial.print("Distancia em CM: "); Serial.println(distancia); delay(1000); //espera 1 segundo para fazer a leitura novamente }
Após o código carregado e enviado para o microcontrolador do arduino, abra o monitor serial na IDE do arduino para verificar as saídas do seu projeto. Repare que as distancias mudam os valores, nesse momento havia um objeto se aproximando e distanciando constantemente do sensor.
Bom é isso aí. Aguardem, no próximo post vou mostrar um projeto usando leds.
Bom Dia.
Amigo onde você comprou esse sensor ?
Obrigado
Se comprar pelo ebay é bastante barato, cerca de U$ 5,00. Mas esteja atento à qualificação do vendedor, dê preferência aos top sellers, da mesma forma como se procede no mercado livre. Demora bastante pra chegar, cerca de 40 dias, mas vale! E facilmente se encontra frete grátis por esse preço.
Tem a venda nesse link:
http://www.vilartec.com.br/product.php?id_product=15
Comprei esse aqui, demorou apenas 20 dias pra chegar.. comprei varias coisas do DX e veio tudo em 20 dias e tudo fucionando certinho 😉
gostaria de fazer uma programação que quando o objeto fosse se aproximando ele iria atuar uma saída digital do arduino
Poxa muito bom, funcionou perfeitamente aqui, tava com certos problemas, e por acaso achei o seu e muitos outros que resolveriam, mas o seu foi o primeiro e funcionou bem, só que eu achei uma coisa estranha, eu tava muito perto do sensor, e dava em torno de 18 cm…19cm, é assim mesmo?
vlws abcs! E muito obrigado AJUDOU MT!
Cara depende de quão longe voce estava.
Para ter certeza de que o sensor esta fazendo as medições corretas voce pode utilizar uma regua!
Meu amigo,
Muito legal seu código, não sei se você pode me ajudar como o meu, tenho que programar o arduino uno, para movimentar 02 motores utilizando uma ponte H CI L293D, os motores devem ficar parados por 5s e depois iniciar o movimento ate atingir a metade da velocidade e ao acionar um sensor ele deve atingir a velocidade máxima, esse código é para um projeto de robo de sumo que irei implementar na faculdade, nesta programação irei utilizar 03 sensores LDR e um sharp, por que ele deve detectar a area e se estiver para sair da arena ele deve parar e mudar o sentido da rotação, tambem em velocidade baixa, ele só deve atingir a velocidade total quando localizar oponente, eu já fiz quase tudo falta agora esta programação que não estou consiguindo fazer.
Você pode me ajudar?
Obrigado.
Adelmo
Caro Fernando,
Gostei do seu documento, muito didático. Porém, estou tendo problemas na carga da biblioteca onde o compilador retorna o seguinte erro: “In file included from sketch_feb01a.cpp:1:
C:\Program Files (x86)\arduino-1.0\libraries\Ultrasonic/Ultrasonic.h:11:22: error: WProgram.h: No such file or directory”
Ele não encontra o WProgram.h.
Estou usando a versão 1.0. será que é isso?
Como saio dessa?
Abraços
Pedro Henrique
Olá Pedro! Esse problema é comum no uso da IDE 1.0 quando usada biblioteca de terceiros como essa do sensor ultrasonico que voce esta usando… Acesse esse link e veja como corrigir seu peoblema…
Estava com o mesmo problema. Graças a este toque eu consegui fazê-lo funcionar.
Obrigado.
Fiz um programa bem mais simples que dá o mesmo resultado, veja abaixo:
#include
Ultrasonic ultrasonic(12,13);
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop()
{
Serial.print(ultrasonic.Ranging(CM));
Serial.print(“cm”);
Serial.println();
delay(1000);
}
ola pessoal gostaria de saber se dar pra colocar a medida ao invés de cm em mm, por favor manda a resposta pro meu email. grato yuri…
Fácil de cm para mm basta multiplicar por 10 o valor encontrado , e acumular em outra variavel.
ok onde coloco a PASTA DA BIBLIOTECA DO SENSOR?
Olá kaio! Se voce usa Windows, provavelmente esteja em uma das pastas de Arquivos de Programa/Arduino/Libraries procure por isso e então cole a pasta da biblioteca dentro da pasta libraries.
Já se voce esta usando Linux, encontrara esta pasta em: /usr/share/arduino/libraries
É isso….
Olá, possuo um sensor deste ultrassônico e outro de temperatura um birck LM75A, gostaria de saber se posso ligar os dois ao mesmo tempo no VCC do Arduíno. Obrigado.
Sim, mas verifique se a energia consumida é suficiente para alimentar os dois….
Hey poderia informar de que ano é esse arduíno e o modelo direitinho? Obrigada. E se eu comprar qualquer arduino desse modelo duemilanove, o programa roda tbm ?
Olá Wanessa, o arduino Duemilanove foi lançado no ano de 2009 por isso tem esse nome (Italiano)!! Voce pode usar qualquer arduino desde que seja compativel com o microcontrolador ATmega328…. Pode usar tanto o arduino MEGA, UNO, Duemilanove, etc..
O Arduino MEGA possui um ATmega2560 mas é compativel com outras tambem!! Alem de possuir mais memoria e mais pinos para a prototiágem….Só que tantas vantagens fazem com que ele seja mais caro em relação a outros…
É isso….. Abraço
Consegui montar o sistema e executá-lo sem problema algum. Porém, me surgiu uma dúvida, eu tenho como deixar a leitura mais sensível? Ela me parece meio demorada. Já tentei deminuir o delay, mas não notei diferença.
diminuir* 😛
Já consegui, estava diminuindo o delay do sensor e não do iníco de uma nova leitura. 😀
Amigo, como faço para ligar 2 sensores ultrasonicos ao mesmo tempo?
Olá,
Gostei bastante do post.
Gostaria de saber se você já fez ou sabe de algum sensor, de preferência sônico ou não invasivo, para medir volume?
Depende muito do que você quer fazer…. Poderia ser mais especifico? Que tipo de volume você quer medir?
a velocidade do ultrasom (em temp ambiente) é aprimadamente 340 m/s e não 240 como postado…
Ok… Obrigado pelo aviso!
O erro foi no momento da digitação e um descuido na revisão do post!
Já esta corrigido!
Talvez seja por isso que o amigo la de cima estava com uma leitura de 18cm estando tão perto…
ola,eu fiz exatamente como esta no codigo acima,porem o sensor retorna apenas valores 1,2,3,4 CM, mesmo quando coloco um objeto numa distancia maior, vc sabe o que poderia estar errado ? obrigado
Bem, nesse caso, se voce tem certeza absoluta que toda a ligação do circuito esta certa e o código esta certo tambem. Existe a possibilidade de seu sensor ultrasonico estar com algum problema, digo isso porque tambem aconteceu comigo logo que comprei o kit arduino!
Ola fiz exatamente o que vc fez e deu certo , agora estou tentando colocar um led pra acender quando a distancia for menor que 30 cm , outro pra acender uando for 50 cm , e otro pra 1 metro , mais estou embaralhado na programação . Pode me dar uma luz nisso?
É simples, basta usar a condição if() else. Um exemplo é:
if(distancia < 30)
{
digitalWrite(pinoLED, HIGH);
}
else
if(distancia == 50)
{
digitalWrite(pinoLED, HIGH)
}
else
if(distancia == 100)
{
digitalWrite(pinoLED, HIGH)
}
else
digitalWrite(pinoLED, LOW);
A biblioteca atualizada para as novas versões do arduino, pode ser encontrada aqui: http://ultrasonic-ranging-module-hc-sr04-updates.googlecode.com/files/Ultrasonic.rar
Obrigado pela dica!
vlw mesmo Ferpinho pelo exemplo. Muito legal.
Maicon, obrigado pela atualização.
Abraços.
Amg estou com um problema, quando tento compilar o exemplo que vem com a bilbioteca ocorre o seguinte erro: ‘Ultrasonic’ does not name a type . O que poderia ser? abracos
Voce fez a inclusão da biblioteca na diretorio no Arduino?
Olá, Estou com o mesmo problema do Saraceni.
Quando mando compilar o cod ele exibe a mensagem ‘Ultrasonic’ does not name a type. Alguém pode me ajudar? Abraços
Ferpinho, eu consigo fazer este projeto com vários sensores certo?
Sim, pode ser feito com um ou mais sensores!
Vlw meu amigo, obrigado.
Alguém se interessa em comprar um Arduino já com Bluetooth integrado + sensor distância + sensor de temperatura + motor de passo?
Ola amigo, sou iniciate com o arduino, comprei um kit e veio o sensor ultrasonic, mas ate hje nao tinha faito funcionar, com suas dicas acabei de faze-lo funcionar, mas gostaria de outra dica se puder me ajudar, adicionar o display RT 162-7 16×2, se puder me ajudar agradeço…
No blog tem um tutorial de como usar o display com o arduino é so seguir os passos assim como voce fez com o sensor ultrasonico!
Nesse tutorial eu mostro como ver a temperatura…
Obrigado amigo, funcinou perfeitamente… agora estou fazendo um outro progeto, com um acelerometro, estou contruindo um robo equilibrista tipo (SEGWEY) estou tentando fazer o programa, a parte mecanica ja esta quase toda pronta, se tiver alguma dica da programaçao…
Este sensor mede a posição de uma bola de ping pong, à um distância de 25cm à 30cm?
Não testei com objetos desse tipo, apenas com superficies planas como uma parede!
Como faço para medir em milimetros ou centimetros mas numeros com virgulas?
Boa tarde. Testei o sensor como vc ensinou e realmente funcionou. Você sabe me
informar se ele informa a distância apenas em números inteiros, ou teria como mudar algo no código ou outra coisa para ele ler em números decimais? Queria uma precisão maior.
Grato
Cara é só mudar o tipo da variável de inteiro para um float!
Desculpa cara, mas sou meio leigo e não entendi como fazer direito. Tem como explicar melhor com detalhes? Serei grato. Obrigado.
Todo lugar na biblioteca Ultrasonic que tiver escrito “int” eu coloco “float” ?
Não é na biblioteca! é no código de funcionamento.
no lugar de int coloca float, apenas na variavel que armazena a distancia
Ou muda apenas na parte do código na IDE mesmo onde há:
“int distancia = (ultrasonic.Ranging(CM));” no lugar de int, float? Ou eu to viajando total? rsrs
Bom dia,
Esse projeto também funciona com o sensor ultrasonico URM37? No caso de não funcionar, você teria algum projeto baseado neste modelo de sensor?
Da medir com casas decimais ou só numeros interiros?
Da sim, já respondi essa pergunta nos comentários amigo!! Basta ler…
Pois é colega, pelo que eu entendi fiz a anteração nesta linha [int distancia = (ultrasonic.Ranging(CM)); ] , troquei para [float distancia = (ultrasonic.Ranging(CM)); ] ele mostra números inteiros, porem com duas casas decimais, só que com zero, por exemplo 10 cm, ele mostrou 10,00 cm. Então colega gostaria que ele mostrasse, por exemplo 10,3 cm, isto é possível de se fazer?
Bom colega, troquei a variavel para float neste ponto [int distancia = (ultrasonic.Ranging(CM));], mas mesmo assim não obtive exito, a medida passou apenas a ser, por exemplo, 10,00cm, É neste ponto que se faz a alteração?
gostaria dessa resposta também…
no datasheet do sensor fala que ele mede distancia de 3mm a 5m…
como faço pra medir 3mm ?
nao deu certo mudar pra float… conforme o jcrepa disse.
quero fazer essa mesma experiencia mas jogando os dados um lcd 16×4
Olá Yuri! Eu fiz um projeto com LCD usando um sensor de temperatura, acredito que voce possa aplica-lo fazendo poucas alterações….
Olá, montei o projeto do ultrasonico e funcionou perfeito, mas teria como me tirar uma duvida, como eu faço para colocar mais de um sensor?
Acretido que seja a questão de definir outros pinos como echo e trig além dos já definidos, mas como ficaria o programa?
Oi.
Tem ideia de como controlar um motor DC através da saída do arduíno ?
Por exemplo fazer o motor parar se a distancia for menos que 5cm ?
Parabens pelo artigo. Eu fiz e funcionou tudo certinho.
Pode me dar uma luz pra eu poder trabalhar com essas distancias?
Por exemplo: eu quero que acione um motor 127v quando o objeto estiver a 50cm do sensor.
Olá Marcio, para acionar um motor desse tipo voce vai precisar de um relé. Eu fiz um projeto onde aciono uma lampada com 220 V.
Voce poderá sseguir esse tutorial e apenas trocar a lampada pelo seu motor: https://ferpinheiro.wordpress.com/2012/02/25/ligando-lampadas-atraves-de-controle-remoto-usando-arduino/
Já o código para o acionamento ficará assim:
if (distancia == 50)
{
digitalWrite(pino_rele, HIGH);
}
Onde pino_rele é o pino digital em que o relé foi conectado.
é neste momento que rola varias lagrimas aqui de felicidade 🙂
cara, fiz o codigo igualzinho como está ali em cima…
o programa funcionou , só que fica aparecendo distancia = 0 cm…
ou seja, ele nao está medindo.
as conexões estão certas tambem.
tem ideia de como concertar ? dá para testar o sensor para saber se está funcionando ? (pq comprei no mercado livre)
Grato
O meu também ficou assim, e já teste o sensor antes !
Qual é esse software vc usa p/ escrever a programação?
Estou criando um site sobre Arduino e gostaria de colocar este seu tutorial sendo que vou estar colocando todos os créditos para você, posso?
Claro que sim amigo, desde que mantenha os créditos…. Quando criar o site me envie o link para ver como ficou, Ok?!!
Abraço
Qual o tempo mínimo entre duas leituras consecutivas?
ola, o Resistor 2.2k e o mesmo que o de 110ohm?
estou ligando certo aqui, mais dá erro direto e a luz amarela do arduino apaga ao conectar o pino 13 e o erro está abaixo:
sketch_aug26a.ino:1:24: error: Ultrasonic.h: No such file or directory
sketch_aug26a:5: error: ‘Ultrasonic’ does not name a type
sketch_aug26a.ino: In function ‘void loop()’:
sketch_aug26a:29: error: ‘ultrasonic’ was not declared in this scope
sketch_aug26a:29: error: ‘CM’ was not declared in this scope
Boa tarde,
Quando tento compilar o mesmo aparece o seguinte erro:
sensor_de_distancia.ino: In function ‘void loop()’:
sensor_de_distancia:21: error: ‘class Ultrasonic’ has no member named ‘Ranging’
sensor_de_distancia:21: error: ‘CM’ was not declared in this scope
estou com o mesmo problema se vc achar como consertar pf me diga.
Amigo, sou novo no Arduino.
Não consegui achar esse include “Ultrasonic.h” no local indicado.
Achei um código semelhante a esse seu que não usa esse include.
Compilei e funcionou de primeira.
Não entendi … Poderia, por favor, me explicar ??
Como ligar dois sensores ao mesmo tempo? E como fazer os dois exibir na serial em colunas diferente?
Oi, eu estou fazendo um projeto e preciso de um sensor para arduino que detecte velocidade de uma roda de bicicleta. Se alguém souber qual o sensor e o Arduino adequado para isso, por favor, me responde.
obrigado!
Cara
Tem como utilizar o ultrassom para passar um certo material e só dar resposta em material especifico?
Ola amigo, estava olhando seu projeto, e achei um equivoco na sua formula, pois não entendi de onde veio o valor “120”.
Obrigado pela atenção
boa tarde, essa etapa ja consegui concluir , porem necessito converter as informações em porcentagem não em centímetros e tambem os parametros minimos e maximos de leitura , como devo proceder ?
Grato
Att. wesley
Olá amigo, está dando erro na aplicação aqui no ide…poderia me ajudar??
Olá gostaria de saber qual o tipo deplaquinha que vc usou de arduino pq vc só sitou o tipo do sensor
Vlw
Pingback: Sensor Ultrasónico HC-SR04 + Arduino Panama Hitek
Se eu usar mais de um sensor, posso variar a frequência deles para saber qual sensor foi acionado primeiro?
Já testei varios códigos e todos que tem int distancia = (ultrasonic.Ranging (CM) ; dá mensagem de erro.Como posso resolver isso ???
firpinheiro bom dia quero tanto ver este projecto a funcionar mais ao verificar está a apresentar seguintes erros.
sketch_sep21a.ino:1:24: error: Ultrasonic.h: No such file or directory
sketch_sep21a:5: error: ‘Ultrasonic’ does not name a type
sketch_sep21a.ino: In function ‘void loop()’:
sketch_sep21a:29: error: ‘ultrasonic’ was not declared in this scope
sketch_sep21a:29: error: ‘CM’ was not declared in this scope
alguem sabe o codigo para ligar 2 ultrasonicos ou mais?
Ultrasonic ultrader(4,5);
Ultrasonic ultraiz(9,10);
long microsec1 = 0;
float distanciaCM1 = 0;
long microsec2 = 0;
float distanciaCM2 = 0;
void setup(){
Serial.begin(9600); //Inicializando o serial monitor
ola amigo, estou precisando colocar o sensor em um tanque para ele enviar o sinal a um computadorl, porem o tanque é de aproximadamente 12 metros de altura, poderia me indicar sensor, materiais ou aonde posso contratar alguém que possa fazer o projeto pra mim, ou se você pode fazer o projeto?
muito bom trabalho. Tenho uma dúvida. Porque você usa um delay de 2 e de 10 microsegundos?
Bom dia, no meu projeto estou utilizando o sensor Hc’Sr04. Estou com um problema, pois quando não há obstáculos antes de 4m, o sensor faz medições estranhas(numero negativos) ou simplesmente ‘não mede nada’. Queria que o sensor não esperasse tanto tempo pelo retorno do sinal, Echo, e em um tempo periódico enviasse o Trigger independente do Echo receber ou não um sinal.
O que posso fazer?
Obrigado!
so da erro
Que buen proyecto me fue de much ayuda
Gracias
Quien me ayuda con El sketch con un sensor ultra sonico y que cuando alguien se aserque poco a poco la led se prenda poco a poco
Muito bom seu artigo está de parabéns, também temos um artigo desse em nosso blog. caso alguem queira complementar a leitura do seu texto segue o link: https://blog.silvatronics.com.br/medindo-distancias-com-arduino-e-modulo-sensor-ultrassonico-hc-sr04-2/