Tampilan ECG Realtime pada OLED dengan Arduino UNO
Komponen dan Perlengkapan
Arduino UNO – 1 unit
Perangkat uECG – 1 unit
Modul nRF24 (generic) – 1 unit
Modul Tampilan OLED ElectroPeak 0.96" 64x128 – 1 unit
Tentang Proyek Ini
Beberapa waktu lalu saya memposting beberapa proyek yang menunjukkan cara mendapatkan data dari perangkat uECG - namun mereka memiliki banyak kode yang berantakan dan masih hanya menggunakan data dasar dari perangkat itu. Jadi akhirnya saya menulis library Arduino yang membuatnya jauh lebih sederhana dan jauh lebih andal, berikut ini: https://github.com/ultimaterobotics/uECG_library (perlu diperhatikan bahwa Anda juga perlu menginstal library RF24 dari Library Manager, dan jika Anda ingin menampilkan data pada OLED seperti dalam proyek ini - juga library Adafruit's SSD1306).
1. Skematik
Skematik sama seperti untuk proyek lain yang menggunakan modul nRF24 dan OLED: nRF24 terhubung ke bus SPI Arduino (D13, D12, D11) dan dua pin arbitrary untuk baris CS dan CE modul - saya memilih D10 dan D9 untuk kenyamanan. Poin penting: modul nRF24 harus terhubung ke garis 3.3V, bukan ke 5V! Ini juga sangat membantu untuk menambahkan kapasitor 1uF atau 10uF antara 3.3V dan GND - modul nRF24 ini membutuhkan tegangan stabil yang Arduino tidak selalu dapat memberikan pada garis 3.3V-nya, kapasitor membantu hal itu.
OLED terhubung melalui I2C - SDA ke A4, SCL ke A5, dan daya dari garis 5V. Dalam kasus saya, modul OLED memiliki resistor bawaan untuk protokol I2C. Jika modul Anda tidak memiliki mereka - Anda perlu menambahkan resistor 4.7k dari SDA ke 3.3V dan dari SCL ke 3.3V, meskipun sebagian besar modul yang saya lihat akhir-akhir ini sudah memilikinya.
Anda dapat melihat skematik yang dilampirkan di bawah ini, dan berikut adalah foto proyek yang telah dirakit:
2. Kode
Library uECG membutuhkan cukup banyak baris kode untuk operasi yang tepat, yaitu:
Dalam setup(), Anda perlu memanggil uECG.begin(pin_cs, pin_ce) - Anda perlu memberitahu nomor pin mana yang digunakan untuk baris CS dan CE nRF24, itu akan menyala modul dan menempatkannya dalam mode yang benar secara internal.
Dalam loop(), Anda perlu memanggil uECG.run() se sering mungkin: perangkat uECG mengirim banyak data - satu paket setiap beberapa milidetik - dan jika Anda tidak memanggil uECG.run() pada waktu paket berikutnya tiba, datanya akan hilang. Itu berarti tidak pernah memanggil fungsi delay() di dalam loop, dan gunakan millis() untuk tugas yang memerlukan waktu (saya telah menambahkan contohnya dalam contoh library).
Kode proyek ini tersedia sebagai contoh di dalam library, dan juga dilampirkan di bawah ini (jika terlihat terlalu kompleks - ingatlah bahwa di sini 95% kode didedikasikan untuk menggambar layar yang dioptimalkan, untuk mencetak nilai sederhana ke serial monitor Anda hanya butuh beberapa baris):
Sangat banyak pemrosesan dilakukan di papan dan Anda dapat mendapatkan berbagai statistik yang dihitung oleh perangkat: BPM, GSR, interval RR terakhir, parameter HRV dan 16 bins HRV (bin pertama mewakili jumlah detak dengan variasi <1%, bin kedua - variasi antara 1 dan 2% dll), jumlah langkah yang ditempuh, pembacaan akselerometer (meskipun tingkat penyegaran rendah jadi bagus hanya untuk estimasi pose).
Tetapi Anda juga dapat mendapatkan pembacaan ECG mentah - aliran data tidak sempurna, kadang-kadang beberapa paket hilang, namun Anda masih dapat mendapatkan sesuatu yang berguna:
Nah, itu saja - jika Anda memiliki perangkat ini yang menempel di sudut, sekarang ini sebenarnya bekerja tanpa terlalu banyak kesulitan :)
Kode
Library Arduino uECG
Memiliki contoh OLED dan serial sederhana di dalamhttps://github.com/ultimaterobotics/uECG_library