分享

基于arduino的心率检测仪

 lhktija 2021-07-20
这是一款采用AD8232作为心电监测芯片,它能在具有机械运动或远程放置所产生干扰的情况之下,提取、放大、过滤得到极弱的生物电信号。采Arduino ATmega328作为主控制芯片,LCD1602液晶屏作为显示屏,使用锂电池供电,并设计TP4056充电板,为保护电源电路,还为锂电池供电增加了由DW018205A组成的电源保护电路,具有较好的便携性和稳定性。通过与某米的手环对比,误差在2-10次/min之间,想必是本人学艺不精的原因。程序如下:
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h> //引用I2C库
  3. //设置LCD1602设备地址,这里的地址是0x3F,一般是0x20,或者0x27,具体看模块手册
  4. LiquidCrystal_I2C lcd(0x3F, 16, 2);
  5. unsigned int data[500], i, count, total[6], num, total1;
  6. int m, n = 0;
  7. void setup()
  8. { lcd.init();                  // 初始化LCD
  9.   lcd.backlight();             //设置LCD背景等亮
  10.   Serial.begin(9600);
  11.   lcd.setCursor(0, 0);               //设置显示指针
  12.   lcd.print("HeartRate");     //输出字符到LCD1602上
  13. }

  14. void loop()
  15. {
  16.   if (n == 0)
  17.   {
  18.     delay(1000);
  19.   }
  20.   Serial.println(millis());
  21.   for (i = 0; i < 500; i++)
  22.   {
  23.     data[i] = analogRead(A0);
  24.                                                    //Serial.println(data[i]);
  25.                                                  // send the value of analog input 0:
  26.                                                //Wait for a bit to keep serial data from saturating
  27.     delay(20);
  28.   }
  29.   
  30.   for (i = 1; i < 500; i++)
  31.   {
  32.     m = abs(data[i] - data[i - 1]);
  33.    // Serial.println(abs(m));
  34.     if (abs(m) > 80)
  35.     {
  36.       count++;
  37.     }

  38.   }
  39.   if (count >= 9 && count < 15)
  40.   {
  41.     n = count * 6;
  42.   }
  43.   if (count >= 17)
  44.   {
  45.     n = count * 3;
  46.   }
  47.   if (count < 9)
  48.   {
  49.     n = 60;
  50.   }
  51.   Serial.println(millis());
  52.   Serial.println(n);
  53.   count = 0;
  54.   lcd.setCursor(0, 1);
  55.   lcd.print(n);
  56.   }
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多