Projekt typowo edukacyjny, czujnik nie nadaje się do pełnego zabezpieczenia przed tlenkiem węgla.
Prosty czujnik tlenku węgla za pomocą MQ-7. Wielkimi krokami zbliża się zima :) chociaż mamy wrzesień i rozpoczynamy okres palenie w kominku :) i przydało by się trochę bezpieczeństwa . Chciałem stworzyć czujnik tlenku węgla za pomocą modułu który akurat miałem pod ręką to MQ7. Zacznę od tego że MQ-7 jest dobre na krótki czas, warto pomyśleć nad innym z serii MQ.
Zamów płytkę drukowaną na www.pcbway.com
Sprzęt potrzebny :
- Attiny 85
- Podstawka DIP 8
- Płytka PCB (jakiś skrawek) :)
- Kable (żeńskie <-> męskie)
- Dioda (dwukolorowa była by najlepsza)
- Opornik do diody
- Buzzer
- Tp-4056
- Koszyk pojedynczy na jeden akumulator
- Akumulator 18650 3,7 V – 4,02 V
- Programator Attiny85 (w moim przypadku Arduino UNO)
- Czujnik Mq-7
- Kabel mikro USB dla TP4056
- Ładowarka 5v do sieci
Połączenie wszystkich modułów
Do zbudowania modułu użyłem gniazd szpilkowych i łączenie modułów za pomocą kabli z gniazdami. Dla możliwości późniejszego wykorzystania modułów do innych projektów.
- Zaczynamy od stworzenia linii połączeń między modułami, w moim przypadku Attiny85 posiada 5 pinów do wykorzystania.
- Pin VCC i GND łączymy z koszykiem akumulatora 18650
- PIN 1 i łączymy z opornikiem za nim z dioda a do diody doprowadzamy GND
- PIN 2 jako połączenie z MQ-7 (A0)
- PIN 3 do Buzzera
Płytka nie wygląda “super czysto” ale spełnia swoją rolę. Połączenie “szpilkami” ułatwiło lutowanie i przyśpieszyło cały proces. Każdy pin Attiny posiada 1 szpilkę obok oprócz GND i VCC które posiadają po 5 szpilek dla umożliwienie rozbudowanie modułu.
Zmodyfikuje jeszcze moduł TP4056 pozbędę się jeszcze diody informującą o naładowaniu ogniwa 18650. Dodatkowe światło w module nie jest potrzebne.
Oprogramowanie Attiny 85
Do programowania Attiny85 wykorzystuje Arduino Uno które sprawdza się rewelacyjnie i połączenie jest bardzo proste. Stworzyłem programatora na Arduino Uno ale pewnie jeszcze o nim stworzę artykuł.
Program jest prosty bez wykorzystania sprawdzania napięcia, projekt ma zostać wykorzystany jako ciągle podłączone do sieci energetycznej z akumulatorem 18650 (3,7v) poprzez moduł TP-4056 w momencie gdy brak zasilania będzie korzystał z akumulatora. Jest to chwilowe awaryjne zasilanie.
- Start modułu – Dioda miga 3 razy i buzzer wydaje 3 długie dźwięki.
- Gdy zostanie wykryty tlenek gazu powyżej 50 ppm buzzer zacznie wydawać dźwięki 3 krótkie dźwięki(1000Hz), dioda będzie migać, Przerwa 5 sekund.
- Gdy wzrośnie wartość tlenku gazu do 100 ppm buzzer będzie wydawał krótkie dźwięki (3500Hz do 4500Hz) i dioda będzie migać, aż do oczyszczenia powietrza.
- Kod programu poniżej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
int buzzer = 3; int led = 1; int mq7A0 = 2; int wartoscAnalog = 0; byte wartoscZmapowana = 0; char info[96]; void setup() { pinMode(buzzer, OUTPUT); pinMode(led, OUTPUT); blinkLed(led, 1500, 3); buzz(buzzer, 2500, 200, 3); } void loop() { wartoscAnalog = analogRead(mq7A0); wartoscZmapowana = map(wartoscAnalog, 0, 1023, 0, 100); if (wartoscZmapowana > 50) { buzz(buzzer, 1000, 5000, 3); blinkLed(led, 5000, 5); buzz(buzzer, 1000, 5000, 3); blinkLed(led, 5000, 5); } else if (wartoscZmapowana > 100) { buzz(buzzer, random(3500, 4500), 500, 10); blinkLed(led, 5000, 5); buzz(buzzer, random(3500, 4500), 500, 10); blinkLed(led, 5000, 5); } delay(1000); } void buzz(int buzzerPin, long frequency, long length, int iloscBuzz) { long opoznienie = 1000000/frequency/2; for (long i=0; i < iloscBuzz; i++){ digitalWrite(buzzerPin,HIGH); delayMicroseconds(opoznienie); digitalWrite(buzzerPin,LOW); delayMicroseconds(opoznienie); } } void blinkLed(int ledPin, int opoznienieBlink, int iloscBlink) { for (long x=0; x < iloscBlink; x++){ digitalWrite(ledPin, HIGH); delayMicroseconds(opoznienieBlink); digitalWrite(ledPin,LOW); delayMicroseconds(opoznienieBlink); } } |
Całość została umieszczona w puszce elektrycznej i tyle czujnik ma za zadanie stężenia powietrza co sekundę gdzie się znajduje. Moduł jest prosty w budowie i spełnia swoje założenia.
Raz piszesz o czujniku “dwutlenku węgla ” innym razem o “tlenku gazu” – chodziło ci chyba o tlenek węgla, zwany czadem.
Zgadza się.
Dzięki
Coz kalibracją takiego czujnika?? Na ile możemy powiedziec że jest wiarygodny?
Skąd założenie, że tak naiwnie zmapowana wartość daje wynik w ppm? Czytałem kiedyś o przeliczaniu odczytów analogowych z modułów MQ na ppm. Jest to skomplikowany proces wykonywany indywidulanie dla egemplarza czujnika i zależny na przykład od wilgotności w pomieszczeniu.
Proces odczytu został uproszczony, odczyt nie jest taki trudny jak rozbuduje moduł to artykuł pojawi się na majsterkowo.
Uważam, że powinieneś zaznaczyć w artykule, że ten projekt powinien być wykorzystywany tylko w celach pokazowych użycia Arduino, ale nigdy jako jedyny czujnik od którego zależy czyjeś życie lub zdrowie.
Zaznaczone
Edukacyjnie OK. Praktycznie nie dziala jak powinno. MQ7 zasila sie dwoma napieciami (naprzemiennie grzanie/odczyt). Nalezy uwzglednic wilgotnosc powietrza i temperature otoczenia – przez to dochodzi zabawa z funkcjami logarytmicznymi celem analizy danych, wymagana jest kalibracja czujnika itd. – szczegoly w specyfikacji MQ7.
Trochę słaby ten projekt :
Czujnik CO MQ-7 jest przystosowany do ciągłej pracy w stabilnych warunkach. Wiele szczegółów znajduje się na stronie
http://www.arduinohobby.euweb.cz/toppage7.htm