วัดอัตราการเต้นของหัวใจ Heartbeat Sensor กับ Arduino แสดงผลผ่าน OLED
ในบทความนี้เราจะมาเรียนรู้การเชื่อมต่อเซ็นเซอร์วัดอัตราการเต้นของหัวใจ (Heartbeat Sensor)
เข้ากับ Arduino เพื่อวัดค่าแบบเรียลไทม์ และแสดงผลบนหน้าจอ OLED
เหมาะสำหรับผู้เริ่มต้นที่สนใจด้าน IoT, สุขภาพ และ Embedded System
อุปกรณ์ที่ใช้ (Components)
- Arduino Uno R3 https://shopee.co.th/product/243007968/5725582932
- Heartbeat Sensor https://shopee.co.th/product/243007968/4325583509
- OLED Display (I2C) https://shopee.co.th/product/243007968/4726154423
- สาย Jumper https://shopee.co.th/product/243007968/7525582748
ขาใช้งานของ Heartbeat Sensor
- VCC → ไฟเลี้ยง 5V
- GND → กราวด์
- Signal → ขา Analog (เช่น A0)
หลักการทำงานของ Heartbeat Sensor
เซ็นเซอร์วัดชีพจรทำงานโดยตรวจจับการเปลี่ยนแปลงของการไหลเวียนของเลือดใต้ผิวหนัง
ซึ่งเกิดจากการขยายและหดตัวของหลอดเลือดในแต่ละจังหวะการเต้นของหัวใจ
เซ็นเซอร์แบบ Optical จะใช้ LED ยิงแสงเข้าไปในผิวหนัง
และใช้ตัวรับแสง (Photodiode) วัดแสงที่สะท้อนกลับมา
เมื่อเลือดไหลมากขึ้น → ดูดซับแสงมากขึ้น → ค่าที่อ่านเปลี่ยนไป
กระบวนการนี้เรียกว่า Photoplethysmogram (PPG)
โครงสร้างวงจรภายใน
- Photodiode + IR LED → ตรวจจับชีพจร
- Op-Amp → ขยายสัญญาณ
- RC Filter → ลดสัญญาณรบกวน
- Diode → ป้องกันแรงดันย้อนกลับ
การต่อวงจร (Wiring)
- VCC → 5V (Arduino)
- GND → GND
- Signal → A0
- OLED → SDA / SCL (I2C)
คำถามที่พบบ่อย (FAQ)
ปลอดภัยหรือไม่?
ปลอดภัย เพราะใช้แสงระดับต่ำ ไม่เป็นอันตราย
ใช้ทางการแพทย์ได้ไหม?
เหมาะสำหรับการทดลองหรือฟิตเนส ไม่ใช่อุปกรณ์ทางการแพทย์
ใช้ได้กับทุกคนไหม?
ใช้ได้ แต่สีผิวและลักษณะผิวอาจมีผลต่อความแม่นยำ
โค้ดโปรแกรม Arduino
#include <Adafruit_SSD1306.h>
#define OLED_Address 0x3C
Adafruit_SSD1306 oled(128, 64);
int a=0;
int lasta=0;
int lastb=0;
int LastTime=0;
int ThisTime;
bool BPMTiming=false;
bool BeatComplete=false;
int BPM=0;
#define UpperThreshold 520
#define LowerThreshold 510
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address);
oled.clearDisplay();
oled.setTextSize(2);
Serial.begin(9600);
}
void loop() {
if(a>127) {
oled.clearDisplay();
a=0;
lasta=a;
}
ThisTime=millis();
int value=analogRead(0);
Serial.println(value);
oled.setTextColor(WHITE);
int b=60-(value/16);
oled.writeLine(lasta,lastb,a,b,WHITE);
lastb=b;
lasta=a;
if(value>UpperThreshold) {
if(BeatComplete) {
BPM=ThisTime-LastTime;
BPM=int(60/(float(BPM)/1000));
BPMTiming=false;
BeatComplete=false;
tone(8,1000,250);
}
if(BPMTiming==false) {
LastTime=millis();
BPMTiming=true;
}
}
if((value<LowerThreshold)&(BPMTiming))
BeatComplete=true;
oled.writeFillRect(0,50,128,16,BLACK);
oled.setCursor(0,50);
oled.print("BPM:");
oled.print(BPM);
oled.display();
a++;
}
วิดีโอสาธิตการทำงาน
สรุป
โปรเจคนี้ช่วยให้เข้าใจการอ่านค่าสัญญาณชีพจร
และการประมวลผลสัญญาณจากเซ็นเซอร์จริง
สามารถต่อยอดได้ เช่น:
- ส่งข้อมูลขึ้น Cloud (IoT)
- แสดงผลผ่านมือถือ
- พัฒนาเป็นอุปกรณ์สุขภาพ
เริ่มจากวัดชีพจร → ต่อยอดสู่ระบบสุขภาพอัจฉริยะ
