0

Nabız Sensörü Projesi

Merhaba ,

Biraz Elektronik , biraz Arduino ve biraz Processing’li nabız sensörü uygulamamdan bahsedeceğim. Öncelikle projenin elektronik ayağına bakarsak; infrared iki tane alıcı ve verici diyotumuz var bunların üzerine parmağımızı dokunduğumuzda verici diyottan alıcı diyota doğru bir IR ışık akışı oluyor tabi bu akış parmağımıza pompalanan kanın değişmesiyle değişiyor ve sonuçta alıcı diyot üzerindeki voltajda dalgalanmalara sebep oluyor. Bu sinyal çok küçük olduğu için bu sinyali filtre edip opamp ile yükselttikten sonra artık arduino’ya gelmiş bulunuyoruz. 🙂

şimdi arduino’dan devam edelim. gelen bu sinyali biraz da  yazılımsal filtrelere tabi tutup kalp atışımızın saniyedeki durumunu bulmaya çalışalım işte kodlar;

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
unsigned long time=0;
int rate=0;
int lastOut=0;
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(250000);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);
  if(outputValue>0){
    if(lastOut==0){
      rate++;
    
    }
     
    }
      lastOut=outputValue;
Serial.println((String)outputValue+",0");
if(millis()-time>5000){
    time=millis(); Serial.println(String(outputValue)+","+String(rate*12)); rate=0;
    
  }



  delay(100);
}

evet burdan sonra processing ile bunu bilgisayarımızın ekranına alalım . İşte processing kodları .

import processing.serial.*;

Serial port; // yeni bir seri port nesnesi oluşturalım
Float x=0.0;
Float y=0.0;
String inString=null;  // Input string from serial port
int lf = 10;
Float value=0.0;
float inc=0.5;
Float lastValue=1.0;
int count=0;
Float tempValue=0.0;
int time=0;
int lastPeriod=0;
int rate=0;
Float totalRate=-1.0;
PFont f,fs;
Boolean system;
int screen=0;
int rateCount=0;
Float  rateAvg=0.0;
Float screenRate=0.0;
PImage hImage;

void setup(){
  
  f=createFont("Oswald",26,true);
  fs=createFont("Oswald",16,true);
  fullScreen();
  background(0);
  fill(255);
  textFont(f);
  
  try{ printArray(Serial.list()); // Bilgisayarımıza bağlı olan portları konsola yazdıralım
    port=new Serial(this,Serial.list()[0],250000); system=true;port.bufferUntil(lf); drawConnectionText();} 
  catch(Exception ex){   drawDisconnectText();}
  
  drawGrid();
  hImage=loadImage("heart.png");
}
void draw(){

  drawHeartRate();
  image(hImage,width/2-120,2);
  
  // ---------- Ekrana Sonuna gelindi -----------------

  if(x>width){
    x=0.0;background(0); drawGrid(); screen=1;drawHeartRate(); screen=0;  if(system){drawConnectionText();}else{drawDisconnectText();}
  }
 
 // ---------- Ekran Sonuna Gelindi--------------------


  // ---------- Ekrana Grafik Çizdirelim ----------------------
 if(tempValue>0)
  {
     if(tempValue!=lastValue)
           {
             drawRate(tempValue,x); x+=50; lastValue=tempValue;
           }
         
   }
   else
   {
       translate(0,height/2); stroke(255,0,0);line(x,0,x+1,0);   x+=inc;
   }

  // ------------ Ekrana Grafik Çizdirelim --------------------


}

//------------------------------------------------------------
// Kalp Atışını Ekrana Çiz

void drawRate(Float y,Float x){
  
  stroke(255,0,0);
  translate(0,height/2);
  line(x,0,x+30,-y);
  line(x+30,-y,x+30,y);
  line(x+30,y,x+50,0);
  
}

// Kalp Atışını Ekrana Çiz
// --------------------------------------------------------


// --------------------------------------------------------
// Seri port gelenleri oku ve gerekli değerlere aktar

void serialEvent(Serial p){
  
  if(system){
      inString=p.readString();
      String[] list=split(inString,',');
      if(list[0]!=null){
         valueControl(Float.parseFloat(list[0])); 
          totalRate=Float.parseFloat(list[1]);
                       }
            }
}
 // Seri Port okundu ve gerekli değerlere aktarıldı
 //----------------------------------------------------------

// --------------------------------------------------------
// Okunan Değeri Değerlendir

Float valueControl(Float value){

  if(value<50){
    tempValue=value*4;
   rate++;
  }
  else {
    tempValue=0.0;
    
  }
  return value;
}

 // Okunan Değeri Değerlendir.
 //----------------------------------------------------------


// --------------------------------------------------------
// Kalp atım sayısını Ekrana Yaz

void drawHeartRate(){
  
 if(totalRate>0 || totalRate<0 || screen>0){
    stroke(0);textFont(f);
    fill(0,255,0);rect(width/2-150,height-200,300,150); 
    fill(0); 
    if(totalRate<0){totalRate=0.0;}
    if(totalRate>0){
    rateAvg+=totalRate;
    rateCount++;
    screenRate=rateAvg/rateCount;
    }
    text("Nabız(Avg)  => "+str(floor(screenRate)),width/2-75,height-125);
  }
   
}
 // Kalp atım sayısını ekrana yaz
 //----------------------------------------------------------



// --------------------------------------------------------
// Ekran Dekorasyonunu Çiz

void drawConnectionText(){
  fill(255);
 text("Nabız Ölçüm Sistemi",width/2-100,210); textFont(fs);text("Programming & Electronics - Veysel SARI",width/2-120,240);
 text("Ayğıt Bağlantısı Kuruldu",width-300,height-30);    
}
void drawDisconnectText(){
  fill(255);
   textFont(f); text("Nabız Ölçüm Sistemi",width/2-100,50); textFont(fs);
  text("Sisteme Bağlı Aygıt Bulunamadı",width-300,height-30); system=false;
}


void drawGrid(){
  translate(0,0);
  stroke(255,33);
for(int i=0; i<height;i+=20){

line(0,i,width,i);

}
for(int j=0;j<width;j+=20){
line(j,0,j,height);
}
}

// Ekran Dekorasyonunu Çiz
//----------------------------------------------------------


// --------------------------------------------------------
// Ekranı Kapat

void mousePressed(){

  if(mouseButton==RIGHT){
exit();
  }
}

// --------------------------------------------------------
// Ekranı Kapat

evet artık iş sonu

admin

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir