MENU

Jak zbudować czujnik dymu z MQ-7 i mikrokontrolerem

Jak zbudować czujnik dymu z MQ-7 i mikrokontrolerem

Jak zbudować czujnik dymu z MQ-7 i mikrokontrolerem

Czujniki dymu to urządzenia, które każdego dnia zapobiegają tragediom, ostrzegając przed pożarem, zanim jeszcze zrobi się naprawdę niebezpiecznie. Mimo to wciąż nie każdy dom czy mieszkanie jest w nie wyposażone. A gdyby tak spróbować stworzyć własny czujnik dymu, wykorzystując sensor MQ-7? To niedrogie i popularne rozwiązanie, często stosowane do wykrywania tlenku węgla, ale z odpowiednią konfiguracją może również reagować na inne zanieczyszczenia powietrza.

Taki projekt to świetna okazja do nauki – nie tylko o samym działaniu czujników gazu, ale także o sposobach ich kalibracji, przetwarzaniu danych i integracji z systemami powiadomień. Warto jednak pamiętać, że czujnik DIY nie zastąpi certyfikowanego, profesjonalnego urządzenia przeciwpożarowego. Może być świetnym dodatkiem do monitorowania jakości powietrza w domu czy warsztacie, ale w kwestii bezpieczeństwa nie ma miejsca na kompromisy!

Czego będziesz potrzebował?

Arduino Uno R4 WiFi

To mózg całego projektu. Mikrokontroler, który będzie zbierał dane z czujnika MQ-7, analizował je i podejmował odpowiednie działania – uruchamiał alarm, jeśli wykryje niebezpieczne stężenie gazu.

Arduino uno r4

Czujnik MQ-7

Główny element naszego układu – czujnik gazu, który wykrywa tlenek węgla (CO).

Buzzer 12V

Nasz sygnał alarmowy. Gdy czujnik wykryje zagrożenie, buzzer zacznie głośno piszczeć, ostrzegając przed niebezpieczeństwem. Uwaga – jest naprawdę głośny! Lepiej nie testować go w nocy, jeśli nie chcesz obudzić sąsiadów (i domowników).

Moduł przekaźnikowy HW-482

Arduino samo w sobie nie jest w stanie bezpośrednio zasilać buzzera 12V, dlatego potrzebujemy przekaźnika. To on pozwala bezpiecznie sterować wyższym napięciem, odcinając je lub podając w odpowiednim momencie.

Modul przekaznikowy HW-482

Zasilacz 12V

Buzzer wymaga wyższego napięcia, którego Arduino nie jest w stanie dostarczyć. Dlatego potrzebujemy zewnętrznego zasilacza 12V

Jak to działa?

Jak działa czujnik MQ-7

Czujnik MQ-7 wykorzystuje półprzewodnikowy element wykonany z dwutlenku cyny (SnO₂), którego właściwości zmieniają się pod wpływem tlenku węgla (CO). To materiał typowo typu n, co oznacza, że jego przewodnictwo zależy od obecności wolnych elektronów.

W normalnych warunkach, gdy czujnik znajduje się w czystym powietrzu, cząsteczki tlenu (O₂) adsorbują się na powierzchni SnO₂, pobierając elektrony z materiału półprzewodnikowego. Powoduje to powstanie warstwy o wysokiej rezystancji, co ogranicza przepływ prądu.

Gdy w powietrzu pojawia się tlenek węgla (CO), zachodzi reakcja chemiczna: 2CO+O2→2CO2

CO „odbiera” tlen, uwalniając elektrony z powrotem do struktury SnO₂. Większa liczba swobodnych elektronów oznacza mniejszą rezystancję, co prowadzi do wzrostu napięcia na wyjściu czujnika.

Czujnik MQ-7 wymaga cyklicznego nagrzewania, ponieważ zmienia swoją czułość w zależności od temperatury. Proces ten opiera się na obecności grzałki rezystancyjnej wewnątrz czujnika, która podnosi temperaturę elementu półprzewodnikowego (SnO₂).

Tyle jeśli chodzi o teorię, w rzeczywistości SnO₂ reaguje z wieloma gazami, nie tylko z tlenkiem węgla. Z tego powodu czujnik MQ-7 wymaga cyklicznego nagrzewania. Aby zapewnić największą selektywność, czujnik przechodzi przez dwa stany temperaturowe:

  1. Wysoka temperatura – spala nagromadzone zanieczyszczenia i gazy zakłócające, resetując powierzchnię czujnika.
  2. Niska temperatura – w tej fazie czujnik jest najbardziej czuły na CO, ponieważ reakcja chemiczna CO z tlenem jest najintensywniejsza w niższej temperaturze.

Dzięki temu czujnik odfiltrowuje inne gazy i dokładniej wykrywa tlenek węgla.

Jak działa buzzer aktywny

Buzzer aktywny to układ, który generuje dźwięk samodzielnie, bez potrzeby dostarczania zewnętrznego sygnału sterującego. W jego wnętrzu znajduje się oscylator, który po podaniu napięcia zaczyna wytwarzać falę o stałej częstotliwości. Dzięki temu można go podłączyć bezpośrednio do przekaźnika lub mikrokontrolera – wystarczy załączyć napięcie, a buzzer zacznie wydawać sygnał dźwiękowy. W przeciwieństwie do buzzera pasywnego, który wymaga generowania sygnału PWM, aktywny działa od razu po podłączeniu zasilania.

Głośność buzzera zależy od napięcia, jakie na niego podamy. Wyższe napięcie powoduje, że membrana drga z większą amplitudą, co zwiększa ciśnienie akustyczne i sprawia, że dźwięk jest głośniejszy. W przypadku buzzerów piezoelektrycznych dzieje się tak, ponieważ element piezoelektryczny odkształca się silniej przy wyższym napięciu. Natomiast w buzzerach elektromagnetycznych mocniejsze pole magnetyczne mocniej wprawia membranę w ruch. Nasz buzzer może osiągać nawet 110 dB – dla porównania, to poziom hałasu porównywalny z motocyklem bez tłumika. Jeśli buzzer okaże się zbyt głośny, można ograniczyć jego napięcie zasilania, co zmniejszy amplitudę drgań membrany i tym samym obniży poziom hałasu.

Jak podłączyć czujnik

Podłączenie czujnika do mikrokontrolera jest proste, ponieważ wykorzystuje on magistralę I2C. Oznacza to, że do komunikacji potrzebujemy tylko dwóch linii – SDA i SCL – oraz dwóch dodatkowych przewodów do zasilania.

ArduinoModuł przekaźnikowy
5V+
GND
Pin 6S

Dodatkowo czujnik wymaga zewnętrznego zasilania, którego nie można podać bezpośrednio z mikrokontrolera. Do tego celu używamy modułu przekaźnikowego, który umożliwia bezpieczne sterowanie wyższym napięciem, izolując jednocześnie układ mikrokontrolera od obciążenia.

Złącze AZłącze B
Przekaźnik (COM)Buzzer (-)
Przekaźnik (NO)Zasilanie (-)
Zasilanie (+)Buzzer (+)
Schemat polaczenia ukladu, czujnik do wykrywania dymu z alarmem

Programujemy czujnik dymu z MQ-7 – odczyt danych i uruchamianie buzzera

Przejdźmy do stworzenia naszego kodu, który sprawi, że mikrokontroler będzie odczytywał dane z czujnika i aktywował buzzer w razie wykrycia niebezpiecznego poziomu tlenku węgla. Zacznijmy od zdefiniowania odpowiednich pinów oraz ustalenia progu alarmowego.

#define MQ7_PIN A0
#define BUZZER_PIN 6

const int CO_THRESHOLD = 300;

Tutaj określamy, do którego pinu analogowego podpięty jest czujnik MQ-7 (A0), oraz na którym pinie cyfrowym znajduje się buzzer (D6). CO_THRESHOLD to próg w PPM, po przekroczeniu którego uruchomimy alarm. Ta wartość nie jest przypadkowa – można ją dostosować na podstawie obserwowanych wyników lub dokumentacji czujnika.

Funkcja setup()

Następnie przechodzimy do funkcji setup():

void setup() {
    Serial.begin(115200);
    pinMode(BUZZER_PIN, OUTPUT);
    digitalWrite(BUZZER_PIN, LOW);
}

Na początek uruchamiamy port szeregowy (Serial.begin(115200)), dzięki czemu możemy obserwować na monitorze odczyty z czujnika. To szczególnie przydatne, gdy chcemy sprawdzić, jak zmieniają się wartości w zależności od warunków – np. czy w ogóle pojawia się CO i w jakim stężeniu.

Następnie ustawiamy pin buzzera jako wyjściowy i go wyłączamy (digitalWrite(LOW)), żeby nie piszczał od razu po uruchomieniu mikrokontrolera.

Funkcja loop()

Przejdźmy do loop(), gdzie dzieje się cała magia:

void loop() {
    int sensorValue = analogRead(MQ7_PIN);
    int coPPM = map(sensorValue, 0, 1023, 0, 1000);
    ...

Najpierw odczytujemy surową wartość z pinu analogowego. Jest to liczba z zakresu 0–1023, odpowiadająca napięciu na wyjściu czujnika. Następnie stosujemy funkcję map(), która orientacyjnie przekształca surowy odczyt na wartość w PPM (przekształca wartość od 0 do 1023 na wartość od 0 do 1000). To uproszczenie – prawdziwa konwersja wymagałaby dokładnej kalibracji, ale taka forma w zupełności wystarcza do stworzenia działającego alarmu.

Poniżej wypisujemy dane do portu szeregowego:

    ...
    Serial.print(coPPM);
    Serial.println(" PPM");
    ...

Dzięki temu na monitorze szeregowym widać, jak czujnik reaguje na zmiany w otoczeniu. Można np. zbliżyć zgaszoną zapałkę (taka z której będzie ulatniał się dym!) i sprawdzić, czy wartości rosną. Pomoże nam to przy kalibracji – łatwiej wtedy dobrać odpowiedni próg alarmowy.

Jeśli wykryte stężenie CO przekracza bezpieczną wartość, uruchamiamy alarm:

   ...
   if (coPPM > CO_THRESHOLD) {
        digitalWrite(BUZZER_PIN, HIGH);
        delay(5000);
        digitalWrite(BUZZER_PIN, LOW);
    }

    delay(2000);
}

Włączamy buzzer na 5 sekund. Użytkownik od razu słyszy, że coś jest nie tak – to właśnie funkcja alarmowa układu. Po upływie czasu buzzer automatycznie się wyłącza. Pamiętaj, że buzzer jest bardzo głośny!

Na koniec dodajemy niewielki delay(1000); – czyli czekamy 1 sekundę przed kolejnym pomiarem. Taki odstęp czasowy pozwala czujnikowi chwilę „odpocząć” i zapobiega niepotrzebnemu przeciążeniu mikrokontrolera.

#define MQ7_PIN A0
#define BUZZER_PIN 6

const int CO_THRESHOLD = 300;

void setup() {
    Serial.begin(115200);
    pinMode(BUZZER_PIN, OUTPUT);
    digitalWrite(BUZZER_PIN, LOW);
}

void loop() {
    int sensorValue = analogRead(MQ7_PIN);
    int coPPM = map(sensorValue, 0, 1023, 0, 1000);

    Serial.print(coPPM);
    Serial.println(" PPM");

    if (coPPM > CO_THRESHOLD) {
        digitalWrite(BUZZER_PIN, HIGH);
        delay(5000);
        digitalWrite(BUZZER_PIN, LOW);
    }

    delay(1000);
}

Efekt końcowy czujnika dymu z MQ-7

To już wszystko w naszym projekcie – „Czujnik dymu z MQ-7”. Oczywiście to dopiero początek – ten projekt można łatwo rozbudować. Na przykład dodać wyświetlanie danych na stronie internetowej lub wysyłać powiadomienia, gdy poziom CO przekroczy bezpieczny próg. Jeśli nie wiesz jak komunikować stworzyć stronę internetową polecam artykuł Odczyt danych z czujnika podłączonego do ESP8266 na stronie WWW

A może masz swój pomysł, jak usprawnić taki system? Może dodać czujnik temperatury? Daj znać w komentarzu, co byś dorzucił do projektu! Jeśli pojawiły się jakieś problemy przy podłączaniu czujnika, uruchamianiu buzzera albo interpretacji wyników – śmiało pisz. Postaram się pomóc!

KUP ELEMENTY TEGO ZESTAWU

119
00

KOMENTARZE

guest
0 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments

SZUKASZ PODZESPOŁÓW
DO NASTĘPNEGO PROJEKTU?

Wszystko co potrzebne znajdziesz w naszym sklepie z obsługą na 5 gwiazdek!

elektroweb.pl