Medidor de distância com sensor ultrassônico HC-SR04
Hoje apresento o circuito de um medidor de distância com sensor ultrassônico HC-SR04, o display LCD 16×2 Winstar WH1602A e claro, uma placa Arduino.
O sensor ultrassônico HC-SR04 pode ser usado para medir distâncias de até 4m com precisão de 3mm (dados do datasheet do produto) e identificar a presença de objetos ou captar movimentos.
Isso nos permite criar alarmes, sensores de presença, sistemas de escuta e sensores de estacionamento. Também é um ótimo sensor para utilização em projetos de robótica e aplicações industriais.
Resumindo o funcionamento do sensor ultrassônico: é enviado um sinal ultrassônico pelo módulo, o mesmo detecta o retorno deste sinal (eco), e com base no tempo entre esses dois eventos, gera um sinal que permite medir a distância até o objeto.
Circuito medidor de distância com sensor ultrassônico
O circuito é praticamente idêntico ao que usei nos outros projetos usando o WH1602A. A diferença é que no pino 15 (backlight, ou luz de fundo) eu coloquei uma pequena resistência para limitar a corrente.
O sensor ultrassônico HC-SR04 será conectado nas portas digitais 11 e 13. O potenciômetro é de 10 K ohms e serve para regular o contraste do display. Podem ser usados outros valores de potenciômetro ou até mesmo uma resistência para essa regulagem, ok?
O programa usa a biblioteca Ultrasonic, que você pode baixar neste link. O programa faz a leitura dos dados do sensor, calcula a distancia em centímetros e polegadas, e apresenta os dados no LCD 16×2.
Se você não tem um display LCD 16×2, não tem problema: os dados do medidor de distância são enviados para o serial monitor.
//Programa : Medidor de distancia com HC-SR04 //Autor : Arduino e Cia #include <Ultrasonic.h> //Carrega a biblioteca Ultrasonic #include <LiquidCrystal.h> //Carrega a biblioteca LCD //Define o pino do Arduino a ser utilizado com o pino Trigger do sensor #define PINO_TRIGGER 13 //Define o pino do Arduino a ser utilizado com o pino Echo do sensor #define PINO_ECHO 10 //Inicializa o sensor ultrasonico Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); //Define os pinos que serão ligados ao LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Serial.begin(9600); //Inicializa a serial lcd.begin(16,2); //Inicializa LCD lcd.clear(); //Limpa o LCD } void loop() { float cmMsec, inMsec; //Le os dados do sensor, com o tempo de retorno do sinal long microsec = ultrasonic.timing(); //Calcula a distancia em centimetros cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //Calcula a distancia em polegadas inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); //Apresenta os dados, em polegadas, no LCD e na Serial lcd.setCursor(0,1); lcd.print("Pol. : "); lcd.print(" "); lcd.setCursor(7,1); lcd.print(inMsec); Serial.print(", Pol. : "); Serial.println(inMsec); delay(1000); }
Abaixo você confere o vídeo do circuito em funcionamento:
Recomendo também a leitura do artigo Controle de vagas de estacionamento com o sensor HC-SR04, onde utilizo a biblioteca NewPing para controlar vários sensores ultrassônicos ao mesmo tempo.
Se você gostou deste post do medidor de distância com sensor ultrassônico HC-SR04, confira outros posts utilizando sensor ultrassônico, aqui mesmo no Arduino e Cia!
OLA TUDO BEM ME CHAMO LINDERSON ESTOU COM UM PROJETO DE ESCOLA ONDE TENHO Q USAR UM SENSOR ULTRASONICO PARA DETECTAR A PRESENÇA DE UM VEICULO ONDE CONFORME OS VEICULOS SE APROXIMADO DO SENSOR SUA VELOCIDADE DIMINIUI E UM LED VERDE ACENDE,DEPOIS UM AMARELO E POR FINAL UM LED VERMELHO E ASSIM O VEICULO PARA DE IMEDIATO.
GOSTARIA DE SABER SE TEM COM EU PROGRAMAR ISSO NO PIC 16F628A USANDO O PROGRAMA PIC COMPILEE MODELO DE SENSOR ULTRASONICO POSSO USAR
OBRIGADO
LINDERSON
Bom dia Linderson
Esse sensor HC-SR04 pode ser usado perfeitamente no PIC, mas eu não tenho programa de exemplo para te passar. Eu sei que funciona pois vendo esse tipo de sensor para usuários que programam em PIC. Abraço.
Amigo seu código ta dando erro!!
Bom dia ! Pode me falar qual erro está apresentando ? Valeu.
Boa noite!! a IDE sublinha essa linha do código:
Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); //Inicializa o sensor ultrasonico
e manda essa mensagem:
sketch_oct01b_Medidor_de_distancia_com_HC_SR04:26: error: 'Ultrasonic' has not been declared
Boa tarde. Você instalou a biblioteca Ultrasonic corretamente ?
como a pessoa consegue instalar a biblioteca do ultrasonic??
Boa noite. Depois de baixar a biblioteca no link indicado no artigo, basta descompactar e copiar a para dentro da pasta LIBRARIES que fica dentro do programa do Arduino. Abraço !
ola boa noite eu tentei fazer isso mais dá biblioteca invalida #include
não consigo baixar a biblioteca Ultrassonic
Amigo, boa noite, curti o post, mas sou usuário do PIC e gostaria de saber se posso utilizar este sensor nesta família de microcontroladores. Provavelmente a resposta será que sim, mas não consegui entender como, pois este modelo de sensor não envia um sinal analógico de 0 a 5V, conforme eu oscile o range de distância do mesmo, e sim um disparo de sinal… Não consegui entender como assimilar isto no pic. Vc pode me ajudar?
Boa tarde ! Pode sim, dê uma olhadinha nesse vídeo do Youtube.
http://www.youtube.com/watch?v=dRq0e9rwqHo
O programador usa o PIC juntamente com o HC-SR04, e dá os links para o código e o diagrama. O sensor não envia um sinal analógico. A distância é medida de acordo com o "echo" do sinal, ou seja, dependendo do tempo que o pino fica em estado "alto". Esse tempo é então utilizado em uma fórmula, que converte para centímetros ou polegadas, dependendo do que você precisar. Nesse programa do Arduino que está no meu artigo, a biblioteca acaba fazendo todo o trabalho de cálculo, mas se vc precisar de mais informações sobre o funcionamento do sensor, utilize esse link :
http://www.webtronico.com/sensor-de-distancia-ultrasonico-hc-sr04.html
Espero ter ajudado. Um abraço e se precisar de mais informações, utilize o formulário de contato do site. Obrigado !
Olá, boa tarde!
Preciso que o meu Arduíno leia dois sensores utlrassônicos ao mesmo tempo… será que tem como?
Bom dia Guilherme !
Tem sim, e estou fazendo um post sobre isso. Se precisar dessa solução com urgência, me mande uma mensagem usando o formulário de contato no lado direito da página. Abraço !
Bom dia Guilherme, acabei de postar um novo artigo, mostrando como utilizar 2 sensores HC-SR04 e a biblioteca NewPing :
http://www.arduinoecia.com.br/2013/12/controle-de-vagas-de-estacionamento-com.html
Abraço !
Se não estou enganado, você conectou um potenciomêtro no circuito, gostaria de saber qual a finalidade dele no circuito e se é realmente necessário colocá-lo?
Boa noite. O potenciômetro serve apenas para ajustar o contraste do LCD. Pode até ser substituído por uma resistência, se você preferir. Abraço !
Muito obrigado!
Como posso incluir 3 botões (iniciar, pausar e parar), já que o professor pediu para que as distâncias fossem guardadas na memória, ao clicar no botão parar, ele daria a soma de todas as distâncias. Além disso ele quer que seja usado uma chave seletora para dividir entre uma "trena eletronica" e contador. ???
Boa tarde.Interessante a sua pergunta. Não é muito difícil de implementar. Você já iniciou a programação ? Abraço !
Posso tentar fazer sem o resistor ou vai queimar?
Boa tarde. Pode ligar direto. Eu coloquei o resistor para diminuir um pouco a luminosidade. Abraço !
O meu da erro:
avrdude: stk500_getsync(): not in sync: resp=0x00
Isso parece ser o erro que acontece quando a IDE perde o sincronismo com o Arduino. Geralmente, basta tirar o cabo USB e conectar novamente.
Isso acontece tbm quando seu atmega 328p queimou
Seu erro pode ocorrer por conta da RXTX estar sendo já utilizada , verifique se não tem nada ligado nessas portas e coloque novamente , isso acontece por conta do usb também ser uma porta serial porém a RXTX que é usada pelo bluetooth etc.. , é prioritária , então é necessário tirar o que esta plugado nelas 😀 , vlw !
Bom dia, estou a procura de um Arduino ultrassônico para captação de som, vc sabe me informar aonde posso encontrar ou se o que vc está usando serve?
Bom dia Wellington,
O HC-SR04 serve mais como um sensor ultrasônico mesmo, detectando objetos e calculando a distância por meio do "eco".
Não encontrei nenhum sensor parecido com o que você precisa, mas creio que o que você precisa estaria mais relacionado à um microfone de alta sensibilidade. Nesse fórum aqui (em inglês), tem um cara que levanta a mesma questão que você, talvez seja um bom ponto de partida :
http://electronics.stackexchange.com/questions/96150/recording-ultrasonic-frequencies
Se descobrir algo e quiser compartilhar aqui com o pessoal do site, fico muito grato.
Abraços !
A leitura da sendo feita de trás pra frente, exemplo: 20.10 , 19.10 …
como faço para ele começar a leitura com 0 depois 1.5 , 2.0, 3.8, 20.5
Bom dia,
Nesse caso, você não conseguiria começar do zero, pois o sensor tem uma distância mínima para detecção.
Se você souber exatamente a distância entre o sensor e o objeto, você consegue mostrar os valores no sentido inverso. É isso que você precisa ?
Abraço !
Vamos imaginar um pote de 15 cm de altura. O sensor está na boca do pote. Inicialmente o pote está vazio, ele está fazendo uma leitura de +-15 cm. Ao encher o pote com areia digamos 5 cm. O sensor está fazendo a leitura de +-10 cm. Como faço para ele fazer a leitura de +-5 cm e não de +-10 cm. Ou seja ele tem que fazer a leitura da quantidade que eu enche. Se eu encher com 1 cm de areia ele tem que mostra 1 cm de enchido.
Entendi o que você precisa. Acho que o mais indicado é você utilizar a biblioteca NEWPING, que eu comento nesse post :
http://www.arduinoecia.com.br/2013/12/controle-de-vagas-de-estacionamento-com.html
Com ela, você tem mais funções para utilização com o HC-SR04, e também consegue determinar a distância máxima de detecção, que no caso do exemplo que você deu, seria de 15 cm. Com isso, é só subtrair os 15 do valor que o sensor detectar. Num exemplo bem simplista, você poderia inserir essa linha de código usando o exemplo desse post mesmo :
cmMsec = 15 – cmMsec;
Não sei se resolve o seu problema, mas é um ponto de partida. Se precisar de ajuda ou quiser detalhar mais o seu projeto, entre em contato.
Abraço !
Boa noite. Tem algum link desse display ? Sabe qual controlador ele usa ?
Abraço !
Boa tarde,
Andei pesquisando, e até achei um datasheet desse display, mas não consegui descobrir ainda qual controlador ele usa :
http://www.powertipusa.com/pdf/pc2004a.pdf
De qualquer forma, segundo o datasheet, a pinagem é a mesma de outros displays que eu utilizo nos meus posts. Tente seguir a ligação desse post aqui :
http://www.arduinoecia.com.br/2013/12/lcd-16-x-2-backlight-azul-hd44780.html
E tente mudar essa linha, que define o número de linhas e colunas do display :
lcd.begin(16, 2);
mude para :
lcd.begin(20,4);
Depois me conte o que conseguiu, por favor.
Abraço !
Já mudei continua igual. A 2ª e a 4ª linha aparecem a preto com os caracteres estranhos 🙁
As outras linhas funcionam ?
Valeu !
Você está usando a biblioteca Newtone ? Se quiser, poste o código que eu tento ver se consigo compilar aqui.
Abraço !
É quase isso. Explicando de uma forma resumida, seu código do Arduino é separado em 3 partes :
Parte 1 – Carregamento de bibliotecas, definição de variáveis, etc.
Parte 2 – Void Setup() – É a parte em que você define as configurações iniciais, que serão executadas apenas uma vez. É ali que você define se os pinos são de entrada ou saída, a inicialização da serial, etc
Parte 3 – Void loop() – Como o próprio nome diz, é um Loop onde os comando serão executados em sequencia, e , ao final, o processo é repetido continuamente.
Me conte um pouco sobre o seu projeto. O que você precisa exatamente ?
Com base nisso, vamos dar uma olhada no código e ver o que precisa ser retirado e/ou acrescentado.
Abraço !
Veja se é mais ou menos isso que você precisa. Eu coloquei no inicio do programa o carregamento da biblioteca Newtone , e também as definições do buzzer. No final, antes do delay, coloquei o comando NewTone(….) para acionar o bip a cada vez que ele faz a leitura, ou seja, a cada 1 segundo :
//Programa : Medidor de distancia com HC-SR04
//Autor : Arduino e Cia
#include //Carrega a biblioteca Ultrasonic
#include //Carrega a biblioteca LCD
#include
#define PINO_TRIGGER 13 //Define o pino do Arduino a ser utilizado com o pino Trigger do sensor
#define PINO_ECHO 10 //Define o pino do Arduino a ser utilizado com o pino Echo do sensor
Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); //Inicializa o sensor ultrasonico
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao LCD
//Dados do buzzer
#define tempo 500
int frequencia = 2000;
int Pinofalante = 7;
int atraso = 1000;
void setup()
{
Serial.begin(9600); //Inicializa a serial
lcd.begin(16,2); //Inicializa LCD
lcd.clear(); //Limpa o LCD
}
void loop()
{
float cmMsec, inMsec;
long microsec = ultrasonic.timing(); //Le os dados do sensor, com o tempo de retorno do sinal
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //Calcula a distancia em centimetros
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); //Calcula a distancia em polegadas
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
//Apresenta os dados, em polegadas, no LCD e na Serial
lcd.setCursor(0,1);
lcd.print("Pol. : ");
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(inMsec);
Serial.print(", Pol. : ");
Serial.println(inMsec);
//Aciona o bip
NewTone(Pinofalante, frequencia, tempo);
delay(1000);
}
Creio que por motivos de segurança os comentários não aceitam qualquer formatação. No começo do programa, carregue as bibliotecas dessa maneira :
#include (sinal de menor)Ultrasonic.h(sinal de maior) //Carrega a biblioteca Ultrasonic
#include (sinal de menor)LiquidCrystal.h(sinal de maior) //Carrega a biblioteca LCD
#include (sinal de menor)NewTone.h(sinal de maior)
Qualquer dúvida, é só dar uma olhada no exemplo do post. Abraço.
Entendi. O que você precisa então é do programa do sensor de ré, com as funções do display do Medidor de Distancia :
//Programa : Sensor de estacionamento com HC-SR04
//Autor : Arduino e Cia
#include //Carrega a biblioteca Ultrasonic
#include //Carrega a biblioteca Newtone
#include //Carrega a biblioteca LCD
//Dados do buzzer
#define tempo 500
int frequencia = 2000;
int Pinofalante = 2;
int atraso = 1000;
//Define o pino do Arduino a ser utilizado com o pino Trigger do sensor
#define PINO_TRIGGER 13
//Define o pino do Arduino a ser utilizado com o pino Echo do sensor
#define PINO_ECHO 10
//Inicializa o sensor ultrasonico
Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO);
// Inicializa o display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao LCD
void setup()
{
pinMode(Pinofalante,OUTPUT); //Pino do buzzer
Serial.begin(9600); //Inicializa a serial
lcd.begin(20,4); //Inicializa LCD
lcd.clear(); //Limpa o LCD
}
void loop()
{
float cmMsec, inMsec;
//Le os dados do sensor, com o tempo de retorno do sinal
long microsec = ultrasonic.timing();
//Calcula a distancia em centimetros
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
//Ajusta o atraso de acordo com a distancia
if (cmMsec > 80)
{
atraso = 2000;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec >50 && cmMsec<80)
{
atraso = 1500;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec >30 && cmMsec<50)
{
atraso = 1200;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec > 10 && cmMsec < 30)
{
atraso = 700;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
else if (cmMsec < 10)
{
atraso = 300;
//Apresenta os dados, em centimetros, no LCD e na Serial
lcd.setCursor(0,0);
lcd.print("Cent.: ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(cmMsec);
Serial.print("Cent: ");
Serial.print(cmMsec);
}
NewTone(Pinofalante, frequencia, tempo);
delay(atraso);
}
Não esqueça de carregar as bibliotecas Ultrasonica, Newtone e LiquidCrystal no começo do programa.
Abraço !
Sem problemas, vamos ver no que posso te ajudar. 🙂
Depois de todas as linhas que tiverem esse comentário :
//Apresenta os dados, em centimetros, no LCD e na Serial
Coloque essa linha de comando :
lcd.clear(); //Limpa o LCD
Vamos por partes. Veja se a exibição dos dados está correta, por favor.
Abraço !
Eu queria que aparecesse a distância no display e que o buzzer também desse sinal. Mais tarde queria adicionar mais coisas ao projecto como por exemplo mostrar a distância no telemóvel ou ligar e desligar o display/buzzer tudo isto por bluetooth.
Boa tarde,
Estranho esse problema da distância. Vou tentar montar o circuito aqui e ver se esse erro aparece.
Quanto ao buzzer, creio que seja alguma coisa referente à ligação, você já verificou se a polaridade está certa ?
Abraço
Amigo, como faço pra usar esse projeto no micro controlador MSP430 obrigado>
Boa tarde Jhonas,
Vou ficar te devendo, não conheço muito este microcontrolador. Mas achei um artigo que talvez sirva de ponto de partida :
http://www.meanpc.com/2012/09/using-hc-sr04-ultrasonic-sensor-with-ti.html
Abraço !
Olá, boa noite. Estou usando o Arduino uno. mas aparece uns erros como: long microsec = ultrasonic.timing();
sketch_may17a.ino: In function 'void loop()':
sketch_may17a:24: error: 'class Ultrasonic' has no member named 'timing'
sketch_may17a:26: error: 'class Ultrasonic' has no member named 'convert'
sketch_may17a:26: error: expected unqualified-id before numeric constant
sketch_may17a:27: error: 'class Ultrasonic' has no member named 'convert'
sketch_may17a:27: error: 'IN' is not a member of 'Ultrasonic'
já instalei a biblioteca do ultra_sônico e o erro permanece.
a versão do IDE é 1.0.5
Boa tarde Jhonas,
Isso parece ser mesmo erro de biblioteca, ou algum erro na instalação, ou a versão não é a mesma que estou usando nesse post. Verifique essa parte, por favor. Faça o download da biblioteca nesse link :
http://freecode.com/projects/hc-sr04-ultrasonic-arduino-library
Abraço !
Boa tarde,
Acho que o que você precisa está nesse post :
http://www.arduinoecia.com.br/2014/04/sensor-de-estacionamento-re-com-arduino.html
Espero que ajude. Qualquer coisa. é só perguntar
Abraços !
Boa tarde,
Junto com essas linhas :
Serial.print("Cent: ");
Serial.print(cmMsec);
Você pode incluir o comando lcd.print ou lcd.println para mostrar as informações no Display, já que elas já estão disponíveis no programa (variável cmMsec).
Não esqueça de carregar a biblioteca LiquidCrystal no começo do programa.
Abraço !
Boa tarde,
Não consigo, pois estou desenvolvendo outros posts e precisaria desmontar tudo e testar.
Mas se quiser tentar eu posso te ajudar a tirar as dúvidas depois.
Abraço !
Quando poder agradecia.
Abraços
Obgado ADM, mas o erro persiste. Tudo indica que não está reconhecendo a biblioteca, a versão é 1.0.5 sistema operacional windows XP. será que o sistema XP pode interferir? me ajuda, é trabalho de TCC pra junho.
erro
sketch_may19a.ino: In function 'void loop()':
sketch_may19a:24: error: 'class Ultrasonic' has no member named 'timing'
sketch_may19a:26: error: 'class Ultrasonic' has no member named 'convert'
sketch_may19a:26: error: expected unqualified-id before numeric constant
sketch_may19a:27: error: 'class Ultrasonic' has no member named 'convert'
sketch_may19a:27: error: 'IN' is not a member of 'Ultrasonic'
Bom dia Jhonas,
Realmente parece algum erro de biblioteca. Se possível, me passe o código completo usando o formulário de contato no lado direito da página, que eu tento compilar aqui e te falar o que está acontecendo de errado.
Se o código for o mesmo que estou utilizando nesse post, está compilando certinho, acabei de testar, blz ?
Abraço.
o código é o que vc está usando. O erro persiste. Fiz o seguinte teste:
– Coloquei um exemplo do ultrasônico para rodar, o erro persistiu. affs
Oi Jhonas,
Puxa, se nem com o exemplo da biblioteca o programa compila, o problema é sério. rs
Eu testaria uma instalação da IDE e da biblioteca "do zero" em outro computador, apenas para tentar isolar o problema.
Abraço !
O erro (class has no member named timing) ele não identifica algum membro chamado tempo ADM?
Bom dia Jhonas,
É mais ou menos isso…você tentou instalar a biblioteca e e compilador em outro computador ? Parece que temos aí uma versão de biblioteca incorreta ou alguma incompatiblidade com a versão da IDE.
Abraço.
Boas. Era só para agradecer. Finalmente consegui por tudo a funcionar.
Obrigado pela ajuda e espero que publique mais projectos interessantes.
Abraços!
Boa noite,
Agradeço o retorno e aguardo sua visita em breve.
Abraços !
Olá ADM, montei o projeto, tudo certo, muito obrgado, porém o sensor fixa um num e não varia de acordo com a aproximação do objeto. o que fazer?
Bom dia,
Teria que ver o circuito para ver o que está acontecendo. Pode ser algum problema no circuito, e veja também se os pinos do seu módulo correspondem aos pinos do módulo que eu uso no post.
Abraço !
MAIS LOCO QUE FAR CRY!!!!!!!!
Excelentes tópicos, muita informações consegui aqui! estou construindo um braço robotico, esta quase pronto! quero mostrar as posições dos servo em display lcd 20×4 mas o lcd mostra alguns caracteres estranhos(parece letras japonesas).
ex:
if (results.value == 16761405 || results.value == 2400 || results.value == 352)
if(pos1 < 179)
pos1 = pos1 + 1;
delay(35);
Serial.println("Posicao J1");
Serial.println(pos1);
lcd.setCursor(0,1);
lcd.print(pos1);
j1.write(pos1);
o que pode estar errado ? Obrigado e Excelente trabalho!
Bom dia Leandro,
Obrigado pela visita. Esses caracteres aparecem só quando vc manda imprimir a variável pos1 ?
Abraço.
Boa Noite. ja é o segundo codigo q nao copila =( sempre da essa mensagem 'class Ultrasonic' has no member named 'timing'
????
Bom dia Renan,
Acabei de testar esse mesmo programa, com a biblioteca mencionada no link (biblioteca versão 1.1.2). E funcionou normalmente.
Você está usando alguma versão de IDE diferente ou a biblioteca foi baixada de algum outro lugar ?
Abraço !
Instalei tudo certinho roda o programa, mas acho que meu modulo esta queimado pois não aparece valor algum, ja troquei cabos e nada, aparece tudo zero! como posso ter certeza que modulo esta funcionando ?
Bom dia Leandro,
Os valores aparecem no serial monitor ?
Abraço !
tenho o mesmo problema e sim no serial monitor todos os valores são zero. experimentei tirar os fios e então o Arduino me deu valores aleatórios, e quando liguei de novo… os mesmos zeros
Boa tarde. Consegui fazer o projeto funcionar, porém ele parece medir errado, como se estivesse descalibrado. Por Exemplo: Um objeto a uns 10 cm, ele marca no Serial Monitor 172,36 cm. Tem como consertar isso? E obrigado por disponibilizar seu trabalho.
Boa noite Evandro,
Você teria outro HC-SR04 para testar ? Se não tiver, verifique as conexões dos pinos Echo e Trigger. Já tive informações também de alguns módulos em que esses pinos vieram invertidos na marcação. Tente inverter os fios e ver se funciona.
Abraços !
Boa noite,
Tenho procurado a muito tempo um programa que leia tantas casas decimais em CM como o seu, fiz o download da biblioteca, add ela porem quando fui compilar o codigo ocorreu o seguinte problema:
sketch_aug31a.ino: In function 'void loop()':
sketch_aug31a:31: error: 'class Ultrasonic' has no member named 'timing'
sketch_aug31a:34: error: 'class Ultrasonic' has no member named 'convert'
sketch_aug31a:34: error: expected unqualified-id before numeric constant
sketch_aug31a:37: error: 'class Ultrasonic' has no member named 'convert'
sketch_aug31a:37: error: 'IN' is not a member of 'Ultrasonic'
voce sabe o que pode ser?
Boa tarde Thiago,
Você reiniciou a IDE depois da instalação da biblioteca ?
Abraço.
Estou precisando de ajudar para terminar a programação de um robô para competição.
Estou usando o sensor ultrassom HCSR-04 para o robô detectar obstáculos e depois, dentro de um loop conseguir desviar do mesmo. O programa funciona corretamente. O problema é que de alguma forma, o sensor frontal fica com valor zero (0) de vez em quando e prejudica o desempenho do robô. Porém, quando coloco o programa do ultrassom apenas para informar a distancia, fica apresentando a distância normal, sem oscilações. Resumindo: no programa do robô (o circuito eletrônico usa todas as portas digitais para sensores, servos – apenas este com alimentação externa) a distância do sensor frontal não fica constante com o sensor parado – parecendo até mal funcionamento. Favor ajudar, que meus alunos já tentaram, eu já tentei, mudei o formato do programa, já troquei vários sensores, porém, estou achando que o problema é nas portas do Arduino. Agradeço antecipadamente. Flávio
#include
#include
#include "Ultrasonic.h"
Ultrasonic ultrasonic(7,6);
long microsec = 0;
float distanciaCM = 0;
Servo servo1; // servo ESQUERDA 72 e 73 para
Servo servo2; // servo DIREITA 69 e 70 para
//#define echoPin 6 //Pino 8 recebe o pulso do echo
//#define trigPin 7 //Pino 7 envia o pulso para gerar o echo
#define echoPin3 8
#define trigPin3 9
#define echoPin2 10
#define trigPin2 11
int sensoresquerda = 2;
int sensordireita = 5;
int sensoresqMEIO = 3;
int sensordirMEIO = 4;
long duration = 0;
float distancia = 0;
int valorsensoresqMEIO = 0;
int valorsensordirMEIO = 0;
int valorsensoresquerda = 0;
int valorsensordireita = 0;
int tempo = 0;
int tempogira = 900;
int s1frente = 90;
int s2frente = 49;
void setup() //————————————————————————
{
//configuração dos pinos dos sensores
pinMode (sensoresquerda, INPUT);
pinMode (sensordireita, INPUT);
pinMode(sensoresqMEIO, INPUT);
pinMode(sensordirMEIO, INPUT);
// pinMode(echoPin, INPUT);
// pinMode(trigPin, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin3, OUTPUT);
Serial.begin (9600);
servo1.attach(13); // portas dos servos 1 e 2
servo2.attach(12);
}
void loop() //———————————————————————–
{
servo1.write(90);
servo2.write(49);
microsec = ultrasonic.timing(); //Lendo o sensor
distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM); //Convertendo a distância em CM
Serial.print(distanciaCM);
Serial.println(" cm");
if (distanciaCM <= 4)
{
Serial.print("OBSTÁCULO");
servo1.write(180); // GIRA PARA DIREITA
servo2.write(180);
delay(700);
int sinal = 0;
while (sinal != 1)
{
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
long duration2 = pulseIn(echoPin2,HIGH);
long d2 = duration2 /29 / 2 ;
digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
long duration3 = pulseIn(echoPin3,HIGH);
long d3 = duration3 /29 / 2 ;
if (d2 > d3)
{
servo1.write(72); // gira para esquerda com servo1 parado // 72 e 0
servo2.write(0);
delay (150);
}
if (d2 < d3)
{
servo1.write(180); // 180 – 69
servo2.write(69);
delay (150);
}
if (d2 == d3)
{
servo1.write(90); // PARA FRENTE
servo2.write(49);
delay (100);
}}
delay (50);
} }
Também estou com esse mesmo problema. O programa parece está bem. Funciona bem por um tempo e aleatoriamente o sensor começa a mostrar zero, o que prejudica muito o funcionamento do projeto. Jah estou a acreditar que é problema no sensor. Caso tenha resolvido o problema. Como fez? Vlw!
Boa tarde tenho um trabalho da facu para fazer utilizando este sensor e o programa quartus, alguem aqui sabe como?
Grato
Luiz
Olá excelente seu trabalho, gostaria que você pudesse me ajudar, tem com durante a medição quando o sensor marcar por exemplo 5 cm o pino 7 da saída digital tenha um nível logico alto, obrigado
Boa tarde Alexander,
Obrigado. Tente fazer um "IF" simples, testando o valor da distancia em cm:
if (cmMsec = 5) //Verifica se a distancia e igual a 5 cm
{
digitalWrite(7, HIGH); //Aciona a porta 7
}
Abraço !
Bom dia! Gostaria de saber como ler no monitor serial o tempo em segundos que o sinal leva até retornar ao invés de ler a distancia percorrida em si. Gostaria apenas de ler o tempo. Fico extremamente grato pela resposta!
Boa tarde Lucas,
Por favor dê uma olhad aneste artigo, creio que tenha o que vc precisa: http://www.instructables.com/id/Easy-ultrasonic-4-pin-sensor-monitoring-hc-sr04/?ALLSTEPS
Abraço !
quando uso este sensor com o módulo de comunicação RF 433Mhz o sensor só mostra zero. Sem o código do receptor ele mede direito. Onde posso estar errando? São incompatíveis?
tentei usar com o módulo de comunicação RF 433 Mhz e o sensor só mostra zero. São Incompatíveis?
Boa noite,
Nunca usei os 2 juntos, mas até onde eu sei, deveria funcionar.
Abraço!
Também tive esse mesmo problema. Posso estar falando besteira, mas penso que isso tenha a ver com os Timmers do microprocessador… Não tenho conhecimento, mas ouvi falar sobre isso. Se alguém tiver alguma resposta pra esse erro: [email protected]
Valeu!
Resolvi trocando as porta onde o sensor ultrassônico estava conectado.
Olá
Primeiramente parabéns pelo site.
Gostaria de saber se no seguidor de linha, posso colocar este sensor, sendo que ao avistar um obstaculo terá que parar por 10 segundo e depois retornar ao percurso normal. Como faço isso.
Preciso de uma força aí.
Obrigado
Carlos
HOLA QUE TAL SALUDOS Y FELICITACIONES POR SUS APORTES EN ARDUINO
ESTOY CORRIENDO SU PROGRAMA DEL SENSOR ULTRASONICO PERO ME SALE UN ERROR AL COMPILAR: YA CARGE LAS LIBRERIAS.
inMsec = ultrasonic.convert (microsegundos, ultrasónico :: EN);
PODRÍA APOYARME POR FAVOR?
MUCHAS GRACIAS SALUDOS DESDE MEXICO
Gracias Roberto!
Compruebe la instalación de la biblioteca, por favor.
¡Saludos desde Brasil! 🙂
Bom dia,
preciso usar um sensor HC-sr04 como um sensor de presença, que detecta qualquer objeto a 4m de distância, o problema que eu estou tendo é o seguinte:
Coloquei no "loop" o delay com valor "10", e, realmente eu preciso que ele fique fazendo a leitura assim mesmo, em um pequeno espaço de tempo, mas, quando não se tem nada na frente do sensor, ele demora muito tempo para liberar o loop, acredito que ele fica esperando o sinal de ECO, mas eu preciso que ele não fique esperando, pois tem que ser rápido, se vc souber alguma maneira de melhorar este problema agradeço.
Att. Hemerson
Boa noite Hemerson,
Creio que esse tempo esteja muito curto, e o sensor ultrassônico não está tendo tempo de processar o sinal. Uma opção é você tentar algum tipo de sensor ultrassônico mais rápido (não sei se existe), ou usar algum outro tipo de sensor no seu projeto.
Abraço!
Boa tarde Hemerson, meu projeto é parecido e estou tendo o mesmo problema. Se conseguiu resolve-lo ou achar outra alternativa, poderia me dizer.
Agradeço!!!
Boa tarde, quero saber se existe um modo de fazer com que o ECHO não espere tanto tempo pelo retorno do sinal? Quero que o TRIGGER emita sinais periºodicos mesmo se n|ao houver leitura do ECHO.
Obrigado!!
Olá,
Montei o esquema mostrado e compilei tudo certo, queria que alem de mostrar as medidas no LCD, mostrasse tambem no serial monitor do arduino no computador. Não estou conseguindo fazer isso.
Obrigada
Bom dia Ana,
O programa já está configurado para mostrar no Serial Monitor as medidas… No display aparece normalmente ?
Abraço!
Então, essa é a questão, não sei se está configurado para mostra no monitor. Quando peguei o projeto ele já estava meio que tudo montado e com o programa já feito, compilei no meu computador mas ele não mostra no serial monitor. No display mostra certinho.
Boa noite Ana,
Entendi. Gostaria de dar uma olhada no programa, deve ser algum detalhe fácil de resolver.
Se preferir, use o formulário de contato no lado direito da página para mandar o código.
Abraço!
Ok, mandarei! Obrigada (:
Boa noite gostaria de usar este sensor em um andador, quero colocar ele para o caso da criança que esta usando estiver em uma rampa e perder o controle assim o sensor detecte que a velocidade aumentou e envie um sinal para que os freios sejam acionados. o meu projeto e um andador com freios automatizados e sensor de distancia pra evitar que a criança bata com o andador em algum obstaculo, um projeto de tecnologia assistiva para uma criança com limitações.. se puderem me ajudar ficarei grata!
Att. Mariana souza
Bom dia Mariana,
Interessante o seu projeto. Só fico em dúvida se o sensor ultrassônico é rápido o suficiente para detectar a velocidade, como você precisa.
Outra questão é o tipo de freio, que não pode ser muito brusco, senão você corre o risco de arremessar a pessoa/criança para fora do andador, ou até mesmo tombá-lo.
Abraço!
ou nao consigo instalar a biblioteca
Boa tarde,
Que mensagem de erro está aparecendo ?
Abraço!
Olá, fiz esse circuito mas nao aparece nada no diplay. só acende o blacklight. Anguem pode me ajudar ?
Bom dia,
Você ligou o potenciômetro corretamente ?
Abraço!
Boa noite estou tentando testar o seu código, porem quando eu compilo o código, recebo um erro 'class Ultrasonic' has no member named 'convert' você pode me dizer como resolver este erro.
Oi Marcelo,
Você está usando a mesma biblioteca indicada no post ? Qual a versão da sua IDE ?
Abraço!
Bom dia , queria saber qual era o valor da resistência .
Bom dia,
Eu usei uma de 10K, mas você pode experimentar outros valores pra ver como fica a iluminação do display.
Abraço!
Alguem conseguiu resolver o problema de compilação do programa? da erro no timing e no convert
Olá,
Tem certeza que você carregou a biblioteca que está no post ? acabei de usar essa biblioteca com a IDE 1.6.7, e funcionou normalmente.
Creio que no seu caso seja conflito com alguma biblioteca existente.
Abraço!
Bom dia , o Código de Arduino que está nesta pagina não esta a dar.
Tem o seguinte problema:
ultrasonic.h: No such file or directory
Boa noite,
Por favor verifique a instalação da biblioteca.
Abraço!
bom dia estou com um erro e não consigo corrigi-lo tem como me ajudar
e nesta linha
//Inicializa o sensor ultrasonico
ultrasonic ultrasonic(PINO_TRIGGER,PINO_ECHO);
erro é este :
exit status 1
'ultrasonic' does not name a type
tradução:status de saída 1
" Ultra-som " não nomeia um tipo
obrigado se poder me ajudar agradeço
Boa tarde Claudemir,
É algum erro na instalação da biblioteca. Veja se não está em conflito com alguma outra que você já tenha instalado na IDE.
Abraço!
Boa tarde.
não estou conseguindo compilar esse código do sensor
Boa tarde,
Que erro apresenta ?
Olá , primeiramente parabéns pelo projeto, não sou da área sou bióloga mas gostaria de saber se este projeto pode ser usado no acompanhamento de crescimento de um vegetal?
Oi Graciela,
Interessante o seu projeto. Teoricamente sim, mas teríamos que fazer testes.
Caso precise de ajuda para implementar, entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
O link para baixar a biblioteca Ultrasonic.h não está mais disponível, onde posso encontrá-lo?
Boa noite,
O link está funcionando normalmente. Pode tentar de novo ?
Abraço!
o link para baixar a biblioteca Ultrasonic não esta mais disponível aqui também
bom dia, sou iniciante no arduino e gostaria de ajuda na parte de software , preciso fazer um trabalho pratico onde um sensor ultrassonico (Sensor de Distância Ultrassônico HC-SR04) tem que abrir um rele(modulo rele 5v) quando um objeto fica a 1metro do sensor, e permanecer aberto(rele) até que seja resetado o erro e dado inicio ao processo novamente. obrigado
bom dia preciso modificar meu trabalho para medir a altura de uma pessoa embaixo do sensor
Boas estou a fazer um projecto final de curso e gostaria de saber se era possível utilizar este esquema para uma fita medidora de distancias ?
Olá, bom dia amigo… Quero muito saber se posso trocar o arduino por outro controlador, como CI's? E como fazer esta troca. Me ajudem por favor
super legal
vou trocar o buzzer por um rele que vai acionar um valvula solenoide
pode ser assim?
obrigado
//Calcula a distancia em centimetros
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
//Verifica se a distancia é menor que 90 cm, no caso de ter um //obstaculo entre o sensor e um ponto fixo ja que o sensor também é fixo
if (cmMsec < 90)
digitalWrite(8, HIGH);
//Aciona a porta 8 para ligar um rele que aciona a solenóide
}
Olá eu fiz um projecto similar, eu acrescentei um lcd para que mostre na tela meu nome . e acenda um led com o ultrasonico também , compilou , mas näo acende o led .
Na verdade Eu näo sabia como fazer o código correctamente ,depois de subir para a placa só me apresenta o nome na tela
O circuito supostamente está correcto
int trigPin = 3;
int echoPin = 2;
int led = 5;
#include // incluíndo a bib LCD
LiquidCrystal Mostrarnatela(7,8,9,10,11,12);
void setup() {
// put your setup code here, to run once:
Mostrarnatela.begin(16, 2);
Mostrarnatela.print("Emiliana");
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// put your setup code here, to run once:
}
void loop(){
long duration, distance;
digitalWrite(trigPin,HIGH);
delayMicroseconds(9000);
digitalWrite(trigPin, LOW);
duration=pulseIn(echoPin, HIGH);
distance =(duration/2)/29.1;
Serial.print(distance);
Serial.println("CM");
delay(50);
if((distance<=5))
{
digitalWrite(led, HIGH);
}
else if(distance>5)
{
digitalWrite(led, LOW);
}
}
Olá! Gostaria de saber se tem como programar para medir em milímetros, décimos e centésimos?
Socorro !!! Nada dá certo na parte de programação do Arduino. Deu uns 5 erros neste projeto. Já verifiquei a biblioteca, li os posts, mas não consigo fazer rodar. Tô quase jogando a toalha.
Alguém conhece algum sensor ultrasonico para distância de até 100 metros ???
tem como usar um display de 7 segmentos no lugar do display lcd?
Oi Guilherme,
Tem sim. Nesse caso, se você não quiser ter muito trabalho pra ligação dos fios, recomendo a utilização de um módulo como o deste post:
https://www.arduinoecia.com.br/2016/09/contador-com-modulo-display-4-digitos-74HC595.html
Abraço!
Adilson
Boa Tarde, parabens pelo blog. Poderia me ajudar, gostaria de incluir um botão de "zerar" o display, como um paquímetro, pode me ajudar?
Abraço
Pra galera que está tendo dificuldades atualmente na hora de verificar o código e aparece o erro:
"exit status 1
within this context
long microsec = ultrasonic.timing();"
Façam o seguinte, baixem a última versão que foi feita da biblioteca Ultrasonic (no caso a 'Ultrasonic-3.0.0'), dps vá na linha de código:
"long microsec = ultrasonic.timing();"
e mudem para:
"long microsec = ultrasonic.distanceRead();"
Logo dps faça outra mudança na linhas de códigos:
"cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);"
e mude para:
"cmMsec = ultrasonic.read(CM);
inMsec = ultrasonic.read(IN);"
As novas atualizações das bibliotecas do Arduino não necessitam mais dos outros códigos para conversão da distância e leitura dela, por isso causa esse 'erro' no código. Tanto que agora quando vcs fizerem os experimentos verão que os valores estarão em inteiros ou invés de quebrados. Abraços!
inMsec = ultrasonic.read(IN);
Passou a dar erro.
Oi Rafael,
Você está usando a mesma biblioteca do post?
Abraço!
Adilson