Air Surfer: Sistem Pemantau Kualitas Udara DIY dengan Arduino Mega 2560
Tentang Proyek Ini
Sebagai insinyur sipil, saya sangat mengetahui bagaimana sistem ventilasi seharusnya bekerja di rumah. Untuk mengukur kualitas udara di apartemen saya, saya membeli pemantau CO2 dan saya sangat menyukainya karena tidak hanya menampilkan tingkat CO2 tetapi juga suhu ruangan.
Namun, ini belum cukup untuk saya. Saya ingin mengukur lebih banyak parameter, jadi saya mencari perangkat yang tepat. Saya menemukan beberapa yang harganya sangat mahal, jadi saya memutuskan untuk membuatnya sendiri.
Pada saat itu, saya sudah memiliki pengalaman memprogram pengontrol Arduino untuk stasiun pompa dengan klep solenoid yang mengontrol cabang pipa yang berbeda.
Saya membuat proyek di kertas dan kemudian memesan alat dan sensor yang diperlukan.
Dasar
Saya ingin layar yang besar minimal 10 inci, tetapi itu akan mengosongkan kantong saya sangat cepat. Saya memutuskan untuk menjadi realistis dan memilih Arduino Mega 2560 R3 dengan layar TFT 3.2 420x380. Pengaturan ini memerlukan kabeling minimum karena layar terhubung langsung ke papan Arduino.
Sayangnya, layar yang saya pesan dari Aliexpress sangat murah sehingga tidak berfungsi dengan baik. Titik-titik putih kecil muncul seiring waktu dan warna terbalik. Saya mencoba berbagai perpustakaan dan berbagai pengontrol tetapi tidak membantu. Jadi, saya menyesuaikan warna dalam kode dan menambahkan penyegaran layar pada pukul 12.00 siang dan 12.00 malam.
Sensor
Bagian termahal dari proyek ini adalah sensor CO2 mh-z19. Ini relatif murah di antara sensor CO2 lain sambil menyediakan pengukuran yang andal dan fungsi kalibrasi otomatis.
Sementara modul-modul lain relatif mudah dipasang, sensor ini tidak memiliki banyak info dalam datasheet-nya jadi saya mencari kode di forum dan menggabungkan semua informasi. Hasilnya, sekarang semuanya berfungsi sempurna dan bahkan lebih baik dari sensor sebelumnya.
Namun, membutuhkan waktu 24 jam untuk kalibrasi dirinya sendiri, jadi pada awalnya bacaan-nya tidak konsisten. Kalibrasi otomatis sederhana. Saya meninggalkan apartemen saya, tidak ada yang mengonsumsi oksigen, jadi tingkat CO2 turun ke tingkat luar, yaitu 400ppm. Jika bacaan di bawah angka ini, sensor akan mengkalibrasi.
Ini dapat berkomunikasi melalui UART dan PWM. Saya memilih yang pertama karena saya pikir lebih andal.
Kemudian saya menggunakan sensor suhu dan kelembaban SI7021 untuk pemantau ruangan yang menggunakan protokol I2C dan terhubung ke pin SDA dan SCL. Tidak mahal, presisi industri tinggi. Saya menyukainya karena saya tidak mengalami masalah sama sekali padanya.
Untuk suhu luar, saya menggunakan ds18b20 dalam kapsul stainless steel. Murah dan bacaan yang akurat. Namun, ini membutuhkan resistor 4,7k Ohm, jadi jangan lupa. Komunikasi melalui 1-wire.
Untuk waktu, saya membeli modul RTC DS 1307 yang menggunakan I2C.
Kemudian 3 LED untuk tingkat CO2. Untuk 400-800ppm adalah LED hijau, untuk 800-1200ppm adalah LED oranye, dan untuk 1200ppm ke atas adalah LED merah.
Plus, 3 tombol stainless steel dengan LED. Kiri untuk penyesuaian jam. Tengah untuk menit dan kanan untuk perubahan warna teks.
Selain itu, saya memasang fotoresistor untuk menyesuaikan kecerahan LED. Saya tidak ingin mereka terlalu terang di malam hari.
Daya
Untuk suplai daya, saya membuat lubang di bawah dan meletakkan konektor DC di sana.
Masalahnya adalah saya tidak memiliki sumber daya daya yang sesuai. Saya hanya memiliki adaptor suplai 19v dan 15v sementara tegangan yang direkomendasikan untuk Arduino adalah 7-12v. Namun, saya memiliki sekelompok pengatur tegangan DC-DC yang dapat disesuaikan LM2696.
Saya menaruhnya di dalam kotak dan menyesuaikannya untuk 7 volt. Saya menemukan bahwa Arduino saya panas sangat cepat di bawah 12 volt, jadi saya memilih minimum yang direkomendasikan. Hasilnya, sekarang dapat disuplai dari berbagai sumber daya.
Untuk sensor suhu luar, saya menggunakan konektor penerbangan dan kabel telepon.
Kotak
Ini adalah masalah besar bagi saya karena saya tidak memiliki printer 3D. Saya mencoba membuatnya dari polymer clay terlebih dahulu tetapi tidak mempertahankan bentuknya dengan baik. Plus, saya membakarnya sekali di oven.
Percobaan kedua adalah dengan plywood 6mm. Ini sebagian besar baik tetapi sulit dipotong. Saya harus menggunakan gergaji listrik dan alat dremel.
Yang terakhir dan paling sukses adalah dari plywood 3mm (yang sulit ditemukan) yang dapat saya potong tanpa alat listrik dan hanya menggunakan pisau box cutter dan beberapa kertas pasir. Lapisi dengan cat akrilik, dan hasilnya, tampilan jauh lebih baik.
Biaya
- Arduino Mega 2560 R3 - 8,27$ (480Rub)
- Display TFT 3.2 480x320 - 8$ (400Rub)
- Modul RTC DS1307 - 0,55$ (32Rub)
- Sensor CO2 mh-z19 - 20$ (1160Rub)
- Sensor suhu dan kelembaban Si7021 - 2$ (118Rub)
- Sensor suhu DS18b20 dalam kapsul - 1,14$ (66Rub)
- Fotoresistor - 1$/50pcs (65Rub)
- LED - 0,67$/100pcs (39Rub)
- Tombol tekan stainless steel - 5,07$/3pcs (294Rub)
- Stop kontak penerbangan GX12-3 pin (set) - 1,17$ (68Rub)
- Konektor DC 1,25$/10pcs (73Rub)
- Pengatur tegangan DC-DC yang dapat disesuaikan LM2596 - 0,69$ (40Rub)
- Adaptor daya 12v - 2,14$ (120Rub)
- Kabel - 1,78$ (100Rub)
- Plywood 3mm - 1,78$ (100Rub)
Total 55,51$ (3155 Rub)
Kode
#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include <SoftwareSerial.h>
#include <SparkFunHTU21D.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <UTFT.h>
#define ONE_WIRE_BUS 9
#define GREENLED 5
#define YELLOWLED 7
#define REDLED 8
#define BUTTONLED 11
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
HTU21D myHumidity;
RTC_DS1307 rtc;
extern uint8_t Ubuntu[];
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
unsigned int ppm;
unsigned long time;
int photocellReading;
int hourupg;
int minupg;
float humd;
float temp;
int tcolor;
int Z;
boolean Reset = false;
void setup(void) {
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.fillScr(VGA_WHITE);
myGLCD.setBackColor(VGA_WHITE);
Serial3.begin(9600);
sensors.begin();
myHumidity.begin();
tcolor = 0;
rtc.begin();
pinMode(GREENLED, OUTPUT);
pinMode(YELLOWLED, OUTPUT);
pinMode(REDLED, OUTPUT);
pinMode(BUTTONLED, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
Z = 0;
}
void loop(void) {
co2();
photosensor();
dateandtime();
th();
if (digitalRead(4) == LOW) {
tcolor = tcolor + 1;
}
if (tcolor >= 13) tcolor = 0;
drawmain();
lamps();
screenreset();
}
(Kode lengkap tersedia di bagian bawah artikel asli)