Tentang proyek ini
Baru-baru ini kampus saya mengadakan pameran sains kecil-kecilan. Jadi saya diminta oleh guru saya untuk mempresentasikan proyek di kampus untuk mengajar siswa muda tentang elektronik jadi pada dasarnya saya punya dua hari untuk membuat sesuatu.
Karena kondisi iklim di sini sangat bervariasi dan saat ini suhunya berkisar antara 34-40 derajat Celcius. Jadi saya memutuskan untuk membuat stasiun cuaca.
Jadi, apa fungsi stasiun cuaca?
Stasiun cuaca adalah perangkat yang mengumpulkan data terkait cuaca dan lingkungan menggunakan banyak sensor berbeda
Sensor seperti
- Angin
- Kelembaban
- Hujan
- Suhu
- Tekanan
- Ketinggian
Tujuannya adalah untuk membuat stasiun cuaca portabel
Fitur yang harus dimiliki
- Suhu
- Kelembaban
- Tekanan
- Ketinggian
Langkah 1:Bahan:Saatnya Membeli Barang
Jadi, inilah hal yang kita perlukan untuk proyek
Saya sebenarnya memulai proyek di UNO Saya tetapi kemudian saya memutuskan untuk beralih ke solusi ringkas.
Saya membawa nano saat itu jadi saya harus mengikutinya, ingin sekali menggunakan mikro, karena ini yang terkecil.
Bagaimanapun meninggalkan hal-hal itu, berbicara tentang anggaran dan suku cadang di sini adalah daftarnya .
- DHT22 Sensor suhu dan kelembapan -> $3,00
- Sensor tekanan BMP180 (BMP280 lebih murah tapi mahal di daerah saya )> $2,00
- Arduino Nano> $1,89
- Menyolder
- Layar LCD dengan Driver I2C> $3.0
- Veroboard
- Tajuk wanita
Untuk ujung alat yang Anda perlukan
- Besi Solder
- Piring Hidung
- Kabel
Dan juga beberapa waktu
Langkah 2:Suhu dan Kelembaban- DHT22
Mengukur suhu dapat dilakukan dengan menggunakan sensor yang berbeda.
Yang populer adalah DHT22, DHT11, SHT1x
Jadi pada dasarnya, mari kita pahami bagaimana sensor ini berbeda satu sama lain dan mengapa saya menggunakan DHT22 sejak awal.
AM2302 keluaran sinyal digital terkalibrasi. Ini menerapkan teknik pengumpulan sinyal digital eksklusif dan teknologi penginderaan kelembaban, memastikan keandalan dan stabilitasnya. Elemen penginderaannya terhubung dengan komputer chip tunggal 8-bit.
Setiap sensor model ini dikompensasikan suhu dan dikalibrasi di ruang kalibrasi yang akurat dan koefisien kalibrasi disimpan dalam jenis program di memori OTP, ketika sensor mendeteksi, ia akan mengutip koefisien dari memori. Ukuran kecil &konsumsi rendah &jarak transmisi panjang (100 m) memungkinkan AM2302 cocok untuk semua jenis acara aplikasi yang keras. Baris tunggal dikemas dengan empat pin, membuat koneksi sangat nyaman.
Mari kita lihat beberapa pro dan kontra dari ketiganya.
DHT11
Kelebihan:Tidak perlu menyolder. Termurah di antara ketiganya. Dapatkan output stabil dengan cepat. Transmisi lebih dari 20m. Interferensi yang kuat.
Kontra:Perpustakaan! Tidak ada opsi resolusi. Kesalahan:Temp+/-2°C; Lembab +/-5% RH. Rentang pengukuran tidak memadai (0-50 °C). Aplikasi:Berkebun, Pertanian.
DHT22
Kelebihan:Tidak perlu menyolder. Menambahkan beberapa dolar ke DHT11 dan dapatkan peningkatan. kurva halus. Kesalahan terkecil. Kisaran besar. Transmisi lebih dari 20m. Gangguan kuat.
Kontra:Bisa lebih sensitif. Pelacakan suhu lambat. Perpustakaan dibutuhkan. Aplikasi:Pemantauan Lingkungan. SHT1x
Kelebihan:Tidak ada solder. kurva halus. Kesalahan kecil. Respon cepat. Konsumsi daya rendah. Tidur otomatis. Stabilitas dan konsistensi jangka panjang yang luar biasa.
Kontra:Dua antarmuka digital. Kesalahan kelembaban. Rentang pengukuran yang sama dengan DHT11. Perpustakaan dibutuhkan. Aplikasi:Tugas berat dan instalasi lama. Berikut adalah tiga pilihan yang relatif murah.
Koneksi
Vcc ke 5V atau 3.3V
Gnd ke Gnd
Data ke pin 2 arduino
Langkah 3:Barometer Dan Sensor Tekanan- BMP180
Bmp180 adalah sensor tekanan barometrik dengan antarmuka I2C (“Kabel”).
Sensor tekanan barometrik mengukur tekanan absolut udara di sekitarnya. Tekanan ini bervariasi dengan cuaca dan ketinggian.
modul bmp180 ini dilengkapi dengan regulator 3,3 v 662k yang saya hancurkan karena beberapa kebodohan jadi saya memasang kabel untuk melewati seluruh vcc langsung ke chip.
Catatan :Saat Melakukannya, saya membatasi diri untuk tidak menggunakan hanya 3,3 v , menggunakan voltase di atas akan merusak perangkat.
Model lain mungkin tidak memiliki pengatur tegangan 662k. jadi periksa dengan seksama .
Oke kembali lagi mari hubungkan sensor ke arduino .
Sensor terhubung ke bus i2c dari arduino yang mana nano dan Uno adalah
SDA==>A4
SCL==>A5
VCC==>3.3V
GND ==> GND
Mari kita bicara sedikit tentang tekanan dan bagaimana tekanan mengukur ketinggian dan suhu.
Tekanan atmosfer pada posisi apapun tidak konstan. Interaksi kompleks antara putaran bumi, kemiringan sumbu, dan banyak faktor lainnya mengakibatkan daerah yang bergerak dengan tekanan yang lebih tinggi dan lebih rendah, yang pada gilirannya menyebabkan variasi cuaca yang kita lihat setiap hari. Dengan mengamati perubahan tekanan, Anda dapat memprediksi perubahan cuaca jangka pendek.
Misalnya, penurunan tekanan biasanya berarti cuaca basah atau badai mendekat (sistem tekanan rendah sedang bergerak). Tekanan yang meningkat biasanya berarti cuaca cerah akan segera tiba (sistem bertekanan tinggi sedang bergerak).
Tekanan atmosfer juga bervariasi dengan ketinggian. Tekanan absolut di base camp Gunung everest (5.400 ) lebih rendah dari Delhi (216)
Karena tekanan absolut sulit untuk membandingkan pengukuran tekanan secara langsung dari satu lokasi ke lokasi lain. Kami menggunakan tekanan relatif .yaitu tekanan permukaan laut.
Mengukur ketinggian
Tekanan rata-rata atmosfer di permukaan laut adalah 1013,25 hPa (atau mbar). Ini turun ke nol saat Anda mendaki menuju ruang hampa. Karena kurva penurunan ini dipahami dengan baik, Anda dapat menghitung perbedaan ketinggian antara dua pengukuran tekanan (p dan p0) dengan menggunakan persamaan ini:
alti=44330*[1-(p/p0)^(1/5.255)]
Jika Anda menggunakan tekanan permukaan laut (1013,25 hPa) sebagai tekanan dasar (p0), output persamaan akan menjadi ketinggian Anda saat ini di atas permukaan laut.
Perhatian
Berikan suasana: Ingatlah bahwa BMP180 memerlukan akses ke udara sekitar untuk mengukur tekanannya, jadi jangan masukkan ke dalam wadah tertutup. Menyediakan lubang ventilasi kecil harus memadai.Tetapi tidak terlalu banyak udara :Di sisi lain, paparan udara atau angin yang bergerak cepat dapat menyebabkan variasi tekanan sesaat yang akan memengaruhi pembacaan Anda. Lindungi perangkat dari arus udara yang kuat.
Tetap tenang: Karena pembacaan suhu yang akurat diperlukan untuk mengukur tekanan, cobalah untuk tidak memaparkan perangkat pada perubahan suhu yang cepat, dan jauhkan dari bagian panas terdekat dan sumber panas lainnya.
Tetap kering :BMP180 sensitif terhadap kelembapan. Jangan merendamnya atau membiarkannya menyentuh air cair.
Jangan membutakannya: Anehnya, silikon di dalam BMP180 sensitif terhadap cahaya, yang dapat masuk ke perangkat melalui lubang di bagian atas chip. Untuk akurasi maksimum, lindungi chip dari cahaya sekitar.
Langkah 4:Membuat Sirkuit
Jadi kita mulai dengan membuat header untuk nano. kami benar-benar memotong tajuk perempuan dan kemudian mengarsipkannya agar terlihat seolah-olah mereka awalnya berukuran itu. Kami kemudian menyoldernya. lalu kita buat header untuk sensor DHT22
. dibutuhkan resistansi 10k untuk terhubung dari data ke ground. kami kemudian menyolder semuanya. Kemudian tiba saatnya untuk bmp180 kami menambahkan header dengan cara yang sama. Kami menggunakan 3,3 V sebagai daya. Kami menghubungkan semua bus i2c.
Kami terakhir menambahkan tampilan kami menggunakan i2c lcd jadi kami menggunakan bus yang sama yang kami gunakan untuk modul bmp180.
(Ada slot keempat di mana saya ingin menambahkan modul rtc nanti untuk juga menonaktifkan jam di mesin)
Langkah 5:Waktunya untuk Kode
Tunggu ....................
Unduh perpustakaan
bmp180
https://github.com/sparkfun/BMP180_Breakout_Arduin...
BMP180_Breakout_Arduino_Library-master.zip
Pustaka Dht22
https://github.com/adafruit/DHT-sensor-library
Untuk menginstal perpustakaan di arduino, periksa tautan ini
https://www.arduino.cc/en/Guide/Libraries
Saya telah menggunakan arduino 1.6.5 sehingga kodenya pasti akan berfungsi untuk versi ini, mungkin juga untuk versi yang lebih tinggi jika tidak berhasil, gunakan 1.6.5 sebagai versi dasar.
#include #include #include #include "DHT.h"#include
Tekanan SFE_BMP180;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- Tambahkan alamat di sini.#menentukan Rs_pin 0#menentukan Rw_pin 1#menentukan En_pin 2#menentukan BACKLIGHT_PIN 3#menentukan D4_pin 4#menentukan D5_pin 5#menentukan D6_pin 6#menentukan D7_pin 7
#menentukan DHTPIN 2 // apa digital pin yang kita sambungkan
// Batalkan komentar jenis apa pun yang Anda gunakan!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht(DHTPIN, DHTTYPE);LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;
void setup(){ Serial.begin(9600); lcd.begin (16,2); // <<-- LCD kami berukuran 20x4, ganti LCD Anda jika diperlukan// LCD Backlight ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIF);lcd.setBacklight(HIGH); lcd.rumah(); // pulang di LCDlcd.print("Stasiun Cuaca");delay(5000);dht.begin(); tekanan.mulai(); } void loop(){ status karakter; ganda T,P,p0,a; status =tekanan.startTemperature(); if (status !=0) { delay(status);
status =pressure.getTemperature(T); if (status !=0) { Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Suhu Baro :"); lcd.setCursor(0,1); lcd.print(T,2); lcd.print("derajat C"); t1=T; delay(3000);
status =pressure.startPressure(3); if (status !=0) { // Tunggu hingga pengukuran selesai:delay(status);
status =pressure.getPressure(P,T); if (status !=0) {lcd.clear(); lcd.setCursor(0,0); lcd.print("Tekanan Abslt:"); lcd.setCursor(0,1); lcd.print(P,2); lcd.print("mb"); delay(3000);
p0 =pressure.sealevel(P,ALTITUDE); // kita berada di 1655 meter (Boulder, CO)
a =pressure.altitude(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("Ketinggian :"); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("meter"); penundaan(3000); } } } } float h =dht.readHumidity(); // Baca suhu sebagai Celcius (default) float t =dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print("%"); penundaan(3000); lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print("derajat C"); penundaan(3000); lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("Suhu Rata-Rata:"); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("derajat C"); delay(3000);}
FSIULGKING9D7SD.ino
Kode
Cuplikan kode #1Teks biasa
#include #include #include #include "DHT.h"#include
Tekanan SFE_BMP180;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- Tambahkan alamat Anda di sini. #define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7
#define DHTPIN 2 // apa pin digital kita' terhubung kembali ke
// Batalkan komentar jenis apa pun yang Anda gunakan!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;
void setup(){ Serial.begin(9600); lcd.begin (16,2); // <<-- LCD kami berukuran 20x4, ganti LCD Anda jika diperlukan// LCD Backlight ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIF);lcd.setBacklight(HIGH); lcd.rumah(); // pulang di LCDlcd.print("Stasiun Cuaca");delay(5000);dht.begin(); tekanan.mulai(); } void loop(){ status karakter; ganda T,P,p0,a; status =tekanan.startTemperature(); if (status !=0) { delay(status);
status =pressure.getTemperature(T); if (status !=0) { Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Suhu Baro :"); lcd.setCursor(0,1); lcd.print(T,2); lcd.print("derajat C"); t1=T; delay(3000);
status =pressure.startPressure(3); if (status !=0) { // Tunggu hingga pengukuran selesai:delay(status);
status =pressure.getPressure(P,T); if (status !=0) {lcd.clear(); lcd.setCursor(0,0); lcd.print("Tekanan Abslt:"); lcd.setCursor(0,1); lcd.print(P,2); lcd.print("mb"); delay(3000);
p0 =pressure.sealevel(P,ALTITUDE); // kita berada di 1655 meter (Boulder, CO)
a =pressure.altitude(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("Ketinggian :"); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("meter"); penundaan(3000); } } } } float h =dht.readHumidity(); // Baca suhu sebagai Celcius (default) float t =dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print("%"); penundaan(3000); lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print("derajat C"); penundaan(3000); lcd.clear(); lcd.setCursor (0,0); // pergi ke awal baris ke-2 lcd.print("Suhu Rata-Rata:"); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("derajat C"); delay(3000);}
Github
https://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.ziphttps://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.zip Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library Skema