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

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Komponen dan Perlengkapan

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Arduino Nano R3
×1
Tiny RTC I2C DS1307
×1
SD Card Module - LC Studios
×1
7-12 VDC Power Supply (or Wall Wart)
×1
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Adafruit Standard LCD - 16x2 White on Blue
×1
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Texas Instruments Shift Register- Serial to Parallel
×1
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Resistor 1k ohm
×2
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Resistor 330 ohm
×2
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Capacitor 100 nF
×1
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Single Turn Potentiometer- 10k ohms
×1
PCB Momentary Contact Pushbutton Switch
×1
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Reed Switch, SPST-NO
×1
Magnet (7mm OD x 7MM long)
×1
5x10CM single side prototype board
×1

Alat dan Mesin yang Diperlukan

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
3D Printer (generic)
Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino
Soldering iron (generic)

Tentang Proyek Ini

Ini adalah pengukur curah hujan bucket tumpah, berdasarkan pengukur curah hujan yang digunakan oleh meteorolog profesional. Perangkat ini bekerja dengan mengalirkan air hujan ke bucket tumpah yang mirip dengan ganggang, dengan setiap ujung memiliki ember yang menampung sekitar 2 ml air hujan. Ketika satu sisi terisi, ember tumpah dan air hujan mulai terkumpul di ember sebaliknya. Setiap kali ember tumpah, reed switch secara sementara menyala mengirimkan sinyal ke hardware interrupt Arduino. Arduino melacak setiap 'tip' ember, dan mengonversi 'tips' menjadi jumlah curah hujan (inci hujan), berdasarkan volume ember dan luas permukaan reservoir pengumpulan (16.605 sq. in.).

Unit tampilan indoor memiliki menu pilihan untuk menampilkan total 'jam ini', 'jam sebelumnya', 'hari ini', dan 'hari sebelumnya'.

Untuk setiap tip ember, event dengan cap tanggal ditulis ke file SD card. File ini nantinya dapat diimpor ke Excel untuk analisis dan pembuatan grafik.

Meskipun saya tidak memiliki video yang menunjukkan 'tip ember' sebenarnya, video ini menunjukkan pengukur merekam event curah hujan sebenarnya.

Langkah 1

Cetak semua komponen yang terdaftar. Saya menggunakan PETG untuk semua komponen karena ini adalah bahan yang cocok untuk paparan UV dan paparan suhu untuk penggunaan luar ruangan. Untuk filter atas, pastikan untuk mematikan semua shell horizontal (atas dan bawah) untuk membuat detail berpori.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 2

Sebelum memulai pemasangan papan sirkuit panel depan, masukkan LCD ke dalam board PY-5*10CM (tanpa soldering) dengan pin 1 LCD di lokasi lubang C-1 pada board. Bor melalui papan perf pada lokasi keempat lubang pemasangan papan LCD. Sekarang hapus LCD untuk pemasangan nanti.

Langkah 3

Pasang papan sirkuit panel depan. Tempatkan IC Shift Register 74HC595N, saklar, dan resistor seperti yang ditunjukkan. Rute semua kabel yang diperlukan (rujuk ke diagram kabel) ke titik lokasi yang akan ditempel ke LCD Display, serta kabel 6" panjang yang akan memperluas untuk kemudian dihubungkan ke papan kedua.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 4

Pasang LCD pada papan panel depan, menggunakan spasi yang dicetak untuk mengangkat LCD agar melampaui IC. Tempel menggunakan baut cap skru dan baut 3mm x15mm. (Semua penangkal tersedia melalui Fastenal dan/atau McMaster Carr)

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 5

Pasang papan sirkuit utama dengan memasukkan Arduino dengan Pin D12 di lokasi lubang R27 pada papan sirkuit. Tambahkan kapasitor dan resistor, dan jalankan semua kabel ke lokasi sebelum memasukkan modul SD dan RTC. Lihat skema kabel untuk semua detail.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 6

Pasang SD Reader di lokasi lubang A-3 melalui B-10. Pasang TinyRTC di lokasi lubang C-24 melalui I-24. Solder semua koneksi.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 7

Pada Unit Kontrol Enclosure Indoor, bor lubang di lokasi apa pun yang paling sesuai dengan kebutuhan Anda untuk dua kabel yang akan pergi ke unit luar, serta lubang untuk kabel yang datang dari sumber daya eksternal atau wall wart. Jalankan kabel melalui enclosure, dan solder di lokasi yang sesuai. Masukkan papan utama ke dalam casing dan pasang dengan dua skru panjang 3mm x 6mm. Masukkan tombol tekan untuk saklar melalui tutup depan dan pasang papan sirkuit depan ke panel depan dengan skru panjang 3mm x 6mm. Catatan: Saya menggunakan potongan kuningan kecil yang diputar untuk tombol saklar alih-alih bagian yang dicetak, karena saya suka 'rasanya' lebih baik.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 8

Pasang tutup depan menggunakan baut Flathead M3-0.5 x 10mm panjang

.

Langkah 9

Colokkan USB ke PC dan unggah program RTC untuk mengatur waktu. Setelah jam diatur, unggah program utama. Masukkan SD card. Uji unit dengan menyalingkan kabel yang pergi ke reed switch pada unit luar. Total curah hujan seharusnya bertambah untuk setiap event rangkaian pendek (kontak tertutup).Verifikasi SD card membaca tanggal dengan membaca dengan editor teks seperti Notepad atau WordPad pada komputer. Harus ada file bernama"Text.txt". File akan memiliki cap tanggal untuk setiap event 'tip'.

Langkah 10

Pasang reed switch ke Sub Base. Gunakan kait kabel untuk memegangnya. Pasang magnet pada ember, dan pasang ember dengan potongan pendek tabung kuningan 1/8"diameter (sekitar 2" panjang). Catatan sebelum memasang, bor 1/8" melalui lubang pada ember untuk membersihkan. Ember perlu tumpah dengan mudah tanpa gesekan. Gunakan pili bulat kecil di lubang ember jika diperlukan. Tambahkan pelat kecil 1/8" di sisi terluar ember untuk menutup spasi sedikit. Tentukan bagaimana Anda akan memasang unit luar. Saya menggunakan sudut aluminium 1". Pasang dasar ke sudut atau bracket dengan baut hex 1/4-20 dipasang dari dalam ke luar. Pasang sub base ke bawah unit luar menggunakan skru M3-0.5x 10mm.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 11

Masukkan saluran ke dalam enclosure atas. Potong sekitar 24 potongan kabel seng galvanis 18 gauge panjang 2". Memegang satu potongan kabel dengan alicate, panaskan dengan obor atau pelita dan hati-hati tekan ke dalam plastik atas. Kabel ini akan mencegah burung bersarang di unit. Anda ingin mengukur jumlah hujan bukan kotoran burung. Pasang atas ke enclosure utama dengan (4)M3-0.5x 6mm skru. Pasang filter ke saluran atas. Filter ini akan mencegah daun dan mencegah tersumbat.. Ingat untuk memeriksa sesekali dan membersihkan jika diperlukan.

Pengukur Curah Hujan Bucket Tumpah Canggih dengan Integrasi Arduino

Langkah 12

Pasang unit luar dan jalankan kabel ke unit indoor. Pastikan bagian atas unit luar rata di kedua arah.

Langkah 13

Nyalakan unit dan tambahkan air ke unit luar untuk memverifikasi operasi.

Langkah 14 (Opsional)

Untuk memverifikasi akurasi, Anda dapat sangat LAMBAT menambahkan satu cangkir air dan memeriksa apakah unit mengukur 0.87" curah hujan. (Satu cangkir = 14,44 inci kubik. Area kolektor adalah 16.605" [Curah Hujan=14.44 cu.in./16.605"=0.87"]. Anda dapat menyesuaikan faktor koreksi dalam program utama jika unit Anda berbeda dari milik saya.

Selamat!! Nikmati kemampuan untuk melacak curah hujan Anda.

Kode

  • Kode Arduino untuk mengatur waktu pada RTC
  • Program Utama Kode Arduino Untuk Pengukur Curah Hujan
Kode Arduino untuk mengatur waktu pada RTCArduino
Muat kode ini terlebih dahulu untuk mengatur waktu pada RTC. Edit kode dengan tanggal dan waktu sebenarnya sebelum mengunggah ke Arduino.
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // the I2C address of Tiny RTC byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } // Function to set the currnt time, change the second&minute&hour to the right time void setDateDs1307() { second =00; minute = 11; hour = 12; dayOfWeek = 5; dayOfMonth =24; month =7; year= 20; Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(decToBcd(0)); Wire.write(decToBcd(second)); // 0 to bit 7 starts the clock Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); // If you want 12 hour am/pm you need to set // bit 6 (also need to change readDateDs1307) Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } // Function to gets the date and time from the ds1307 and prints result void getDateDs1307() { // Reset the register pointer Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(decToBcd(0)); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); second = bcdToDec(Wire.read() & 0x7f); minute = bcdToDec(Wire.read()); hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm dayOfWeek = bcdToDec(Wire.read()); dayOfMonth = bcdToDec(Wire.read()); month = bcdToDec(Wire.read()); year = bcdToDec(Wire.read()); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print(" "); Serial.print(month, DEC); Serial.print("/"); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(year,DEC); Serial.print(" "); Serial.println(); //Serial.print("Day of week:"); } void setup() { Wire.begin(); Serial.begin(19200); setDateDs1307(); //Set current time; } void loop() { delay(2000); getDateDs1307();//get the time data from tiny RTC } 
Program Utama Kode Arduino Untuk Pengukur Curah HujanArduino
Program Utama untuk Pengukur Curah Hujan. Pastikan Anda menginstal semua perpustakaan terkait sebelum mengompilasi program Anda. Situs web referensi [ https://roboindia.com/tutorials/arduino-3-pin-serial-lcd/ ] untuk instruksi tentang pembaruan perpustakaan LiquidCrystal.
/* Tipping Bucket Rain Gauge Written by Bob Torrence */ #include <SPI.h> #include <SD.h> #include <Wire.h> #include "RTClib.h" #include <LiquidCrystal_SR.h> // includes the LiquidCrystal Library (special version) ref https://roboindia.com/tutorials/arduino-3-pin-serial-lcd/ // Defining LCD and Pins for interfacing. LiquidCrystal_SR lcd(6, 5, 9); // Pin 6 - Data Enable/ SER, Pin 5 - Clock/SCL, Pin 9 -SCK RTC_DS3231 rtc; int backlight = 7; // the pin the LED is connected to pin 7 (D7) // constants won't change. They're used here to set pin numbers: const byte interruptPin_bucket = 3; const byte interruptPin_menu = 2; // Variables will change: volatile int Bucket_Tip_Occurence; volatile int Menu_Select; float Bucket_tip_hour_total = 0; float Bucket_tip_current_hour_total = 0; float Bucket_tip_previous_hour_total = 0; 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; //inches of rain per tip - calculated by measuring bucket volume and area of collector (16.605 sq.in.) volatile unsigned long backlightOfftime; volatile unsigned long backlightOnDuration=30000; // duration (miiliseconds) that backlight remains on aftter menu select button pushed String print_time(DateTime timestamp) { char message[120]; int Year = timestamp.year(); int Month = timestamp.month(); int Day = timestamp.day(); int Hour = timestamp.hour(); int Minute = timestamp.minute(); int Second= timestamp.second(); sprintf(message, "%02d:%02d:%02d %02d/%02d", Hour,Minute,Second,Month,Day); return message; } File myFile; void setup() { lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display lcd.home(); // Setting Cursor at Home i.e. 0,0 rtc.begin(); //initiate use of Real Time Clock variables pinMode(10, OUTPUT); pinMode(backlight, OUTPUT); // Declare the LED as an output digitalWrite(backlight,HIGH); //turn on lcd backlight backlightOfftime = millis() + backlightOnDuration; //set inital time delay for the LCD backlight to be On if (!SD.begin(4)) { lcd.print("insert SD Card"); return; } // Set up our digital pin as an interrupt for bucket pinMode(interruptPin_bucket, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin_bucket), count, FALLING); // Set up our digital pin as an interrupt for 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 Ready - unit powered up"); myFile.close(); } DateTime now = rtc.now() ; current_minute = now.minute(); loop_minute = now.minute(); current_hour = now.hour(); loop_hour = now.hour(); lcd.setCursor (0,0); lcd.print(print_time(now)); // Prints "Arduino" on the LCD lcd.setCursor(1,1); lcd.print("Rain Gauge"); } void loop(){ DateTime now = rtc.now() ; current_minute = now.minute(); loop_minute = now.minute(); current_hour = now.hour(); loop_hour = now.hour(); current_day = now.day(); loop_day = now.day(); //Begin Loop to determine tally current day totals while (loop_day - current_day == 0){ //Begin Loop to determine tally current hour totals while (loop_hour - current_hour == 0){ if (millis() > backlightOfftime) { digitalWrite(backlight,LOW); } if (Bucket_Tip_Occurence == 1) { Bucket_Tip_Occurence = 0; tip_counter = tip_counter + 1; DateTime now = rtc.now() ; myFile = SD.open("test.txt", FILE_WRITE); myFile.print("Event "); myFile.print(now.year(), DEC); myFile.print('/'); myFile.print(now.month(), DEC); myFile.print('/'); myFile.print(now.day(), DEC); myFile.print(" "); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); myFile.print(conversion_factor,5); myFile.println(); myFile.close(); delay(200); } else { //Check for current hour status DateTime now = rtc.now() ; loop_hour= now.hour();} switch (Menu_Select) { case 1: lcd.clear(); lcd.setCursor(0,0); lcd.print("Current Hour"); lcd.setCursor(0,1); lcd.print(tip_counter * conversion_factor); delay(500); break; case 2: lcd.clear(); lcd.setCursor(0,0); lcd.print("Previous Hour"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_hour_total); delay(500); break; case 3: lcd.clear(); lcd.setCursor(0,0); lcd.print("Current Day"); lcd.setCursor(0,1); lcd.print(Bucket_tip_current_day_total + tip_counter * conversion_factor); delay(500); break; case 4: lcd.clear(); lcd.setCursor(0,0); lcd.print("Previous Day"); lcd.setCursor(0,1); lcd.print(Bucket_tip_previous_day_total); // lcd.print(print_time(now)); delay(500); break; } } DateTime now = rtc.now() ; // Reset counters for next one hour loop current_hour = now.hour(); loop_day = now.day(); loop_hour= now.hour(); //Totalize current hour total 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; /* Optional file write with only hourly total myFile = SD.open("test.txt", FILE_WRITE); myFile.print("Hourly Summary "); myFile.print(Bucket_tip_previous_hour_total); myFile.print(now.year(), DEC); myFile.print('/'); myFile.print(now.month(), DEC); myFile.print('/'); myFile.print(now.day(), DEC); myFile.print(" "); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); myFile.print(Bucket_tip_previous_hour_total); myFile.println(); myFile.close(); delay(200); */ } //Totalize current hour total 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; /* Optional file write with previous day total only myFile = SD.open("test.txt", FILE_WRITE); myFile.print("Day Total "); myFile.print(Bucket_tip_previous_day_total); myFile.print(print_time(now)); myFile.close(); */ } //initaiate interrupt fromm bucket reed switch void count() { static unsigned long last_interrupt_time_bucket = 0; unsigned long interrupt_time_bucket = millis(); // If interrupts come faster than 300ms, assume it's a bounce and ignore if (interrupt_time_bucket - last_interrupt_time_bucket > 300) { Bucket_Tip_Occurence = 1; } last_interrupt_time_bucket = interrupt_time_bucket; } //initaiate interrupt fromm menu toggle switch void menu() { static unsigned long last_interrupt_time_menu = 0; unsigned long interrupt_time_menu = millis(); // If interrupts come faster than 300ms, assume it's a bounce and ignore if (interrupt_time_menu - last_interrupt_time_menu > 300) { if (digitalRead(backlight)== LOW) { digitalWrite(backlight,HIGH); //turns on backlight if was previously off } else Menu_Select = Menu_Select + 1; if(Menu_Select > 4){ Menu_Select = 1; } backlightOfftime = millis() + backlightOnDuration; Menu_Select = Menu_Select; last_interrupt_time_menu = interrupt_time_menu; }} 

Bagian dan Enclosure Kustom

STL untuk 3D Printing dasar unit luar. Saya mencetak dengan PETG pada 30% infillSTL file untuk 3D printing penutup unit luar. Saya mencetak dengan PETG pada 30% infillSTL File untuk 3D Printing saluran unit luar. Saya mencetak menggunakan PETG pada 30% infill.STL File untuk 3D Printing filter unit luar. Saya mencetak menggunakan PETG pada 20% infill. Bagian ini harus dicetak TANPA lapisan bawah atau atas horizontal, menciptakan filter 'berpori'.STL file untuk 3D Printing sub base yang ember dilekatkan melalui tiang pivot. Saya mencetak menggunakan PETG dengan 30% infill.STL File untuk 3D Printing ember. Saya mencetak menggunakan PETG dengan 30% infill.STL File untuk mencetak enclosure unit indoor. Saya mencetak dengan PETG pada 30% infill.STL file untuk 3D Printing tutup depan untuk unit indoor. Saya mencetak dengan PETG pada 30% infill.STL file untuk mencetak spasi untuk menjaga unit LCD diangkat di atas register IC. Saya mencetak menggunakan PETG pada 30% infill.Fusion 360 model unit luarrain_gauge_assembly___smaller_profile_v15_CFg0dGwM8s.f3d.STP file unit luarrain_gauge_assembly___smaller_profile_v15_jWCS0hjSDq.stepSTEP Cad model Unit Indoorcontroller_box_v1_fwltgu6D0S.stepFusion 36 CAD model Unit Luarcontroller_box_v1_NxtSrPG4Vo.f3zSTL file untuk 3D Printing tombol saklar tekan

Skema

Skema Kabel Proyekrain_gauge_NtjqXF6QEw.fzz

Proses manufaktur

  1. Manometer Tekanan Presisi untuk Aplikasi Industri & Keselamatan
  2. Smart Blinds: Kontrol Cahaya Otomatis dengan Arduino & Energi Surya
  3. Bangun Jam Kata Italia dengan Arduino Nano, NeoPixel, LCD, dan RTC
  4. Pengukur Tinggi Digital: Solusi Akurat untuk Pengukuran dan Kontrol Kualitas
  5. Mikrometer Segel Pengukur: Definisi, Sejarah, dan Penggunaan Praktis
  6. Cara Kerja Manometer Tekanan: Tipe, Fungsi, dan Manfaat
  7. Menguasai Strain Gauge: Mengubah Tekanan Mekanikal menjadi Sinyal Listrik Presisi
  8. Pirani Gauge Diajabarkan: Prinsip Kerja, Aplikasi, dan Manfaat
  9. Manometer Diaphragm Diajabarkan: Presisi dan Keandalan
  10. Menguasai Manometer Bourdon: Desain, Fungsi, dan Aplikasi