โครงงานสมองกลฝังตัว

  • หน้าหลัก
  • อิคคิวซัง
    • ปีการศึกษา 2562
    • ปีการศึกษา 2561
    • ปีการศึกษา 2560
    • ปีการศึกษา 2559
    • ปีการศึกษา 2558
    • ปีการศึกษา 2557
    • ปีการศึกษา 2556
  • ทสรช.
    • ปีการศึกษา 2562
    • ปีการศึกษา 2561
    • ปีการศึกษา 2560
    • ปีการศึกษา 2559
  • สถานพินิจ
    • ปีการศึกษา 2562
  • โรงเรียนคนพิการ
    • ปีการศึกษา 2562
  • มหาวิทยาลัย
    • ปีการศึกษา 2560
    • ปีการศึกษา 2559
  • STEM ปี 2560
  • Show&Share2022
    • โครงงานสิ่งประดิษฐ์เพื่อศึกษาและดูแลสิ่งแวดล้อม
    • โครงงานสิ่งประดิษฐ์เพื่อการเกษตรอัจฉริยะ
    • โครงงานสิ่งประดิษฐ์เพื่อพัฒนาคุณภาพชีวิตและชุมชน
    • โครงงานลิฟต์
    • รายชื่อผู้เข้าแข่งขันอื่นๆ

BP07 โครงงานเครื่องวัดอัตตราการเต้นของหัวใจ (โรงเรียนโพธิ์ศรีวิทยา จ.ศรีสะเกษ) (ม.ปลาย)

Posted on March 21, 2018 by user6 Posted in ปีการศึกษา 2560 .

โครงงานเครื่องวัดอัตตราการเต้นของหัวใจ

 

ที่มาและความสำคัญ

 

โครงงานเรื่อง เครื่องวัดอัตราการเต้นของหัวใจ มีจุดมุ่งหมายเพื่อนำมาวัดอัตราการเต้นของหัวใจในเบื้องต้นเพื่อหาข้อมูลอัตราการเต้นของหัวใจ ของนักเรียนในโรงเรียนเพื่อตรวจหาความผิดปกติของร่างกาย เพื่อทำการรักษาในเบื้องต้น

ผลการศึกษาโครงงานพบนักเรียนในโรงเรียนส่วนมากจะมีปัญหาเรื่องการหาค่าอัตราการเต้นของหัวใจเพื่อนำมาวัดตามเกณฑ์ค่าการเต้นของหัวใจในแต่ละนาทีและตรวจหาความผิดปกติต่อไปจึงค้นคว้าจากอินเทอร์เน็ตและศึกษาจากแหล่งต่างๆและพบว่าสามารถทำสิ่งประดิษฐ์ที่จำนำมาเพื่อแก้ไขปัญหาในส่วนนี้ได้

 

วัตถุประสงค์

1 เพื่อหาอัตราการเต้นของหัวใจของนักเรียน

2 เพื่อตามทันสมัยแห่งยุคของเทคโนโลยี

3เพื่ออำนวยความสะดวก

 

วัสดุอุปกรณ์

1.Arduino uno                                                              2.บอร์ดทดลอง                                  3.จอLED

 

4.โมดูลวัดชีพจร                                                     5.สายJUMPER                         6.สายUSB

 

ผังโครงสร้าง

 

 

หลักการทำงาน

เมื่อนำนิ้วมือประกบติดกับโมดูลวัดชีพจรแล้วจะส่งค่าไปที่อาดิโนแล้วอาดิโนจะส่งค่าชีพจรไปยังจอแสดงผลLEDแล้วจะมีตัวอัตตราการเต้นของหัวใจ

     RHR ที่ช้า คือตัวเลขที่ต่ำกว่า 60 ครั้งต่อนาที

     RHR ที่ปกติ คือ RHR ระหว่าง 60 และ 100 ครั้งต่อนาที                                                             RHR ที่เร็ว คือที่สูงกว่า 100 ครั้งต่อนาที

 

CODE คำสั่งการทำงาน

 

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);

 

// Sensor and pins variables

 

volatile int rate[10];                    // array to hold last ten IBI values

volatile unsigned long sampleCounter = 0;          // used to determine pulse timing

volatile unsigned long lastBeatTime = 0;           // used to find IBI

volatile int P =512;                      // used to find peak in pulse wave, seeded

volatile int T = 512;                     // used to find trough in pulse wave, seeded

volatile int thresh = 512;                // used to find instant moment of heart beat, seeded

volatile int amp = 100;                   // used to hold amplitude of pulse waveform, seeded

volatile boolean firstBeat = true;        // used to seed rate array so we startup with reasonable BPM

volatile boolean secondBeat = false;      // used to seed rate array so we startup with reasonable BPM

 

int pulsePin = 0;

int blinkPin = 13;

 

// Pulse rate variable

volatile int BPM;

 

// Raw signal

volatile int Signal;

 

// Interval between beats

volatile int IBI = 600;

 

// Becomes true when the pulse is high

volatile boolean Pulse = false;

 

// Becomes true when Arduino finds a pulse

volatile boolean QS = false;

 

void setup(){

// Start Serial

Serial.begin(9600);

// Sets up to read Pulse Sensor signal every 2mS

interruptSetup();

 

display.begin(SSD1306_SWITCHCAPVCC, 0x3c); //initialize I2C addr 0x3c

display.clearDisplay(); // clears the screen and buffer

display.drawPixel(127, 63, WHITE);

 

display.drawLine(0, 63, 127, 21, WHITE);

display.drawCircle(110, 50, 12, WHITE);

display.fillCircle(45, 50, 8, WHITE);

display.drawTriangle(70, 60, 90, 60, 80, 46, WHITE);

display.setTextSize(1);

display.setTextColor(WHITE);

display.setCursor(0,0);

display.println(“Welcome All to”);

display.setTextSize(2);

display.println(“”);

display.setTextColor(BLACK, WHITE);

display.setTextSize(1);

display.println(“”);

display.setTextColor(WHITE, BLACK);

display.display();

 

}

 

void loop(){

 

// If heart beat is found

if (QS == true) {

 

// Print heart rate

Serial.print(“Heart rate: “);

Serial.println(BPM);

display.setCursor(0,0);

display.println(“HAERT RAET MONITOR”);

display.setTextSize(2);

display.print(“BPM : “);

display.print(BPM);

display.println(”  “);

display.setTextColor(BLACK, WHITE);

display.setTextSize(1);

display.println(“”);

display.setTextColor(WHITE, BLACK);

display.display();

// Reset the Quantified Self flag for next time

QS = false;

}

 

// Wait 20 ms

delay(20);

}

 

void interruptSetup(){

// Initializes Timer2 to throw an interrupt every 2mS.

TCCR2A = 0x02;     // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE

TCCR2B = 0x06;     // DON’T FORCE COMPARE, 256 PRESCALER

OCR2A = 0X7C;      // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE

TIMSK2 = 0x02;     // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A

sei();             // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED

}

 

 

 

 

 

// THIS IS THE TIMER 2 INTERRUPT SERVICE ROUTINE.

// Timer 2 makes sure that we take a reading every 2 miliseconds

ISR(TIMER2_COMPA_vect){                         // triggered when Timer2 counts to 124

cli();                                      // disable interrupts while we do this

Signal = analogRead(pulsePin);              // read the Pulse Sensor

sampleCounter += 2;                         // keep track of the time in mS with this variable

int N = sampleCounter – lastBeatTime;       // monitor the time since the last beat to avoid noise

 

//  find the peak and trough of the pulse wave

if(Signal < thresh && N > (IBI/5)*3){       // avoid dichrotic noise by waiting 3/5 of last IBI

if (Signal < T){                        // T is the trough

T = Signal;                         // keep track of lowest point in pulse wave

}

}

 

if(Signal > thresh && Signal > P){          // thresh condition helps avoid noise

P = Signal;                             // P is the peak

}                                        // keep track of highest point in pulse wave

 

 

 

//  NOW IT’S TIME TO LOOK FOR THE HEART BEAT

// signal surges up in value every time there is a pulse

if (N > 250){                                   // avoid high frequency noise

if ( (Signal > thresh) && (Pulse == false) && (N > (IBI/5)*3) ){

Pulse = true;                               // set the Pulse flag when we think there is a pulse

digitalWrite(blinkPin,HIGH);                // turn on pin 13 LED

IBI = sampleCounter – lastBeatTime;         // measure time between beats in mS

lastBeatTime = sampleCounter;               // keep track of time for next pulse

if(secondBeat){                        // if this is the second beat, if secondBeat == TRUE

secondBeat = false;                  // clear secondBeat flag

for(int i=0; i<=9; i++){             // seed the running total to get a realisitic BPM at startup

rate[i] = IBI;

}

}

 

if(firstBeat){                         // if it’s the first time we found a beat, if firstBeat == TRUE

firstBeat = false;                   // clear firstBeat flag

secondBeat = true;                   // set the second beat flag

sei();                               // enable interrupts again

return;                              // IBI value is unreliable so discard it

}

 

// keep a running total of the last 10 IBI values

word runningTotal = 0;                  // clear the runningTotal variable

for(int i=0; i<=8; i++){                // shift data in the rate array

rate[i] = rate[i+1];                  // and drop the oldest IBI value

runningTotal += rate[i];              // add up the 9 oldest IBI values

}

 

rate[9] = IBI;                          // add the latest IBI to the rate array

runningTotal += rate[9];                // add the latest IBI to runningTotal

runningTotal /= 10;                     // average the last 10 IBI values

BPM = 60000/runningTotal;               // how many beats can fit into a minute? that’s BPM!

QS = true;                              // set Quantified Self flag

// QS FLAG IS NOT CLEARED INSIDE THIS ISR

}

}

 

if (Signal < thresh && Pulse == true){   // when the values are going down, the beat is over

digitalWrite(blinkPin,LOW);            // turn off pin 13 LED

Pulse = false;                         // reset the Pulse flag so we can do it again

amp = P – T;                           // get amplitude of the pulse wave

thresh = amp/2 + T;                    // set thresh at 50% of the amplitude

P = thresh;                            // reset these for next time

T = thresh;

}

 

if (N > 2500){                           // if 2.5 seconds go by without a beat

thresh = 512;                          // set thresh default

P = 512;                               // set P default

T = 512;                               // set T default

lastBeatTime = sampleCounter;          // bring the lastBeatTime up to date

firstBeat = true;                      // set these to avoid noise

secondBeat = false;                    // when we get the heartbeat back

}

sei();                                   // enable interrupts when youre done!

}// end isr

 

 

 

 

ผลของการทดสอบ

ใช้ได้จริงปัจจุบันก็ยังใช้อยู่

 

รูปการทำงาน

 

1.  เตรียมอุปรณ์

 

2.  ติดตั้งอุปกรณ์อิเล็กทรอนิกส์ พร้อมเขียนโปรแกรมควบคุม

 

3.   ติดตั้งระบบแล้วเสร็จ การทดสอบระบบ

 

วีดีโอผลงาน

ไม่ได้อัดวีดีโอครับ

คณะผู้จัดทำโครงงาน

  1. สามเณร ธีรพัฒน์ สมบัติ
  2. สามเณรอนินชัย สุระ

 

อาจารย์ที่ปรึกษา

นางสาว วนิดา โวหาร                                  สอนวิชา คณิตศาสตร์ วิทยาศาสตร์

โทรศัพท์  0939654872                              E-mail Vanida22197@hotmail.com

นาย เชษฐา บุญเฮ้า                                      สอนวิชา  คอมพิวเตอร์ การงานอาชีพ

โทรศัพท์ 0837450917                                 E-mail shasttaa@gmail.com

 

โรงเรียนโพธิ์ศรีวิทยา

ที่อยู่ของโรงเรียน              วัดบ้านโดด ตำบลโดด อำเภอโพธิ์ศรีสุวรรณ จังหวัดศรีสะเกษ

« BP05 โครงงานบ้านหลังคาเย็น (โรงเรียนพระปริยัติธรรมเกียรติแก้ววิทยา จ. ศรีสะเกษ) (ม.ปลาย
BP09 โครงงานเครื่องดักจับควันบุหรี่ (โรงเรียนศรีเกษตรวิทยา จ.ศรีสะเกษ) (ม.ปลาย) »

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

CyberChimps WordPress Themes

© โครงงานสมองกลฝังตัว