Proses manufaktur
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
![]() |
| |||
![]() |
|
Ini adalah alat pengukur hujan tipping bucket, berdasarkan alat pengukur hujan yang digunakan oleh ahli meteorologi profesional. Alat ini bekerja dengan mengalirkan air hujan ke sebuah ember jungkir yang menyerupai jungkat-jungkit, dengan masing-masing ujung memiliki ember yang menampung sekitar 2 ml air hujan. Ketika satu sisi terisi, ujung ember dan air hujan mulai terkumpul di ember yang berlawanan. Setiap kali ember tip, saklar buluh untuk sementara dihidupkan mengirim sinyal ke interupsi perangkat keras Arduino. Arduino melacak setiap 'ujung' ember, dan mengubah 'ujung' menjadi jumlah curah hujan (inci hujan), berdasarkan volume ember dan luas permukaan reservoir pengumpul (16,605 sq. in.).
Unit tampilan dalam ruangan memiliki menu pilih untuk menampilkan total 'jam saat ini', 'jam sebelumnya', 'hari ini', dan 'hari sebelumnya'.
Untuk setiap tip ember, acara yang diberi cap tanggal ditulis ke file kartu SD. File ini nantinya dapat diimpor ke Excel untuk analisis dan pembuatan bagan.
Meskipun saya tidak memiliki video yang menunjukkan 'ujung ember' yang sebenarnya, video ini menunjukkan pengukur yang merekam peristiwa curah hujan yang sebenarnya.
Langkah 1
Cetak semua komponen yang terdaftar. Saya menggunakan PETG untuk semua komponen karena merupakan bahan yang sangat cocok untuk paparan sinar UV dan paparan suhu untuk penggunaan di luar ruangan. Untuk filter atas, pastikan untuk mematikan semua cangkang horizontal (atas dan bawah) untuk membuat detail berpori.
Langkah 2
Sebelum memulai perakitan papan sirkuit panel depan, masukkan LCD ke papan PY-5*10CM (tanpa menyolder) dengan pin 1 LCD di lokasi lubang C-1 di papan. Bor melalui papan kinerja di lokasi empat lubang pemasangan papan LCD. Sekarang lepaskan lepas LCD untuk perakitan nanti.
Langkah 3
Pasang papan sirkuit panel depan. Tempatkan IC Shift Register 74HC595N, sakelar, dan resistor seperti yang ditunjukkan. Rutekan semua kabel yang diperlukan (lihat diagram pengkabelan) ke titik lokasi yang akan dipasang ke Layar LCD, serta panjang 6" yang akan diperpanjang untuk kemudian dihubungkan ke papan kedua.
Langkah 4
Pasang LCD ke papan panel depan, menggunakan spacer yang dicetak untuk menaikkan LCD untuk menghapus IC. Pasang menggunakan sekrup dan mur tutup 3mm x15mm. (Semua pengencang tersedia melalui Fastenal dan/atau McMaster Carr)
Langkah 5
Rakit papan sirkuit utama dengan memasukkan Arduino dengan Pin D12 di lokasi lubang R27 di papan sirkuit. Tambahkan kapasitor dan resistor, dan jalankan semua kabel ke lokasi sebelum memasukkan modul SD dan RTC. Referensi skema pengkabelan untuk semua detail.
Langkah 6
Pasang SD Reader di lokasi lubang A-3 sampai B-10. Pasang TinyRTC di lokasi lubang C-24 hingga I-24. Solder semua koneksi.
Langkah 7
Pada Kandang Kontrol Unit Dalam Ruangan, bor lubang di lokasi mana pun yang paling sesuai dengan kebutuhan Anda untuk dua kabel yang akan menuju ke unit luar ruangan, serta lubang untuk kabel yang berasal dari catu daya eksternal atau kutil dinding. Jalankan kabel ke dalam selungkup, dan solder di lokasi yang sesuai. Geser papan utama ke dalam casing dan pasang dengan dua sekrup berukuran panjang 3mm x 6mm. Masukkan tombol tekan untuk beralih melalui penutup depan dan pasang papan sirkuit depan ke panel depan dengan sekrup panjang 3mm x 6mm. Catatan:Saya menggunakan potongan kuningan kecil yang diputar untuk tombol sakelar alih-alih bagian yang dicetak, karena saya lebih menyukai 'rasanya'.
Langkah 8
Pasang penutup depan menggunakan sekrup Flathead M3-0,5 x 10mm
.
Langkah 9
Colokkan USB ke PC dan unggah program RTC untuk mengatur waktu. Setelah jam diatur, unggah program utama. Masukkan kartu SD. Uji unit dengan menyingkat kabel yang menuju ke sakelar buluh pada unit luar ruangan. Total curah hujan harus bertambah untuk setiap peristiwa hubung singkat (kontak tertutup). Pastikan kartu SD adalah tanggal pembacaan dengan membaca dengan editor teks seperti Notepad atau WordPad di komputer. Seharusnya ada file bernama" Text.txt". File akan memiliki cap tanggal untuk setiap 'tip'event.
Langkah 10
Pasang saklar buluh ke Sub Base. Gunakan ikatan kawat untuk menahannya. Pasang magnet ke buck, dan pasang ember dengan potongan pendek pipa kuningan berdiameter 1/8" (panjang sekitar 2"). Catatan sebelum merakit, jalankan bor 1/8" melalui lubang di ember untuk membersihkannya. Bucket perlu dimiringkan dengan mudah tanpa gesekan. Gunakan kikir bundar kecil di lubang ember jika perlu. Tambahkan washer kecil 1/8" di sisi terluar ember untuk menutup jarak sedikit. Tentukan bagaimana Anda akan memasang unit luar ruangan. Saya menggunakan sudut aluminium 1". Pasang alas ke sudut atau braket menggunakan baut segi enam 1/4-20 yang dipasang dari dalam ke luar. Pasang alas bawah ke bagian bawah unit luar menggunakan sekrup M3-0,5x 10mm.
Langkah 11
Masukkan corong ke dalam penutup atas. Potong kira-kira. 24 buah kawat galvanis ukuran 2" panjang 18. Pegang sepotong kawat dengan tang, panaskan dengan obor atau korek api dan tekan dengan hati-hati ke bagian atas plastik. Kabel ini akan mencegah burung hinggap di unit. Anda ingin mengukur jumlah hujan bukan kotoran burung. Pasang bagian atas ke penutup utama dengan (4) sekrup M3-0,5x 6mm. Pasang filter ke bagian atas corong. Filter ini akan mencegah keluarnya daun dan mencegah penyumbatan. Ingatlah untuk memeriksa sesekali dan bersihkan seperlunya.
Langkah 12
Pasang unit Outdoor dan jalankan kabel ke unit indoor. Pastikan bagian atas unit luar ruangan rata di kedua arah.
Langkah 13
Nyalakan unit dan tambahkan air ke unit luar untuk memverifikasi pengoperasian.
Langkah 14 (Opsional)
Untuk memverifikasi akurasi, Anda dapat dengan sangat perlahan menambahkan satu cangkir air dan memeriksa untuk melihat bahwa unit mengukur 0,87" curah hujan. (Satu cangkir =14,44 inci kubik. Luas kolektor adalah 16,605" [Curah hujan =14,44 cu.in. /16.605"=0.87"]. Anda dapat menyesuaikan faktor koreksi di program utama jika unit Anda berbeda dari unit saya.
Selamat!! Nikmati dapat melacak curah hujan Anda.
#include "Wire.h"#define DS1307_I2C_ADDRESS 0x68 // alamat I2C dari Tiny RTCbyte detik, menit, jam, hari Minggu, hariBulan, bulan, tahun;/ / Mengonversi bilangan desimal normal ke desimal berkode biner decToBcd(byte val){return ( (val/10*16) + (val%10) );}// Mengonversi desimal berkode biner ke bilangan desimal normalbyte bcdToDec(byte val){return ( ((val/16*10) + (val%16) );}// Berfungsi untuk mengatur waktu saat ini, mengubah detik&menit&jam menjadi waktu yang tepatvoid setDateDs1307(){second =00;minute =11;hour =12;dayOfWeek =5;hariBulan =24;bulan =7;tahun=20;Wire.beginTransmission(DS1307_I2C_ADDRESS);Wire.write(decToBcd(0));Wire.write(decToBcd(kedua)); // 0 hingga bit 7 memulai clockWire.write(decToBcd(menit));Wire.write(decToBcd(jam)); // Jika Anda ingin 12 jam pagi/malam Anda perlu mengatur// bit 6 (juga perlu mengubah readDateDs1307)Wire.write(decToBcd(dayOfWeek));Wire.write(decToBcd(dayOfMonth));Wire.write(decToBcd (bulan));Wire.write(decToBcd(tahun));Wire.endTransmission();}// Fungsi untuk mendapatkan tanggal dan waktu dari ds1307 dan mencetak resultvoid getDateDs1307(){// Reset pointer registerWire.beginTransmission( DS1307_I2C_ADDRESS);Wire.write(decToBcd(0));Wire.endTransmission();Wire.requestFrom(DS1307_I2C_ADDRESS, 7);detik =bcdToDec(Wire.read() &0x7f);menit =bcdToDec(Wire.read() );jam =bcdToDec(Wire.read() &0x3f); // Perlu mengubah ini jika 12 jam am/pmdayOfWeek =bcdToDec(Wire.read());dayOfMonth =bcdToDec(Wire.read());month =bcdToDec(Wire.read());tahun =bcdToDec(Wire. read());Serial.print(jam, DEC);Serial.print(":");Serial.print(menit, DEC);Serial.print(":");Serial.print(kedua, DEC); Serial.print(" ");Serial.print(month, DEC);Serial.print("/");Serial.print(dayOfMonth, DEC);Serial.print("/");Serial.print(tahun, DEC);Serial.print(" ");Serial.println();//Serial.print("Hari dalam seminggu:");}pengaturan batal() {Wire.begin();Serial.begin(19200); setDateDs1307(); //Setel waktu saat ini;}void loop(){delay(2000);getDateDs1307();//dapatkan data waktu dari RTC kecil}
/*Tipping Bucket Rain GaugeDitulis oleh Bob Torrence*/#include#include #include #include "RTClib.h"#include // termasuk LiquidCrystal Library (versi khusus) ref https://roboindia.com/ tutorials/arduino-3-pin-serial-lcd/// Mendefinisikan LCD dan Pin untuk interfacing.LiquidCrystal_SR lcd(6, 5, 9); // Pin 6 - Aktifkan Data/ SER, Pin 5 - Jam/SCL, Pin 9 -SCKRTC_DS3231 rtc;int backlight =7; // pin LED terhubung ke pin 7 (D7)// konstanta tidak akan berubah. Mereka digunakan di sini untuk menyetel nomor pin:const byte interruptPin_bucket =3;const byte interruptPin_menu =2;// Variabel akan berubah:volatile int Bucket_Tip_Occurence;volatile int Menu_Select;float Bucket_tip_hour_total =0;float Bucket_tip_current_hour_total =0_tip_float;float Bucket_tip_current_day_total =0;float Bucket_tip_previous_day_total =0;int current_minute;int loop_minute;int current_hour;int loop_hour;int current_day;int loop_day;int tip_counter;float conversion_factor =.00854; //inci hujan per tip - dihitung dengan mengukur volume ember dan luas kolektor (16,605 sq.in.)lampu latar panjang tak bertanda yang mudah menguapOfftime;lampu latar panjang tak bertanda yang mudah menguapOnDuration=30000; // durasi (milidetik) lampu latar tetap menyala setelah tombol pilih menu didorongString print_time(DateTime timestamp) { pesan karakter[120]; int Tahun =stempel waktu.tahun(); int Bulan =stempel waktu.bulan(); int Hari =stempel waktu.hari(); int Jam =stempel waktu.jam(); int Menit =stempel waktu.menit(); int Detik=stempel waktu.detik(); sprintf(pesan, "%02d:%02d:%02d %02d/%02d", Jam,Menit,Kedua,Bulan,Hari); pesan kembali;}File myFile;void setup() { lcd.begin(16,2); // Menginisialisasi antarmuka ke layar LCD, dan menentukan dimensi (lebar dan tinggi) tampilan lcd.home(); // Mengatur Kursor di Rumah yaitu 0,0 rtc.begin(); //memulai penggunaan variabel Jam Waktu Nyata pinMode(10, OUTPUT); pinMode (lampu latar, OUTPUT); // Deklarasikan LED sebagai output digitalWrite(backlight,HIGH); //nyalakan lcd backlight backlightOfftime =milis() + backlightOnDuration; //set waktu tunda awal untuk lampu latar LCD menjadi Hidup if (!SD.begin(4)) { lcd.print("masukkan Kartu SD"); kembali; } // Siapkan pin digital kita sebagai interupsi untuk bucket pinMode(interruptPin_bucket, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin_bucket), hitung, JATUH); // Atur pin digital kita sebagai interupsi untuk bucket pinMode(interruptPin_menu, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin_menu), menu, RISING); myFile =SD.open("test.txt", FILE_WRITE); if (myFile) { myFile.println("Rain Gauge Siap - unit dinyalakan"); myFile.close(); } DateTime sekarang =rtc.now(); saat_menit =sekarang.menit(); loop_minute =sekarang.menit(); jam_saat ini =sekarang.jam(); loop_hour =sekarang.jam(); lcd.setCursor (0,0); lcd.print(print_time(sekarang)); // Mencetak "Arduino" pada LCD lcd.setCursor(1,1); lcd.print("Pengukur Curah Hujan"); }void loop(){ DateTime sekarang =rtc.now(); saat_menit =sekarang.menit(); loop_minute =sekarang.menit(); jam_saat ini =sekarang.jam(); loop_hour =sekarang.jam(); saat_hari =sekarang.hari(); loop_day =sekarang.hari(); //Mulai Loop untuk menentukan penghitungan total hari saat ini while (loop_day - current_day ==0){ //Mulai Loop untuk menentukan penghitungan total jam saat ini while (loop_hour - current_hour ==0){ if (millis()> backlightOfftime) { digitalWrite (lampu latar,RENDAH); } if (Bucket_Tip_Occurence ==1) { Bucket_Tip_Occurence =0; tip_counter =tip_counter + 1; DateTime sekarang =rtc.now(); myFile =SD.open("test.txt", FILE_WRITE); myFile.print("Acara "); myFile.print(sekarang.tahun(), DES); myFile.print('/'); myFile.print(sekarang.bulan(), DES); myFile.print('/'); myFile.print(sekarang.hari(), DES); myFile.print(" "); myFile.print(sekarang.jam(), DES); myFile.print(':'); myFile.print(sekarang.menit(), DEC); myFile.print(':'); myFile.print(sekarang.detik(), DES); myFile.print(" "); myFile.print(conversion_factor,5); myFile.println(); myFile.close(); penundaan (200); } else { //Periksa status jam saat ini DateTime now =rtc.now(); loop_hour=now.hour();} switch (Menu_Select) { kasus 1:lcd.clear(); lcd.setCursor(0,0); lcd.print("Jam Sekarang"); lcd.setCursor(0,1); lcd.print(tip_counter * faktor_konversi); penundaan (500); merusak; kasus 2:lcd.clear(); lcd.setCursor(0,0); lcd.print("Jam Sebelumnya"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_hour_total); penundaan (500); merusak; kasus 3:lcd.clear(); lcd.setCursor(0,0); lcd.print("Hari ini"); lcd.setCursor(0,1); lcd.print(Bucket_tip_current_day_total + tip_counter * faktor_konversi); penundaan (500); merusak; kasus 4:lcd.clear(); lcd.setCursor(0,0); lcd.print("Hari Sebelumnya"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_day_total); // lcd.print(print_time(sekarang)); penundaan (500); merusak; } } DateTime sekarang =rtc.now(); // Setel ulang penghitung untuk loop satu jam berikutnya current_hour =now.hour(); loop_day =sekarang.hari(); loop_hour=sekarang.jam(); //Total total jam saat ini Bucket_tip_previous_hour_total =tip_counter * conversion_factor; Bucket_tip_current_day_total =Bucket_tip_previous_hour_total + Bucket_tip_current_day_total; tip_counter =0; /* File opsional menulis hanya dengan total per jam myFile =SD.open("test.txt", FILE_WRITE); myFile.print("Ringkasan Per Jam "); myFile.print(Bucket_tip_previous_hour_total); myFile.print(sekarang.tahun(), DES); myFile.print('/'); myFile.print(sekarang.bulan(), DES); myFile.print('/'); myFile.print(sekarang.hari(), DES); myFile.print(" "); myFile.print(sekarang.jam(), DES); myFile.print(':'); myFile.print(sekarang.menit(), DEC); myFile.print(':'); myFile.print(sekarang.detik(), DES); myFile.print(" "); myFile.print(Bucket_tip_previous_hour_total); myFile.println(); myFile.close(); penundaan (200); */ } //Total total jam saat ini Bucket_tip_previous_day_total =Bucket_tip_current_day_total; Bucket_tip_current_day_total =0; Bucket_tip_current_hour_total =0; tip_counter =0;/* Opsional menulis file dengan total hari sebelumnya hanya myFile =SD.open("test.txt", FILE_WRITE); myFile.print("Jumlah Hari"); myFile.print(Bucket_tip_previous_day_total); myFile.print(print_time(sekarang)); myFile.close(); */ } //inisiasi interupsi dari ember reed switchvoid count() { static unsigned long last_interrupt_time_bucket =0; unsigned long interrupt_time_bucket =milis(); // Jika interupsi datang lebih cepat dari 300 md, anggap itu pantulan dan abaikan if (interrupt_time_bucket - last_interrupt_time_bucket> 300) {Bucket_Tip_Occurence =1; } last_interrupt_time_bucket =interrupt_time_bucket;}//mulai interupsi dari menu toggle switchvoid menu() { static unsigned long last_interrupt_time_menu =0; unsigned long interrupt_time_menu =milis(); // Jika interupsi datang lebih cepat dari 300 md, anggap itu pantulan dan abaikan if (interrupt_time_menu - last_interrupt_time_menu> 300) { if (digitalRead(backlight)==LOW) { digitalWrite(backlight,HIGH); //menyalakan lampu latar jika sebelumnya mati } else Menu_Select =Menu_Select + 1; if(Menu_Select> 4){ Menu_Select =1; }backlightOfftime =milis() + backlightOnDuration;Menu_Select =Menu_Select; last_interrupt_time_menu =interrupt_time_menu; }}
Proses manufaktur
Komponen dan persediaan Arduino Nano R3 × 1 Modul Bluetooth HC-05 × 1 Sensor Kedekatan Inframerah E18-D80NK × 1 Seed Grove - Sensor Getaran (SW-420) × 1 Sensor Suhu DHT22 × 1 LED RGB 8mm × 1 Resistor 10k ohm × 3 Resistor
Komponen dan persediaan Arduino 101 × 1 Sensor Suhu DHT22 × 1 Kabel jumper (generik) × 1 LED (generik) × 2 Resistor 10k ohm × 1 Resistor 330 ohm × 2 Perisai tombol LCD DFRobot × 1 Breadboard (generik) × 1 A
Komponen dan persediaan Arduino UNO × 1 Modul LCD Nokia × 1 Thermistor 100k 3950 × 1 LED (generik) × 1 Resistor 1k ohm × 2 Resistor 4.75k ohm × 1 Kapasitor 10 nF × 1 N-Channel MOSFET Daya Atau gunakan PCB setrika × 1
Komponen dan persediaan Sensor Ultrasonik - HC-SR04 (Generik) × 2 Arduino Nano R3 × 1 Resistor foto × 1 Maxim Integrated 8x8 LED Matrix MAX7219 × 2 Ukuran Setengah Papan Tempat Memotong Roti Tanpa Solder × 1 Kabel jumper (generik) × 1