Skocz do zawartości

ESP8266 oraz czujnik odległości - wybór oraz pomoc z odczytaniem danych


Pomocna odpowiedź

1 godzinę temu, _LM_ napisał:

ten moduł niema wyjścia analogowego

Wyjścia analogowego nie ma, ale to niepotrzebne, bo odległość wylicza się na podstawie róźnicy czasu pomiędzy impulsem wysłanym, a odebranym. Są też modele, które wysyłają gotową wartość odległości po szynie I2C.

Najprościej "analogowo" przykręcić do posadzki ograniczniki do których dojeżdża samochód. Gorzej jak ktoś musi czołgiem parkować to może nie poczuć że to już xD

  • Lubię! 1

Cześć, dostałem właśnie moduł HC-SR04 i "coś mi nie działa".

Program jaki mam:

const int trigPin = D6;// pin 12
const int echoPin = D5;// pin 14

#define trigPin 12
#define echoPin 14
 
void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
  pinMode(echoPin, INPUT); //a echo, jako wejście
}
 
void loop() {  
  float odl = zmierzOdleglosc();

  if (odl == 0) {
    return;
  }
  

  Serial.print(odl);
  Serial.println(" cm");
  
  delay(500);
} 
 
float zmierzOdleglosc() {
  float czas, dystans;
 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  czas = pulseIn(echoPin, HIGH);

  dystans = czas / 58;
  return dystans;
}

image.thumb.png.f45ad6630fc6cec1720e927a880cea5e.png

image.thumb.png.1e9ddb6328f891273e63091241a17656.png

image.thumb.png.03c04185ce16a84f9d61ad21cc2a5b9a.png

 

Czarny przewód to Minus z baterri, czerwony to plus.

Biały jest podpięty do pinu D5 oraz Echo, czary do D6 oraz triggera. Niestety, niezależnie jaka jest przeszkoda oraz jak daleko jest od sensora, to wyniki mam albo odległość zero albo ewentualnie 0.03. Więc wygląda jakby nie dzałało mi to prawidłowo.

 

image.thumb.png.e7248934d1f4d66b395c257b67adf5cb.png

 

Pytanie do was czy wiecie może co robię źle? Bateria jaką używam to 4x1.5v, więc prądu mu nie powinno zabraknąć. Jak się wsłucham to słyszę ciche pik-pik więc wygląda jakby wysyłał sygnał dźwiękowy.

Co mogę robić nie tak?

Nie wiem czy to powód, ale moduł wymaga zasilania 5V, a nie "nie wiem ile ale nie powinno zabraknąć". 6V może być za dużo i moduł przeszedł do Krainy Wiecznych Pomiarów...

 

@ethanak nie, to nie był powód. Udało mi się uruchomić i działa prawie tak jakbym chciał 🙂

Robię pomiary co sekundę. Co jakiś czas pomiary są mocno zakłamane.

 image.thumb.png.aee2d71b9a70ccff80100014940f320b.png

 

Umieściłem około 50 cm od czujnika przedmiot i mi go poprawnie wykrywa, lecz czasami zwraca mi wyniki w okolicy tych 12 m. Skąd to może się brać? Może to być echo albo coś podobnego? Testuję wszystko w salonie.

8 minut temu, bklimczak napisał:

Skąd to może się brać? Może to być echo albo coś podobnego?

Bo to taki czujnik :-(. Może zamiast jednego pomiaru wykonaj serię, odrzuć skrajne wyniki, oblicz średnią .... powinno to błędy zmniejszyć.

średnia mi słabo wychodziła, bo odchylenie było zbyt duże. Zrobiłem tak, że pomiary ponad 10m odrzucam z automatu i zrobiło się dużo lepiej. Myślałem, że to ja coś popsułem, albo jakieś echo się porobiło 🙂

3 minuty temu, bklimczak napisał:

albo jakieś echo się porobiło

Bo i tak się dzieje. Te ultradźwięki rożnie się odbijają w zależności od powierzchni, kąta, temperatury .... itd. Mam np. taki czujnik URM37, który działa dużo lepiej niż te HCSR-04.

31 minut temu, bklimczak napisał:

średnia mi słabo wychodziła, bo odchylenie było zbyt duże. 

To zrób tak jak @Belferek radzi... odrzuć wyniki które aktualnie różnią się znacznie (do ustawienia) od przeciętnego wyniku, zbierz powiedzmy 10 próbek i dopiero wtedy wyciagaj średnią...a takie ustawienie na sztywno to guzik da...

9 godzin temu, bklimczak napisał:

Może to być echo albo coś podobnego?

Nie, to nie echo. Echo zafałszowałoby pomiar jeśli odstęp między pomiarami byłby zbyt krótki i czujnik złapał odbicie poprzedniego impulsu.

Tymczasem sprawa jest prosta. To nie jest żaden błąd pomiaru ani efekt niedokładności czujnika czy różnego odbijania ultradźwięków - po prostu w ten sposób czujnik sygnalizuje, że w ogóle nie odebrał odbitego sygnału i jest gotowy do następnego pomiaru.

Możesz spróbować po prostu powtórzyć pomiar, jeśli wynik będzie np. większy niż 10m. Sprawdź np. taki kod:
 

float odl=zmierzOdleglosc();
if (odl > 1000.0) {
  odl=zmierzOdleglosc();
  Serial.print("Powtórzyłem pomiar: ");
}
Serial.print(odl); Serial.println(" cm");

 

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...