Ontem fiz a minha primeira aplicação com os sensores do Arduíno pois já estava incomodado por ter ele lá parado na estante há uns 6 meses me olhando sem ser usado. De início desejo aprender a ler os esquemas de eletrônica e montar meus apetrechos para o barco e para algum projeto do mestrado (que depois descobri não valorizar produtos). Comecei pelo sensor ultra-som de distância HCSR04.

O sensor é aquele com dois copos metálicos, um emite o ultrassom e o outro recebe. Então, ele pega quanto tempo o som demorou para voltar e calcula a distância. Simples, né?
Preço: Aqui no Brasil, R$ 20,oo a 50,oo. No ebay $ 3USD com entrega. Precisão: 3mm Distância máxima: 45/50cm Datasheet do sensor HCSR04
Erros:
Eu já tinha testado o Arduino antes só com um código de piscar os leds com um programinha simpes sem problema algum. Mas ontem quando eu compilava qualquer código, mostrava 0 erros de código mas sempre voltava a mensagem:
avrdude: stk500_getsync(): not in sync: resp=0x30 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Tinha um monte de besteiras nos fóruns, falando pra dar reset repetidamente, tirar e colocar o cabo usb rapidamente (o que acho pode queimar ou perder a ROM) mas no final das contas depois de 1 hora aprendi que é só mudar a porta COM. A minha estava COM3 e ao mudar para a COM5 funcionou, compilou e instantaneamente já começou a receber as informações na janela de serial.
Primeira pegadinha
O programa do Arduino já vem com uma biblioteca e código pronto para um sensor de distância, só que não é este que eu tenho. Pelos tutoriais, o outro sensor só tem três pinos: alimentação 5V, GND (neutro), e o que transmite os dados. Esse meu separa o dado em entrada e saida, então tem 4 pinos. Então, tem que tomar cuidado para não montar tudo no automático sem prestar muita atenção e fazer qualquer coisa que não funcione. Tive que dar uma pesquisada no sensor específico e por sorte tinha bastante documentação, com o porém de a maioria ser de mais alto nível, sem estas minhas questões de iniciante.
Instalação de biblioteca
Sempre que um código chama um “qualquerCoisa.h” ele está chamando uma library. Só que este sensor não tinha esta library instalada no console do Arduino e demorei mais uma hora até ter calma de ler a documentação e ver o que deveria fazer. Aqui vai um passo a passo:
- Baixar a libray do sensor ou qualquer outro hardware que voce espetar, elas tem dois arquivos pelo menos um “qualquerCoisa.h” e um “qualquerCoisa.ccp”;
- Copiar para o diretório do programa do Arduino, na pasta de libraries criando uma pasta para ele.
- Reiniciar o programa, com isso já vai aparecer no menu e quando voce fizer a chamada, não vai mais receber o erro de biblioteca não localizada.
Documentação oficial
http://arduino.cc/it/Reference/Libraries
Conclusão:
Tudo funcionou como o esperado, fiz o esquema mais simples possível. Seguindo e lendo os tutorais oficiais e o datasheet não tem erro. Sempre vão surgir dúvidas, mas só se aprende fazendo e com a internet fica tudo muito mais fácil. Meus próximos passos serão colocar um display com as informações do sensor e um outro monitor de temperatura jogando os dados na internet.

Queria saber se tem como inverter essa situação, digo ao me afastar o som se emitido….
Olá Fabrício
Não entendi bem a pergunta, mas se for para emitir um beep por exemplo, tem como fazer sim basta programar para tal. E ai, se a frequencia do sinal aumentando fica mais rapido o beep, eu faria uma inversão da seguinte maneira:
Dividindo a distancia por 100 e diminuindo de 1 por exemplo.
30(cm) / 100 = 0.3
1 – 0.3 = 0.7 (s) beep em 0.7s
60(cm) / 100 = 0.6
1 – 0.6 = 0.4 (s) beep em 0.4s
Isso resolve?
sera que posso entrar em contato com vc tenho algumas duvidas e sugestões
Olá Thiago
Não sendo uma proposta financeira, pode fazer as perguntas e sugestões pelos próprios comentários, assim compartilhamos a informação com os demais leitores.
Obrigado
Raphael, estou desenvolvendo um projeto onde uso o mesmo senso. O interessante pra mim não é saber qual a distancia em si (lcd.print(…)) mas sim ele acionar um motor (sobe ou desce) se a distancia for > ou EEPROM.read(addr))
{
lcd.clear();
digitalWrite(ledPinS, HIGH);
delay(1);
}
else
{
digitalWrite(ledPinS, LOW);
}
if(cmMsec < EEPROM.read(addr))
{
lcd.clear();
digitalWrite(ledPinD, HIGH);
delay(1);
}
else
{
digitalWrite(ledPinD, LOW);
}
}
break;