Değişik Bir Proje Python Ve Ardino İle Hava Analiz Uygulaması Yapmak
NOT: ELİMDE İMKAN OLMADIĞINDAN TEST ETMEDİM
Arkadaşlar aklımda güzel bir proje var ama elimde imkan yok. Ancak iler ki zaman içersin de yapmayı planlıyorum. Elinde imkanı olan bu tarz proje geliştirmek isteyen olursa diye buraya paylaşmak istedim. Malzemesinden kurulum ve programlanmasına kadar detaylı bir şekilde anlatacağım.
Proje Amacı Nedir ?
Ardino ile Havada ki oksijen miktarı, nem oranı, karbon dioksit gibi gazların miktarlarını ölçen ve insan sağlığını olumsuz etkileyecek ortam analizi yapabilen, python projesi oluşturmak
Peki Bu Projeyi Çalıştırmak İçin Hangi Parçalar Gerekli ?
Bu projeyi çalıştırmak için gerekli olan parçalar ve ekipmanlar şunlardır:
Donanım
Arduino Kartı:
Arduino Uno veya Arduino Mega 2560 gibi bir mikrodenetleyici kartı.
Sensörler:
DHT22 (AM2302) Sensörü: Sıcaklık ve nem ölçümü için.
MQ135 Gaz Sensörü: Karbon dioksit (CO2) ve diğer zararlı gazların tespiti için.
ZE07-CO Sensörü: Karbon monoksit (CO) ölçümü için.
Bağlantı Kabloları:
Jumper kabloları: Sensörleri ve diğer bileşenleri Arduino'ya bağlamak için.
Breadboard (ekstra): Sensörlerin bağlantılarını kolayca yapmak için (isteğe bağlı).
Diğer Aksesuarlar:
USB kablosu: Arduino'yu bilgisayara bağlamak ve program yüklemek için.
**Yazılım
Arduino IDE**:
Arduino kodunu yazmak ve Arduino'ya yüklemek için.
Arduino IDE web sitesinden indirilebilir.
Python ve Gerekli Kütüphaneler:
Python 3.x sürümü.
pyserial, pandas, matplotlib, sqlite3 kütüphaneleri.
1-)Sensör Bağlantıları
A-)DHT22 (AM2302) Sensörü
B-)VCC: 5V pinine.
C-)GND: GND pinine.
Ç-)DATA: Dijital pin 2'ye (bu örnekte kullanıldığı gibi).
D-)MQ135 Sensörü
E-)VCC: 5V pinine.
F-)GND: GND pinine.
G-)AO: Analog pin A0'a.
Ğ-)ZE07-CO Sensörü
H-)VCC: 5V pinine.
K-)GND: GND pinine.
L-)RX: Arduino dijital pin 10'a (SoftwareSerial kütüphanesi kullanarak).
M-)TX: Arduino dijital pin 11'e (SoftwareSerial kütüphanesi kullanarak).
Adım Adım Kurulum
1-) Arduino IDE'yi Yükleyin ve Yapılandırın:
**A-)Arduino IDE'yi indirin ve kurun.
B-)Yukarıdaki Arduino kodunu Arduino IDE'ye kopyalayın.
C-)Arduino'nuzu bilgisayara bağlayın ve doğru portu ve kart modelini seçin.
Ç-)Kodu yükleyin.**
Python ve Gerekli Kütüphaneleri Yükleyin:
**Python 3.x'i indirin ve kurun.
Gerekli Python kütüphanelerini yükleyin:**
pip install pyserial pandas matplotlib
1-) Veritabanı Oluşturma:
Python kodunda veritabanı bağlantısını kurun ve tablo oluşturma kodunu çalıştırın.
Veritabanı dosyası (sensor_data.db) otomatik olarak oluşturulacaktır.
Arduino'yu Bilgisayara Bağlayın:
A-)Arduino'yu bilgisayara USB kablosuyla bağlayın.
B-)Python Kodu Çalıştırma:
C-)Python kodunu çalıştırarak Arduino'dan veri alın, veritabanına kaydedin ve grafikleri oluşturun.
Ç-)Python kodunu terminal veya bir IDE (örneğin, PyCharm) üzerinden çalıştırabilirsiniz.
python your_script_name.py
Sensörlerin Doğru Çalıştığını Kontrol Etme
Arduino'nun seri monitörünü kullanarak sensörlerin doğru verileri gönderdiğinden emin olun.
Python programında seri port üzerinden doğru verilerin alındığını ve analiz edildiğini kontrol edin.
Bu adımları takip ederek, havadaki oksijen miktarı, nem oranı, karbon dioksit ve karbon monoksit gibi gazların miktarlarını ölçen ve analiz eden bir hava analiz uygulamasını başarılı bir şekilde çalıştırabilirsiniz.
ileri düzey bir hava analiz uygulaması için Arduino ve Python kodlarını daha profesyonel bir seviyeye taşıyalım. Bu versiyonda, veri kaydı ve daha detaylı analizler yapacağız. Ayrıca verileri bir veritabanında saklayabilir ve gerçek zamanlı grafikler oluşturabilirsiniz.
Arduino Kodu
Arduino tarafında, sensör verilerini daha organize bir şekilde gönderelim ve veri formatını JSON yapısında düzenleyelim.
#include <DHT.h>
#include <SoftwareSerial.h>
#include <ArduinoJson.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int mq135Pin = A0;
SoftwareSerial ze07Serial(10, 11);
void setup() {
Serial.begin(9600);
dht.begin();
ze07Serial.begin(9600);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
int mq135Value = analogRead(mq135Pin);
float co2 = mq135Value / 1023.0 * 1000; // simple conversion
String co = "N/A";
if (ze07Serial.available()) {
co = ze07Serial.readStringUntil('\n');
}
StaticJsonDocument<200> doc;
doc["temperature"] = t;
doc["humidity"] = h;
doc["co2"] = co2;
doc["co"] = co;
String output;
serializeJson(doc, output);
Serial.println(output);
delay(2000);
}
Python Kodu
Python tarafında, Arduino'dan gelen JSON verisini alacağız, analiz edeceğiz ve veritabanına kaydedeceğiz. Ayrıca gerçek zamanlı grafikler oluşturmak için matplotlib ve pandas kütüphanelerini kullanacağız.
Gerekli Kütüphaneler
Python ortamınıza aşağıdaki kütüphaneleri yükleyin:
pip install pyserial pandas matplotlib sqlite3
Python Kodu
import serial
import time
import json
import pandas as pd
import matplotlib.pyplot as plt
import sqlite3
# Arduino seri portu ve baud rate
ser = serial.Serial('COM3', 9600, timeout=1)
time.sleep(2)
# SQLite veritabanı bağlantısı
conn = sqlite3.connect('sensor_data.db')
c = conn.cursor()
# Tablo oluşturma
c.execute('''
CREATE TABLE IF NOT EXISTS sensor_data (
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
temperature REAL,
humidity REAL,
co2 REAL,
co REAL
)
''')
conn.commit()
def read_arduino_data():
line = ser.readline().decode('utf-8').strip()
if line:
return json.loads(line)
return None
def save_to_db(data):
c.execute('''
INSERT INTO sensor_data (temperature, humidity, co2, co) VALUES (?, ?, ?, ?)
''', (data['temperature'], data['humidity'], data['co2'], data['co']))
conn.commit()
def plot_data():
df = pd.read_sql_query('SELECT * FROM sensor_data', conn)
df['timestamp'] = pd.to_datetime(df['timestamp'])
plt.figure(figsize=(10, 6))
plt.subplot(2, 2, 1)
plt.plot(df['timestamp'], df['temperature'], label='Temperature')
plt.xlabel('Time')
plt.ylabel('Temperature (°C)')
plt.legend()
plt.subplot(2, 2, 2)
plt.plot(df['timestamp'], df['humidity'], label='Humidity')
plt.xlabel('Time')
plt.ylabel('Humidity (%)')
plt.legend()
plt.subplot(2, 2, 3)
plt.plot(df['timestamp'], df['co2'], label='CO2')
plt.xlabel('Time')
plt.ylabel('CO2 (ppm)')
plt.legend()
plt.subplot(2, 2, 4)
plt.plot(df['timestamp'], df['co'], label='CO')
plt.xlabel('Time')
plt.ylabel('CO (ppm)')
plt.legend()
plt.tight_layout()
plt.show()
while True:
data = read_arduino_data()
if data:
save_to_db(data)
print(data)
time.sleep(2)
plot_data() # Periyodik olarak grafikleri güncelle
**Açıklamalar
Arduino Kodu:**
Sensör verilerini okur ve JSON formatında seri port üzerinden gönderir.
JSON formatı, verilerin Python tarafında daha kolay işlenmesini sağlar.
Python Kodu:
pyserial ile Arduino'dan gelen JSON verisini okur.
Verileri SQLite veritabanına kaydeder.
pandas ve matplotlib kullanarak verileri grafiklerle görselleştirir.
Veritabanı ve Grafikler:
Veritabanı, sensör verilerinin uzun süreli saklanmasını sağlar.
Grafikler, verilerin zaman içindeki değişimini görselleştirir.
Bu daha ileri düzey uygulama, hava kalitesi analizini daha kapsamlı ve profesyonel bir şekilde gerçekleştirmenize olanak tanır. Uygulamayı ihtiyaçlarınıza göre daha da genişletebilirsiniz.