Skocz do zawartości
stachu4ever

Jak sprawdzic czy dziala hc-sr04

Pomocna odpowiedź

witam, syn robi prostego robota ktory ma dojezdzajac do przeszkody zmienic kierunek jazdy, jednak pojazd caly czas jezdzi w kolo. zachowuje sie jakby stal przed przeszkoda. wgrywam kody na hc-sr04 ale w zwrocie dostaje 0cm. czujnik walniete czy cos robimy zle? moze ktos podac kod i schemat aby sprawdzic dzialanie czujnika?

Udostępnij ten post


Link to post
Share on other sites

Czym zasilacie arduino i czujnik? Z tego co pamiętam to zasilanie przy tym czujniku musi być dość czyste a przy samej płytce czujnika spory kondensator.

Udostępnij ten post


Link to post
Share on other sites

jedziemy wg arduino dla dzieci z pwn https://www.empik.com/arduino-dla-dzieci-poznaj-swiat-elektroniki-i-programowania-zarowska-mazur-alicja-mazur-dawid,p1119300467,ksiazka-p?gclid=CjwKCAjwqLblBRBYEiwAV3pCJkDbVHYKmob_R6jh7RjaOJjzQ4b_p5qBzzla5t6CiaRtQOrHzoHeOBoChMUQAvD_BwE&gclsrc=aw.ds

schemat i kod raczej ok ale pozniej wgralismy inne kody aby odczytac pomiar ale same zera. zasilamy z usb lub baterii 9v. bez kondensatora

 

Udostępnij ten post


Link to post
Share on other sites

Zgaduję, że może być problem z zasilaniem, 9V bateria nie nadaje się do zasilania czegokolwiek co pobiera powyżej 100mA, a na pewno cały taki robocik pobiera dużo więcej prądu. Spróbuj zasilić z czegoś o większej wydajności prądowej, np. z jakiegoś lepszego zasilacza. Ewentualnie zrób test samego czujnika i arduino bez zasilania czegokolwiek więcej, czyli bez silników i innych wodotrysków.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
int trig = 13;
int echo = 12;
int czas;
int odleglosc;

int enablePin1 = 11;
int input1A = 10;
int input2A = 7;

int enablePin2 = 6;
int input1B = 5;
int input2B = 4;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);

  pinMode(enablePin1, OUTPUT);
  pinMode(input1A, OUTPUT);
  pinMode(input2A, OUTPUT);
  digitalWrite(enablePin1, LOW);

  pinMode(enablePin2, OUTPUT);
  pinMode(input1B, OUTPUT);
  pinMode(input2B, OUTPUT);
  digitalWrite(enablePin2, LOW);
}
void loop() {
  digitalWrite(trig, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig, LOW);
  czas = pulseIn(echo, HIGH);
  odleglosc = (czas / 2) / 29.1;
  Serial.print(odleglosc);
  Serial.print(" cm");
  Serial.println();
  delay(20);
  
  digitalWrite(input1A, HIGH);
  digitalWrite(input2A, LOW);
  analogWrite(enablePin1, 255);
  digitalWrite(input1B, HIGH);
  digitalWrite(input2B, LOW);
  analogWrite(enablePin2, 255);

  if (odleglosc > 40 ){
    digitalWrite(input1A, HIGH);
    digitalWrite(input2A, LOW);
    analogWrite(enablePin1, 255);
    digitalWrite(input1B, HIGH);
    digitalWrite(input2B, LOW);
    analogWrite(enablePin2, 255);
 }
  else {
    digitalWrite(enablePin1, LOW);
    delay(500);
    digitalWrite(input1A, LOW);
    digitalWrite(input2B, HIGH); 
    analogWrite(enablePin1, 255);
    digitalWrite(input1B, HIGH);
    digitalWrite(input2B, LOW);
    analogWrite(enablePin2, 255);
  }
}

ten jest z poradnika

int trig = 13;
int echo = 12;
int czas;
int odleglosc;

void setup () {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}
void loop() {
  digitalWrite(trig, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig, LOW);
  czas = pulseIn(echo, HIGH);
  odleglosc = (czas / 2) / 29.1;
  Serial.print(odleglosc);
  Serial.print(" cm");
  Serial.println();
  delay(20);
}

a tym testowalismy odczyt

Udostępnij ten post


Link to post
Share on other sites

 

zmień 

unsigned long czas;

 

delayMicroseconds(10);

 

Udostępnij ten post


Link to post
Share on other sites

Miałem też problem z zerem na tym czujniku. Jeżeli używasz pinów 9-14 to zmień je na jakieś mniejsze np. 4 i 5.  Możliwe, że pomoże 

Udostępnij ten post


Link to post
Share on other sites

@jugan1 masz pewność, że to kwestia błędnych pinów, a nie jakieś inne problemy? Nie słyszałem jeszcze o czymś takim, nie mam też żadnego pomysłu co miałoby "utrudniać" działanie czujnika na konkretnym pinie. Może zwyczajnie coś nie stykało, a zmieniając pin "przypadkiem" naprawiłeś dany problem.

Udostępnij ten post


Link to post
Share on other sites

Tak z czystej ciekawości podpiołem hc-sr04 do arduino nano na płytce stykowej. Piny tak jak w kodzie czli trig 13 echo 12. Zasilanie czujnika z arduino 5V ,gnd czujnika do masy arduino. Kod z postu (ze zmianami, które zaproponowałem) działa ok. Najlepiej wklej foto jak to podłączyłeś.

Nie napisałeś z jakiego arduino korzystasz bo to może być istotne. Natomiast co do ograniczeń to na pinie 13 jest dioda led co czasem ma pewne znaczenie.

Udostępnij ten post


Link to post
Share on other sites

@aerograf7 dlaczego? Nie widzę związku: PWM to tryb pracy wyjścia, a echo to pin wejściowy. Na pewno chodziło Ci o PWM?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Ja zawsze podłączam trig do 2 a echo do 3 i działa

Edytowano przez aerograf7

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...