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

Monitor Detak Jantung (Dapat Dipakai dan Nirkabel Menggunakan EKG)

Komponen dan persediaan

perangkat uECG
Untuk benar-benar mengukur BPM. Itu dapat mengirim data melalui protokol yang kompatibel dengan nRF24
× 1
Arduino Nano R3
× 1
Modul nRF24 (Generik)
Modul apa pun dapat digunakan di sini. Diperlukan untuk menerima data BPM dari uECG
× 1
Adafruit NeoPixel Ring:WS2812 5050 RGB LED
× 1
Baterai LiPo
Baterai apa saja dengan kapasitas 200+ mAh
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Tentang proyek ini

Ini adalah iterasi kedua dari proyek pemantauan jantung saya, yang sebelumnya menunjukkan detak jantung di dada, dan terhubung ke uECG melalui kabel. Kelihatannya keren, tapi sama sekali tidak praktis - Anda tidak dapat melihat dengan baik berapa banyak LED yang sedang menyala, itu di luar bidang tampilan normal Anda, dan kabel yang menghubungkannya ke perangkat uECG menciptakan banyak masalah untuk sensor itu sendiri. , jadi pada dasarnya tidak berfungsi saat Anda menjalankannya.

Versi ini menyelesaikan semua masalah ini:dipakai di pergelangan tangan, sehingga Anda dapat melihatnya sambil mengawasi jalan, dan nirkabel, jadi tidak ada distorsi pembacaan, ini benar-benar berfungsi untuk berlari dan memungkinkan Anda melacak beban jantung.

1. Komponen

Sama seperti pada proyek sebelumnya, semua kerja keras dilakukan oleh uECG - ini mengukur data dan menghitung BPM on-board. Tetapi juga, ketika dialihkan ke mode tautan langsung, ia mengirimkan semua informasi ini (bersama dengan data EKG resolusi tinggi, yang tidak kami gunakan di sini) melalui protokol radio yang kompatibel dengan chip nRF24 generik. Jadi komponen penting kedua adalah modul nRF24. Dan Arduino Nano memiliki ukuran yang pas untuk diletakkan di bawah cincin LED kecil, jadi saya menggunakannya sebagai pengontrol (tapi sebenarnya apa pun akan berfungsi dengan baik di sini).

2. Skema

Menghubungkan modul nRF24 tidak sederhana, Anda harus menghubungkan semua kabel SPI (MISO, MOSI, SCK, CS), juga kabel pengaktif chip, dan catu daya. Dan jika Anda menginginkannya dalam ukuran yang cukup kecil - semua pin header harus dilepas, dan kabel disolder langsung ke bantalan. Jadi menghubungkan nRF saja membutuhkan 7 kabel, 14 titik solder. Kabar baiknya adalah semuanya sederhana:cincin LED memerlukan 1 kabel data dan 2 kabel daya, dan 2 kabel daya lainnya masuk ke konektor baterai.

Daftar koneksi adalah sebagai berikut:
nRF24 pin 1 (GND) - GND Arduino
nRF24 pin 2 (Vcc) - 3.3v
nRF24 pin 3 Arduino (Chip Enable) - D9
nRF24 pin 4 (SPI:CS) - D8 Arduino
nRF24 pin 5 (SPI:SCK) - D13
nRF24 pin 6 Arduino (SPI:MOSI) - D11
nRF24 pin 7 Arduino ( SPI:MISO) - D12
LED ring Power Arduino - 5V
LED ring GND Arduino - GND
LED ring Arduino DI - D5 Arduino
Baterai positif (merah) - 5VBaterai negatif (hitam) - GND Arduino
(perhatikan bahwa baterai memerlukan konektor, sehingga dapat dilepas dan diisi)

Catatan penting:Anda tidak dapat menghubungkan kabel MOSI, MISO, SCK ke pin Arduino lainnya. Perangkat keras SPI berada di D11, D12, D13 dan tidak akan berfungsi jika tidak terhubung di sana. Semua pin lainnya dapat diubah (jika Anda akan membuat perubahan yang sesuai dalam program).

3. Program

Satu-satunya hal yang rumit tentang perangkat lunak di sini adalah konfigurasi saluran RF. Saya menghabiskan cukup banyak waktu untuk mencoba membuatnya bekerja sebelum saya menyadari bahwa uECG dan nRF24 menggunakan urutan bit yang berbeda untuk alamat pipa. Ketika saya memperbaikinya, semuanya mulai bekerja segera :) Pada dasarnya kami hanya membaca paket yang masuk, menggunakan byte ke-5 sebagai BPM, dan memfilternya (saluran RF berisik, jadi sesekali Anda mendapatkan nilai acak alih-alih pembacaan yang benar, dan perangkat keras CRC dinonaktifkan karena alasan kompatibilitas). Setelah itu, BPM diubah menjadi warna dan jumlah piksel aktif, dan hanya itu.

#include 
#ifdef __AVR__
#include
#endif
#include
#include
#include
#include
int rf_cen =9; //nRF24 chip mengaktifkan pin
int rf_cs =8; //nRF24 Pin CS
RF24 rf(rf_cen, rf_cs);
//alamat pipa - di-hardcode di sisi uECG
uint8_t pipe_rx[8] ={0x0E, 0xE6, 0x0D, 0xA7, 0 , 0, 0, 0};
// Pin mana di Arduino yang terhubung ke NeoPixels?
#define PIN 5
// Berapa banyak NeoPixels yang terpasang ke Arduino?
#define NUMPIXELS 16
Adafruit_NeoPixel pixels =Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint8_t swapbits(uint8_t a){ //uECG pipe address using swapped bits order
// membalik urutan bit dalam satu byte
uint8_t v =0;
if(a &0x80) v |=0x01;
if(a &0x40) v |=0x02;
jika(a &0x20) v |=0x04;
jika(a &0x10) v |=0x08;
jika(a &0x08) v |=0x10;
jika(a &0x04) v |=0x20;
jika(a &0x02) v |=0x40;
jika(a &0x01) v |=0x80;
kembalikan v;
}
pengaturan batal() {
piksel.begin(); // Ini menginisialisasi perpustakaan NeoPixel.
for(int i=0;ipixels.setPixelColor(i, pixels.Color(1,1,1));
}
pixels.show();
//nRF24 membutuhkan SPI yang relatif lambat, mungkin akan bekerja pada 2MHz juga
SPI.begin();
SPI.setBitOrder(MSBFIRST );
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
untuk(int x =0; x <8; x++) //nRF24 dan uECG memiliki urutan bit yang berbeda untuk alamat pipa
pipe_rx[x] =swapbits(pipe_rx[x]);
//konfigurasi parameter radio
rf.begin();
rf.setDataRate(RF24_1MBPS);
rf.setAddressWidth(4);
rf.setChannel(22);
rf.setRetries(0, 0);
rf.setAutoAck(0);
rf.disableDynamicPayloads( );
rf.setPayloadSize(32);
rf.openReadingPipe(0, pipe_rx);
rf.setCRCLength(RF24_CRC_DISABLED);
rf.disableCRC();
rf.startListening(); //mendengarkan data uECG
//Perhatikan bahwa uECG harus dialihkan ke mode data mentah (melalui tekan tombol lama)
//untuk mengirim paket yang kompatibel, secara default ia mengirim data dalam mode BLE
//yang tidak dapat diterima oleh nRF24
}
long last_pix_upd =0;
byte in_pack[32];
int rf_bpm =0;
int bpm_hist [5]; //karena kita menonaktifkan CRC, perlu memfilter data yang masuk
void loop()
{
if(rf.available())
{
rf.read( in_pack, 32);
int bb =in_pack[5]; //BPM terletak di byte ke-5 paket
//detail struktur paket ada di uECG docs
//karena kami tidak memiliki CRC untuk alasan kompatibilitas, kami perlu memfilter
// data masuk, saluran radio bisa berisik. Kami membandingkan 5
//nilai BPM terakhir dan menggunakan satu hanya jika kelimanya sama.
//Karena uECG mengirim sekitar 100 paket per detik, itu tidak akan menyebabkan
// keterlambatan yang nyata dalam menampilkan data
for(int n =0; n <5-1; n++) //menggeser larik riwayat bpm sebesar 1
bpm_hist[n] =bpm_hist[n+1];
bpm_hist[4] =bb; //tambahkan nilai bpm baru
for(int n =0; n <5; n++) //periksa apakah semuanya sama
if(bpm_hist[n] !=bb) bb =-1;
if(bb> 0) //jika ya - simpan sebagai BPM baru yang diterima
rf_bpm =bb;
}
long ms =milis();
if( ms - last_pix_upd> 10) //jangan terlalu sering memperbarui piksel
{
int r, g, b;
last_pix_upd =ms;
int bpm =rf_bpm;
int max_bright =160; //nilai kecerahan maksimum, maks 255. Tapi Anda tidak selalu menginginkannya maksimal :)
float dd =25; //perubahan BPM antar tone warna (biru->hijau->kuning->pink->merah)
float t1 =90, t2, t3, t4; //t1 - BPM "dasar", lebih rendah dari t1 akan berwarna biru
t2 =t1 + dd;
t3 =t2 + dd;
t4 =t3 + dd;
/ /kode untuk mengubah warna tergantung pada rentang t1...t4 kita sekarang
if(bpm else if(bpm else if(bpm else if(bpm else {r =max_bright; g =0; b =0; }
int on_pixels =(bpm-80)/8; //karena ini dimaksudkan untuk berjalan, saya tidak
//menampilkan apa pun yang kurang dari 80 BPM, cara ini lebih sensitif di
//area beban tinggi
for(int i=0;i{
//piksel disetel dari terakhir ke pertama tanpa alasan tertentu, akan
//berfungsi dengan baik jika disetel dari pertama hingga terakhir
if(i else pixels.setPixelColor(NUMPIXELS-i-1, pixels.Color(0, 0,0)); //matikan semua LED lainnya
}
pixels.show();
}
}

4. Perakitan Gelang

Setelah semua kabel disolder, program di-flash, dan Anda mengonfirmasi bahwa data uECG telah diterima - saatnya untuk menyatukan semuanya.

Saya telah memilih cara yang sangat sederhana untuk menyatukan semuanya - lem termal. Karena bagian-bagian itu sendiri sudah hampir pas (Nano cocok dengan ukuran cincin luar, modul nRF24 cocok dengan ukuran cincin internal, dan baterai, meskipun tidak pas dengan bagian mana pun, entah bagaimana tidak terlalu mengganggu - tidak yakin cara kerjanya, tapi saya hanya terpaku itu di sana dan entah bagaimana itu benar-benar ok :) Kemudian saya menjahitnya ke beberapa gelang acak yang saya miliki (sisa dari paket stasiun solder, pita yang digunakan untuk membumikan saat menyolder), dan hanya itu!

5. Pengujian

Untuk pengujian, saya berlari, dan itu bekerja dengan baik kecuali untuk satu kejutan. Saya telah menggunakan pengaturan sedemikian rupa sehingga pada 192 BPM semua LED menyala, karena menurut semua rekomendasi, detak jantung tersebut terlalu tinggi untuk parameter saya. Kejutannya adalah saya telah melampauinya hanya dalam beberapa menit berlari, bahkan tanpa menyadarinya. Saya bahkan berpikir itu mungkin kesalahan sensor, tetapi tidak - ketika saya berhenti, itu tidak langsung turun, malah ada relaksasi yang lambat (sensor 100% dapat diandalkan ketika tidak banyak gerakan). Jadi ternyata untuk sementara saya berlatih jauh di atas ambang batas kesehatan saya (setidaknya apa yang seharusnya sehat untuk orang dewasa standar seusia/berat saya). Ini menarik:Saya cukup menyukai olahraga (amatir) sejak kecil, tetapi saya memiliki masalah dengan jantung di masa remaja saya dan mereka tampaknya hilang seiring waktu. Tetapi saya tahu dari pengalaman bahwa beban apa pun yang lebih tinggi dari jalan cepat sangat sulit bagi saya, namun saya terus berlatih - dan itu meningkatkan batas saya dari waktu ke waktu, sampai-sampai sekarang saya menganggap diri saya cukup bugar. Dan sekarang saya punya pertanyaan - apakah BPM saya hanya lebih tinggi dari biasanya karena masalah jantung pada masa remaja, atau saya benar-benar mendorong terlalu keras tanpa menyadarinya? Pokoknya saya harus melakukan sesuatu dengan itu - baik meningkatkan BPM maks pada monitor, atau melatih kurang intensif. :)

P.S. secara mengejutkan, kinerja uECG sangat baik sebagai sensor EMG - Anda dapat membacanya di proyek Kontrol Tangan Robotik saya

Kode

  • bpm_watch.ino
bpm_watch.inoArduino
#include #ifdef __AVR__ #include #endif#include #include #include #include int rf_cen =9; //nRF24 chip mengaktifkan pinint rf_cs =8; //nRF24 CS pinRF24 rf(rf_cen, rf_cs);//alamat pipa - di-hardcode pada uECG sideuint8_t pipe_rx[8] ={0x0E, 0xE6, 0x0D, 0xA7, 0, 0, 0, 0};// Pin mana pada Arduino terhubung ke NeoPixels?#define PIN 5// Berapa banyak NeoPixels yang terpasang ke Arduino?#define NUMPIXELS 16Adafruit_NeoPixel pixels =Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);uint8_t swapbits(uint8_t a){ //uECG pipe alamat menggunakan urutan bit yang ditukar // membalik urutan bit dalam satu byte uint8_t v =0; jika(a &0x80) v |=0x01; jika(a &0x40) v |=0x02; jika(a &0x20) v |=0x04; jika(a &0x10) v |=0x08; jika(a &0x08) v |=0x10; jika(a &0x04) v |=0x20; jika(a &0x02) v |=0x40; jika(a &0x01) v |=0x80; return v;}pengaturan batal() { piksel.begin(); // Ini menginisialisasi perpustakaan NeoPixel. for(int i=0;i 0) //jika ya - simpan sebagai BPM baru yang diterima rf_bpm =bb; } panjang ms =milis(); if(ms - last_pix_upd> 10) //jangan terlalu sering memperbarui piksel { int r, g, b; last_pix_upd =ms; int bpm =rf_bpm; int max_bright =160; //nilai kecerahan maksimum, maks 255. Tapi Anda tidak selalu menginginkannya maksimal :) float dd =25; //mengubah BPM antar tone warna (biru->hijau->kuning->merah muda->merah) float t1 =90, t2, t3, t4; //t1 - BPM "dasar", lebih rendah dari t1 akan berwarna biru t2 =t1 + dd; t3 =t2 + dd; t4 =t3 + dd; //kode untuk mengubah warna tergantung pada rentang t1...t4 kita sekarang if(bpm   

Skema

Tidak ada dokumen.

nrf24_led_ring_o2Gij5oigT.fzz

Proses manufaktur

  1. Renesas dan Altran mengembangkan chipset yang dapat dipakai menggunakan 3db Access UWB
  2. Pemantau Lingkungan dan Kualitas Udara DIY
  3. Sensor Suhu Python dan Raspberry Pi
  4. Pantau suhu rumah Anda menggunakan Raspberry Pi
  5. Monitor Detak Jantung Jarak Jauh
  6. Membuat Monitor Ambilight Menggunakan Arduino
  7. Voltmeter DIY Menggunakan Arduino dan Smartphone
  8. Pemantau Detak Jantung Menggunakan IoT
  9. Sensor Terintegrasi dalam Pakaian Memantau Denyut Jantung
  10. Bahan dan Komponen Dibuat Menggunakan Mesin CNC