基于arduino的心率检测仪

这是一款采用AD8232作为心电监测芯片,它能在具有机械运动或远程放置所产生干扰的情况之下,提取、放大、过滤得到极弱的生物电信号。采用Arduino ATmega328作为主控制芯片,LCD1602液晶屏作为显示屏,使用锂电池供电,并设计TP4056充电板,为保护电源电路,还为锂电池供电增加了由DW01和8205A组成的电源保护电路,具有较好的便携性和稳定性。通过与某米的手环对比,误差在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. for (i = 1; i < 500; i++)
  30. {
  31. m = abs(data[i] - data[i - 1]);
  32. // Serial.println(abs(m));
  33. if (abs(m) > 80)
  34. {
  35. count++;
  36. }
  37. }
  38. if (count >= 9 && count < 15)
  39. {
  40. n = count * 6;
  41. }
  42. if (count >= 17)
  43. {
  44. n = count * 3;
  45. }
  46. if (count < 9)
  47. {
  48. n = 60;
  49. }
  50. Serial.println(millis());
  51. Serial.println(n);
  52. count = 0;
  53. lcd.setCursor(0, 1);
  54. lcd.print(n);
  55. }

复制代码

(0)

相关推荐