第1部分:一款用Raspberry Pi和感測器製作的可穿戴式小型健康管理設備!第一部分
大家好,我是吉田!
從這部分開始,我們將著手製作這款用來解決運動不足問題的健康管理設備。首先,我們使用羅姆SensorMedal來測量和計算步數、移動距離、消耗的卡路里等。
另外,將您在家中散步的結果發送到LINE,是不是可以提高您的運動積極性呢?您可能會意外地發現,自己在家裡竟然運動量也不小,如果用得好,也許還可以減肥哦!
在這裡,我們使用羅姆的SensorMedal(SensorMedal-EVK-002)來測量步數和距離。在第一部分中,我們在Raspberry Pi Zero上安裝了一個名為“bluepy”的庫,以便能夠透過Bluetooth將SensorMedal連接到Raspberry Pi。另外,我們還透過使用Github中的便捷程式,獲得了以下資料。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
pi@raspizero:~/SensorMedal2 $ sudo python3 ble_logger_SensorMedal2.py ... Device c5:xx:yy:zz::d0 (random), RSSI=-65 dB Short Local Name = ROHMMedal2_0107_01.00 Flags = 06 Incomplete 16b Services = 0000180a-0000 Manufacturer = 0100c86abcdef ID = 0x1 SEQ = 188 Temperature = 27.99 ℃ Humidity = 71.52 % Pressure = 998.578 hPa Illuminance = 93.3 lx Accelerometer = 1.453 g ( 0.062 0.844 1.181 g) Geomagnetic = 92.6 uT ( -15.8 -58.0 -70.4 uT) Magnetic = 0x3 Steps = 8 歩 Battery Level = 90 % RSSI = -65 dB |
可從SensorMedal獲取的測量值:
其中,Steps用來獲取加速度感測器的步數資料。首先,我想根據該步數資料計算移動距離。為此,需要每步的距離(步幅),這個資料因人而異,可以根據身高,按照“身高/2〜身高×1.2”計算。在這裡,我們簡單地設每步的步幅 = 0.5m。
我們先來計算一下您在家中移動(步行)所消耗的卡路里吧。有這樣一個測量值:一個健康男性1天走10000步左右消耗的卡路里約為350kcal(約一碗米飯)。參考這個值,我們使用350/10,000 = 0.035作為每步的係數。
綜上所述,我們需要計算的專案匯總如下:
編號 | 輸出值 | 計算方法 |
1 | Steps 步數 (步) | 從加速度感測器獲取步數 |
2 | Distance 移動距離(m) | 步數×每步距離(這裡簡單地假設為每步0.5m) |
3 | Calorie 卡路里(kcal) | 步數 × 每步消耗的卡路里量(這裡使用卡路里係數0.035) |
下面,我們將其寫成一個程式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
pi@raspizero:~/SensorMedal2 $ sudo cp ble_logger_SensorMedal2.py ~/Programs/ble_steps.py pi@raspizero:~/ $ sudo vi ~/Programs/ble_steps.py (在原來的ble_logger_SensorMedal2.py程式中增加第9〜29行的內容) --- sensors['Magnetic'] = hex(payval(27)) sensors['Steps'] = payval(28,2) step_cnt = sensors['Steps'] if SEQ in [0,1] and step_cnt == 0: start_seq+= 1 start_time= datetime.now() print(start_time.strftime('%H:%M:%S')+"開始!") else: last_time= start_time last_cnt = step_cnt cur_time= datetime.now() time_text= cur_time.strftime('%Y/%m/%d(%a) %H:%M:%S') print(time_text) if start_seq >= 1: dur_time= cur_time - start_time cur_cnt = step_cnt cur_mv = round(cur_cnt*0.5,1) cur_cal = round(cur_cnt*0.035,1) dur_seconds = dur_time.seconds dur_seconds = 1 if dur_seconds==0 else dur_seconds step_text= str(dur_seconds)+"s "+str(cur_cnt)+"Steps "+str(cur_mv)+"m "+str(cur_cal)+"Cal" print(step_text) sensors['Battery Level'] = payval(30) sensors['RSSI'] = dev.rssi --- |
運行這個程式ble_steps.py。啟動該程式後,按下SensorMedal的按鈕,將其重置一次,然後將從那裡開始計算步數和時間。
1 |
pi@raspizero:~/Programs $ sudo python3 ble_steps.py |
可以看到,成功顯示了根據步數計算出來的移動距離和卡路里等資料,因此,我們可以將SensorMedal放在衣兜等位置,將Raspberry Pi Zero連接電源並放在房間中。現在,您可以像使用計步器一樣使用SensorMedal了。
接下來,當達到一定數位的步數時,可以將資料發送到LINE以便於查看。例如,每當您走了〇〇步時,或者每當您走路時,將“您已經走了〇〇步!”等資料發送到LINE等工具,也許可以提高您運動的積極性。
首先,要使用LINE,需要先從“LINE Notify”頁面上登錄。
https://notify-bot.line.me/ja/
從右上角的登錄區域使用您的LINE Developer帳戶登錄(如果您沒有帳戶,請先註冊)。登錄後,需要發行訪問權杖,以便能夠從“我的”頁面向LINE發送消息。
在這裡需要取一個合適的權杖名稱,並在LINE中選擇一個聊天室,然後發行權杖。
這時,將會顯示用來發送LINE Notify的權杖,複製該權杖。如果關閉該頁面將需要重新發行權杖,因此請務必確保已經複製好了。
使用該權杖在Raspberry Pi上添加程式。在這裡,我們將程式添加到前面提到的“ble_steps.py”中,使其成為“ble_steps_line.py”。將複製的權杖粘貼到下面代碼的第11行,即“xxx”的位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
pi@raspizero:~/Programs $ sudo cp ble_steps.py ble_steps_line.py pi@raspizero:~/Programs $ sudo vi ble_steps_line.py (在原来的ble_steps.py程式中增加第8〜17行、第24〜27行的內容) --- scanner = btle.Scanner() import requests def line_message(text): url = "https://notify-api.line.me/api/notify" token = "xxx" headers= {"Authorization":"Bearer "+token, "Content-Type":"application/x-www-form-urlencoded"} payload = {"message":text, "stickerPackageId":2, "stickerId":513} r = requests.post(url ,headers = headers ,params=payload) while True: --- print(step_text) if cur_cnt > 10: comp_text = str(cur_cnt)+"歩あるいたよ!" if cur_cnt%20 == 0: line_message(comp_text) sensors['Battery Level'] = payval(30) --- |
這次我為了便於測試,設置為每20步發送一條文本。現在,讓我們像“sudo python3 ble_steps_line.py”一樣運行這個程式,請走動或搖動SensorMedal,試試看能否正常測量步數。
如下圖所示,文本應該會發送到指定的LINE聊天室中(我也一併發送了表情圖,這個您可以根據自己的喜好添加)。
本文是第二部分,我們開始實際製作這款用來解決運動不足問題的健康管理設備。由於可以很容易地從SensorMedal中的加速度感測器獲取步數,因此我使用通用數值計算並顯示了移動距離和卡路里消耗量。另外,為了提高運動積極性,我們還將結果發送到了LINE。
怎麼樣?把這個SensorMedal放在衣兜裡,即使您在家中,也可以有意識地運動,是不是很不錯?
在第三部分中,我們將使用脈搏感測器來測量日常生活和運動過程中的心率。
相关连载一览
第1部分:用Raspberry Pi Zero和罗姆SensorMedal制作健康管理设备!
第2部分:根據感測器的值計算步數、距離和卡路里,並將資料發送到LINE!(本章)
第3部分:一款用Raspberry Pi和感測器製作的可穿戴式小型健康管理設備!
第4部分:連接顯示器並完成這款可穿戴式健康管理設備