Preciso de uma ajuda com o meu HC-SR04 (sensor ultra-sônico).

Não estou conseguindo de jeito algum ter boas leituras, pensei que fossem ruídos causados pelo arduino ou algo assim (achei muito dificil por ter Clock mas mesmo assim levei em consideração).

Como não tenho nenhum osciloscópio para ajudar eu fiz alguns testes com o que eu tinha aqui (Transistor e Led) mas não funcionaram.

O erro que esta ocorrendo é o seguinte:

Distancia em CM: 35
Distancia em CM: 35
Distancia em CM: 34
Distancia em CM: 35
Distancia em CM: 0
Distancia em CM: 0
Distancia em CM: 35

e assim ele vai, faz algumas medidas e logo após ele zera.

Resaltando que o ultra-sônico esta parado.

Tudo bem as variações de alguns centímetros, mas uma variação de 35 cm não da né?

Isso afeta diretamente e totalmente meu projeto.

Estou desenvolvendo um carrinho que tem como "olho" o ultra-sônico, sendo assim fundamental o uso sem tamanhas variações.

Pensei que era algo que estava utilizando que causava tantas variações, mas depois retirei ele de todo o sistema e o testei isoladamente e ele persistiu no erro. rsrs

Agradeço desde já,

Amauri

Exibições: 5111

Responder esta

Respostas a este tópico

Algumas sugestões:

Mau contato (de alguma coisa, até mesmo no próprio circuito do ultrassom.

algumas superfícies podem dar mau funcionamento assim, como almofadas, ou outra que não rebata o som.

Pode ser o código tb, seria bom postar o que vc está usando, muitas leituras em seguida acho (não tenho certeza) podem sobrepor as ondas. (eu tentaria colocar um delay de 500ms entre cada leitura.)

Com mais informações pode ser avaliado.

Ah, mesmo desta forma, pelo código é possível desprezar as leituras fora (mas só se for um defeito no sensor e ele for o "filho único"

Boa sorte

Ricardo

Olá Ricardo.

O sensor esta posicionado em direção a parede.

Ele está com um delay de 1s.

o Código acabei de postar.
O pior que é 'filho único'

haah.

Obrigado RIcardo.

att.

Amauri

#include "Ultrasonic.h"
#define echoPin 14
#define trigPin 2
Ultrasonic ultrasonic(2,14);
void setup()
{
Serial.begin(9600); 
pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  }
void loop()
  {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
digitalWrite(trigPin, LOW);
  int distancia = (ultrasonic.Ranging(CM));
  Serial.print("Distancia em CM: ");
  Serial.println(distancia);
delay(1000);

Olá Amauri,

35cm é muito, pelo que sei o erro para o HC-SR04 é de 0.3cm.

Acho que o problema não é no programa. Como o Ric4rdo Pedr0s0 disse, pode ser mau contato. Eu ganhei 5, mas só testei um até agora. Quando eu encosto na placa as leituras ficam doidas, mas com o sensor na proto sem mexer em nada fica normal. Não sei como está ligado o seu sensor ai, mas se puder coloque ele em um local bem fixo, como uma protoboard, e ao invés de mexer com a proto mova um objeto na frente dele, sem tocar no sensor ou no Arduino. Se ele ja estiver montado em alguma placa, pode sim ser ruido. Pra vc ter uma idéia, fiz um projeto aqui que apesar de tudo certo nada fazia o cristal oscilar. troquei tudo, microcontrolador, capacitores, resistores, cristal e nada, quando coloquei capacitores filtro no circuito funcionou perfeitamente. Lembrando que não sei como você esta ligando seu projeto. Sem mais detalhes a gente só consegue ter sugestões.

Como foram realizados os testes que vc fez?

O microcontrolador esta em uma proto ou no próprio Arduíno?

Como é a fonte de alimentação?

Essas leituras estão sendo feitas em que tipo de superfície? Parede, sofá, vidro, ...?

Programa que eu uso no meu arduino:


#include "Ultrasonic.h"
int trig = 12;
int echo = 13;
Ultrasonic ultrasonic(trig,echo);

void setup() {
Serial.begin(9600);
}

void loop()
{
Serial.print("Distance CM:");
Serial.println(ultrasonic.Ranging(CM));
// Serial.print("Distance INC:");
// Serial.println(ultrasonic.Ranging(INC));
delay(100);
}

Olá Leonardo,

Bom dia!

Quando você encosta em qual placa a leitura fica doida? Que tipo de placa?
Sim, o erro dele é de 0.3cm. Ele está montado em uma placa de circuito e ontem coloquei ele na proto e ainda assim deu esse erro. Qual capacitor posso colocar como filtro? Capacitores de quanto?

O teste com o LED eu fiz da seguinte forma. Posicionei o sensor a aproximadamente 2m e fazendo os cálculos, d=(v.t)/2 - com 2 metros teriamos 200=(340.t)/2  => 400/340=t => t≈1,18s.

Liguei o trigger, vcc e gnd normalmente e liguei o eco ao led ao invés de ligar no arduino e como vimos os cálculos acima, ele deveria ficar aproximadamente 1,1s acesso. Mas isso não acontece, ele fica muito pouco devido aos erros.
O outro teste que fiz foi pensar que estivessem ruidos na saída do arduino e então ao invés de ligar o arduino diretamene ao sensor, liguei o arduino na base de um Transistor NPN, um 5v limpinho no coletor e o emissor ligado ao Trigger (gatilho). Assim se eu estivesse com ruídos no arduino, ele só acionaria o transistor mas chegaria Tensão "limpinha" até o sensor.

O microcontrolador está no arduino mesmo, arduino UNO.

Como fonte de alimentação utilizo uma bateria de Li-PO, o arduino é alimentada por ela.

As leituras estão senso feitas em uma parede.

Obrigado Leonardo,

Abraços

O meu sensor fica doido quanto toco na placa dele, segurando pelas bordas por exemplo.
Pode testar em capacitor eletrolitico de 470micro na alimentação do sensor. Vcc e Gnd do sensor.

Colocar um capacitor de 470uf no vcc?

Obrigado,

Amauri

Entre o vcc e o gnd do sensor somente, nao na alimentação da placa toda.
É uma tentativa somente.
Tenta o programa q eu postei ai e ve se da o mesmo problema.

Sem grandes resultados!

Estou ficando desanimado..

Mas vamos lá, será que alguém pode me ajudar?

Obrigado,

Amauri

Ok, vamos ver se aparece alguém ai com uma saída para o seu problema.

Não desanima não.

Amauri, considerando o que vc postou....

o erro é que algumas vezes ele zera a leitura...mas nas demais está correta...

Já que está perdido o boi com a corda... elimina estes valores via software... (ok.. é gambiarra, mas o robozinho anda mesmo assim, ok)

faz um algoritmo, por exemplo, se a distancia diminuir mais de 5 cm de uma leitura para outra ele desconsidera... ou mais facil ainda...

se a leitura for = a zero desconsidera e le novamente...

Não é a melhor coisa... mas é melhor que desistir...

saberia fazer ? boa sorte!!

Qualquer coisa , estamos ai... 

Acho que esse será o caminho, hoje fui atrás de professores aqui da universidade onde estudo para obter um apoio e possibilidade de mexer no laboratório para usar um osciloscópio e tentar olhar isso!

Esperarei a resposta dos meus professores e no fim de semana tentarei fazer um código parecido com estes,

caso não consiga te envio um email Ricardo.

Muito obrigado pessoal,

Abraços.

Amauri

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço