Hava Kalitesi Göstergesi
Başlangıç30 dkOdanın havasını trafik lambası gibi gösteren bir gösterge: MQ-135 sensörü havadaki duman, amonyak, benzen ve nefesle artan CO₂ gibi kirleticilere tepki verir; hava temizken yeşil, kirlenmeye başlayınca sarı, iyice kirlenince kırmızı LED yanar ve Seri Monitör havalandırmanı söyler. Açılışta sensör ısınır ve temiz havanın değeri ölçülür; sonraki her ölçüm buna göre değerlendirilir, hava daha da temizlenirse bu değer de güncellenir. Analog bir sensörü kendi temiz hava değerine göre okumayı, birkaç okumanın ortalamasıyla titremeyi azaltmayı ve LED'lerin sınırda gidip gelmemesi için eşiklere pay bırakmayı öğretir. Ek kütüphane gerekmez. MQ-135 tek tek gazları ayırt etmez ve kalibre edilmiş bir CO₂ ölçümü vermez; havanın ne kadar kirli olduğunu kabaca gösterir.
Uygulamada adım adım yapGerekli malzemeler
1 × Arduino Uno R3
1 × Breadboard 830 Pin (MB-102)
1 × MQ-135 Hava Kalitesi Sensörü
1 × LED - Yeşil (5mm)
1 × LED - Sarı (5mm)
1 × LED - Kırmızı (5mm)
3 × Direnç 220 Ω (1/4W)
9 × Jumper Kablo - Erkek/Erkek
Bağlantı adımları
- 1
Güç sıralarını bağla (5V ve GND)

Siyah erkek-erkek kabloyla Arduino'nun güç başlığındaki GND pinlerinden birini breadboard'un alttaki mavi çizgili (−) sırasına, kırmızı kabloyla aynı başlıktaki 5V pinini alttaki kırmızı çizgili (+) sıraya bağla. Breadboard'un sağ ucunda siyah bir kabloyla alttaki (−) sırayı üstteki (−) sıraya bağla: LED'lerin dirençleri toprağını üstteki (−) sıradan alacak, breadboard'un üstteki ve alttaki sıraları ise kendi aralarında bağlı değildir. Üstteki (+) sıra bu projede kullanılmaz.
- Arduino GND → alttaki mavi çizgili (−) sıra (siyah kablo)
- Arduino 5V → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
- alttaki mavi çizgili (−) sıra → üstteki mavi çizgili (−) sıra (siyah kablo)
- 2
Üç LED'i dirençleriyle tak

Yeşil LED'in uzun bacağını (+) üst yarıda F sırasında 18. sütuna, kısa bacağını (−) 19. sütuna tak. Bir 220 Ω direncin bir ucunu 19. sütunda J sırasına, öbür ucunu üstteki mavi çizgili (−) sıraya tak. Yeşil kabloyla Arduino'nun 10 numaralı pinini 18. sütuna bağla (GREEN_LED 10). Sarı LED'in uzun bacağını (+) üst yarıda F sırasında 24. sütuna, kısa bacağını (−) 25. sütuna tak. Bir 220 Ω direncin bir ucunu 25. sütunda J sırasına, öbür ucunu üstteki mavi çizgili (−) sıraya tak. Turuncu kabloyla Arduino'nun 11 numaralı pinini 24. sütuna bağla (YELLOW_LED 11). Kırmızı LED'in uzun bacağını (+) üst yarıda F sırasında 30. sütuna, kısa bacağını (−) 31. sütuna tak. Bir 220 Ω direncin bir ucunu 31. sütunda J sırasına, öbür ucunu üstteki mavi çizgili (−) sıraya tak. Beyaz kabloyla Arduino'nun 12 numaralı pinini 30. sütuna bağla (RED_LED 12). Dirençler LED'lerden geçen akımı sınırlar. Yeşil iyi, sarı orta, kırmızı kötü hava demek; aynı anda yalnızca biri yanar.
- yeşil LED uzun bacak (+) → 18. sütun, üst yarı
- yeşil LED kısa bacak (−) → 19. sütun, üst yarı
- sarı LED uzun bacak (+) → 24. sütun, üst yarı
- sarı LED kısa bacak (−) → 25. sütun, üst yarı
- kırmızı LED uzun bacak (+) → 30. sütun, üst yarı
- kırmızı LED kısa bacak (−) → 31. sütun, üst yarı
- yeşil LED'in direnci (1. bacak) → 19. sütun, üst yarı
- yeşil LED'in direnci (2. bacak) → üstteki mavi çizgili (−) sıra
- sarı LED'in direnci (1. bacak) → 25. sütun, üst yarı
- sarı LED'in direnci (2. bacak) → üstteki mavi çizgili (−) sıra
- kırmızı LED'in direnci (1. bacak) → 31. sütun, üst yarı
- kırmızı LED'in direnci (2. bacak) → üstteki mavi çizgili (−) sıra
- Arduino pin 10 → 18. sütun, üst yarı (yeşil kablo)
- Arduino pin 11 → 24. sütun, üst yarı (turuncu kablo)
- Arduino pin 12 → 30. sütun, üst yarı (beyaz kablo)
- 3
MQ-135 sensörünü tak ve bağla

MQ-135 kartını dört pini breadboard'un alt yarısında E sırasına gelecek şekilde tak: VCC 48., GND 49., DO 50., AO 51. sütuna gelsin; pin adları kartın üzerinde yazar. Kart dik durur, sensörün metal başlığı yukarı bakar. Kısa kırmızı bir kabloyla 48. sütunu alttaki (+) sıraya, kısa siyah bir kabloyla 49. sütunu alttaki (−) sıraya bağla. Sarı kabloyla Arduino'nun A0 pinini 51. sütuna (AO, analog çıkış) bağla (AIR_PIN A0). DO pini boş kalır: o, karttaki vidalı ayarın eşiğine göre yalnızca açık/kapalı bilgi verir; bu projede eşikleri kod belirliyor. Sensörün içinde bir ısıtıcı vardır, yaklaşık 150 mA çeker; bu yüzden bir Arduino pininden değil 5V sırasından beslenir. Çalışırken ısınır, bu normaldir: metal başlığa dokunma. Yeni bir sensör ilk birkaç kullanımda hafif yanık kokusu verebilir; değerlerin oturması için ilk seferde bir gün açık bırakılması önerilir.
- MQ-135 VCC → 48. sütun, alt yarı
- MQ-135 GND → 49. sütun, alt yarı
- MQ-135 DO → 50. sütun, alt yarı
- MQ-135 AO → 51. sütun, alt yarı
- Arduino A0 → 51. sütun, alt yarı (sarı kablo)
- 48. sütun, alt yarı → alttaki kırmızı çizgili (+) sıra (kırmızı kablo)
- 49. sütun, alt yarı → alttaki mavi çizgili (−) sıra (siyah kablo)
Arduino kodu
// MQ-135'in analog çıkışı (AO)
const int AIR_PIN = A0;
// Üç LED'in pinleri
const int GREEN_LED = 10;
const int YELLOW_LED = 11;
const int RED_LED = 12;
// Isıtıcının ısınma süresi (ms)
const unsigned long WARM_UP = 30000;
// Temiz hava değerinden bu kadar
// yükselince sarı, bu kadar yükselince
// kırmızı yanar (0-1023)
const int FAIR_RISE = 60;
const int POOR_RISE = 150;
// İnerken eşiğin bu kadar altına inmeli:
// LED'ler sınırda gidip gelmez
const int MARGIN = 15;
// Ölçümler arası süre (ms)
const unsigned long MEASURE_EVERY = 1000;
int baseline = 0;
// 0 iyi, 1 orta, 2 kötü
int level = 0;
unsigned long lastMeasure = 0;
// 10 okumanın ortalaması: titreme azalır
int readAir() {
long total = 0;
for (int i = 0; i < 10; i++) {
total += analogRead(AIR_PIN);
delay(10);
}
return total / 10;
}
void showLevel() {
digitalWrite(GREEN_LED, level == 0 ? HIGH : LOW);
digitalWrite(YELLOW_LED, level == 1 ? HIGH : LOW);
digitalWrite(RED_LED, level == 2 ? HIGH : LOW);
}
void setup() {
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
Serial.begin(9600);
// Isınırken sarı LED yanıp söner
Serial.println("Sensör ısınıyor, 30 sn bekle...");
unsigned long start = millis();
while (millis() - start < WARM_UP) {
digitalWrite(YELLOW_LED, (millis() / 500) % 2 ? HIGH : LOW);
}
// Temiz hava: 10 ölçümün ortalaması
long total = 0;
for (int i = 0; i < 10; i++) {
total += readAir();
delay(100);
}
baseline = total / 10;
Serial.print("Temiz hava değeri: ");
Serial.println(baseline);
// Neredeyse 0: sensöre güç gelmiyor
if (baseline < 10) {
Serial.println("Sensör okunamıyor, kabloları kontrol et.");
while (true) {
digitalWrite(RED_LED, (millis() / 250) % 2 ? HIGH : LOW);
}
}
showLevel();
Serial.println("Ölçüm başladı.");
}
void loop() {
if (millis() - lastMeasure < MEASURE_EVERY) return;
lastMeasure = millis();
int air = readAir();
// Hava daha da temizlenirse temiz hava
// değeri de iner
if (air < baseline) baseline = air;
int rise = air - baseline;
// Yukarı çıkarken eşiğin kendisi,
// aşağı inerken MARGIN kadar altı
int newLevel = 0;
if (rise >= FAIR_RISE - (level >= 1 ? MARGIN : 0)) newLevel = 1;
if (rise >= POOR_RISE - (level >= 2 ? MARGIN : 0)) newLevel = 2;
Serial.print("Hava: ");
Serial.print(air);
Serial.print(" | Artış: ");
Serial.print(rise);
if (newLevel == 0) Serial.println(" | İyi");
if (newLevel == 1) Serial.println(" | Orta");
if (newLevel == 2) Serial.println(" | Kötü, havalandır!");
if (newLevel != level) {
level = newLevel;
showLevel();
}
}
Seri Monitörde göreceğin
Sensör ısınıyor, 30 sn bekle... Temiz hava değeri: 205 Ölçüm başladı. Hava: 206 | Artış: 1 | İyi Hava: 204 | Artış: 0 | İyi Hava: 268 | Artış: 64 | Orta Hava: 371 | Artış: 167 | Kötü, havalandır! Hava: 322 | Artış: 118 | Orta Hava: 231 | Artış: 27 | İyi
Bir kablo yerinde değilse
Sensör ısınıyor, 30 sn bekle... Temiz hava değeri: 0 Sensör okunamıyor, kabloları kontrol et.
Sonuç
Açılışta sarı LED 30 saniye yanıp söner: bu sürede sensörün ısıtıcısı ısınır, sensör temiz havada olmalı. Sonra Seri Monitöre temiz havanın değeri yazılır, yeşil LED yanar ve her saniye ölçülen değerle temiz havaya göre artış yazılır. Denemek için sensöre birkaç kez yakından nefes ver ya da kolonya, el dezenfektanı veya kalıcı kalem gibi kokulu bir şeyi yaklaştır: artış 60'ı geçince sarı, 150'yi geçince kırmızı LED yanar ve Seri Monitöre "Kötü, havalandır!" yazılır. Kokulu şeyi uzaklaştırıp sensörü havalandırınca LED'ler sırayla yeşile döner; sınırda gidip gelmemeleri için inerken eşiğin biraz altına inmek gerekir. "Sensör okunamıyor" yazıyorsa MQ-135'in VCC ve GND kablolarına bak. Değer hiç değişmiyorsa sarı kablonun A0'da olduğuna bak. Açılışta hava kirliyse o kirli hava temiz sayılır ve gösterge geç uyarır; hava temizlendikçe temiz hava değeri kendiliğinden aşağı iner, istersen temiz havada Arduino'nun reset düğmesine bas. Daha hassas ya da daha az hassas bir gösterge için koddaki FAIR_RISE ve POOR_RISE değerlerini değiştir. Güvenlik: kolonya ve dezenfektan yanıcıdır, sensörün ısınan başlığının üstüne sıkma; deneme için çakmak ya da açık alev kullanma.
Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.
Uygulamada adım adım yap