Proyek ini adalah hasil dari keinginan untuk merekam tekanan udara yang terpasang di reservoir untuk memeriksa efisiensi kompresor mekanis.
Kode
- SKU237545 Pressure Sensor dengan lcd realtime clock dan data logging
- menyetel jam waktu nyata
SKU237545 Pressure Sensor dengan lcd realtime clock dan data loggingC/C++
//dibuat 12 Agustus 2018 Philip Blayney &Jack Davidson menggunakan kode dari George //Kontaxis untuk Sensor Tekanan SKU237545//https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be #include " LiquidCrystal_PCF8574.h"#termasuk "RTClib.h" // jam waktu nyata#termasuk // kartu sd #menentukan LCD_ADDRESS 0x27 // Menentukan karakteristik LCD#menentukan LCD_ROWS 2#menentukan LCD_COLUMNS 16#menentukan SCROLL_DELAY 150#menentukan BACKLIGHT 255 // inisialisasi objekLiquidCrystal_PCF8574 lcdI2C;RTC_DS1307 RTC; // tentukan objek Jam Waktu Nyataint n =1; int nilai; // Pencatat data sederhana untuk pin analog Arduino #define LOG_INTERVAL 1000 // giling antar entri (kurangi untuk mengambil lebih banyak/data lebih cepat) // berapa milidetik sebelum menulis data yang dicatat secara permanen ke disk // setel ke LOG_INTERVAL ke menulis setiap kali (paling aman) // set ke 10*LOG_INTERVAL untuk menulis semua data setiap 10 pembacaan data, Anda bisa kehilangan hingga // 10 pembacaan terakhir jika daya hilang tetapi menggunakan lebih sedikit daya dan jauh lebih cepat!#define SYNC_INTERVAL 10000 // menggiling antara panggilan ke flush() - untuk menulis data ke kartu 600000 =10 menituint32_t syncTime =0; // waktu sinkronisasi terakhir()const int chipPilih =10; // untuk pelindung data logging, kami menggunakan pin digital 10 untuk file log file baris SD cs;void error(char *str){ Serial.print(F("error:")); Serial.println(str);} void setup(void){ Serial.begin(9600); // mulai serial port Serial.println(F("tekanan membaca dari SKU237545 SENSOR")); //F =fungsi makro untuk menyimpan memori dinamis lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); lcdI2C.print(F("SKU237545 SENSOR" )); lcdI2C.setCursor(0,1); lcdI2C.print(F(" bar dan psi " )); penundaan (2000); // inisialisasi kartu SD Serial.print(F("Inisialisasi kartu SD...")); // pastikan pin pemilihan chip default diatur ke // output, bahkan jika Anda tidak menggunakannya:pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { // melihat apakah kartu ada dan dapat diinisialisasi:error("Kartu gagal, atau tidak ada"); } Serial.println(F("kartu diinisialisasi.")); char namafile[] ="LOGGER00.CSV"; // buat file baru untuk (uint8_t i =0; i <100; i++) { namafile[6] =i/10 + '0'; nama file[7] =i%10 + '0'; if (! SD.exists(filename)) { // hanya membuka file baru jika tidak ada logfile =SD.open(filename, FILE_WRITE); merusak; // tinggalkan lingkaran! } } if (! logfile) { error("tidak dapat membuat file"); } lcdI2C.clear(); lcdI2C.setCursor(0,0); lcdI2C.print(F("No File " )); lcdI2C.print(nama file); Serial.print(F("Masuk ke:")); Serial.println(nama file); // sambungkan ke RTC jika (!RTC.begin()) { logfile.println("RTC gagal"); #jika ECHO_TO_SERIAL Serial.println(F("RTC gagal")); #endif //ECHO_TO_SERIAL } logfile.println("Tanggal / Waktu ,tekanan ,bar ,membaca ,psi,membaca "); penundaan(5000); lcdI2C.clear(); // Bersihkan layar LCD.} void loop(void){int sensorVal=analogRead(A1);//Serial.print("Sensor Value:");//Serial.print(sensorVal);float voltage =(sensorVal*5.0 )/1024.0;// Serial.print("Volt:");// Serial.print(tegangan); float pressure_pascal =(3.0*((float)voltage-0.475))*1000000.0; //kalibrasi di sini float pressure_bar =pressure_pascal/10e5; float pressure_psi =tekanan_bar*14.5038; Serial.print("Tekanan ="); Serial.print(tekanan_bar); Serial.print("bar"); Serial.print("psi"); Serial.print (tekanan_psi); Serial.println(); TanggalWaktu sekarang; sekarang =RTC.sekarang(); // ambil waktu tunda((LOG_INTERVAL -1) - (milis() % LOG_INTERVAL)); // penundaan untuk jumlah waktu yang kita inginkan antara pembacaan kartu sd int H =now.hour(); // Dapatkan jam sekarang dan simpan dalam bilangan bulat yang disebut h int M =now.minute(); // Dapatkan menit sekarang dan simpan dalam bilangan bulat bernama m int S =now.second(); // Dapatkan detik sekarang dan simpan dalam bilangan bulat bernama s logfile.print(now.year(), DEC); logfile.print("/"); logfile.print(sekarang.bulan(), DES); logfile.print("/"); logfile.print(sekarang.hari(), DES); logfile.print(" "); if (H<10){ // Tambahkan nol, jika perlu, seperti di atas logfile.print(0); } file log.print(sekarang.jam(), DES); logfile.print(":"); if (M<10){ // Tambahkan nol, jika perlu, seperti di atas logfile.print(0); } file log.print(sekarang.menit(), DEC); logfile.print(":"); if (S<10){ // Tambahkan nol, jika perlu, seperti di atas logfile.print(0); } file log.print(sekarang.detik(), DEC); // logfile.print('"'); Serial.println(); Serial.print(sekarang.tahun(), DEC); Serial.print("/"); Serial.print(sekarang.bulan(), DEC ); Serial.print("/"); Serial.print(now.day(), DEC); Serial.print(" "); if (H<10){ // Tambahkan nol, jika perlu, seperti di atas Serial.print(0); } Serial.print(now.hour(), DEC); Serial.print(":"); if (M<10){ // Tambahkan nol, jika perlu, seperti di atas Serial. print(0); } Serial.print(now.minute(), DEC); Serial.print(F(":")); if (S<10){ // Tambahkan nol, jika perlu, seperti di atas Serial .print(0); } Serial.print(now.second(), DEC); Serial.println(); lcdI2C.setCursor(0,0); lcdI2C.print(pressure_bar); // Cetak String ke LCD terlebih dahulu baris lcdI2C.print ("bar "); lcdI2C.print (tekanan_psi); lcdI2C.print ("psi "); lcdI2C.setCursor(0,1); //lcdI2C.print(sekarang.tahun(), DEC); // lcd tidak memiliki spasi karakter yang cukup untuk menampilkan tahun // lcdI2C.print("/"); lcdI2C.print(now.day(), DEC); lcdI2C.print("/"); lcdI2C.print(sekarang .month(), DEC); lcdI2C.print(" "); if (H<10){ // Tambahkan nol, jika perlu, seperti di atas lcdI2C.print(0); } lcdI2C.print(sekarang.jam(), DES); lcdI2C.print(":"); if (M<10){ // Tambahkan nol, jika perlu, seperti di atas lcdI2C.print(0); } lcdI2C.print(sekarang.menit(), DEC); lcdI2C.print(":"); if (S<10){ // Tambahkan nol, jika perlu, seperti di atas lcdI2C.print(0); } lcdI2C.print(sekarang.detik(), DES); logfile.print(", "); logfile.print("Tekanan ="); logfile.print(","); logfile.print(tekanan_bar); logfile.print(","); logfile.print("bar"); logfile.print(","); logfile.print(tekanan_psi); logfile.print(","); logfile.print("psi"); logfile.println();if ((millis() - syncTime) mengatur jam waktu nyataC/C++
//Kode oleh tronixstuff#include "Wire.h"#define DS3231_I2C_ADDRESS 0x68// Konversikan bilangan desimal normal ke desimal berkode biner decToBcd(byte val){ return( (val/10*16) + (val%10) );}// Konversikan desimal berkode biner ke angka desimal normalbyte bcdToDec(byte val){ return( (val/16*10) + (val%16) );}void setup(){ Wire.begin(); Serial.begin(9600); // atur waktu awal di sini:// DS3231 detik, menit, jam, hari, tanggal, bulan, tahun setDS3231time(00,43,14,3,14,8,18); // setel waktu yang diperlukan di sini}batalkan setDS3231time(byte detik, byte menit, byte jam, byte hariPekan, bytedayOfMonth, byte bulan, byte tahun){ // setel data waktu dan tanggal ke DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Kawat.tulis(0); // set input berikutnya untuk memulai pada detik register Wire.write(decToBcd(second)); // setel detik Wire.write(decToBcd(menit)); // setel menit Wire.write(decToBcd(jam)); // setel jam Wire.write(decToBcd(dayOfWeek)); // set hari dalam seminggu (1=Minggu, 7=Sabtu) Wire.write(decToBcd(dayOfMonth)); // atur tanggal (1 hingga 31) Wire.write(decToBcd(bulan)); // setel bulan Wire.write(decToBcd(tahun)); // setel tahun (0 hingga 99) Wire.endTransmission();}membatalkan readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){ Wire. mulaiTransmisi(DS3231_I2C_ADDRESS); Kawat.tulis(0); // setel penunjuk register DS3231 ke 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // meminta tujuh byte data dari DS3231 mulai dari register 00h *second =bcdToDec(Wire.read() &0x7f); *menit =bcdToDec(Wire.read()); *jam =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *bulan =bcdToDec(Wire.read()); *tahun =bcdToDec(Wire.read());}void displayTime(){ byte detik, menit, jam, dayOfWeek, dayOfMonth, bulan, tahun; // mengambil data dari DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // kirim ke serial monitor Serial.print(jam, DEC); // mengubah variabel byte menjadi angka desimal saat ditampilkan Serial.print(":"); if (menit<10) { Serial.print("0"); } Serial.print(menit, DES); Serial.print(":"); if (kedua<10) { Serial.print("0"); } Serial.print(kedua, DES); Serial.print(""); Serial.print(hariBulan, DES); Serial.print("/"); Serial.print(bulan, DES); Serial.print("/"); Serial.print(tahun, DES); Serial.print("Hari dalam seminggu:"); switch(dayOfWeek){ kasus 1:Serial.println("Minggu"); merusak; kasus 2:Serial.println("Senin"); merusak; kasus 3:Serial.println("Selasa"); merusak; kasus 4:Serial.println("Rabu"); merusak; kasus 5:Serial.println("Kamis"); merusak; kasus 6:Serial.println("Jumat"); merusak; kasus 7:Serial.println("Sabtu"); merusak; }}void loop(){ displayTime(); // menampilkan data jam real-time pada Serial Monitor, delay(1000); // setiap detik}
LiquidCrystal_PCF8574.h
perpustakaan yang diperlukan, di bawah sketsa, sertakan perpustakaan dan tambahkan .zip, lalu pilih tempat zip diunduhhttps://github.com/mathertel/LiquidCrystal_PCF8574 RTClib.h
perpustakaan, jam waktu nyata, buka zip zip terlebih dahulu. lalu tambahkan file zip yang tersisa ke perpustakaan Andahttps://github.com/mechasolution/RTClib.h