{"id":32636,"date":"2020-05-19T18:47:11","date_gmt":"2020-05-19T10:47:11","guid":{"rendered":"\/blog\/?p=32636"},"modified":"2020-05-19T18:53:17","modified_gmt":"2020-05-19T10:53:17","slug":"community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/","title":{"rendered":"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor"},"content":{"rendered":"\n<p class=\"has-background has-very-light-gray-background-color\">This tutorial is translated by Seeed from <a href=\"https:\/\/homemadegarbage.com\/wioterminal02\">Wio Terminal \u3067\u30d1\u30eb\u30b9\u30aa\u30ad\u30b7\u30e1\u30fc\u30bf\u3092\u5236\u4f5c<\/a> written by homemadegarbage (twitter: <a href=\"https:\/\/twitter.com\/H0meMadeGarbage\">@H0meMadeGarbage<\/a>). Thank you for sharing this with us! Visit their homepage for more interesting projects: <a href=\"http:\/\/homemadegarbage.com\">homemadegarbage.com<\/a>. <\/p>\n\n\n\n<p>This a simple tutorial about how to use Wio Terminal and <a href=\"https:\/\/www.amazon.co.jp\/dp\/B01MT8TRKJ?tag=homemadegarba-22&amp;linkCode=ogi&amp;th=1&amp;psc=1\">MAX30105<\/a> sensor to make a pulse oximeter. <\/p>\n\n\n\n<p>MAX30105 is a module equipped with red, green, and infrared LEDs and a high-sensitivity photon detector, and can be used for dust measurement or blood oxygen saturation measurement (SpO2).<\/p>\n\n\n\n<figure class=\"wp-block-embed-instagram wp-block-embed is-type-rich is-provider-instagram\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.instagram.com\/p\/CAOrYq4jVnx\/?utm_source=ig_embed&#038;utm_campaign=embed_video_watch_again\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">1. How to Connect MAX30105 to Wio Terminal<\/h2>\n\n\n\n<p>Connect the MAX30105 to the 4-pin Grove connector on the Wio Terminal.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/homemadegarbage.com\/wp\/wp-content\/uploads\/2020\/05\/grove.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">2. Set Up the Pulse oximeter<\/h2>\n\n\n\n<p>You can check the library of the MAX30105 on <a href=\"https:\/\/github.com\/sparkfun\/SparkFun_MAX3010x_Sensor_Library\">Github<\/a>. Other sample codes are listed below.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/sparkfun\/SparkFun_MAX3010x_Sensor_Library\/tree\/master\/examples\/Example8_SPO2\">Measure SpO2<\/a><\/li><li><a href=\"https:\/\/github.com\/sparkfun\/SparkFun_MAX3010x_Sensor_Library\/tree\/master\/examples\/Example5_HeartRate\">Measure heart rate<\/a><\/li><li><a href=\"https:\/\/github.com\/sparkfun\/SparkFun_MAX3010x_Sensor_Library\/tree\/master\/examples\/Example4_HeartBeat_Plotter\">Heartbeat Plotter<\/a><\/li><li><a href=\"https:\/\/wiki.seeedstudio.com\/Wio-Terminal-LCD-Linecharts\/\">LCD Line charts<\/a><\/li><li><a href=\"https:\/\/wiki.seeedstudio.com\/Wio-Terminal-Buzzer\/\">Buzzer output<\/a><\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Wire.h>\n#include \"MAX30105.h\"\n\n#include\"seeed_line_chart.h\" \/\/include the library\n#include \"spo2_algorithm.h\"\n\nMAX30105 particleSensor;\nTFT_eSPI tft;\n\nlong baseValue = 0;\nlong HB = 0, oldHB = 0;\nint diffHB = 0;\nint state = 0;\nint th = -500;\n \n#define max_size 50 \/\/maximum size of data\ndoubles data; \/\/Initilising a doubles type to store data\nTFT_eSprite spr = TFT_eSprite(&amp;tft);  \/\/ Sprite \n\n\nlong lastBeat = 0; \/\/Time at which the last beat occurred\nconst byte RATE_SIZE = 4; \/\/Increase this for more averaging. 4 is good.\nbyte rates[RATE_SIZE]; \/\/Array of heart rates\nbyte rateSpot = 0;\n\nfloat beatsPerMinute;\nint beatAvg;\nlong delta;\n\n\n#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)\n\/\/Arduino Uno doesn't have enough SRAM to store 100 samples of IR led data and red led data in 32-bit format\n\/\/To solve this problem, 16-bit MSB of the sampled data will be truncated. Samples become 16-bit data.\nuint16_t irBuffer[100]; \/\/infrared LED sensor data\nuint16_t redBuffer[100];  \/\/red LED sensor data\n#else\nuint32_t irBuffer[100]; \/\/infrared LED sensor data\nuint32_t redBuffer[100];  \/\/red LED sensor data\n#endif\n\nint32_t bufferLength; \/\/data length\nint32_t spo2; \/\/SPO2 value\nint8_t validSPO2; \/\/indicator to show if the SPO2 calculation is valid\nint32_t heartRate; \/\/heart rate value\nint8_t validHeartRate; \/\/indicator to show if the heart rate calculation is valid\n\nvoid setup() {\n  pinMode(WIO_BUZZER, OUTPUT);\n  tft.begin();\n  tft.setRotation(3);\n  spr.createSprite(TFT_HEIGHT,TFT_WIDTH);\n\n  Serial.begin(115200);\n  Serial.println(\"Initializing...\");\n\n  \/\/ Initialize sensor\n  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) \/\/Use default I2C port, 400kHz speed\n  {\n    Serial.println(\"MAX30105 was not found. Please check wiring\/power. \");\n    while (1);\n  }\n\n  particleSensor.setup(); \/\/Configure sensor with default settings\n  particleSensor.setPulseAmplitudeRed(20); \/\/Turn Red LED to low to indicate sensor is running\n  particleSensor.setPulseAmplitudeGreen(0); \/\/Turn off Green LED\n}\n \nvoid loop() {\n  bufferLength = 100; \/\/buffer length of 100 stores 4 seconds of samples running at 25sps\n\n  \/\/read the first 100 samples, and determine the signal range\n  for (byte i = 0 ; i &lt; bufferLength ; i++)\n  {\n    while (particleSensor.available() == false) \/\/do we have new data?\n      particleSensor.check(); \/\/Check the sensor for new data\n\n    redBuffer[i] = particleSensor.getRed();\n    irBuffer[i] = particleSensor.getIR();\n    particleSensor.nextSample(); \/\/We're finished with this sample so move to next sample\n\n    Serial.print(F(\"red=\"));\n    Serial.print(redBuffer[i], DEC);\n    Serial.print(F(\", ir=\"));\n    Serial.println(irBuffer[i], DEC);\n  }\n\n  \/\/calculate heart rate and SpO2 after first 100 samples (first 4 seconds of samples)\n  maxim_heart_rate_and_oxygen_saturation(irBuffer, bufferLength, redBuffer, &amp;spo2, &amp;validSPO2, &amp;heartRate, &amp;validHeartRate);\n\n  \/\/Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second\n  while (1)\n  {\n    \/\/dumping the first 25 sets of samples in the memory and shift the last 75 sets of samples to the top\n    for (byte i = 25; i &lt; 100; i++)\n    {\n      redBuffer[i - 25] = redBuffer[i];\n      irBuffer[i - 25] = irBuffer[i];\n      display();\n    }\n\n    \/\/take 25 sets of samples before calculating the heart rate.\n    for (byte i = 75; i &lt; 100; i++)\n    {\n      while (particleSensor.available() == false) \/\/do we have new data?\n        particleSensor.check(); \/\/Check the sensor for new data\n\n      redBuffer[i] = particleSensor.getRed();\n      irBuffer[i] = particleSensor.getIR();\n      particleSensor.nextSample(); \/\/We're finished with this sample so move to next sample\n\n      \/\/send samples and calculation result to terminal program through UART\n      Serial.print(F(\"red=\"));\n      Serial.print(redBuffer[i], DEC);\n      Serial.print(F(\", ir=\"));\n      Serial.print(irBuffer[i], DEC);\n\n      Serial.print(F(\", HR=\"));\n      Serial.print(heartRate, DEC);\n\n      Serial.print(F(\", HRvalid=\"));\n      Serial.print(validHeartRate, DEC);\n\n      Serial.print(F(\", SPO2=\"));\n      Serial.print(spo2, DEC);\n\n      Serial.print(F(\", SPO2Valid=\"));\n      Serial.println(validSPO2, DEC);\n\n      display();\n    }\n\n    \/\/After gathering 25 new samples recalculate HR and SP02\n    maxim_heart_rate_and_oxygen_saturation(irBuffer, bufferLength, redBuffer, &amp;spo2, &amp;validSPO2, &amp;heartRate, &amp;validHeartRate);\n  }\n}\n\n\nvoid display() {\n    spr.fillSprite(TFT_WHITE);\n    if (data.size() == max_size) {\n        data.pop();\/\/this is used to remove the first read variable\n    }\n    HB = particleSensor.getIR();\n    \n    diffHB = HB - oldHB;\n    data.push(diffHB); \/\/read variables and store in data\n\n    if(state == 0 &amp;&amp; diffHB &lt; th){\n      delta = millis() - lastBeat;\n      lastBeat = millis();\n      beatsPerMinute = 60 \/ (delta \/ 1000.0);\n\n      rates[rateSpot++] = (byte)beatsPerMinute; \/\/Store this reading in the array\n      rateSpot %= RATE_SIZE; \/\/Wrap variable\n\n      \/\/Take average of readings\n      beatAvg = 0;\n      for (byte x = 0 ; x &lt; RATE_SIZE ; x++)\n        beatAvg += rates[x];\n      beatAvg \/= RATE_SIZE;\n      Serial.println(beatAvg);\n      \n      state = 1;\n      analogWrite(WIO_BUZZER, 128);\n      Serial.println(\"Beat!!!!!!!\");\n    }else if(state == 1 &amp;&amp; diffHB > th){\n      state = 0;\n      analogWrite(WIO_BUZZER, 0);\n    }\n\n    \n  \/\/Settings for SpO2\n    String stSpO2 = \" SpO2:\";\n    if(validSPO2){\n      stSpO2 += spo2;\n    }else{\n      stSpO2 += \"-\";\n    }\n\n    char charSpO2[20];\n    stSpO2.toCharArray(charSpO2, 20);\n  \n    auto header =  text(0, 0)\n                .value(charSpO2)\n                .align(left)\n                .valign(vcenter)\n                .width(tft.width())\n                .thickness(3);\n                \n    header.height(header.font_height() * 2);\n    header.draw(); \/\/Header height is the twice the height of the font\n\n\n  \/\/Settings for HeartRate\n    String stHB = \" HeartRate:\";\n    stHB += beatAvg;\n\n    char charHB[20];\n    stHB.toCharArray(charHB, 20);\n\n    auto header2 =  text(0, header.height())\n                .value(charHB)\n                .align(left)\n                .valign(vcenter)\n                .width(tft.width())\n                .thickness(3);\n                \n    header2.height(header.font_height() * 2);\n    header2.draw(); \/\/Header height is the twice the height of the font\n    \n \n  \/\/Settings for the line graph\n    auto content = line_chart(0, header.height() + header2.height()); \/\/(x,y) where the line graph begins\n         content\n                .height(tft.height() - (header.height() + header2.height()) * 1.0) \/\/actual height of the line chart\n                .width(tft.width() - content.x() * 2) \/\/actual width of the line chart\n                .based_on(0.0) \/\/Starting point of y-axis, must be a float\n                .show_circle(false) \/\/drawing a cirle at each point, default is on.\n                .value(data) \/\/passing through the data to line graph\n                .color(TFT_PURPLE) \/\/Setting the color for the line\n                .draw();\n \n    spr.pushSprite(0, 0);\n\n    oldHB = HB;\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial is translated by Seeed from Wio Terminal \u3067\u30d1\u30eb\u30b9\u30aa\u30ad\u30b7\u30e1\u30fc\u30bf\u3092\u5236\u4f5c written by homemadegarbage (twitter: @H0meMadeGarbage).<\/p>\n","protected":false},"author":3487,"featured_media":32666,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[3003],"class_list":["post-32636","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-wio-terminal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio\" \/>\n<meta property=\"og:description\" content=\"This tutorial is translated by Seeed from Wio Terminal \u3067\u30d1\u30eb\u30b9\u30aa\u30ad\u30b7\u30e1\u30fc\u30bf\u3092\u5236\u4f5c written by homemadegarbage (twitter: @H0meMadeGarbage).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-19T10:47:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-19T10:53:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png\" \/>\n\t<meta property=\"og:image:width\" content=\"559\" \/>\n\t<meta property=\"og:image:height\" content=\"560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Serene\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Serene\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/\",\"name\":\"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png\",\"datePublished\":\"2020-05-19T10:47:11+00:00\",\"dateModified\":\"2020-05-19T10:53:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/0102457b277e33e4cdb544dd3ec2eab5\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png\",\"width\":559,\"height\":560},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/0102457b277e33e4cdb544dd3ec2eab5\",\"name\":\"Serene\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/67d0ba8df1892d2ff8fd9057bbe8caf4?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/67d0ba8df1892d2ff8fd9057bbe8caf4?s=96&r=g\",\"caption\":\"Serene\"},\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/serene\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/","og_locale":"en_US","og_type":"article","og_title":"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio","og_description":"This tutorial is translated by Seeed from Wio Terminal \u3067\u30d1\u30eb\u30b9\u30aa\u30ad\u30b7\u30e1\u30fc\u30bf\u3092\u5236\u4f5c written by homemadegarbage (twitter: @H0meMadeGarbage).","og_url":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2020-05-19T10:47:11+00:00","article_modified_time":"2020-05-19T10:53:17+00:00","og_image":[{"width":559,"height":560,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png","type":"image\/png"}],"author":"Serene","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Serene","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/","url":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/","name":"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor - Latest News from Seeed Studio","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png","datePublished":"2020-05-19T10:47:11+00:00","dateModified":"2020-05-19T10:53:17+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/0102457b277e33e4cdb544dd3ec2eab5"},"breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png","width":559,"height":560},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/19\/community-project-collection-how-to-build-a-cost-effective-pulse-oximeter-with-wio-terminal-and-max30105-sensor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Community Project Collection: How to Build a Cost-effective Pulse Oximeter with Wio Terminal and MAX30105 Sensor"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/0102457b277e33e4cdb544dd3ec2eab5","name":"Serene","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/67d0ba8df1892d2ff8fd9057bbe8caf4?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/67d0ba8df1892d2ff8fd9057bbe8caf4?s=96&r=g","caption":"Serene"},"url":"https:\/\/www.seeedstudio.com\/blog\/author\/serene\/"}]}},"modified_by":"Serene","views":8225,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16-80x80.png",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16-300x300.png",300,300,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",32,32,false],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16.png",559,560,false],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16-559x380.png",559,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2020\/05\/\u622a\u5c4f2020-05-19-\u4e0b\u53486.45.16-559x450.png",559,450,true]},"author_info":{"display_name":"Serene","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/serene\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a>","tag_info":"News","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/32636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3487"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=32636"}],"version-history":[{"count":7,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/32636\/revisions"}],"predecessor-version":[{"id":33026,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/32636\/revisions\/33026"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/32666"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=32636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=32636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=32636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}