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

Cara Membuat Monitor Energi Arduino dan Data Logger

Komponen dan persediaan

Arduino UNO
× 1
Dr. Dewan Pemantau Energi Wattson
× 1
Enklosur untuk Dewan Pemantau Energi Dr. Wattson
× 1
Papan breakout kartu MicroSD Adafruit+
× 1
LED (generik)
× 1
Tombol Taktil Adafruit
× 1
Resistor 221 ohm
× 1

Tentang proyek ini

(Posting ini didasarkan pada postingan yang pertama kali diterbitkan pada 19 September 2017 di Medium, dan telah diperbarui dan lebih terkini di sini, termasuk detail publikasi perpustakaan dan contoh di GitHub).

Dalam postingan ini, saya akan menunjukkan kepada Anda bagaimana saya membuat monitor energi Arduino dan pencatat data yang akan membantu saya mengumpulkan data arus dan energi untuk beban yang berbeda dengan mudah, dan memplot informasi tersebut menggunakan program seperti Excel.

Beberapa dari Anda mungkin menyadari bahwa saya telah membuat papan pemantau energi baru yang saya sebut Dr. Wattson (yang didasarkan pada #Microchip #MCP39F521, IC pemantauan daya) bersama dengan perpustakaan #Arduino dan perpustakaan #Python ( untuk papan seperti #RaspberryPi dan #BeagleBoneBlack) untuk kemudahan integrasi data energi berkualitas ke dalam proyek Anda berikutnya! Jika Anda belum pernah mendengarnya dan ingin informasi lebih lanjut, lihat https://upbeatlabs-wattson.launchrock.com/ untuk informasi lebih lanjut. Ini juga tersedia di Tindie.

Untuk membantu saya mempelajari karakteristik energi dari beban yang berbeda, saya melanjutkan dan membuat Monitor Energi Arduino dan Data Logger, yang merupakan subjek dari posting ini!

Ini terdiri dari Arduino (tentu saja!) yang berbicara dengan papan Dr. Wattson untuk mendapatkan data energi, bersama dengan kartu SD untuk menulis data. Saya juga telah menambahkan tombol untuk mengaktifkan pencatatan data, bersama dengan indikator LED untuk menunjukkan saat data sedang dicatat. Tombol bersama dengan LED membuatnya sangat mudah untuk memulai pencatatan data ketika saya telah memasang beban yang sesuai.

Untuk memudahkan pencatatan dan analisis selanjutnya, saya juga menerapkan skema rotasi log, sehingga setiap proses akan dicatat ke file yang berbeda. Keluarannya dalam format CSV, yang berarti dapat dengan mudah diimpor ke Excel (atau Numbers di Mac atau yang setara lainnya), dan data diplot.

Siapkan

Saya menempatkan papan Dr. Wattson dalam wadah akrilik sehingga kabel AC tertutup, dan Anda dapat menggunakannya dengan aman! Seperti ini:

Saya kemudian memperbarui enklosur sedikit dan sekarang tersedia di Tindie. Ini adalah apa yang tampak seperti sekarang. Sedikit lebih bersih dengan soket IEC tambahan, dan konektor spade untuk koneksi yang mudah.

Saya telah menyiapkan Panduan Pengguna yang menunjukkan bagaimana pengkabelan harus dilakukan, yang sekarang tersedia di GitHub.

Keluaran digital yang berasal dari Dr. Wattson benar-benar terisolasi dari listrik, karena pengukuran energi dilakukan secara terisolasi menggunakan transformator arus dan tegangan, sehingga keluaran digital sangat aman untuk ditangani.

Setelah berada di dalam enklosur, yang perlu Anda lakukan hanyalah mencolokkan kabel ke stopkontak yang ada, dan menyambungkan perangkat apa pun ke stopkontak di enklosur — PCB dirancang untuk arus hingga 12A, jadi dibuat dengan cukup baik! Ini dikalibrasi untuk mengukur arus hingga 4A (sehingga saya dapat mengukur arus yang sangat kecil untuk mengukur daya siaga — chip MCP39F521 yang menjadi dasarnya memiliki rasio dinamis 4000:1, yang berarti dapat mengukur dari 4A hingga 1mA)

Sirkuit

Berikut adalah rangkaian yang saya gunakan:

Saya menggunakan pelarian kartu SD yang mirip dengan Adafruit (jadi saya menggunakannya di Fritzing, karena itu adalah bagian terdekat). Koneksi cukup standar — CLK (Arduino Uno pin 13), MISO (Arduino Uno pin 12), MOSI (Arduino Uno pin 11) dan CS (Pilihan chip). CS dapat dikonfigurasi, meskipun defaultnya adalah menyematkan 10 untuk CS perangkat keras — Saya hanya menggunakannya.

Untuk tombol, saya menggunakan perpustakaan Tombol oleh Jack Christensen, yang menyediakan debouncing dan berbagai hal berguna dalam paket yang mudah digunakan. (https://github.com/JChristensen/Button). Tombol menggunakan pullup internal Arduino, sehingga tidak memiliki pullup eksternal dan juga menggunakan logika terbalik (tinggi OFF, rendah ON) — semua ini dapat dikonfigurasi sebagai parameter untuk konstruktor Button! Saya telah menghubungkan tombol ke pin 4, tetapi Anda dapat menggunakan pin apa pun yang tersedia yang Anda suka.

Saya benar-benar tidak punya waktu dan kesabaran untuk memodelkan Dr. Wattson sebagai bagian baru di Fritzing, jadi saya curang, dan menggunakan saran Z-HUT untuk dengan mudah menyiapkan bagian kustom tanpa banyak basa-basi. Saya sangat merekomendasikan untuk menontonnya! https://www.youtube.com/watch?v=dfxx8wF3Uhs — terima kasih Z-HUT ! :-)

Satu-satunya downside adalah bahwa saya harus puas menggunakan gambar papan tempat memotong roti dari bagian "IC generik" yang saya modifikasi untuk mewakili Dr. Wattson. C'est la vie!

Berikut adalah tampilan pin Dr. Wattson (dari kiri ke kanan):

  • SCL — untuk komunikasi I2C, masuk ke Arduino Uno A5
  • SDA — untuk komunikasi I2C, masuk ke Arduino Uno A4
  • ZCD — Zero Cross Detection — kami tidak menggunakan fitur ini dalam contoh ini
  • Acara — Indikator acara — kami tidak menggunakan fitur ini dalam contoh ini
  • GND — Hubungkan ke Arduino GND
  • VIN — Hubungkan ke Arduino 5V
  • 3.3v — Hubungkan ke Arduino 3.3v
  • GND — Hubungkan ke Arduino GND (Anda hanya perlu menghubungkan salah satu pin GND)

Sketsa

Oke, sekarang beralih ke pemrograman yang sebenarnya!

Mari saya mulai dengan menjelaskan sketsa. Di setup(), pertama-tama saya menyiapkan komunikasi kartu SD, dan komunikasi Dr.Wattson dengan memanggil metode begin() masing-masing.

// lihat apakah kartu ada dan dapat diinisialisasi:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("Kartu gagal, atau tidak ada")); // jangan lakukan apa-apa lagi:} wattson.begin(); // Berikan alamat yang sesuai. Default ke 0x74 

Saya juga menginisialisasi pin LED sebagai OUTPUT.

// menginisialisasi pin digital sebagai output. pinMode(LED, OUTPUT); 

Tombol dideklarasikan secara global jadi saya tidak perlu melakukan apa pun untuk menyiapkan tombol.

#define BUTTON_PIN 4 //Menghubungkan sakelar tombol taktil (atau yang serupa) //dari pin 4 Arduino ke ground. #define PULLUP true //Untuk mempermudah, kami menggunakan resistor pullup internal Arduino.#define INVERT true //Karena resistor pullup akan menjaga pin tetap tinggi kecuali //saklar ditutup, ini adalah logika negatif, yaitu tinggi state //berarti tombol TIDAK ditekan. (Dengan asumsi sakelar yang biasanya terbuka.)#define DEBOUNCE_MS 20 //Waktu debounce 20 milidetik biasanya bekerja dengan baik untuk sakelar tombol taktil.Tombol myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //deklarasikan tombol 

Pencatatan data saya dilakukan dalam file dengan nama seperti DATAXX.CSV, di mana XX adalah angka (dari 00 hingga 99, jadi 100 file). Saya memeriksa kartu SD untuk nama file yang ada, dan memilih nama file terbaru yang tidak digunakan — misalnya DATA15.CSV

char filename[] ="DATA00.CSV";setup() { ... // buat file baru untuk (uint8_t i =0; i <100; i++) { nama file[4] =i /10 + '0'; namafile[5] =i%10 + '0'; if (! SD.exists(nama file)) { Serial.print(F("Data file adalah ")); Serial.println(nama file); // hanya membuka file baru jika tidak ada break; // tinggalkan lingkaran! nama file sekarang akan menjadi yang kita inginkan } }...} 

Dalam fungsi loop(), setelah tombol ditekan, itu akan mengaktifkan variabel readData, yang mengontrol apakah saya membaca data energi.

void loop() { ... myBtn.read(); //Baca tombol if (myBtn.wasReleased()) { //Jika tombol dilepas, ubah status LED readData =!readData; digitalWrite(LED, readData); } if (readData) { ... // membaca data dan menyimpan ke kartu SD, dll .......} 

Setelah readData diaktifkan, saya membaca data energi dari Dr. Wattson, dan juga mencatat waktu:

 UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.readMCP39F521(&data, NULL); unsigned long currentMillis =milis(); 

dan tulis ke kartu SD:

 // jika file tersedia, tulis ke sana:File dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print(currentMillis); dataFile.print(","); dataFile.print(fData.currentRMS); dataFile.print(","); dataFile.print(fData.activePower); dataFile.print(","); dataFile.print(fData.reactivePower); dataFile.print(","); dataFile.println(fData.apparentPower); // cetak juga ke port serial:dataFile.close(); } // jika file tidak terbuka, muncul error:else { Serial.print(F("error opening ")); Serial.println(nama file); }  

Jika tombol ini diaktifkan kembali, saya menghentikan pembacaan/perekaman data.

Aksi!

Setelah saya mengkompilasi dan mengunggah sketsa ke Arduino saya, mendapatkan data energi cukup mudah.

Saya memasang beban pilihan — lampu CFL. Saya ingin melihat arus dan konsumsi energi dari perspektif cold-start, serta warm-start. Saya mencolokkan lampu, tetapi tidak menyalakannya.

Saya menekan tombol di sirkuit saya untuk memulai pengukuran energi — ketika itu masuk, LED MERAH memberi tahu saya begitu! Saya kemudian menyalakan Lampu CFL, dan menunggu sampai saya pikir saya sudah mendapatkan cukup data — Anda lihat, CFL, ketika memulai, mengkonsumsi lebih banyak energi daripada yang diiklankan (dalam kasus saya, bohlam CFL 14W), dan kemudian menetap akhirnya menjadi sekitar 14W. Saya menunggu sampai pembacaan selesai. Saya kemudian menekan tombol untuk mematikan pembacaan.

Sekarang saya dapat mengeluarkan kartu SD saya dan mulai melihat datanya!

PS — Untuk mencatat data dari perangkat tambahan, yang harus Anda lakukan hanyalah menyetel ulang Arduino — Arduino akan memilih DATAXX.CSV berikutnya yang tersedia untuk memasukkan data, sehingga Anda dapat dengan mudah memisahkan data.

Catatan: Alih-alih menggunakan Arduino Serial Monitor, saya menggunakan perintah "layar" bawaan pada terminal Mac saya sebagai terminal serial. Di Sketch saya, saya mencetak data energi ke Serial, dan juga mengeluarkan perintah "clearscreen", sehingga output tidak bergerak

Serial.write("\x1B" "c"); // Kosongkan layar pada terminal wattson.printMCP39F521Data(&data); 

Ini hanya bekerja pada terminal biasa yang dapat menerima perintah terminal seperti di atas, dan sayangnya tidak bekerja pada Arduino Serial Monitor. Namun, setelah Anda mencoba layar , Anda mungkin tidak akan pernah kembali ke Arduino Serial Monitor!

Perintahnya akan seperti ini:

$ layar /dev/tty.usbmodem1411 9600 

di mana parameter pertama adalah "port serial", dan yang kedua adalah kecepatan yang telah Anda konfigurasikan untuk koneksi Serial Anda di sketsa Arduino Anda.

Merencanakan data di Excel

Karena file dalam format CSV, memuatnya dan memplotnya di Excel cukup mudah. Saya tidak akan membahas detailnya di sini, karena ada banyak tutorial untuk membuat bagan di Excel. Saya menyisipkan baris yang berisi tajuk kolom

stempel waktu, RMS saat ini, ActivePower, ReactivePower, AparentPower 

(catatan untuk diri sendiri — ini akan menjadi penyempurnaan Sketsa saya di masa mendatang — untuk menambahkan tajuk kolom di CSV secara langsung!)

Saya memilih titik data di atas untuk dicatat dan diplot. Konsumsi saat ini dari waktu ke waktu jelas menarik. Mengapa ActivePower, ReactivePower, dan ClearPower? Berdasarkan karakteristik kelistrikan perangkat, ini dapat berupa beban resistif, beban reaktif, atau di antara keduanya, dan ketiga parameter daya tersebut memberi tahu kita karakteristik keseluruhannya, dan juga jika berubah seiring waktu. Atau begitulah menurut saya…

Mari kita lihat hasil saya untuk Lampu CFL dari awal yang dingin:

Puncak arus sekitar 0,21 amp sebelum akhirnya menetap di sekitar 0,18 amp.

Puncak daya aktif sekitar 17 watt sebelum akhirnya menjadi sekitar 14,2 watt.

Setelah selesai, saya mematikan CFL dan menunggu sebentar, sebelum menyalakannya kembali (karenanya penurunan arus pada grafik di atas). Anda dapat melihat bahwa begitu CFL telah "memanaskan", CFL dengan cepat menyesuaikan konsumsi kondisi tunaknya.

Kesimpulan

Ada banyak data dan eksperimen menarik yang dapat Anda lakukan dengan data energi dari peralatan dan perangkat Anda. Saya sangat bersemangat untuk mulai mendapatkan beberapa data dan membagikannya dengan Anda!

Tujuan saya dengan Dr. Wattson adalah untuk mengaktifkan data energi berkualitas untuk Maker dan membuatnya lebih mudah diakses, sehingga Anda dapat menggunakannya sebagai landasan untuk ide-ide liar dan gila Anda.

Dr. Wattson dirancang agar aman digunakan (terutama dengan enklosur), dilengkapi dengan kalibrasi (sehingga Anda bisa langsung mendapatkan data energi berkualitas), tetapi juga menampilkan fungsionalitas yang lebih kompleks untuk pengguna yang serius

  • rutinitas kalibrasi
  • ZCD (Detektor Zero Crossing)
  • Pemberitahuan peristiwa (arus berlebih, daya berlebih, penurunan tegangan/peristiwa lonjakan tegangan)
  • kemampuan untuk menyesuaikan rentang pembacaan (dengan memodifikasi resistor beban dan atau CT dan mengkalibrasi ulang menggunakan rutinitas kalibrasi yang disebutkan di atas),
  • menggunakan beberapa Dr. Wattsons bersama-sama dengan satu MCU (dengan mengubah pengalamatan I2C yang dapat dikonfigurasi).

Jika Anda tertarik dengan pemantauan energi dan menyukai Dr. Wattson, silakan mendaftar di (https://upbeatlabs-wattson.launchrock.com/) untuk tetap mengikuti berita dan pembaruan!

Semangat,

Sridhar

Berikut adalah seluruh Sketsa, untuk referensi Anda! Anda juga dapat menemukannya dan perpustakaan Dr. Wattson, bersama dengan sejumlah contoh lain di repositori GitHub drwattson Upbeat Labs.

/****************************************** ************************************ Ini adalah contoh sketsa untuk Upbeat Labs Dr. Wattson Energy Monitoring Breakout -> https://www.tindie.com/products/UpbeatLabs/dr-wattson-energy-monitoring-board-2/ Contoh ini menunjukkan mendapatkan Data Energi dari Dr. Wattson dan menuliskannya ke kartu SD dengan dipisahkan koma (CSV). Tombol digunakan untuk mengaktifkan pengumpulan data, sehingga Anda dapat mencatat data saat Anda siap. Saat tombol beralih pengukuran, sketsa mulai mengumpulkan modul untuk data Energi dan mencetaknya. Untuk kemudahan melihat nilainya, gunakan program seperti layar untuk menampilkan keluaran Serial. Serial menulis karakter yang diperlukan untuk menghapus layar pada terminal biasa, yang berarti bahwa output serial akan tetap di tempatnya dan hanya diperbarui dari waktu ke waktu. Nyalakan daya input untuk melihat tegangan RMS, nilai frekuensi saluran berubah ke nilai yang sesuai. Nyalakan beban yang terpasang pada output Anda untuk melihat RMS saat ini, faktor daya, nilai daya aktif, reaktif, dan nyata berubah. Semua nilai ini ditulis ke kartu SD dalam format CSV, yang kemudian dapat digunakan dengan program seperti Excel untuk melihat/memplot data. Nama file dalam bentuk DATAnn.CSV. Pada saat setup, nama file baru dipilih yang belum ada, sehingga file akan menjadi DATA00.CSV, DATA01.CSV, DATA02.CSV dan seterusnya. Logging berputar ke file baru hingga DATA99.CSV. Komunikasi terjadi melalui I2C. 2 pin diperlukan untuk antarmuka. Ada 4 kemungkinan alamat I2C yang dapat dipilih per papan (dapat dipilih melalui dua jumper solder (yang memilih setiap pin menjadi tinggi atau rendah). Berdasarkan ini, ada 4 kemungkinan alamat:Alamat I2C SJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGH Dr. Wattson memiliki dua output, ZCD atau Event, yang digunakan untuk notifikasi, dan oleh karena itu biasanya akan dihubungkan ke pin yang dapat diinterupsi secara eksternal (seperti pin2 atau pin3 pada Arduino Uno).Dalam contoh ini, ZCD dan Event tidak digunakan Tombol terhubung ke pin 4. * Kartu SD terpasang ke bus SPI sebagai berikut:** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 10 LED terhubung ke pin 9 Tertulis oleh Sridhar Rajagopal untuk Upbeat Labs LLC. Lisensi BSD. Semua teks di atas harus disertakan dalam setiap redistribusi*/#include #include "UpbeatLabs_MCP39F521.h"#include #include  //https://github.com/JChristensen/Button#define BUTTON_PIN 4 //Hubungkan sakelar tombol taktil (atau yang serupa) //dari pin Arduino 4 to ground.#define PULLUP true //Untuk mempermudah, kami menggunakan resistor pullup internal Arduino.#define INVERT true //Karena resistor pullup akan menjaga pin tetap tinggi kecuali //saklar ditutup, ini adalah logika negatif, yaitu status tinggi //berarti tombol TIDAK ditekan. (Dengan asumsi sakelar yang biasanya terbuka.)#define DEBOUNCE_MS 20 //Waktu debounce 20 milidetik biasanya bekerja dengan baik untuk sakelar tombol taktil.Tombol myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Deklarasikan tombol#define LED 9 // Hubungkan LED (melalui resistor 220ohm) dari pin 9 (anoda) ke GND (katoda). #define CHIP_SELECT 10UpbeatLabs_MCP39F521 wattson =UpbeatLabs_MCP39F521();bool readData =false;char filename[] ="DATA00.CSV";void setup() { Serial.begin(9600); //nyalakan komunikasi serial Serial.println(F("**Upbeat Labs Dr. Wattson Example Sketch**")); Serial.println(F("Upbeat Labs Dr. Wattson Energy Data Sketsa Contoh Pencatatan Kartu SD")); Serial.println(F("********************************************* ***********************")); // inisialisasi pin digital sebagai output. pinMode(LED, OUTPUT); pinMode(CHIP_SELECT, OUTPUT); // lihat apakah kartu ada dan dapat diinisialisasi:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("*** Kartu SD gagal, atau tidak ada ***")); // jangan lakukan apa-apa lagi:} wattson.begin(); // Berikan alamat yang sesuai. Default ke 0x74 // buat file baru untuk (uint8_t i =0; i <100; i++) { nama file[4] =i/10 + '0'; namafile[5] =i%10 + '0'; if (! SD.exists(nama file)) { Serial.print(F("Data file adalah ")); Serial.println(nama file); // hanya membuka file baru jika tidak ada break; // tinggalkan lingkaran! nama file sekarang akan menjadi yang kita inginkan } } Serial.println(F("**initialization complete.**"));}void loop() { myBtn.read(); //Baca tombol if (myBtn.wasReleased()) { //Jika tombol dilepas, ubah status LED readData =!readData; digitalWrite(LED, readData); } if (readData) { Data UpbeatLabs_MCP39F521_Data; UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.read(&data, NULL); unsigned long currentMillis =milis(); if (readMCPretval ==UpbeatLabs_MCP39F521::SUCCESS) { // Cetak barang Serial.write("\x1B" "c"); // Bersihkan layar pada terminal biasa wattson.convertRawData(&data, &fData); printMCP39F521Data(&fData); // jika file tersedia, tuliskan:File dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print(currentMillis); dataFile.print(","); dataFile.print(fData.currentRMS); dataFile.print(","); dataFile.print(fData.activePower); dataFile.print(","); dataFile.print(fData.reactivePower); dataFile.print(","); dataFile.println(fData.apparentPower); // cetak juga ke port serial:dataFile.close(); } // jika file tidak terbuka, muncul error:else { Serial.print(F("error opening ")); Serial.println(nama file); } } else { Serial.print(F("Error!")); Serial.println(readMCPretval); } }}void printMCP39F521Data(UpbeatLabs_MCP39F521_FormattedData *data){ Serial.print(F("Voltage =")); Serial.println(data->voltageRMS, 4); Serial.print(F("Saat ini =")); Serial.println(data->currentRMS, 4); Serial.print(F("Frekuensi Baris =")); Serial.println(data->lineFrequency, 4); Serial.print("Tegangan Masukan Analog ="); Serial.println(data->analogInputVoltage, 4); Serial.print(F("Faktor Daya =")); Serial.println(data->powerFactor, 4); Serial.print(F("Daya Aktif =")); Serial.println(data->activePower, 4); Serial.print(F("Daya Reaktif =")); Serial.println(data->reactivePower, 4); Serial.print(F("Kekuatan Terlihat =")); Serial.println(data->apparentPower, 4);} 

Kode

  • Cuplikan kode #1
  • Cuplikan kode #3
  • Cuplikan kode #4
  • Cuplikan kode #5
  • Cuplikan kode #7
  • Cuplikan kode #11
Cuplikan kode #1Teks biasa
// lihat apakah kartu ada dan dapat diinisialisasi:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("Kartu gagal, atau tidak ada")); // jangan lakukan apa-apa lagi:} wattson.begin(); // Berikan alamat yang sesuai. Default ke 0x74
Cuplikan kode #3Teks biasa
#define BUTTON_PIN 4 //Hubungkan sakelar tombol taktil (atau yang serupa) //dari pin 4 Arduino ke ground. #define PULLUP true //Untuk mempermudah, kami menggunakan resistor pullup internal Arduino.#define INVERT true //Karena resistor pullup akan menjaga pin tetap tinggi kecuali //saklar ditutup, ini adalah logika negatif, yaitu tinggi state //berarti tombol TIDAK ditekan. (Dengan asumsi sakelar yang biasanya terbuka.)#define DEBOUNCE_MS 20 //Waktu debounce 20 milidetik biasanya bekerja dengan baik untuk sakelar tombol taktil.Tombol myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //deklarasikan tombol
Cuplikan kode #4Teks biasa
char filename[] ="DATA00.CSV";setup() { ... // buat file baru untuk (uint8_t i =0; i <100; i++) { nama file[4] =i/10 + '0'; namafile[5] =i%10 + '0'; if (! SD.exists(nama file)) { Serial.print(F("Data file adalah ")); Serial.println(nama file); // hanya membuka file baru jika tidak ada break; // tinggalkan lingkaran! nama file sekarang akan menjadi yang kita inginkan } }...}
Cuplikan kode #5Teks biasa
 myBtn.read(); //Baca tombol if (myBtn.wasReleased()) { //Jika tombol dilepas, ubah status LED readData =!readData; digitalWrite(LED, readData); } if (readData) { ... // membaca data dan menyimpan ke kartu SD, dll ....
Cuplikan kode #7Teks biasa
 // jika file tersedia, tulis ke file tersebut:File dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print(currentMillis); dataFile.print(","); dataFile.print(data.currentRMS); dataFile.print(","); dataFile.print(data.activePower); dataFile.print(","); dataFile.print(data.reactivePower); dataFile.print(","); dataFile.println(data.apparentPower); // cetak juga ke port serial:dataFile.close(); } // jika file tidak terbuka, muncul error:else { Serial.print(F("error opening ")); Serial.println(nama file); } 
Cuplikan kode #11Teks biasa
/********************************************* ***** Ini adalah contoh sketsa untuk Upbeat Labs Dr. Wattson Energy Monitoring Breakout Komunikasi terjadi melalui I2C. 2 pin diperlukan untuk antarmuka. Ada 4 kemungkinan alamat I2C yang dapat dipilih per papan (dapat dipilih melalui dua jumper solder (yang memilih setiap pin menjadi tinggi atau rendah). Berdasarkan ini, ada 4 kemungkinan alamat:Alamat I2C SJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGHDr. Wattson memiliki dua output, ZCD atau Event, yang digunakan untuk notifikasi, dan oleh karena itu biasanya akan dihubungkan ke pin yang dapat diinterupsi secara eksternal (seperti pin2 atau pin3 pada Arduino Uno). Dalam contoh ini, ZCD dan Event tidak digunakan .Tombol terhubung ke pin 4. * Kartu SD terpasang ke bus SPI sebagai berikut:** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** LED CS - pin 10 terhubung ke pin 9 Ditulis oleh Sridhar Rajagopal untuk Upbeat Labs LLC. Lisensi BSD. Semua teks di atas harus disertakan dalam setiap redistribusi */ #include #include "MCP39F521.h"#include #include / /https://github.com/JChristensen/Button#define BUTTON_PIN 4 //Hubungkan sakelar tombol taktil (atau yang serupa) //dari pin 4 Arduino ke ground . #define PULLUP true //Untuk mempermudah, kami menggunakan resistor pullup internal Arduino.#define INVERT true //Karena resistor pullup akan menjaga pin tetap tinggi kecuali //saklar ditutup, ini adalah logika negatif, yaitu tinggi state //berarti tombol TIDAK ditekan. (Dengan asumsi sakelar yang biasanya terbuka.)#define DEBOUNCE_MS 20 //Waktu debounce 20 milidetik biasanya bekerja dengan baik untuk sakelar tombol taktil.Tombol myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Deklarasikan tombol#define LED 9 // Hubungkan LED (melalui resistor 220ohm) dari pin 9 (anoda) ke GND (katoda).#define CHIP_SELECT 10MCP39F521 wattson =MCP39F521();bool readData =false;char filename[ ] ="DATA00.CSV";pengaturan batal() { Serial.begin(9600); //nyalakan komunikasi serial Serial.println(F("**Upbeat Labs Dr. Wattson Example Sketch**")); // inisialisasi pin digital sebagai output. pinMode(LED, OUTPUT); pinMode(10, OUTPUT); // lihat apakah kartu ada dan dapat diinisialisasi:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("Kartu gagal, atau tidak ada")); // jangan lakukan apa-apa lagi:} wattson.begin(); // Berikan alamat yang sesuai. Default ke 0x74// buat file baru untuk (uint8_t i =0; i <100; i++) { nama file[4] =i/10 + '0'; namafile[5] =i%10 + '0'; if (! SD.exists(nama file)) { Serial.print(F("Data file adalah ")); Serial.println(nama file); // hanya membuka file baru jika tidak ada break; // tinggalkan lingkaran! nama file sekarang akan menjadi yang kita inginkan } } Serial.println(F("**initialization complete.**")); }// Beginilah tampilan MCP39F521Data, untuk referensi!//typedef struct MCP39F521Data {// uint16_t systemStatus;// uint16_t systemVersion;// uint16_t voltageRMS;// uint16_t lineFrequency;// uint16_t; / uint32_t currentRMS;// uint32_t activePower;// uint32_t reaktifPower;// uint32_t semuPower;//} MCP39F521Data; void loop() { myBtn.read(); //Baca tombol if (myBtn.wasReleased()) { //Jika tombol dilepas, ubah status LED readData =!readData; digitalWrite(LED, readData); } if (readData) { MCP39F521Data data; int readMCPretval =wattson.readMCP39F521(&data, NULL); unsigned long currentMillis =milis(); if (readMCPretval) { // Cetak barang Serial.write("\x1B" "c"); // Bersihkan layar pada terminal biasa wattson.printMCP39F521Data(&data); // jika file tersedia, tuliskan:File dataFile =SD.open(filename, FILE_WRITE);if (dataFile) { dataFile.print(currentMillis); dataFile.print(","); dataFile.print(data.currentRMS); dataFile.print(","); dataFile.print(data.activePower); dataFile.print(","); dataFile.print(data.reactivePower); dataFile.print(","); dataFile.println(data.apparentPower); // cetak juga ke port serial:dataFile.close(); } // jika file tidak terbuka, muncul error:else { Serial.print(F("error opening ")); Serial.println(nama file); } } else { Serial.println(F("Error!")); } }}
Github
https://github.com/JChristensen/Buttonhttps://github.com/JChristensen/Button
Perpustakaan Dewan Pemantau Energi Dr. Wattson yang optimis
Perpustakaan untuk digunakan dengan Dewan Pemantau Energi Dr. WattsonDr. Wattson adalah Papan Pemantau Energi untuk Arduino, Raspberry Pi, dan Mikrokontroler Ramah Pembuat lainnya. Mudah mengintegrasikan pengukuran energi AC berkualitas ke dalam proyek Anda berikutnya! Berdasarkan MCP39F521, chip pemantauan daya satu fase dari Microchip, papan ini dirancang untuk toleran terhadap berbagai voltase, yang berarti juga dapat digunakan dengan Raspberry Pi atau MCU 3.3v lainnya dengan mudah. ​​Unit ini dilengkapi pra-kalibrasi (memungkinkan pengukuran dari 1mA hingga 4A) untuk memungkinkan Anda mulai melakukan pengukuran kualitas saat bepergian hanya dengan beberapa perintah sederhana. Anda tidak memerlukan CT tambahan atau komponen lainnya. Jika Anda adalah pengguna yang lebih mahir, Anda memiliki berbagai fungsi yang tersedia dari perpustakaan yang kaya, serta kemampuan untuk mengubah perangkat keras agar sesuai dengan kebutuhan Anda dan mengkalibrasi ulang menggunakan library.https://github.com/upbeatlabs/drwattson

Skema


Proses manufaktur

  1. Cloud dan Bagaimana Mengubah Dunia TI
  2. Cara membuat dan mengoptimalkan jadwal pemeliharaan preventif
  3. Cara Membuat Autoencoder Variasi dengan TensorFlow
  4. Pencatat Data Suhu dan Kelembaban
  5. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  6. Cara membaca suhu dan kelembaban di Blynk dengan DHT11
  7. Monitor Rumah
  8. Smart Energy Monitor Berbasis Arduino
  9. Logger Data GPS, Kurva Real-Time, Tinggi Maks, dan Kecepatan Maks
  10. Cara Membuat Kompas menggunakan Arduino dan Mengolah IDE