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

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

Komponen dan Perlengkapan

Tentang Proyek Ini

Apakah Anda pernah ingin membuat antarmuka sendiri yang dapat menampilkan waktu, tanggal, suhu, dan kelembaban? Ternyata lebih mudah dari yang Anda bayangkan. Beberapa komponen penting dibutuhkan, seperti yang ditunjukkan di bawah ini.

Arduino Uno/Nano

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

Pertama, Anda membutuhkan mikrokontroler. Saya menggunakan Arduino Uno untuk proyek ini, tetapi Arduino Nano juga memiliki cukup pin.

DHT11

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

DHT11 adalah sensor suhu dan kelembaban digital yang sangat terjangkau. Sensor menggunakan elemen kapasitif untuk kelembaban dan termistor untuk mengukur udara di sekitarnya. Waktu pembacaan sangat krusial, disarankan untuk mengambil pembacaan setiap 2 detik.

Catatan penting: Setelah mengatur waktu satu kali, pastikan Anda memberi komentar pada baris tersebut dan mengkompilasi ulang. Dengan cara ini, RTC akan melacak waktu, dan waktu tidak akan diatur ulang sesuai dengan waktu kompilasi sebelumnya.

DS3231

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

DS3231 adalah modul RTC, sama dengan modul DS1307 yang umum digunakan. Harganya cukup murah dan jauh lebih akurat dari sekutu DS1307nya. Modul ini mengandung osilator kristal terkompensasi suhu (TCXO) dan kristal terintegrasi. Perangkat ini mencakup masukan baterai dan mempertahankan pengaturan waktu yang akurat saat daya utama terganggu.

Tampilan Grafis OLED 128x64

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

Layar OLED akan menampilkan data kita. Ukuran layar ini cukup kompak dan layarnya sangat cerah. Layar OLED Adafruit dapat dikontrol menggunakan antarmuka SPI atau I2C, yang dapat diatur di bagian belakang layar. Anda dapat menggunakan layar yang lebih terjangkau juga (banyak tersedia di eBay), tetapi hati-hati dalam memilihnya karena layar perlu bekerja dengan file header yang akan kita gunakan melalui pustaka Adafruit.

Jam Cuaca Arduino – Tampilan Real-Time Tanggal, Waktu, Suhu & Kelembaban

Kode

Time_Temp_Humidity_Display.inoArduino

Ini adalah kode untuk mengkompilasi proyek. Ingat untuk menambahkan file header yang diperlukan, tanpa itu proyek tidak akan berfungsi.

//Salam pengguna hackster.io! //Tampilan Tanggal, Waktu, Suhu dan Kelembaban /////////////////////////Untuk OLED//////////////////////// #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Jika menggunakan SPI perangkat lunak (kasus default): #define OLED_MOSI 9 //MOSI alias SDA #define OLED_CLK 10 //CLK alias SCL #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #if (SSD1306_LCDHEIGHT != 64) #error("Tinggi tidak benar, silakan perbaiki Adafruit_SSD1306.h!"); #endif ///////////////////////////////////////////////////////////// ////////////////////////////Untuk DHT////////////////////////// #include<dht.h> dht DHT; #define DHT11_PIN 3 int DHTtimer = 0; ///////////////////////////////////////////////////////////// ////////////////////////////Untuk RTC (DS3231)////////////////////////// //SDA ke A4, SCL ke A5 #define DS3231_I2C_ADDRESS 0x68 // Konversi angka desimal normal ke biner kode desimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Konversi biner kode desimal ke angka desimal normal byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } ///////////////////////////////////////////////////////////// void setup() { Wire.begin(); Serial.begin(9600); //atur waktu awal di sini, setelah mengatur waktu, beri komentar pada bagian ini //DS3231 detik, menit, jam, hari, tanggal, bulan, tahun //setDS3231time(00,24,12,6,3,2,17); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); } ////////////////////////////Koding DS3231////////////////////////// void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // mengatur data waktu dan tanggal ke DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set input berikutnya untuk memulai dari register detik Wire.write(decToBcd(second)); // set detik Wire.write(decToBcd(minute)); // set menit Wire.write(decToBcd(hour)); // set jam Wire.write(decToBcd(dayOfWeek)); // set hari dalam seminggu (1=Minggu, 7=Sabtu) Wire.write(decToBcd(dayOfMonth)); // set tanggal (1 hingga 31) Wire.write(decToBcd(month)); // set bulan Wire.write(decToBcd(year)); // set tahun (0 hingga 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set pointer register DS3231 ke 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // minta tujuh byte data dari DS3231 mulai dari register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // ambil data dari DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // kirim ke monitor serial Serial.print(hour, DEC); // konversi variabel byte menjadi angka desimal saat ditampilkan Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" Hari dalam seminggu: "); ////////////////////////////////////////////////////////////////// display.setCursor(50,0); display.print(dayOfMonth, DEC); display.print(","); display.setCursor(91,0); display.print("20"); display.print(year, DEC); if (hour<10) { display.setCursor(40,10); display.print("0"); display.print(hour, DEC); display.print(":"); } if (hour>9) { display.setCursor(40,10); display.print(hour, DEC); display.print(":"); } if (minute<10) { display.setCursor(58,10); display.print("0"); display.print(minute, DEC); display.print(":"); } if (minute>9) { display.setCursor(58,10); display.print(minute, DEC); display.print(":"); } if (second<10) { display.setCursor(75,10); display.print("0"); display.print(second, DEC); } if (second>9) { display.setCursor(75,10); display.print(second, DEC); } ////////////////////////////////////////////////////////////////// //////////////////////////////UNTUK HARI DALAM SEMINGGU///////////////////// switch(dayOfWeek){ case 1: Serial.println("Minggu"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Min"); break; case 2: Serial.println("Senin"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Sen"); break; case 3: Serial.println("Selasa"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Sel"); break; case 4: Serial.println("Rabu"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Rab"); break; case 5: Serial.println("Kamis"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Kam"); break; case 6: Serial.println("Jumat"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Jum"); break; case 7: Serial.println("Sabtu"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20,0); display.print("Sab"); break; } //////////////////////////////UNTUK BULAN///////////////////// switch(month) { case 1: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Jan"); break; case 2: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Feb"); break; case 3: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Mar"); break; case 4: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Apr"); break; case 5: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Mei"); break; case 6: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Jun"); break; case 7: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Jul"); break; case 8: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Ags"); break; case 9: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Sep"); break; case 10: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Okt"); break; case 11: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Nov"); break; case 12: display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,0); display.print("Des"); break; } /////////////JARUM JAM/////////////// float x1, y1, a, b; const float pi = 3.14; a=((hour-15)*30); b = (a*pi)/180; x1=40+(9*cos(b)); y1=41+(9*sin(b)); display.drawLine(40,41, x1, y1, WHITE); /////////////JARUM MENIT/////////////// // float x1, y1, a, b; // const float pi = 3.14; a=((minute-15)*6); b = (a*pi)/180; x1=40+(17*cos(b)); y1=41+(17*sin(b)); display.drawLine(40,41, x1, y1, WHITE); /////////////JARUM DETIK/////////////// //float x1, y1, a, b; a=((second-15)*6); b = (a*pi)/180; x1=40+(19*cos(b)); y1=41+(19*sin(b)); display.drawLine(40,41, x1, y1, WHITE); ////////////////BAGIAN JAM ANALOG YANG TIDAK BERGERAK//////////////// display.drawCircle(40, 41, 22, WHITE); display.drawCircle(40, 41, 1, WHITE); display.drawLine(40, 20, 40, 25, WHITE); //12 display.drawLine(40, 63, 40, 58, WHITE); //6 display.drawLine(62, 41, 57, 41, WHITE); //3 display.drawLine(19, 41, 24, 41, WHITE); //9 display.drawLine(50, 24, 47, 28, WHITE); //1 display.drawLine(57, 31, 53, 34, WHITE); //2 display.drawLine(60, 51, 54, 48, WHITE); //4 display.drawLine(51, 58, 48, 54, WHITE); //5 display.drawLine(29, 58, 32, 54, WHITE); //7 display.drawLine(21, 51, 25, 48, WHITE); //8 display.drawLine(22, 31, 27, 33, WHITE); //10 display.drawLine(30, 23, 32, 28, WHITE); //11 } void ReadTempAndHum () { int chk = DHT.read11(DHT11_PIN); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(70,45); display.print("Suhu: "); display.print(DHT.temperature, 0); display.print("C"); display.setCursor(70,56); display.print("Kelembaban: "); display.print(DHT.humidity, 0); display.print("%"); Serial.print(" Kelembaban: " ); Serial.print(DHT.humidity, 1); Serial.print("%"); Serial.print(" | Suhu: "); Serial.print(DHT.temperature, 1); Serial.println("C"); } void loop() { displayTime(); // tampilkan data RTC real-time pada Serial Monitor, DHTtimer = DHTtimer + 1; //Untuk memastikan DHT hanya dibaca setiap 2 detik, kita buat hitungan yang berlangsung selama 2 detik if (DHTtimer > 1) { display.fillRect(70, 45, 128, 64, BLACK); ReadTempAndHum (); DHTtimer = 0; } delay(1000); display.display(); //Bagian layar yang menampilkan waktu dan tanggal dihapus display.fillRect(0, 0, 64, 64, BLACK); display.fillRect(0, 0, 128, 20, BLACK); } 

Bagian Kustom dan Kotak Pelindung

adafruit_ssd1306-master_KOASsXZpW2.zip, adafruit-gfx-library-master_2IU6g1UpF6.zip, dht_library_Xgke1ZhPls.zip, dht-sensor-library-master_Al4SeQRvaS.zip, arduinortclibrary-master_hKLoSjCilY.zip

Skematik

Catatan: Saya tidak dapat menemukan layar OLED yang tepat di Fritzing. Jika Anda perlu klarifikasi lebih lanjut tentang tempat keluar pin dari layar OLED, periksa komentar pada kode. File yang tersedia: breadboard_diagram_QvhPKCpIo5.fzz dan schematic_XKU0jQoWbx.fzz.

Proses manufaktur

  1. Mengambil Tanggal dan Waktu Saat Ini di Python: Panduan Praktis
  2. Pemantau Suhu dan Kelembaban Jaringan Raspberry Pi – Panduan Pengaturan DIY
  3. Membuat Sensor Suhu Jarak Jauh dengan Raspberry Pi dan Python – Panduan Langkah demi Langkah
  4. Pemantauan Suhu & Kelembaban Mulus di Raspberry Pi dengan EzTemp
  5. Bangun Stasiun Cuaca Laboratorium Terjaring Jaringan dengan Raspberry Pi
  6. Bangun Sistem Pemantauan Suhu & Cahaya Multi-Sensor dengan Raspberry Pi & DS18B20
  7. Verifikasi dan Kalibrasikan Sensor Kelembaban Anda untuk Pengukuran yang Akurat
  8. Menguasai Tanggal dan Waktu Java: Konstruktor, Metode & Praktik Terbaik
  9. Panduan Lengkap Tanggal dan Waktu dalam C++
  10. Menguasai Tanggal dan Waktu dalam Python: Panduan Praktis