Arduino Polska Forum
Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu (/watek-czujnik-ruchu-pir-hc-sr501-sygna%C5%82-zmienia-si%C4%99-niezale%C5%BCnie-od-ruchu)

Strony: 1 2 3


Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 06-11-2016

Witam,
właśnie zaczynam swoją przygodę z Arduino, na początek od sterowania oświetleniem. Zmontowałem zestaw, który sterował przekaźnikiem przy odpowiednim natężeniu światła (fotorezystor) i wszystko na stole ładnie działało.

Założyłem to w miejscu docelowym i nagle PIR nic nie widzi, a sygnał sam się zmienia, bez względu na to czy jest jakiś ciepły obiekt w zasięgu czy nie. Całość wróciła na stół, na gotowych kabelkach zapięte bezpośrednio do płytki i nadal to samo. Program uprościłem do minimum, tak aby pokazywał tylko stan sygnału. Próbowałem różnych konfiguracji potencjometrów, ale bez zmian. Próbowałem drugiego czujnika, ale nadal to samo. Zmieniałem pin arduino, ale nic to nie dało. Sprawdzałem nawet miernikiem i +5V i gnd są cały czas, a +3V pojawia się dokładnie wtedy, gdy Arduino widzi "ruch".

Tak wygląda jego wynik, na stole ustawione wprost na mnie, podczas machania dość szeroko w stronę czujnika:
Kod:
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
A to kod samego programu:
Kod:
int sensor = 2;              
int val = 0;            

void setup() {
 pinMode(sensor, INPUT);    
 Serial.begin(9600);      
}

void loop(){
 val = digitalRead(sensor);
 Serial.println(val);
 delay(300);
 }
Tak wygląda zmontowany układ:
[Obrazek: D5dHwZBK.jpg]


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 07-11-2016

Nowa obserwacja jest taka, że gdy wywołam ruch, to czujnik przez 2 sekundy go sygnalizuje stanem wysokim, po czym już cały czas jest niski, pomimo, że ruch odbywa się cały czas w polu widzenia PIR. Mija kolejne kilka, może kilkanaście sekund i ponownie mamy dwa stany wysokie, a dalej już same niskie. Jeżeli ruchu nie ma wcale, to stan niski jest cały czas

Ktoś ma jakieś pomysły?


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - krn78 - 07-11-2016

(07-11-2016, 09:49)Mad_Maxs napisał(a): Ktoś ma jakieś pomysły?

Po przeczytaniu opisu czujnika (zachęcam!), odpowiedź wydaje się prosta. Na płytce czujnika jest zworka (MD).Widać ją nawet na zdjęciu, które zamieściłeś.
Zworka w pozycji H ustawia wyjście w stan wysoki po wykryciu ruchu i utrzymuje ten stan przez cały czas wykrywania ruchu, natomiast zworka w pozycji L przechodzi w stan niski po pewnym czasie od wykrycia ruchu, niezależnie od tego, czy ruch się utrzymuje.

Prawdopodobnie masz tę zworkę ustawioną w niepożądaną dla siebie pozycję.


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 07-11-2016

(07-11-2016, 11:09)krn78 napisał(a): Prawdopodobnie masz tę zworkę ustawioną w niepożądaną dla siebie pozycję.

W sumie mój błąd, bo tego nie napisałem wcześniej. Próbowałem ustawiać zworkę w obydwu pozycjach, efekt zawsze jest ten sam. Na zdjęciu jest ustawiona na sygnalizowanie stanem wysokim przez cały czas wykrywania ruchu. Pomijając ten fakt, to gdybym nawet ją źle ustawił, to potencjometr odpowiedzialny za czas sygnalizowania, ustawiony na MAX, powinien dawać dłużej sygnał, niż w pozycji MIN, a w moim przypadku, nic nie wnosi


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - krn78 - 08-11-2016

Być może sam czujnik jest uszkodzony. Masz drugi, żeby go sprawdzić?


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 08-11-2016

Właśnie mam dwa, oba dają takie same wyniki. Myślę, że zamówię jeszcze jeden przy okazji, bo kombinowałem inne rzeczy z Arduino jak diody IR, fotorezystory, itp. i wszystko działa jak należy, tylko z PIR ma problem


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - adix - 09-11-2016

pinMode(sensor, INPUT_PULLUP);

Zapomniałeś o podciągnięciu chyba ze podciągasz zewnętrznym rezystorem i to sprawę załatwi.


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 09-11-2016

(09-11-2016, 02:19)adix napisał(a): pinMode(sensor, INPUT_PULLUP);

Zapomniałeś o podciągnięciu chyba ze podciągasz zewnętrznym rezystorem i to sprawę załatwi.

Niestety, nie pomogło (podobno ten czujnik nie wymaga podciągania, bo daje 3V po wykryciu ruchu) Sad Gdy kręcę potencjometrem T1, to rzeczywiście sygnał mam dłuższy, ale to nie rozwiązanie, bo mimo, że macham przed samym czujnikiem, ten pokazuje Motion stoped.

Tak wygląda konsola, gdy macham przed czujnikiem:
Kod:
1 Motion detect
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
1 Motion detect
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!
0 Motion stopped!

Dla kodu:
Kod:
int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)

void setup() {
 pinMode(sensor, INPUT_PULLUP);    // initialize sensor as an input
 Serial.begin(9600);        // initialize serial
 }

void loop(){
 val = digitalRead(sensor);   // read sensor value
 Serial.print(val);
   if (val == HIGH) {           // wykryty ruch
     Serial.println(" Motion detect"); //wyswietl napis w konsoli
     delay(500);                // delay 100 milliseconds
     }
     if (val == LOW) {
       Serial.println(" Motion stopped!");
       delay(500);
       }

       }



RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - Mad_Maxs - 14-11-2016

Dzisiaj odebrałem paczkę z dwoma nowymi czujnikami i działają dokładnie tak samo jak te które już miałem. Ewidentnie winny jest albo sketch, albo sama płytka arduino, ale czy to możliwe? Próbowałem już z podaniem zewnętrznego źródła zasilania, ale to nadal nie to.

Tak to teraz działa:
https://youtu.be/qn3nMGPjuws

Czujnik widzi ruch i sygnalizuje go cały czas gdy trwa. Gdy jednak ruch zanika, czujnik łapie jakby delay na 5 sekund, przez które nie reaguje na ruch. Po tym czasie, gdy wystąpi ruch, znowu reaguje. Zworka jest we właściwej pozycji


RE: Czujnik ruchu PIR HC-SR501 - sygnał zmienia się niezależnie od ruchu - adix - 15-11-2016

Słuchaj czujnik działa jak switch .
To sprubuj.
Kod:
int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
            // variable to store the sensor status (value)

void setup() {
pinMode(sensor, INPUT_PULLUP);    // initialize sensor as an input
Serial.begin(9600);        // initialize serial
}

void loop(){

   if ( digitalRead(sensor) == HIGH) {           // wykryty ruch
     Serial.println(" Motion detect"); //wyswietl napis w konsoli
     delay(200);                // delay 100 milliseconds
     }else{
       Serial.println(" Motion stopped!");
       delay(200);
       }

       }