作者:賴建宏

希望利用智慧手環解決長照困境/來源
緣起
看到聯發科推出 LinkIt 7697 這功能強大的開發板,卻只拿來做遙控車?實在是暴殄天物! LinkIt 7697 的強項在於處理器效能和記憶體,遠比大多數 Arduino 系列用的 8 bits ATMEL 328 系列更快又更大,當然把功能比較複雜的演算效果加上去,讓它更有看頭!
來看看 LinkIt 7697 與 Arduino Uno 簡單的比較表:

LinkIt 7697 / Arduino Uno 比較表
還有,別忘了 LinkIt 7697 上面附帶有 BLE 以及 WiFi 的無線電通訊機能,如果你想用 Arduino UNO 來做無線電加值服務的效果,還得另外花錢去買 Adapter 哩!
要讓它演算效果強,有一大堆的應用可行,想了想覺得適合 LinkIt 7697 的大概就是 Arduino 這類的裝置,但又要用之前 Arduino 這類可能比較麻煩的裝置來做,才突顯 LinkIt 7697 的價值。智慧長期看照裝置就是個不錯的選擇,而且國際期刊跟研討會很多這方面的內容。
所以 MakerPRO 社團的總主筆歐文向我提起這個構想,開始往智慧長期看照這方面的裝置下手,參考坊間有許多與跌倒偵測裝置有關的產品,比如智慧手環,就是第一個標的啦!
參考了幾篇國際期刊以後,心中大概有了譜,打算使用 LinkIt 7697 加上一個 MPU6050 的模組,來做出一個偵測跌倒信號的功能雛形。
材料需求
- LinkIt 7697一個
- MPU6050模組一個
- 母對母杜邦線四條
硬體跳線

LinkIt 7697 / Arduino Uno 硬體跳線
原理說明
簡單來說,就是利用加速度在 XYZ 三個軸上,對時間 t 微分(設定一個固定間隔時間)所得的XYZ變量之強度值(XYZ三個軸上的值,這一次與前一次的差,再代公式)進行分析比對(跟一個設定好的值比大小)。是不是相當口語化呢?不用微積分又簡單易懂。
至於那求強度值公式⋯⋯嘿嘿嘿,也是小孩都算得出來:

求強度值公式
如果你有興趣去翻國際期刊,可以看到有些人把角速度(自己騰空旋轉的改變程度)也考慮進去(公式一樣!就只是把 ax、ay、az 換成 gx、gy、gz 而已)。總之,就是在一段時間內,若偵測到強度超過設定的值,就判定成跌倒⋯⋯
大概又會有人被期刊上那些眼花撩亂的數學式給騙了吧,其實那些國際期刊跟研討會的文獻寫的主題,就是:用什麼樣的數據收集方法(自己編一套自己的計算公式)來決定強度值應該設定多少,才算是跌倒(叫很多研究生去表演怎樣跌倒,然後把三項數據收集起來,套自己編的公式算)⋯⋯OK!懂了喔?
程式碼
<< fall.ino >>
#include “I2Cdev.h”
#include “MPU6050.h”
#include “Wire.h”
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int time_interval = 500; //500ms
unsigned long current, lastTime = 0;
int16_t prev_accx = 0;
int16_t prev_accy = 0;
int16_t prev_accz = 0;
float acc_upv = 2.8; //The thresholds for fall detection
void setup()
{
Wire.begin();
Serial.begin(115200);
accelgyro.initialize();
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
prev_accx = ax;
prev_accy = ay;
prev_accz = az;
lastTime = millis();
}
void loop()
{
current = millis(); //Set for every interval
if(current – lastTime >= time_interval)
{
lastTime = current;
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
float accx = ((ax – prev_accx) / 16384) * ((ax – prev_accx) / 16384);
float accy = ((ay – prev_accy) / 16384) * ((ay – prev_accy) / 16384);
float accz = ((az – prev_accz) / 16384) * ((az – prev_accz) / 16384);
Serial.print(accx); Serial.print(“\t”);
Serial.print(accy); Serial.print(“\t”);
Serial.print(accz); Serial.println();
if( sqrt(accx + accy + accz) > acc_upv )
Serial.println(“GOT!!!”);
prev_accx = ax;
prev_accy = ay;
prev_accz = az;
}
}
影片說明與展示
結語
在計算上,運用 LinkIt 7697 比起 Arduino UNO 更加簡單!我的間隔時間設 0.5 秒,強度值就參考國際期刊的 2.8 ,坊間有很多這類商品,看完本文你也可以自己完成後,拿來跟坊間的商品比較看看。當然,若加上一些像是通訊功能,以及與 Android 手機 App 之間交換訊息的加值功能,你的商品就會更有賣點哦!
(責任編輯:林佳盈)
◎加入我們的Line,獲得更多及時文章更新&活動資訊→
參考資料:國際期刊與研討會文獻
A. Inclusive Smart Cities and Digital Health, 第108到187頁
B. Evaluation of waist-mounted tri-axial accelerometer based fall-detection algorithms during scripted and continuous unscripted activities, Journal of Biomechanics, Elsevier
- 【開箱評測】用Mbed上手開發DSI 2599開發板 - 2020/08/03
- 【OpenVINO™教學】自製麵包影像辨識POS機的應用 - 2019/12/24
- 【邊緣運算】OpenVINO好夥伴 — athena A1 Kit x86單板 - 2019/11/18
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!