Sterownik PWM – #9 – Czujnik PIR – zasada działania, podłączenie oraz obsługa w programie

Na rozgrzewkę:

W projekcie sterownika PWM czujnik PIR pełni rolę wyzwalacza funkcji odpowiedzialnej za główne zadanie sterownika. We wpisie chcę przybliżyć zasadę działania czujnika PIR, sposób podłączenia, implementację programową, czujnik, który wybrałem do projektu oraz miejsce, gdzie możecie nabyć takie czujniki (sklep msalamon).

Zakres wpisu:

  • Zasada działania czujnika PIR
  • Czujnik wybrany do projektu
  • Podłączenie czujnika PIR
  • Implementacja programowa
  • Miejsce gdzie możesz nabyć czujnik HC-SR501

Zasada działania czujnika PIR:

Czujnik PIR  (ang. Passive Infra Red) wykorzystywany jest w alarmach, detekcjach ruchu, w automatyce budynkowej, jako czujnik do załączenia oświetlenia, w IoT czy jako detektor poszukiwania ludzi podczas klęsk żywiołowych przez służby ratunkowe. Czujnik detektuje fale elektromagnetyczne w zakresie podczerwieni (ciepło) emitowane lub odbite od obiektów. Czujnik PIR nie emituje fal, lecz mierzy fale w zakresie podczerwieni. Czujnik PIR jest w stanie odróżnić ciepło emitowane przez urządzenia, zwierzęta domowe od człowieka.

Elementem odpowiedzialnym za detekcję promieniowania podczerwonego jest sensor piroelektryczny – pyroelement. Pyroelement zbudowany jest z materiałów piroelektrycznych, które to mają zdolność do generowania napięcia na skutek ogrzewania i chłodzenia.

Fale padające na czujnik skupiane są poprzez soczewkę Fresnela. Soczewka zwiększa czułość czujnika oraz zakres detekcji. Bez soczewki czujnik będzie detektował obiekty, które znajdują się bardzo blisko oraz będą umieszczone na wprost filtru optycznego.

Czujnik wybrany do projektu:

Do mojego projektu wybrałem bardzo popularny czujnik HC-SR501, który ma następujące funkcje:

  • Napięcie zasilania: 5-20V,
  • Wyjściowe stany logiczne: niski 0V, wysoki 3.3V (może być używany w projektach z STM32, Arduino, czy ESP32), 
  • Regulacja czasu trwania impulsu po wykryciu obiektu za pomocą potencjometru R1,
  • Regulacja czułości za pomocą potencjometru R2,
  • Dwa tryby pracy ustalane za pomocą zworki (tryb retriggering i non-retriggering). W trybie retriggering wyjście osiąga stan wysoki i jest on utrzymywany przez cały czas trwania ruchu (domyślna konfiguracja). W trybie non-retriggering wyjście osiąga stan wysoki następnie niski, niezależnie od tego, czy trwa ruch obiektu.

Na płytce HC-SR501 oprócz samego czujnika PIR umieszczone są następujące komponenty:

  • układ BISS0001 – sterownik PIR,
  • stabilizator napięcia na 3.3V.

W dokumentacji układu BISS0001 są wytłumaczone tryby retriggering oraz non-retriggering:

Podłączenie czujnika PIR:

Czujnik ma trzy wyprowadzenia: VCC, OUT, GND. W moim projekcie czujnik zasilony jest z 12V.

W projekcie czujnik PIR podłączony jest w następujący sposób:

Pomiędzy wyprowadzeniami czujnika PIR, a procesorem dodatkowo umieściłem następujące komponenty:

  • filtr dolnoprzepustowy RC składający się z R4 i CP1, dodatkowo R4 ogranicza prąd płynący do procesora,
  • kondensatory CP2 i CP3 jako zabezpieczenie przed ESD.

Implementacja programowa:

W CubeMX skonfigurowałem w następujący sposób piny, które detektują zbocze narastające pojawiające się z czujników PIR, wykorzystałem do tego przerwanie:

W projekcie wykorzystuję dwa czujniki PIR, jeden jest umieszczony na górze schodów, drugi na dole. Na podstawie miejsca wykrycia obiektu algorytm zaczyna wykonywanie sekwencji od GPIO odpowiedzialnego za górne wyjście lub od GPIO odpowiedzialnego za dolne wyjście. Jeśli obiekt zostanie wykryty, czujnik PIR na swoim wyjściu wystawi stan wysoki. Algorytm generuje przerwanie jeśli wykryje zbocze narastające na pinach PB0 lub PC4. Przerwanie obsługiwane jest w funkcji Callback. Dzięki użyciu przerwania na zbocze narastające algorytm reaguje tylko raz na pojawienie się obiektu. 

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0)
	{
		counter=1;
	}
	else if(GPIO_Pin == GPIO_PIN_4)
	{
		counter=2;
		
	}
}

void DC()
{
		if(counter==1)
		{
			for(int table_no1=0;table_no1<=steps_quantity;table_no1++)
			{
				Outputs[table_no1]=Outputs_original[table_no1];		
			}
		}
		else if(counter==2)
		{
			for(int table_no2=steps_quantity;table_no2>=0;table_no2--)
			{
				Outputs[steps_quantity-table_no2]=Outputs_original[table_no2];
			}
		}
}

 

Miejsce gdzie możesz nabyć czujnik HC-SR501:

Czujniki PIR HC-SR501 możecie nabyć w sklepie msalamon.pl.

[1] Dostęp w internecie: http://www.ladyada.net/media/sensors/BISS0001.pdf

Autor artykułu
Mateusz Pluta

2 Replies to “Sterownik PWM – #9 – Czujnik PIR – zasada działania, podłączenie oraz obsługa w programie

    1. Chodzi Ci o sterownik, do którego będzie podłączone trzy czujniki PIR? W projekcie sterownika LED wykorzystuję dwa czujniki PIR, jeden umieszczony jest na górze schodów, a drugi na dole. W moim przypadku zasilam czujniki PIR z 12V, sygnał wyjściowy informujący o obiekcie jest na poziomie 3.3V, więc bezpośrednio możesz go podpiąć do procesora. Na podstawie sygnału procesor wysteruje element wykonawczy. Jeśli interesuje Cię inne rozwiązanie to napisz do mnie e-mail (mateusz.pluta@inthou.pl), chętnie podpowiem.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.