Arduino 7 Segment Display ile Gaz Sensörü Okuma
Gaz sensörü ve 7 segment displayi birleştirmeden, önce 7 segment display hakkında bilgi edinelim. Ayrıca LCD Ekran ile Gaz Sensörü kullanımı hakkında bilgi almak için bu yazımıza göz atabilirsiniz.
7 Segment Display Nedir?
Elemanın yapısında bulunan 7 LED‘in her biri bir segment olarak adlandırılır. Çünkü sayısal rakamların (onluk ve on altılık tabanlarda) kesim formları görüntülenmek üzere parçalar halinde aydınlatılmıştır. Ayrıca 7 Segment Display’in yapısında ek olarak 1 LED daha bulunmaktadır. Bu LED sayısal göstergelerde küsuratlı sayıların ondalık noktalarının gösterilmesi için kullanılır. Bu ilave LED simülasyonlarda veya elemanın veri sayfasında ondalık nokta anlamında gelen DP (Decimal Point) ile adlandırılır.
MQ-4 Gaz Sensörü Nedir?
MQ-4 gaz sensörü ‘nün çalışma prensibi içindeki kalay oksit (SnO2) in temiz havada iletkenliğinin az olup, metan(CH4), karbondioksit(CO2), propan, karbonmonoksit, gibi belirli başlı gazların oranına göre iletkenliği artan bir alaşım türüdür.
Kalay oksitin bileşenine göre duyarlı olduğu gaz çeşitleri değişkenlik göstermektedir. Bizim inceleyeceğimiz MQ-4 modeli, metan gazına aşırı, alkol ve karbondioksite nispeten daha az diğer gazlara ise minimum tepki verecek şekilde dizayn edilmiştir.Buna ek olarak; analog çıkışı verir, 900mA kadar akım çekebilir ve çalışma esnasında ısınabilir bunun sebebi ısıtma devresi bulundurmasıdır, sağlıklı projeler için arduino üzerinden beslemeniz, güvenli olmayabilir.
Ayrıca diğer MQ-x ve AQ-x Serisi Gaz sensörü hakkında bilgi almak için buradaki yazımızı okuyabilirsiniz.
İki sensöründe gerekli bilgilerini öğrendiğimize göre yazımıza geçebilir, TMT1637 driver çipli 7 Segment 4 Digit LED Display ile Gaz sensörümüzden veri alıp, LEDimize aktaracağız. Normal şartlar altında 4 Digit 7 Segment LEDi kullanmak için 12 Adet pin kullanmamız gerekiyor, fakat TM1637 sürücüsü ile pin sayısını 4 Adete kadar düşürebiliyoruz, bunun yanında bit-shifting yöntemini kullanarakta aynı işlemi yapabiliriz. Belirtmekte fayda var MQ-4 Gaz sensörümüzde devre üzerinde LM393 opamp karşılaştırıcı ile birlikte kulllanılmıştır.
TM1637 için Arduino Kütüphanesi
Bu kütüphane 8 Segmente kadar destekliyor belirtmekte fayda var digitler 0 ile başlıyor yani bastırma fonksiyonu yaparken;
0 1 2 3 — 4 Segment Displayler İçin
0 1 2 3 4 5 6 7 — 8 Segment Displayler İçin
Devre Şeması;
Proje Kodu;
#include "TM1637.h" #define CLK 3 #define DIO 2 TM1637 tm1637(CLK, DIO); int smokeA0 = A0; void setup() { pinMode(smokeA0, INPUT); Serial.begin(9600); tm1637.init(); tm1637.set(7);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7; } void loop() { int analogSensor = analogRead(smokeA0); Serial.print("Pin A0: "); Serial.println(analogSensor); int digitbir = (analogSensor / 100)%10; int digitiki = (analogSensor / 10)%10; int digituc = analogSensor % 10; tm1637.display(0,digitbir); tm1637.display(1,digitiki); tm1637.display(2,digituc); delay (500); }
Kod Açıklaması;
Klasik tanımlama ve pin belirtme işlemlerini geçiyorum, bu konuda önemli olan gaz sensörünün mutlaka analog girişe bağlanmasıdır.
tm1637.set(7);
bu satırda LED displayin parlaklığını ayarlıyoruz maksimum değer 7, minimum değer ise 0. Varsayılan değer ise 2 olarak geliyor.
int analogSensor = analogRead(smokeA0);
burada sensörümüzden gelen değerli analogSensor ‘e yazdırıyoruz.
Serial.print ve Serial bağlantımız sadece test etmek için yani projede ihtiyacımız yok.
int digitbir = (analogSensor / 100)%10;
bu satırda 4 digit ledimizin ilk bölümü için yani yüzler basamağı için bir işlem yaptırıyoruz.
int digitiki = (analogSensor / 10)%10;
bu satırda ise ledimizn ikinci bölümü yani onlar basamağı için bir işlem yaptırıyoruz.
int digituc = analogSensor % 10;
burada ledimizin üçüncü bölümü yani birler basamağı için işlem yaptırıyoruz.
işlemlerin açıklayıcı olması için örnek;
analog değerimiz 436 olsun
bu sayının yüzler basamağını bulurken sayıyı 100’e bölüp mod10 aldığımızda bize yüzler basamağını verecektir
436/100 = 4,36 mod10 = 4 değişken olarak int tanımladığımız için virgülden sonrakini değeri görmezden geliyoruz.
onlar basamağını bulurken 10’a bölüp mod10 aldığımızda bize onlar basamağını verecektir.
436/10= 43,6 mod10=3 değişken olarak int tanımladığımız için virgülden sonrakini değeri görmezden geliyoruz.
birler basamağı için mod10 almamız yeterli
436 mod10=6
bu sayede ilk işlemden 4 ikinci işlemden 3 üçüncü işlemden 6 elde ediyoruz.
tm1637.display(0,digitbir);
bu satırda TM1637 kütüphanesi ile LEDin 0. digitine “digitbir” i yazdırıyoruz.
tm1637.display(1,digitiki);
bu satırda TM1637 kütüphanesi ile LEDin 1. digitine “digitiki” yi yazdırıyoruz.
tm1637.display(2,digituc);
bu satırda TM1637 kütüphanesi ile LEDin 1. digitine “digituc” ü yazdırıyoruz.
son olarak yenilme süresi yani delay ile kodumuzu bitiriyoruz, projemizin son hali ise şöyledir;
Ben kart olarak Arduino Pro Mini kullandım, diğer Arduino kartları ile fonksiyon açısından hiç bir farkı yoktur.
temiz hava değeri, sensör arkasındaki ayarlı direnç ile çözünürlüğü değiştirebilirsiniz
LPG(sıvılaştırılmış propan gazı) salınımı ile LED displaydeki değer arttığı görülmüştür.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.