Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Tipping Bucket Rain Gauge

Komponen dan persediaan

Arduino Nano R3
× 1
Tiny RTC I2C DS1307
× 1
Modul Kartu SD - LC Studios
× 1
7-12 Catu Daya VDC (atau Kutil Dinding)
× 1
Adafruit LCD Standar - 16x2 Putih di Atas Biru
× 1
Texas Instruments Shift Register- Serial to Parallel
× 1
Resistor 1k ohm
× 2
Resistor 330 ohm
× 2
Kapasitor 100 nF
× 1
Potensiometer Putaran Tunggal- 10k ohm
× 1
Sakelar Tombol Tekan Kontak Sesaat PCB
× 1
Saklar Buluh, SPST-NO
× 1
Magnet (panjang 7mm OD x 7MM)
× 1
Papan prototipe satu sisi 5x10CM
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)
Besi solder (generik)

Tentang proyek ini

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.

Kode

  • Kode Arduino untuk mengatur waktu pada RTC
  • Kode Program Utama Arduino Untuk Rain Gauge
Kode Arduino untuk mengatur waktu pada RTCArduino
Muat kode ini terlebih dahulu untuk mengatur waktu pada RTC. Edit kode dengan tanggal dan waktu yang sebenarnya sebelum mengunggah ke Arduino.
#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}
Program Utama Kode Arduino Untuk Pengukur HujanArduino
Program Utama Rain Gauge. Pastikan Anda menginstal semua pustaka terkait sebelum mengkompilasi program Anda. Situs web referensi [ https://roboindia.com/tutorials/arduino-3-pin-serial-lcd/ ] untuk petunjuk tentang memperbarui perpustakaan LiquidCrystal.
/*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; }}

Suku cadang dan penutup khusus

STL untuk unit dasar Pencetakan 3D Luar Ruangan. Saya mencetak dengan PETG pada file infillSTL 30% untuk penutup unit luar ruang pencetakan 3D. Saya mencetak dengan PETG pada 30% infillSTL File untuk corong unit luar ruangan Pencetakan 3D. Saya mencetak menggunakan PETG pada 30% infill.STL File untuk filter unit luar ruangan Pencetakan 3D. Saya mencetak menggunakan PETG dengan pengisian 20%. Bagian ini harus dicetak dengan TANPA lapisan bawah atau atas horizontal, membuat file filter.STL 'berpori' untuk 3D Mencetak sub-dasar tempat ember menempel melalui batang pivot. Saya mencetak menggunakan PETG dengan 30% infill.STL File untuk 3D Printing the bucket. Saya mencetak menggunakan PETG dengan 30% infill.STL File untuk mencetak penutup unit dalam ruangan. Saya mencetak dengan PETG pada 30% infill.STL file untuk 3D Mencetak sampul depan untuk unit dalam ruangan. Saya mencetak dengan PETG pada file infill.STL 30% untuk mencetak spacer agar unit LCD tetap di atas IC register geser. Saya mencetak menggunakan PETG dengan pengisian 30%. Model unit luar ruang Fusion 360 rain_gauge_assembly___smaller_profile_v15_CFg0dGwM8s.f3d.STP file unit luar ruangan rain_gauge_assembly___smaller_profile_v15_jWCS0hjSDq.stepSTEP Model cad Unit dalam ruangan controller_box_v1_fwltgu6D0S.stepFusion 36 Model CAD unit luar ruangan controller_box_v1_NxtSrPG4Vo.f3zSTL file untuk 3D Mencetak tombol tekan Switch

Skema

Skema Pengkabelan Proyek rain_gauge_NtjqXF6QEw.fzz

Proses manufaktur

  1. Pengukur Tekanan
  2. Smart Blinds
  3. Jam Kata Italia
  4. Tunjukkan pada saya Pengukur Ketinggian Digital
  5. Memahami pengukur sekrup mikrometer
  6. Memahami Pengukur Tekanan
  7. Pengertian pengukur regangan
  8. Memahami Pengukur Pirani
  9. Memahami Pengukur Tekanan Diafragma
  10. Memahami Pengukur Tekanan Bourdon