هدف ما از انجام این پروژه چیست؟
هدف این پروژه، اتصال و استفاده از ماژول ADS1292R توسط آردوینو میباشد که میتوان از آن برای اندازهگیری و پایش سیگنالهای زیستی بدن انسان مانند ECG و Respiration استفاده کرد. این ماژول قادر است سیگنالهای زیستی با دقت بالا را تشخیص داده و به صورت دیجیتال به سیستم منتقل کند، که آن را برای کاربردهایی مانند مانیتورینگ قلب، سیستمهای پزشکی پوشیدنی و تحقیقات بیولوژیکی مناسب میسازد. کاربران میتوانند با خواندن مقادیر این ماژول، سیستمهایی توسعه دهند که به تغییرات وضعیت سلامتی واکنش نشان داده و در نتیجه دقت و قابلیت اطمینان مانیتورینگ زیستی را بهبود بخشند.
در این آموزش چه چیزهایی یاد میگیریم؟
چگونه ماژول ADS1292R را به آردوینو وصل کنید و ارتباط SPI را راهاندازی کنید.
کتابخانهای را برای استفاده با آردوینو تغییر دهید و با نحوه انتقال دادههای SPI در سیگنالهای زیستی آشنا شوید.
چگونه سیگنالهای ECG و Respiration را بخوانید و این دادهها را برای کاربردهای واقعی مانند مانیتورینگ سلامت استفاده کنید.
پروژههایی مثل سیستمهای مانیتورینگ قلب، دستگاههای پوشیدنی و تحقیقات زیستی را با این ماژول اجرا کنید و مهارتهای عملی برای ساخت سیستمهای دقیق و قابل اعتماد در حوزه پزشکی یاد بگیرید.
این آموزش به شما کمک میکند ماژول را به درستی راهاندازی کرده و دادههای زیستی را به صورت لحظهای با آردوینو پردازش و نمایش دهید.
برای انجام این پروژه به چه چیزهایی نیاز داریم؟
همانطور که احتمالا میدانید برای انجام این پروژه به سخت افزارها و نرم افزارهایی نیاز داریم. عناوین این سخت افزارها و نرم افزارها در جدول زیر در اختیارتان قرار داده شده که میتوانید با کلیک روی هرکدام از آنها، آنها را تهیه/دانلود کنید و برای شروع آماده شوید.
سخت افزارهای مورد نیاز
|
نرم افزارهای مورد نیاز
|
---|---|
Arduino UNO
|
|
Logic Level Converter
|
ابتدا مانند تصویر زیر ماژول GebraBit ADS1292R را به صورت زیر به آردوینو متصل می کنیم:
توجه کنید که برای راه اندازی این ماژول احتیاج به Logic Level Converter دارید زیرا سطح منطقی این ماژول 3V3 ولت میباشد و در صورت اتصال مستقیم ماژول به آردوینو امکان آسیب به سنسور خواهد شد.
رنگ
|
ADS1292R
|
Arduino
|
---|---|---|
طلایی
|
SDI
|
D11 (MOSI)
|
زرد
|
SDO
|
D12 (MISO)
|
قهوه ای
|
SCK
|
D13 (SCK)
|
طوسی
|
CS
|
D10 (SS)
|
سبز
|
RST
|
D4
|
بنفش
|
RDY
|
D6
|
نارنجی
|
STA
|
D5
|
قرمز
|
3V3
|
3V3
|
آبی
|
5V
|
5V
|
مشکی
|
GND
|
GND
|
کتابخانه و کد ارائه شده برای تنظیمات پیشفرض جامپر سلکتورها طراحی شدهاند (مطابق تصویر بالا).در صورت تغییر تنظیمات جامپرها، با توجه به دیتاشیت سنسور و شماتیک ماژول، امکان نیاز به اعمال تغییرات در کد می باشد. لطفاً توجه داشته باشید که تغییر در تنظیمات جامپر میتواند عملکرد کد نمونه موجود در سایت را تحت تأثیر قرار می دهد.
پس از اتصال آردوینو به ماژول توسط Logic Level Converter، کتابخانه ADS1292R را دانلود و به نرم افزار آردوینو اضافه کنید.
کتابخانه های مورد نیاز
|
---|
اگر نمیدانید چطور کتابخانههای GebraBit را به آردوینو اضافه کنید، به لینک آموزشی زیر مراجعه کنید.
نحوه اتصال لیدها به بدن
برای اتصال دستگاه به بدن از یک کابل ECG سه لید با جک هدفون نری استفاده میشود . در کابلهای ECG سه لید، لیدها به سه رنگ قرمز ، سبز و زرد هستند که لید قرمز به دست راست، لید زرد به دست چپ و لید سبز به پای راست شخص وصل میشود.
با اتصال جک هدفون نری کابل ECG به سوکت مربوطه روی ماژول و چسباندن صحیح لیدها ، ماژول فعال شده و مانیتورینگ ضربان قلب انجام میشود.
برای اتصال این سه لید به بدن، روشهای مختلفی وجود دارد و روش ذکرشده تنها یکی از این روشها است. پیش از چسباندن لیدها، حتماً سطح مورد نظر را با الکل تمیز کنید. وجود گرد و غبار و چربی یا مو روی سطح مورد نظر میتواند کیفیت سیگنالهای دریافتی از ماژول را کاهش دهد و دقت اندازهگیری را تحت تأثیر قرار دهد.
کتابخانه و درایور ADS1292R
GebraBit علاوه بر طراحی ماژولار سنسورها و آی سی های مختلف ، پیشرو در ارائه انواع کتابخانه های ساختاریافته و مستقل از سخت افزار به زبان ++C، جهت سهولت کاربران در راه اندازی و توسعه نرم افزاری آنها نیز بوده است.
بدین منظور پس از تهیه هر یک از ماژول های GebraBit ، کاربر می تواند با مراجعه به بخش آموزش ماژول مربوطه، کتابخانه مختص به آن ماژول که حاوی فایل .h و .cpp (Header and Source) و یک برنامه نمونه آموزشی تحت سخت افزار های GebraBit STM32F303, GebraBit ATMEGA32A یا Arduino می باشد را دانلود کند.
تمامی توابع و Structure های تعریف شده در کتابخانه ، با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، به اختصار توضیح داده شده است.با توجه به مستقل از سخت افزار بودن کتابخانه ها،کاربر به راحتی می تواند آن را در هر یک از کامپایلر های دلخواه اضافه کرده و با میکروکنترلر و برد توسعه مورد علاقه خود، آن را توسعه دهد.
برنامه نمونه در آردوینو
بعد از اتصال لید ها به بدن و ماژول به آردوینو و اضافه کردن کتابخانه سنسور به نرم افزار آردوینو به مسیر زیر بروید و کد نمونه را باز کنید. File > Examples > ADS1292R > ECG_RES_Plotter
شرح فایل نمونه
اتصالات ماژول به آردوینو در کامنت های بالای کد ذکر شده است:
// |ads1292r pin label| Arduino Connection |Pin Function |
// |----------------- |:--------------------:|-----------------:|
// | VDD | +5V | Supply voltage |
// | PWDN/RESET | D4 | Reset |
// | START | D5 | Start Input |
// | DRDY | D6 | Data Ready Outpt|
// | CS | D10 | Chip Select |
// | MOSI | D11 | Slave In |
// | MISO | D12 | Slave Out |
// | SCK | D13 | Serial Clock |
// | GND | Gnd | Gnd |
کتابخانه های مورد نیاز برای راه اندازی سنسور وارد برنامه شده اند:
#include "ADS1292R.h"
#include "ecgResAlgorithm.h"
#include
در صورتی که پین های DRDY(RDY) ، CS ، START(STA) ، PWDN(RST) ماژول را به پایه های دیگری از آردوینو متصل کردید کد زیر را باتوجه به اتصالات خودتان تغییر دهید.
const int ADS1292_DRDY_PIN = 6;
const int ADS1292_CS_PIN = 10;
const int ADS1292_START_PIN = 5;
const int ADS1292_PWDN_PIN = 4;
همانطور که می دانید سنسور ADS1292R دارای دو کانال می باشد که کانال اول، دیتای (نوارقلب) ECG و کانال دوم، دیتای (تنفس) Respiration می باشد. شما برای دیدن نتایج در Plotter آردوینو میتوانید با کامنت کردن خط سوم، دیتای کانال اول یعنی ECG را مشاهده کنید و با کامنت کردن خط دوم، دیتای کانال دوم یعنی Respiration را مشاهده کنید. (توجه: حتما برای دیدن خروجی بر روی Plotter از نسخه های قدیمی آردونیو استفاده کنید (1.8.20 به قبل))
//if you want ecg data comment second line and if you want res datas on plotter comment first line and uncomment second line
Serial.println(ecgFilterout);
//Serial.println(resWaveBuff);
به طور مثال خروجی کد بالا در Plotter آردوینو دیتای نوار قلب می باشد و خروجی کد پایین دیتای تنفس می باشد.
//if you want ecg data comment second line and if you want res datas on plotter comment first line and uncomment second line
//Serial.println(ecgFilterout);
Serial.println(resWaveBuff);
متن کد فایل آردوینو:
//////////////////////////////////////////////////////////////////////////////////////////
//
// Arduino Library for ADS1292R Shield/Breakout
//
// Copyright (c) 2017 ProtoCentral
// Heartrate and respiration computation based on original code from Texas Instruments
//
// This is a simple example to plot ECG through arduino serial plotter.
//
// This software is licensed under the MIT License(http://opensource.org/licenses/MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//
// |ads1292r pin label| Arduino Connection |Pin Function |
// |----------------- |:--------------------:|-----------------:|
// | VDD | +5V | Supply voltage |
// | PWDN/RESET | D4 | Reset |
// | START | D5 | Start Input |
// | DRDY | D6 | Data Ready Outpt|
// | CS | D10 | Chip Select |
// | MOSI | D11 | Slave In |
// | MISO | D12 | Slave Out |
// | SCK | D13 | Serial Clock |
// | GND | Gnd | Gnd |
//
/////////////////////////////////////////////////////////////////////////////////////////
#include "ADS1292R.h"
#include "ecgResAlgorithm.h"
#include
volatile uint8_t globalHeartRate = 0;
volatile uint8_t globalRespirationRate=0;
const int ADS1292_DRDY_PIN = 6;
const int ADS1292_CS_PIN = 10;
const int ADS1292_START_PIN = 5;
const int ADS1292_PWDN_PIN = 4;
int16_t ecgWaveBuff, ecgFilterout;
int16_t resWaveBuff,respFilterout;
ads1292r ADS1292R;
ecg_respiration_algorithm ECG_RESPIRATION_ALGORITHM;
void setup()
{
delay(2000);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
//CPOL = 0, CPHA = 1
SPI.setDataMode(SPI_MODE1);
// Selecting 1Mhz clock for SPI
SPI.setClockDivider(SPI_CLOCK_DIV16);
pinMode(ADS1292_DRDY_PIN, INPUT);
pinMode(ADS1292_CS_PIN, OUTPUT);
pinMode(ADS1292_START_PIN, OUTPUT);
pinMode(ADS1292_PWDN_PIN, OUTPUT);
Serial.begin(57600);
ADS1292R.ads1292Init(ADS1292_CS_PIN,ADS1292_PWDN_PIN,ADS1292_START_PIN);
Serial.println("Initiliziation is done");
}
void loop()
{
ads1292OutputValues ecgRespirationValues;
boolean ret = ADS1292R.getAds1292EcgAndRespirationSamples(ADS1292_DRDY_PIN,ADS1292_CS_PIN,&ecgRespirationValues);
if (ret == true)
{
ecgWaveBuff = (int16_t)(ecgRespirationValues.sDaqVals[1] >> 8) ; // ignore the lower 8 bits out of 24bits
resWaveBuff = (int16_t)(ecgRespirationValues.sresultTempResp>>8) ;
if(ecgRespirationValues.leadoffDetected == false)
{
ECG_RESPIRATION_ALGORITHM.ECG_ProcessCurrSample(&ecgWaveBuff, &ecgFilterout); // filter out the line noise @40Hz cutoff 161 order
ECG_RESPIRATION_ALGORITHM.QRS_Algorithm_Interface(ecgFilterout,&globalHeartRate); // calculate
//respFilterout = ECG_RESPIRATION_ALGORITHM.Resp_ProcessCurrSample(resWaveBuff);
//ECG_RESPIRATION_ALGORITHM.RESP_Algorithm_Interface(respFilterout,&globalRespirationRate);
}else{
ecgFilterout = 0;
respFilterout = 0;
}
//if you want ecg data comment second line and if you want res datas on plotter comment first line and uncomment second line
Serial.println(ecgFilterout);
//Serial.println(resWaveBuff);
}
}
آردوینو خود را به کامپیوتر متصل کنید و مدل و پورت آردوینو خود را انتخاب کنید.
سپس نمونه کد را ابتدا Verify و سپس Upload کنید
بعد از Upload کردن کد به Tools > Serial Plotter را باز کرده و می توانید خروجی ماژول را مشاهده کنید
حتما BaudRate را روی 57600 تنظیم کنید در غیر این صورت دیتای درستی دریافت نخواهید کرد.
در ادامه می توانید کتابخانه ADS1292R, شماتیک و دیتاشیت ماژول را دانلود نمایید.
ویدیو و تصاویر خروجی برنامه:
ویدیو خروجی کانال اول ECG:
تصویر خروجی کانال اول ECG:
تصویر خروجی کانال دوم Respiration: