HC-SR04 com Arduino: Colocando o ultrassom pra funcionar

Hoje fiz uma experiência nova… Liguei meu arduino em um ultrassom hc-sr04.

Sempre quis fazer uma experiência de medição por ultrassom, o que é muito usado em robozinhos por aí. Esse modelo de ultrassom é bem simples, tem 4 pinos, um de alimentação (vcc), um ground (gnd), um gatilho ou trigger (trig) e um echo, que ouve o retorno do som.

Fiz um setup simples, ligando da seguinte forma:

  • vcc no +5v do arduino
  • gnd no gnd do arduino
  • trig no pino 12
  • echo no pino 13

Simples assim… Vi que existem umas bibliotecas que se encarregam do ultrassom e calculam as coisas automaticamente, mas como acho que carregar libs no arduino é mais chato que codificar um pouco a mais, fiz o código na mão.

#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo

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);
  //pulseInt lê o tempo entre a chamada e o pino entrar em high
    long duration = pulseIn(echoPin,HIGH);
  //Esse calculo é baseado em s = v . t, lembrando que o tempo vem dobrado
  //porque é o tempo de ida e volta do ultrassom
    long distancia = duration /29 / 2 ;

Serial.print("Distancia em CM: ");
Serial.println(distancia);
delay(1000); //espera 1 segundo para fazer a leitura novamente
}

Essa conta foi BEM precisa nos meus testes!

Fácil não?

Caso encontrem o erro abaixo (eu encontrei):

avrdude: stk500_getsync(): not in sync: resp=0×00

Você precisará baixar um driver para sua máquina reconhecer o arduino e alocá-lo na COM de uma forma diferente:

Driver FTDI

É só rodar o exe e pronto! Tire o arduino do USB e coloque de novo, abra a IDE e faça o upload do sketch normalmente.

Com esse ultrassom e um circuitinho usando L293D já sai um robozinho bacana!

Abraços!

Fui!

This entry was posted in Arduino. Bookmark the permalink.

24 Responses to HC-SR04 com Arduino: Colocando o ultrassom pra funcionar

  1. Vitor says:

    Que facil esse ultrasom hein….
    Acabei de comprar um chassi de rodo no Mercado livre e esse ultrasom… tava meio preocupado em fazer ele funcionar… mas, mais facil q isso impossivel… kkkkk

    Valeu pela dica!

  2. David Faial says:

    Massa ! estava com dificuldades pq outros sensores enviam e recebem pelo mesmo pino .
    Vlw !!

  3. Carlos Lima says:

    Oi! Poderiam me ajudar com um problema?
    Eu estou conseguindo com esta programação colocar um sensor ultrassom para funcionar, mas não consigo colocar dois sensores para funcionar, sendo que estou separando em sub-rotinas a programação para cada ultrassom, mas apenas o primeiro que é acionado na programação é que funciona, enquanto o outro não opera.

  4. Cledilson says:

    Tem algum sensor desse que funciona como o sensor da ultrassonografia de exames?

    • Cledilson,

      Não faço ideia se o sensor de exames funcionaria da mesma forma… acho que na teoria é o mesmo, dar um pulso e ver quanto demora para retornar…
      Agora na prática não sei…

  5. Eduardo says:

    Boa tarde, muito bom seu exemplo.
    Estou com uma dúvida, porque você “ligou” e “desligou” o “trigpin” três vezes, antes de fazer o cálculo?
    Usar o comando digitalWrite(trigpin, HIGH) uma vez não seria suficiente?
    Obrigado.

    • Eduardo,

      Não foi ligado três vezes, foi desligado (só para garantir), ligado depois desligado de novo com delays variáveis entre os digitalWrites para garantir que o ultrassom entenda o trigger…

  6. Tive o mesmo problema com dois sensores, alguma opinião?

  7. Vinicius says:

    Por favor,
    sabe me dizer qual a frequencia de amostragem e a resolução da conversao A/D ou D/A do arduino para este projeto com este sensor ?

    Grato

  8. Vinicius says:

    como fazer para o sensor medir decimal ? por exemplo 10,3 cm ?

  9. Tiago says:

    Amigo, qual o alcance desse ultrassom? Metros ou apenas centímetros?

  10. Ari Júnior says:

    Gabriel, to querendo fazer esse robo ai com sensor, me da umas dicas na montagem, com ponte H e o sensor e um arduino. como montar e como programar pra ele sair andando ;D

    Obrigado

  11. Allan says:

    Gabriel, estou começando com Arduino, se eu quiser acender um LED pra distâncias entre 20 e 10 cm e outro abaixo de 10cm? Como ficaria o código?

  12. Alex says:

    Olá Gabriel, estou tentando implementar no sensor ultrassom um buzzer que indique, por exemplo, 100cm (tres bips), 200cm (2 bips ) e 300 cm (1 bip) só que nao tenho experiencia com a programaçao. teria como vc me ajudar nisso ai. obrigado!!

  13. Michel says:

    Gabriel me tira uma duvida: porque a variavel distancia esta sendo dividida por 29? ela não deveria ser multiplicada pela velocidade do som?

    Obrigado,
    Michel

    • Sim, ela deveria estar sendo multiplicada pela velocidade do som.

      No entanto as unidades não bateriam. Você não teria o resultado do cálculo em cm.

      Esse conta 29/2 (ou 58.2 as vezes aparece nesse código) já faz a conversão de unidades para cm.

  14. Cleber Spindler says:

    Olá !
    O amigo Gabriel pode me ajudar?
    Eu estou tentando montar um robozinho com o arduino e o sensor HC-SR04 e um servo motor e mais o l293d pode me ajudar como código?

    • Oi Cleber,

      Não tenho muito como te ajudar mais do que te falar para pegar o post do HC-SR04, combinar com o post do “alimentador de peixes” que controla servos e com o de ponte H.

      Esses posts devem te ajudar a começar, mas robôs são muito dependentes do hardware. Cada robô tem seu código.

      Boa sorte!

      Abraço!

  15. Pedro Filho says:

    Cara, tentei todas bibliotecas mas todas mostravam valores que não condiziam com o valor medido, o teu código deu certinho, e é absurdamente simples o que é melhor, parabéns, espero que essa inspiração não se acabe kkkkkkkkkk

  16. Wendell says:

    Amigo preciso usar 2 sensores de ultrassom e quando vou codificar ele da conflito e nao consigo usar dois ao mesmo tempo.

  17. DONIZETI says:

    Parabens !
    Bom trabalho, eu nunca tinha mexido com arduino , trabalho com microchip em assembly sou das antigas , mas enfim instalei a ide copiei seu projeto compilei e ja funcionou assim não tem nem graça rs.
    Eu ja fiz um projeto com este sensor para pic esta funcionando
    abs
    Donizeti

Leave a Reply to Vinicius Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>