در پروژه مانیتورینگ ضربان قلب با استفاده برد nodemcu که از تراشه ESP32 استفاده می کند، سنسور ضربان قلب را راهاندازی میکنیم. سپس اطلاعات دریافتی از سنسور را به پلتفرم اینترنت اشیا منتقل میکنیم. البته به دفعات راهاندازی این سنسور را با بردهای مختلف از جمله آردوینو مشاهده کردهاید. اما این پروژه با دیگر نمونهها متفاوت است. در این پروژه با استفاده از برد ESP32 و قابلیت WiFi این تراشه تمام مقادیر خروجی را در پلتفرم اینترنت اشیا ThingSpeak نمایش خواهیم داد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
پلتفرم اینترنت اشیا ThingSpeak
برای مانیتورینگ و ذخیره دیتاها در اینترنت اشیا بایستی از پلتفرم مناسب آن استفاده کنیم. پلتفرم ThingSpeak پلتفرم اینترنت اشیا open source است. API برای ذخیره و بازیابی اطلاعات از طریق پروتکلهای HTTP و MQTT با اینترنت و یا با استفاده از شبکه محلی است. پلتفرم Thingspeak به شما امکان می دهد دادههای سنسورها را جمع آوری، ذخیره و تجزیه و تحلیل کنید. همچنین با استفاده از امکانات موجود در دشبورد IOT این سایت می توانیم نمودارهایی بر اساس مقادیر بدست آمده رسم کنیم. ThingSpeak یک سرویس پلتفرم تجزیه و تحلیل اینترنت اشیا است که به شما امکان می دهد جریان های داده زنده را در کلاود جمع آوری، تجسم و تجزیه و تحلیل کنید. می توانید از طریق دستگاه های خود داده ها را به ThingSpeak ارسال کنید، ایجاد تصویری فوری از دادههای زنده و با استفاده از سرویس های وب مانند Twitter و Twilio هشدار ارسال کنید. ThingSpeak مهندسان و دانشمندان را قادر می سازد تا نمونه های اولیه و ساخت سیستم های اینترنت اشیا را بدون تنظیم سرورها یا توسعه نرم افزارهای وب ایجاد کنند.
برد Nodemcu برپایه ESP32
در پروژههای اینترنت اشیا بایستی از بردهای تحت وای فای استفاده کنیم. در پروژه مانیتورینگ ضربان قلب از برد ESP32 مدل Nodemcu استفاده میکنیم. وقتی از بردهای ESP32 صحبت میکنیم، از مصرف انرژی کمتر، قدرت پردازش بهتر، تکنولوژی بروز صحبت میکنیم، یعنی نسل جدیدی از تراشه های WIFI که در ادامه نسل قبل یعنی ESP8266 به بازار معرفی شدند، که علاوه بر WIFI از بلوتوث نیز پشتیبانی میکنند. از برد های کمکی که برای این تراشه عرضه شده میتوان به NodeMCU و ESP32-CAM اشاره کرد. این تراشه در سه نوع wroom , wrover و solo تولید میشود.
توضیحات تکمیلی
در پروژه مانیتورینگ ضربان قلب از پلتفرم IOT به نام ThingSpeak استفاده کردهایم، در واقع این پلتفرم به ما اجازه ساخت یک دشبورد با قابلیت مانیتورینگ مقادیر ورودی را به روش های مختلف را میدهد. و در این پروژه با استفاده از این قابلیت، ضربان قلب فرد مورد نظر را با سنسور مربوط اندازهگیری و با این دشبورد به صورت گراف نمایش خواهیم داد. سنسور مورد استفاده در این پروژه از نوع پوستی است. کافیست سنسور را روی سطح پوست دست قرار دهیم.
وسایل موردنیاز
کتابخانههای موردنیاز
برای راه اندازی پروژه مانیتورینگ ضربان قلب ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع PulseSensor و ThingSpeak می پردازیم. مراحل زیر را دنبال کنید:
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه PulseSensor و ThingSpeak را جستجو کنید.
- کتابخانه ها را نصب کنید.
راه اندازی دشبورد ThingSpeak
این بخش در آموزش قبلی هم توضیح داده شده است. ولی مجددا برای افزایش سرعت آموزش در پروژه مانیتورینگ ضربان قلب هم توضیح خواهم داد. ابتدا به آدرس thingspeak.com مراجعه کنید و یک یک اکانت جدید ایجاد کنید، سپس در قسمت Channels و در ادامه مانند تصویر زیر New Channel، اقدام به ساخت یک چنل یا دشبورد کنید.
در ادامه صفحه ای مانند تصویر زیر را مشاهده خواهید کرد، اطلاعات اسم و توضیحات را به دلخواه پر کنید و در انتهای صفحه گزینه save channel را انتخاب کنید.
در ادامه با صفحه زیر روبرو خواهید شد که میتوانید مقادیر دریافت شده را مشاهده کنید
همچنین با استفاده از گزینه Add Widgets، میتوانید، المان های دلخواه خود برای نمایش مقادیر را اضافه کنید.
دریافت API پلتفرم ThingSpeak
در بخش API keys و در باکس مشخص شده میتوانید API مورد نیاز برای پروژه را پیدا کنید، از این API در ادامه استفاده خواهیم کرد.
شماتیک و اتصالات
در این پروژه تنها از سنسور ضربان قلب و برد ESP32 استفاده کردهایم که تنها با اتصال پین Signal از سنسور ضربان قلب به پین D32 به برد ESP32 و البته با تغذیه کردن یک ماژول میتوانیم اقدام به راهاندازی نهایی این برد بکنیم.
-
شماتیک اتصالات پروژه مانیتورینگ ضربان قلب با ThingSpeak
کد و راهاندازی مدار
در این پروژه همانطور که قبل تر ذکر شد و آموزش های لازم داده شد از کتابخانه های PulseSensorPlayground و ThingSpeak استفاده میکنیم. در این کد ابتدا مقادیری که از ماژول ضربان قلب دریافت میشود را در سریال مانیتور نمایش خواهیم داد و سپس مقادیر را به سرور های ThingSpeak ارسال خواهیم کرد. در این بخش از آموزش بخش هایی از کد این آموزش را بررسی میکنیم، در بخش اول کتابخانه ها را فراخوانی میکنیم.
#include <PulseSensorPlayground.h> #include <WiFi.h> #include <ThingSpeak.h>
در ادامه اطلاعات شبکه WiFi مورد نظر برای اتصال برد ESP32 به اینترنت را وارد میکنیم.
const char ssid[] = "نام شبکه وای فای شما"; const char password[] = "رمز وای فای شما";
در این بخش ID چنل ایجاد شده را وارد کنیو این ID در بخش اطلاعات هر چنل در Thingspeak نمایش داده میشود.
const long CHANNEL = Your ThingSpeak Channel ID;
در مراحل قبل آموزش دریافت API را دیدید در این مرحله این API را در این بخش وارد کنید.
const char *WRITE_API = "شناسه دشبور شما";
در این خط مقادیر پالس را از سنسور ضربان دریافت میکنیم.
pulseSensor.analogInput(PULSE_INPUT);
کد کامل پروژه مانیتورینگ ضربان قلب با ThingSpeak
#define USE_ARDUINO_INTERRUPTS false #include <PulseSensorPlayground.h> #include <WiFi.h> #include <ThingSpeak.h> const char ssid[] = "نام شبکه وای فای شما"; const char password[] = "رمز وای فای شما"; WiFiClient client; const long CHANNEL = Your ThingSpeak Channel ID; //در این قسمت id دشبورد ایجاد شده را وارد کنید const char *WRITE_API = "شناسه دشبور شما"; long prevMillisThingSpeak = 0; int intervalThingSpeak = 20000; // 15 ثانیه برای ارسال دیتا به دشبورد const int OUTPUT_TYPE = SERIAL_PLOTTER; const int PULSE_INPUT = 32; const int PULSE_BLINK = 21; const int PULSE_FADE = 5; const int THRESHOLD = 550; byte samplesUntilReport; const byte SAMPLES_PER_SERIAL_SAMPLE = 10; PulseSensorPlayground pulseSensor; void setup() { Serial.begin(115200); pulseSensor.analogInput(PULSE_INPUT); pulseSensor.blinkOnPulse(PULSE_BLINK); pulseSensor.fadeOnPulse(PULSE_FADE); pulseSensor.setSerial(Serial); pulseSensor.setOutputType(OUTPUT_TYPE); pulseSensor.setThreshold(THRESHOLD); samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE; if (!pulseSensor.begin()) { for(;;) { digitalWrite(PULSE_BLINK, LOW); delay(50); digitalWrite(PULSE_BLINK, HIGH); delay(50); } } WiFi.mode(WIFI_STA); ThingSpeak.begin(client); if (WiFi.status() != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); Serial.print("."); delay(5000); } Serial.println("\nConnected."); } } void loop() { if (pulseSensor.sawNewSample()) { if (--samplesUntilReport == (byte) 0) { samplesUntilReport = SAMPLES_PER_SERIAL_SAMPLE; pulseSensor.outputSample(); if (pulseSensor.sawStartOfBeat()) { pulseSensor.outputBeat(); } } int myBPM = pulseSensor.getBeatsPerMinute(); if (myBPM < 100 && myBPM > 50){ if (millis() - prevMillisThingSpeak > intervalThingSpeak) { ThingSpeak.setField(1, myBPM); int x = ThingSpeak.writeFields(CHANNEL, WRITE_API); if (x == 200) { Serial.println("Channel update successful."); } else { Serial.println("Problem updating channel. HTTP error code " + String(x)); } prevMillisThingSpeak = millis(); } } } }
جمع بندی
در پروژه مانیتورینگ ضربان قلب با استفاده از سنسور pulse sensor یا سنسور ضربان قلب مقادیر ضربان قلب را بدست آوردیم و با استفاده از برد ESP32 این مقادیر را تحلیل و در سریال مانیتور نمایش دادیم. در ادامه با فراخوانی کتابخانه ThingSpeak مقادیر بدست آمده را به سرور های ThinkSpeak ارسال خواهیم کرد و با معرفی دشبورد ساخته شده به کد های برنامه مقادیر در دشبورد ما نمایش داده خواهند شد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام مهندس اموزش جالبی بود
میشه این پروژه را ارتقا داد و بشه همزمان کنترل چند رله و دما و رطوبت را بدست گرفت و از هرجا بتونیم هم رله را کنترل و هم دما و رطوبت را ببینیم
با سلام، بله این امکان وجود دارد تا تمام مقادیر را به دشبورد خود ارسال کنیم تا از نقاط مختلف قابل دسترسی باشد.
سلام ببخشید من داخل پروگرام کردن مشکل دارم اصن برد رو نمیشناسه
همه توابع esp32 هم دان کردم بازم نشد
سلام، چه اروری دریافت میکنید؟
من میخوام این پروژه رو درست کنم الان ب جز سنسور و برد به مقاومت و پتانسیومترو و… احتیاج ندارم؟؟ ننوشتین بقیه چیزاش رو
با سلام
با سلام
تغذیه ماژول و سنسور توسط کابل USB تامین میشود. سنسور نیز به همراه کابل فلت ارسال می شود. بنابراین نیاز به قطعه دیگری نخواهد بود.
سلام مهندس:برای ارسال اطلاعات سنسور ضربان قلب ،سنسور نیرو و سنسور زاویه سنج از چه ماژولی برای ارسال اطلاعات به نرم افزار گوشی اندروید استفاده کنیم لطفا راهنمایی کنید
با سلام، میتونید از برد های ESP22/ESP8266 استفاده کنید و یا از ماژول های بلوتوث. استفاده از ESP هارو پیشنهاد میکنم.
سلام خسته نباشید
کد برای من همچین اروری میده
Arduino: 1.8.19 (Windows 10), Board: “NodeMCU-32S, 80MHz, 921600”
C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::initializeLEDs()’:
C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:218:27: error: ‘analogWrite’ was not declared in this scope
analogWrite(FadePin, 0); // turn off the LED. ^
C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::updateLEDs()’:
C:\Users\RahaSystem\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:234:49: error: ‘analogWrite’ was not declared in this scope
analogWrite(FadePin, FadeLevel / FADE_SCALE);
Multiple libraries were found for “WiFi.h”
Used: C:\Users\RahaSystem\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5\libraries\WiFi
Not used: C:\Users\RahaSystem\Documents\Arduino\libraries\WiFiNINA
Not used: D:\Arduino\1.8.19\Arduino\libraries\WiFi
exit status 1
Error compiling for board NodeMCU-32S.
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
لطفا کمک کنید !!!!!!!!!!!!
با سلام
این ارور مربوط به کتابخانه است. فایل wifi.h را از تمامی مسیرهایی که نصب کردهاید حذف کنید. مجددا از طریق نرم افزار نصب کنید.
سلام و وقت بخیر
دلیل و راه حل این خطا رو میفرمایید؟
c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::initializeLEDs()’:
c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:217:27: error: ‘analogWrite’ was not declared in this scope
analogWrite(FadePin, 0); // turn off the LED.
^
c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp: In member function ‘void PulseSensor::updateLEDs()’:
c:\Users\amira\OneDrive\Documents\Arduino\libraries\PulseSensor_Playground\src\utility\PulseSensor.cpp:232:49: error: ‘analogWrite’ was not declared in this scope
analogWrite(FadePin, FadeLevel / FADE_SCALE);
^
exit status 1
Compilation error: exit status 1
با سلام
کدها به درستی کپی نشدهاند. یکبار دیگر کپی کرده و کامپایل کنید.
سلام وقت بخیر
برای استفاده از سرور think speak که نیاز به تغییر ای پی هستش . چه راهکاری براش دارید ؟ و اینکه برای ارسال داده هم این محدودیت هست؟
با سلام
از DNSهای سرویس شکن استفاده کنید.
سلام من میخواستم از سنسور max30102 استفاده کنم و داده های ضربان قلب و اکسیژن رو به thingspeak ارسال کنم
امکانش وجود داره؟
با سلام
بله این مورد امکان پذیر است. مستندات مربوطه در سایت تینگ اسپیک قرار دارند.
سلام، من تمام مراحل رو انجام دادم ولی توی Thingspeak چیزی نمایش نمیده، علتش چیه؟
با سلام
سریال مانیتور را باز کنید ببینید اونجا وضعیت برد و اتصالات به شبکه در چه وضعیت هستند.
سلام مهندس
ایا امکانش هست به جای pulse sensor از max 30102 استفاده کرد تا بتوان در کنار امواج و تعداد ضربان قلب، اکسیژن خون را نیز نمایش داد
ممنون میشم پاسخ بدهید
با سلام
بایستی با پلتفرم تینگ اسپیک تطابق بدهید که آیا امکان پذیر هست یا خیر