GebraBit

پروژه سنسور ADS11191 با Arduino

متن سربرگ خود را وارد کنید

ADS1191_Project-Template

پروژه سنسور ADS11191 با Arduino

  1. خانه
  2. »
  3. پروژه ها
  4. »
  5. پروژه سنسور ADS11191 با Arduino

هدف ما از انجام این پروژه چیست؟

هدف این پروژه، اتصال و استفاده از ماژول ADS1191 توسط آردوینو می‌باشد که می‌توان از آن برای اندازه‌گیری و پایش سیگنال‌های زیستی بدن انسان مانند ECG استفاده کرد. این ماژول قادر است سیگنال‌های زیستی با دقت بالا را تشخیص داده و به صورت دیجیتال به سیستم منتقل کند، که آن را برای کاربردهایی مانند مانیتورینگ قلب، سیستم‌های پزشکی پوشیدنی و تحقیقات بیولوژیکی مناسب می‌سازد. کاربران می‌توانند با خواندن مقادیر این ماژول، سیستم‌هایی توسعه دهند که به تغییرات وضعیت سلامتی واکنش نشان داده و در نتیجه دقت و قابلیت اطمینان مانیتورینگ زیستی را بهبود بخشند.

در این آموزش چه چیزهایی یاد میگیریم؟

  • چگونه ماژول ADS11191 را به آردوینو وصل کنید و ارتباط SPI را راه‌اندازی کنید.

  • کتابخانه‌ای را برای استفاده با آردوینو تغییر دهید و با نحوه انتقال داده‌های SPI در سیگنال‌های زیستی آشنا شوید.

  • چگونه سیگنال‌های ECG را بخوانید و این داده‌ها را برای کاربردهای واقعی مانند مانیتورینگ سلامت استفاده کنید.

  • پروژه‌هایی مثل سیستم‌های مانیتورینگ قلب، دستگاه‌های پوشیدنی و تحقیقات زیستی را با این ماژول اجرا کنید و مهارت‌های عملی برای ساخت سیستم‌های دقیق و قابل اعتماد در حوزه پزشکی یاد بگیرید.

  • این آموزش به شما کمک می‌کند ماژول را به درستی راه‌اندازی کرده و داده‌های زیستی را به صورت لحظه‌ای با آردوینو پردازش و نمایش دهید.

برای انجام این پروژه به چه چیزهایی نیاز داریم؟

همانطور که احتمالا میدانید برای انجام این پروژه به سخت افزارها و نرم افزارهایی نیاز داریم. عناوین این سخت افزارها و نرم افزارها در جدول زیر در اختیارتان قرار داده شده که میتوانید با کلیک روی هرکدام از آنها، آنها را تهیه/دانلود کنید و  برای شروع آماده شوید.

سخت افزارهای مورد نیاز
نرم افزارهای مورد نیاز
Arduino UNO
Logic Level Converter

ابتدا مانند تصویر زیر ماژول  GebraBit ADS1191 را به صورت زیر به آردوینو متصل می کنیم:

توجه کنید که برای راه اندازی این ماژول احتیاج به 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
آبی
NC
5V
مشکی
GND
GND

کتابخانه و کد ارائه شده برای تنظیمات پیش‌فرض جامپر سلکتورها طراحی شده‌اند (مطابق تصویر بالا).در صورت تغییر تنظیمات جامپرها، با توجه به دیتاشیت سنسور و شماتیک ماژول، امکان نیاز به اعمال تغییرات در کد می باشد. لطفاً توجه داشته باشید که تغییر در تنظیمات جامپر می‌تواند عملکرد کد نمونه موجود در سایت را تحت تأثیر قرار  می دهد.

پس از اتصال آردوینو به ماژول توسط Logic Level Converter، کتابخانه ADS1191 را دانلود و به نرم افزار آردوینو اضافه کنید.

کتابخانه های مورد نیاز

اگر نمی‌دانید چطور کتابخانه‌های GebraBit را به آردوینو اضافه کنید، به لینک آموزشی زیر مراجعه کنید.

نحوه اتصال لیدها به بدن

برای اتصال دستگاه به بدن از یک کابل ECG سه لید با جک هدفون نری استفاده میشود . در کابل‌های ECG سه لید، لیدها‌ به سه رنگ قرمز ، سبز و زرد هستند که لید قرمز به دست راست، لید زرد به دست چپ و لید سبز به پای راست شخص وصل میشود.

با اتصال جک هدفون نری کابل ECG به سوکت مربوطه روی ماژول و چسباندن صحیح لیدها ، ماژول فعال شده و مانیتورینگ ضربان قلب انجام میشود.

برای اتصال این سه لید به بدن، روش‌های مختلفی وجود دارد و روش ذکرشده تنها یکی از این روش‌ها است. پیش از چسباندن لیدها، حتماً سطح مورد نظر را با الکل تمیز کنید. وجود گرد و غبار و چربی یا مو روی سطح مورد نظر می‌تواند کیفیت سیگنال‌های دریافتی از ماژول را کاهش دهد و دقت اندازه‌گیری را تحت تأثیر قرار دهد.

کتابخانه و درایور ADS1191

GebraBit علاوه بر طراحی ماژولار سنسورها و آی سی های مختلف ، پیشرو در ارائه انواع کتابخانه های ساختاریافته و مستقل از سخت افزار به زبان  ++C، جهت سهولت کاربران در راه اندازی و توسعه نرم افزاری آنها نیز بوده است.

بدین منظور پس از تهیه هر یک از ماژول های  GebraBit  ، کاربر می تواند با مراجعه به بخش آموزش ماژول مربوطه، کتابخانه مختص به آن ماژول که حاوی فایل .h و .cpp (Header and Source) و یک برنامه نمونه آموزشی تحت سخت افزار های GebraBit STM32F303, GebraBit ATMEGA32A یا Arduino می باشد را دانلود کند.

تمامی توابع و Structure های تعریف شده در کتابخانه ، با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، به اختصار توضیح داده شده است.با توجه به مستقل از سخت افزار بودن کتابخانه ها،کاربر به راحتی می تواند آن را در هر یک از کامپایلر های دلخواه اضافه کرده و با میکروکنترلر و برد توسعه مورد علاقه خود، آن را توسعه دهد.

برنامه نمونه در آردوینو

بعد از اتصال لید ها به بدن و ماژول به آردوینو و اضافه کردن کتابخانه سنسور به نرم افزار آردوینو به مسیر زیر بروید و کد نمونه را باز کنید.                         File > Examples > GebraBit_ADS1191 > ECG_RES

شرح فایل نمونه

اتصالات ماژول به آردوینو در کامنت های بالای کد ذکر شده است:

				
					//  |ads1292r pin label| Arduino Connection   |Pin Function      |
//  |----------------- |:--------------------:|-----------------:|
//  | VDD              | +3V3                 |  Supply voltage  |
//  | PWDN/RESET       | D7                   |  Reset           |
//  | START            | A5                   |  Start Input     |
//  | DRDY             | D2                   |  Data Ready Outpt|
//  | CS               | D10                  |  Chip Select     |
//  | MOSI             | D11                  |  Slave In        |
//  | MISO             | D12                  |  Slave Out       |
//  | SCK              | D13                  |  Serial Clock    |
//  | GND              | Gnd                  |  Gnd             |
				
			

کتابخانه های مورد نیاز برای راه اندازی سنسور وارد برنامه شده اند:

				
					#include "GebraBit_ADS1191-2.h"
#include "ecgAlgo1191-2.h"
#include <SPI.h>
				
			

در صورتی که پین های DRDY(RDY) ، CS ، START(STA) ، PWDN(RST) ماژول را به پایه های دیگری از آردوینو متصل کردید کد زیر را باتوجه به اتصالات خودتان تغییر دهید.

				
					const int ADS119X_DRDY_PIN = 2;
const int ADS119X_CS_PIN = 10;
const int ADS119X_START_PIN = A5;
const int ADS119X_PWDN_PIN = 7;
				
			

توجه: حتما برای دیدن خروجی بر روی Plotter از نسخه های قدیمی آردونیو استفاده کنید (1.8.20 به قبل)

متن کد فایل آردوینو:

				
					// ________________________________________________________________________________________________________
// 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
// ________________________________________________________________________________________________________
//
//  |ads119X 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_ADS1191-2.h"
#include "ecgAlgo1191-2.h"
#include <SPI.h>

volatile uint8_t globalHeartRate = 0;
volatile uint8_t globalRespirationRate=0;

const int ADS119X_DRDY_PIN = 2;
const int ADS119X_CS_PIN = 10;
const int ADS119X_START_PIN = A5;
const int ADS119X_PWDN_PIN = 7;

int16_t CH1WaveBuff, CH1Filterout;
int16_t CH2WaveBuff, CH2Filterout;

ads119x ADS119X;
ecg_algorithm ECG_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(ADS119X_DRDY_PIN, INPUT);
  pinMode(ADS119X_CS_PIN, OUTPUT);
  pinMode(ADS119X_START_PIN, OUTPUT);
  pinMode(ADS119X_PWDN_PIN, OUTPUT);

  Serial.begin(57600);
  ADS119X.ads119xInit(ADS119X_CS_PIN,ADS119X_PWDN_PIN,ADS119X_START_PIN);
  Serial.println("Initiliziation is done");
}

void loop()
{
  ads119xOutputValues ecgValues;

  boolean ret = ADS119X.getads119xEcgSamples(ADS119X_DRDY_PIN,ADS119X_CS_PIN,&ecgValues);
  if (ret == true)
  {
    CH1WaveBuff = (int16_t)(ecgValues.sDaqVals[0]) ;
    CH2WaveBuff = (int16_t)(ecgValues.sDaqVals[1]) ;

    if(ecgValues.leadoffDetected == false)
    {

      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

    }else{
      // Uncomment for CH1
      CH1Filterout = 0;
      // Uncomment for CH2
      //CH2Filterout = 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(CH1Filterout);
  }
}

				
			

آردوینو خود را به کامپیوتر متصل کنید و مدل و پورت آردوینو خود را انتخاب کنید.

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

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

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

در ادامه می توانید کتابخانه ADS1191, شماتیک و دیتاشیت ماژول را دانلود نمایید.

ویدیو و تصاویر خروجی برنامه:

تصویر خروجی ECG:

این مقاله را با دوستانتان به اشتراک بگذارید!

Be the first to write a review

لطفا با ارسال دیدگاه و امتیاز دهی تیم جبرا را در بهبود کیفیت همیاری کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Shopping cart
Start typing to see posts you are looking for.

Sign in

No account yet?