هدف ما از انجام این پروژه چیست؟
هدف این پروژه، اتصال و استفاده از ماژول ADS1194 توسط آردوینو میباشد که میتوان از آن برای اندازهگیری و پایش سیگنالهای زیستی بدن انسان مانند ECG استفاده کرد. این ماژول قادر است سیگنالهای زیستی با دقت بالا را تشخیص داده و به صورت دیجیتال به سیستم منتقل کند، که آن را برای کاربردهایی مانند مانیتورینگ قلب، سیستمهای پزشکی پوشیدنی و تحقیقات بیولوژیکی مناسب میسازد. کاربران میتوانند با خواندن مقادیر این ماژول، سیستمهایی توسعه دهند که به تغییرات وضعیت سلامتی واکنش نشان داده و در نتیجه دقت و قابلیت اطمینان مانیتورینگ زیستی را بهبود بخشند.
در این آموزش چه چیزهایی یاد میگیریم؟
چگونه ماژول ADS1194 را به آردوینو وصل کنید و ارتباط SPI را راهاندازی کنید.
کتابخانهای را برای استفاده با آردوینو تغییر دهید و با نحوه انتقال دادههای SPI در سیگنالهای زیستی آشنا شوید.
چگونه سیگنالهای ECG را بخوانید و این دادهها را برای کاربردهای واقعی مانند مانیتورینگ سلامت استفاده کنید.
پروژههایی مثل سیستمهای مانیتورینگ قلب، دستگاههای پوشیدنی و تحقیقات زیستی را با این ماژول اجرا کنید و مهارتهای عملی برای ساخت سیستمهای دقیق و قابل اعتماد در حوزه پزشکی یاد بگیرید.
این آموزش به شما کمک میکند ماژول را به درستی راهاندازی کرده و دادههای زیستی را به صورت لحظهای با آردوینو پردازش و نمایش دهید.
برای انجام این پروژه به چه چیزهایی نیاز داریم؟
همانطور که احتمالا میدانید برای انجام این پروژه به سخت افزارها و نرم افزارهایی نیاز داریم. عناوین این سخت افزارها و نرم افزارها در جدول زیر در اختیارتان قرار داده شده که میتوانید با کلیک روی هرکدام از آنها، آنها را تهیه/دانلود کنید و برای شروع آماده شوید.
سخت افزارهای مورد نیاز
|
نرم افزارهای مورد نیاز
|
---|---|
Arduino UNO
|
|
Logic Level Converter
|
ابتدا مانند تصویر زیر ماژول GebraBit ADS1194 را به صورت زیر به آردوینو متصل می کنیم:

توجه کنید که برای راه اندازی این ماژول احتیاج به Logic Level Converter دارید زیرا سطح منطقی این ماژول 3V3 ولت میباشد و در صورت اتصال مستقیم ماژول به آردوینو امکان آسیب به سنسور خواهد شد.
رنگ
|
ADS1194
|
Arduino
|
---|---|---|
طلایی
|
SDI
|
D11 (MOSI)
|
زرد
|
SDO
|
D12 (MISO)
|
قهوه ای
|
SCK
|
D13 (SCK)
|
طوسی
|
CS
|
D10 (SS)
|
سبز
|
RST
|
D7
|
بنفش
|
RDY
|
D2
|
نارنجی
|
STA
|
A5
|
قرمز
|
3V3
|
3V3
|
آبی
|
NC
|
5V
|
مشکی
|
GND
|
GND
|

کتابخانه و کد ارائه شده برای تنظیمات پیشفرض جامپر سلکتورها طراحی شدهاند (مطابق تصویر بالا).در صورت تغییر تنظیمات جامپرها، با توجه به دیتاشیت سنسور و شماتیک ماژول، امکان نیاز به اعمال تغییرات در کد می باشد. لطفاً توجه داشته باشید که تغییر در تنظیمات جامپر میتواند عملکرد کد نمونه موجود در سایت را تحت تأثیر قرار می دهد.
پس از اتصال آردوینو به ماژول توسط Logic Level Converter، کتابخانه ADS1194 را دانلود و به نرم افزار آردوینو اضافه کنید.
کتابخانه های مورد نیاز
|
---|
اگر نمیدانید چطور کتابخانههای GebraBit را به آردوینو اضافه کنید، به لینک آموزشی زیر مراجعه کنید.
نحوه اتصال لیدها به بدن
این دستگاه را میتوان به وسیلهی یک کابل ECG پنج لید با کانکتور type-c به بدن متصل کرد که پیشنهاد ما استفاده از کابل اختصاصی طراحی شده توسط GebraBit میباشد، چرا که این کابل باتوجه به ویژگیهای ماژول و کانکتور تایپ C به کار رفته درآن، ساخته شده است. هر لید این کابل، دارای رنگ مخصوصی است که با توجه به آن، محل اتصال با بدن مشخص میشود.

برای اتصال دستگاه به بدن و مانیتورینگ ضربان قلب کافیست کانکتور type-c کابل ECG را به سوکت مربوطه روی ماژول وصل کرده و لید هارا مطابق تصویر پایین به بدن بچسبانید.

برای اتصال این پنج لید به بدن، روشهای مختلفی وجود دارد و روش ذکرشده تنها یکی از این روشها است. پیش از چسباندن، حتماً سطح مورد نظر را با الکل تمیز کنید. وجود گرد و غبار و چربی یا مو روی سطح مورد نظر میتواند کیفیت سیگنالهای دریافتی از ماژول را کاهش دهد و دقت اندازهگیری را تحت تأثیر قرار دهد.
کتابخانه و درایور ADS1194
GebraBit علاوه بر طراحی ماژولار سنسورها و آی سی های مختلف ، پیشرو در ارائه انواع کتابخانه های ساختاریافته و مستقل از سخت افزار به زبان ++C، جهت سهولت کاربران در راه اندازی و توسعه نرم افزاری آنها نیز بوده است.
بدین منظور پس از تهیه هر یک از ماژول های GebraBit ، کاربر می تواند با مراجعه به بخش آموزش ماژول مربوطه، کتابخانه مختص به آن ماژول که حاوی فایل .h و .cpp (Header and Source) و یک برنامه نمونه آموزشی تحت سخت افزار های GebraBit STM32F303, GebraBit ATMEGA32A یا Arduino می باشد را دانلود کند.
تمامی توابع و Structure های تعریف شده در کتابخانه ، با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، به اختصار توضیح داده شده است.با توجه به مستقل از سخت افزار بودن کتابخانه ها،کاربر به راحتی می تواند آن را در هر یک از کامپایلر های دلخواه اضافه کرده و با میکروکنترلر و برد توسعه مورد علاقه خود، آن را توسعه دهد.

برنامه نمونه در آردوینو
بعد از اتصال لید ها به بدن و ماژول به آردوینو و اضافه کردن کتابخانه سنسور به نرم افزار آردوینو به مسیر زیر بروید و کد نمونه را باز کنید. File > Examples > GebraBit_ADS1194 > ECG_Plotter
شرح فایل نمونه
اتصالات ماژول به آردوینو در کامنت های بالای کد ذکر شده است:
// |ads1194 pin label | Arduino Connection |Pin Function |
// |----------------- |:--------------------:|-----------------:|
// | VDD | +3V3 | Supply voltage |
// | RST | D7 | Reset |
// | STA | A5 | Start Input |
// | RDY | D2 | Data Ready Outpt|
// | CS | D10 | Chip Select |
// | SDI | D11 | Slave In |
// | SDO | D12 | Slave Out |
// | SCK | D13 | Serial Clock |
// | GND | Gnd | Gnd |
کتابخانه های مورد نیاز برای راه اندازی سنسور وارد برنامه شده اند:
#include "GebraBit_ADS1194.h"
#include "ecgAlgo1194.h"
#include
در صورتی که پین های DRDY(RDY) ، CS ، START(STA) ، PWDN(RST) ماژول را به پایه های دیگری از آردوینو متصل کردید کد زیر را باتوجه به اتصالات خودتان تغییر دهید.
const int ADS1194_DRDY_PIN = 2;
const int ADS1194_CS_PIN = 10;
const int ADS1194_START_PIN = A5;
const int ADS1194_PWDN_PIN = 7;
همانطور که می دانید سنسور ADS1194 دارای چهار کانال دیتای (نوارقلب) ECG می باشد. شما برای دیدن نتایج در Plotter آردوینو میتوانید با کامنت و آن کامنت کردن خطوطی که در برنامه ذکر شده، دیتای کانال مورد نظر خود را مشاهده کنید. (توجه: حتما برای دیدن خروجی بر روی Plotter از نسخه های قدیمی آردونیو استفاده کنید (1.8.20 به قبل))
به طور مثال خروجی کد پایین در Plotter آردوینو دیتای ECG کانال 1 می باشد.
متن کد فایل آردوینو:
// ________________________________________________________________________________________________________
// Copyright (c) 2020 GebraBit Inc. All rights reserved.
//
// This software, related documentation and any modifications thereto (collectively �Software�) is subject
// to GebraBit and its licensors' intellectual property rights under U.S. and international copyright
// and other intellectual property rights laws.
//
// GebraBit and its licensors retain all intellectual property and proprietary rights in and to the Software
// and any use, reproduction, disclosure or distribution of the Software without an express license agreement
// from GebraBit is strictly prohibited.
// 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 NON-INFRINGEMENT IN
// NO EVENT SHALL GebraBit BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
// OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THE SOFTWARE.
// @Author : Sepehr Azimi
// inspired by ADS1292R ProtoCentral source code
// ________________________________________________________________________________________________________
//
// |ads1194 pin label | Arduino Connection |Pin Function |
// |----------------- |:--------------------:|-----------------:|
// | VDD | +3V3 | Supply voltage |
// | RST | D7 | Reset |
// | STA | A5 | Start Input |
// | RDY | D2 | Data Ready Outpt|
// | CS | D10 | Chip Select |
// | SDI | D11 | Slave In |
// | SDO | D12 | Slave Out |
// | SCK | D13 | Serial Clock |
// | GND | Gnd | Gnd |
//
// ________________________________________________________________________________________________________
#include "GebraBit_ADS1194.h"
#include "ecgAlgo1194.h"
#include
volatile uint8_t globalHeartRate = 0;
const int ADS1194_DRDY_PIN = 2;
const int ADS1194_CS_PIN = 10;
const int ADS1194_START_PIN = A5;
const int ADS1194_PWDN_PIN = 7;
int16_t CH1WaveBuff, CH1Filterout;
int16_t CH2WaveBuff, CH2Filterout;
int16_t CH3WaveBuff, CH3Filterout;
int16_t CH4WaveBuff, CH4Filterout;
ads1194 ADS1194;
ecg_algorithm ECG_ALGORITHM;
void setup()
{
delay(2000);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV16);
pinMode(ADS1194_DRDY_PIN, INPUT);
pinMode(ADS1194_CS_PIN, OUTPUT);
pinMode(ADS1194_START_PIN, OUTPUT);
pinMode(ADS1194_PWDN_PIN, OUTPUT);
Serial.begin(57600);
ADS1194.ads1194Init(ADS1194_CS_PIN,ADS1194_PWDN_PIN,ADS1194_START_PIN);
Serial.println("Initiliziation is done");
}
void loop()
{
ads1194OutputValues ecgvalues;
boolean ret = ADS1194.getAds1194EcgSamples(ADS1194_DRDY_PIN,ADS1194_CS_PIN,&ecgvalues);
if (ret == true)
{
CH1WaveBuff = (int16_t)(ecgvalues.sDaqVals[0]) ;
CH2WaveBuff = (int16_t)(ecgvalues.sDaqVals[1]) ;
CH3WaveBuff = (int16_t)(ecgvalues.sDaqVals[2]) ;
CH4WaveBuff = (int16_t)(ecgvalues.sDaqVals[3]) ;
if(ecgvalues.leadoffDetected == false)
{
// Uncomment for CH1
//ECG_ALGORITHM.ECG_ProcessCurrSample(&CH1WaveBuff, &CH1Filterout); // filter out the line noise @40Hz cutoff 161 order
//ECG_ALGORITHM.QRS_Algorithm_Interface(CH1Filterout,&globalHeartRate); // calculate
// Uncomment for CH2
ECG_ALGORITHM.ECG_ProcessCurrSample(&CH2WaveBuff, &CH2Filterout); // filter out the line noise @40Hz cutoff 161 order
ECG_ALGORITHM.QRS_Algorithm_Interface(CH2Filterout,&globalHeartRate); // calculate
// Uncomment for CH3
//ECG_ALGORITHM.ECG_ProcessCurrSample(&CH3WaveBuff, &CH3Filterout); // filter out the line noise @40Hz cutoff 161 order
//ECG_ALGORITHM.QRS_Algorithm_Interface(CH3Filterout,&globalHeartRate); // calculate
// Uncomment for CH4
//ECG_ALGORITHM.ECG_ProcessCurrSample(&CH4WaveBuff, &CH4Filterout); // filter out the line noise @40Hz cutoff 161 order
//ECG_ALGORITHM.QRS_Algorithm_Interface(CH4Filterout,&globalHeartRate); // calculate
}
else{
// Uncomment for CH1
//CH1Filterout = 0;
// Uncomment for CH2
CH2Filterout = 0;
// Uncomment for CH3
//CH3Filterout = 0;
// Uncomment for CH4
//CH4Filterout = 0;
}
//To see the output of another channel on the plotter, change CH1Filterout to CHXFilterout, uncomment the specific channel number lines, and comment out the CH2 lines.
Serial.println(CH2Filterout);
}
}
آردوینو خود را به کامپیوتر متصل کنید و مدل و پورت آردوینو خود را انتخاب کنید.

سپس نمونه کد را ابتدا Verify و سپس Upload کنید

بعد از Upload کردن کد به Tools > Serial Plotter را باز کرده و می توانید خروجی ماژول را مشاهده کنید

حتما BaudRate را روی 57600 تنظیم کنید در غیر این صورت دیتای درستی دریافت نخواهید کرد.

در ادامه می توانید کتابخانه ADS1194, شماتیک و دیتاشیت ماژول را دانلود نمایید.
تصاویر خروجی برنامه:
تصویر خروجی کانال اول ECG:

تصویر خروجی کانال دوم ECG:

تصویر خروجی کانال سوم ECG:

تصویر خروجی کانال چهارم ECG:

توجه : تمیزی سیگنال خروجی به عوامل محیطی بسیاری مثل تداخلات الکترومغناطیسی، نویز برق شهر، حرکات فیزیکی بیمار، شرایط الکترودها، و تغییرات امپدانس پوست بستگی دارد. این عوامل میتوانند باعث آلودگی سیگنال ECG شوند و دقت تحلیل آن را کاهش دهند.
برای بهبود کیفیت سیگنال خروجی، لازم است که نویزهای محیطی و بیولوژیکی کاهش یابند. برخی از راهکارهای موثر شامل موارد زیر هستند:
- کاهش تداخلات الکترومغناطیسی: استفاده از کابلهای شیلددار، فیلترهای حذف نویز و فاصلهگیری از تجهیزات الکترونیکی پرقدرت.
- حذف نویز برق شهر: بهکارگیری فیلتر Notch در فرکانس 50/60Hz.
- کاهش نویز حرکتی: تثبیت صحیح الکترودها روی پوست، استفاده از فیلترهای Adaptive برای پردازش سیگنال.
- پیشپردازش سیگنال: اعمال فیلترهای باندپاس (معمولاً بین 0.5Hz تا 100Hz) و روشهای پردازش سیگنال مانند Wavelet Transform یا PCA/ICA برای تفکیک نویز از سیگنال اصلی.
در نهایت، بهینهسازی شرایط ثبت سیگنال و استفاده از الگوریتمهای پردازشی مناسب نقش کلیدی در دستیابی به سیگنال ECG باکیفیت و قابلاعتماد دارد.