Arduino Polska Forum

Pełna wersja: Czujnik odległości HC-SR04
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam !!
Podłączyłem czujnik odległości do Ardurino Uno , napisałem poniższy program

Kod:
#define trigPin A1
#define echoPin A0

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() {
long czas, dystans;

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;

Serial.print(dystans);
Serial.println(" cm");
 delay(500);
}

Problem polega na tym, żeby działał czujnik muszę pomiędzy trigPin a echoPin przylutować rezystor 10 kom. Inaczej czujnik nie działa. Może coś musze zmienić w programie, żeby czujnik odległości działał bez dodatkowego rezystora.
Pozdrawiam !!
Jak na to wpadłeś by tam dodać akurat 10k w takiej konfiguracji? Nie słyszałem o takiej konieczności, jest to na kursie Arduino i nikt tam się nie skarżył, że coś nie działa. Program masz też identyczny: link.
W zależności od miejsca gdzie kupiłem czujnik jedne działały a inne nie. Pomyślałem że nie mają sygnałów pociągniętych do +5V Próbowałem podciągać i zaczęły coś pokazywać ale niestabilnie. Więc wlutowałem rezystor 10k om pomiędzy trig a echo i łanie działa. Dziwne co ale prawdziwe. Tak samo jest z oryginalnym czujnikiem odległości z mBot /Makeblock/ . Na bibliotece z mBota działa bez rezystora ale już na powyższym programie nie.
(02-05-2019, 09:22)robo1973 napisał(a): [ -> ]wlutowałem rezystor 10k om pomiędzy trig a echo i łanie działa.
Przez przypadek.
Zastanowiłeś się co tak naprawdę zrobiłeś?
Sprawdzałeś oscyloskopem jak wyglądają sygnały bez i z rezystorem?
(02-05-2019, 11:11)es2 napisał(a): [ -> ]
(02-05-2019, 09:22)robo1973 napisał(a): [ -> ]wlutowałem rezystor 10k om pomiędzy trig a echo i łanie działa.
Przez przypadek.
Zastanowiłeś się co tak naprawdę zrobiłeś?
Sprawdzałeś oscyloskopem jak wyglądają sygnały bez i z rezystorem?
Po analizie przebiegów czasowych problem rozwiązany

Kod:
void loop() {
 long czas, dystans;

   pinMode(echoPin, INPUT_PULLUP);// dla czujnika mBot
   pinMode(echoPin, INPUT);// dla czujnika mBot
 
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);

 czas = pulseIn(echoPin, HIGH);
 dystans = czas / 58;

 Serial.print(dystans);
 Serial.println(" cm");
  delay(500);
}

trzeba zmienić stan przed pomiarem
 
Kod:
pinMode(echoPin, INPUT_PULLUP);// dla czujnika mBot
   pinMode(echoPin, INPUT);// dla czujnika mBot