naranavinのアイコン画像

うさ耳型Obniz食いしばり防止器

naranavin 2021年05月14日に作成  (2021年05月15日に更新)

うさ耳型Obniz食いしばり防止器

ここに動画が表示されます

[

う さ 耳 型 O bniz 食 い し ば り 防 止 器(肩 こ り を う さ 耳 で 克 服 せ よ)
ブロック図
キャプションを入力できます

  1. 外観
    キャプションを入力できます

キャプションを入力できます

キャプションを入力できます
2. 仕様

  • うさ耳カチューシャ型
  • 側頭筋の筋電位で食いしばりを検出する
  • 食いしばりを検知するとその方のうさ耳を目に動かす。
  • 食いしばりが5秒以上続いたらLINEに通知を送る。かつ両方のうさ耳を前後に動かす。
  • JavaScriptを使用する。
  • 髪がある部分で計測する
  • バッテリー駆動
  1. 部品
品 名 個数 備考
obniz Board 1Y D Gifted
サ ー ボ モ ー タ   SG90 2 Amazon
う さ 耳 カ チ ュ ー シ ャ 1 ダイソー
筋 電 位 ア ン プ 自 作 1 ADS1292
リ チ ウ ム バ ッ テ リ ー 3.7V 800 m Ah 1 携 帯 電 話 予 備 バ ッ テ リ ーAmazon
乾 式 電 極 自 作 2 3極構成
  1. 配線
    キャプションを入力できます

• 0: サ ー ボ 1 • 1: サ ー ボ 2 • 10 :ADC1( 左 ) • 11 :ADC2( 右 )

  1. プログラム
    食 い し ば り が発生し積分筋電位の上昇を 検 出 し た ら う さ 耳 を 動 か す 、 3 秒 以 上 な ら LINE 通 知

食いしばり防止

// うさ耳obniz食いしばり防止器 const fs = require("fs"); const request = require("request"); const Obniz = require("obniz"); const LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"; const TOKEN = "LINEのトークンコード"; const MESSAGE = "--食いしばりが発生しました--"; const HEADERS = { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Bearer " + TOKEN }; const OPTIONS = { url: LINE_NOTIFY_URL, method: "POST", headers: HEADERS, json: true, form: { message: MESSAGE } } var send = false; var obniz = new Obniz("obniz-ID"); var flag1 = false; var flag2 = false; var timer1 = new Date(); var timer2 = new Date(); var timer3 = new Date(); var count = 0; var timer = new Date(); var ad1 = 0; var ad2 = 0; //うさ耳のサーボ var Mid1 = 110; //サーボ中央位置 var Mid2 = 90; var Front1 = 00; //サーボ前位置 var Front2 = 180; var Back1 = 140; //サーボ後ろ位置 var Back2 = 10; var Th = 0.3; //しきい値 var Long = 3000; //継続噛み締め通知時間sec obniz.onconnect = async function () { var servo1 = obniz.wired("ServoMotor", {gnd:3, vcc:2, signal:0}); var servo2 = obniz.wired("ServoMotor", {gnd:3, vcc:2, signal:1}); obniz.repeat(async () => { obniz.ad10.start((voltage) => { //左側の筋電位 ad1 = voltage; }); obniz.ad11.start((voltage) => { //右側の筋電位 ad2 = voltage; }); // leftしきい値 if(ad1 > Th ){ console.log("ad1:"+ad1); if(flag1 == false){ servo1.angle(Front1); flag1 = true; timer1 = new Date(); console.log("left ON"); } //timer1 = Date(); timer = new Date(); console.log("time:"+(timer.getTime() -timer1.getTime() )); }else{ servo1.angle(Mid1); flag1 = false; } //rightしきい値 if(ad2 > Th ){ if(flag2 == false){ servo2.angle(Front2); console.log("righ ON"); flag2 = true; timer2 = new Date(); } }else{ servo2.angle(Mid2); flag2 = false; } if(ad1 <= Th && ad2 <= Th ){ //両方しきい値以下 servo1.angle(Mid1); servo2.angle(Mid2); send = false; flag1 = false; flag2 = false; } timer = new Date(); if((flag1 == true && (timer.getTime() - timer1.getTime()) > Long) || (flag2 == true && (timer.getTime() - timer2.getTime()) > Long)){ //噛み締めが継続した console.log("Long kamikami "+(timer.getTime() - timer1.getTime()) + " " + (timer.getTime() - timer2.getTime())); if(send == false){ send = true; count = 0; console.log("line tingth send!"); await request(OPTIONS, async(error, response, body) => { console.log(body); if(error){ console.log(error); } }); } //長い噛み締め 交互に耳を振る timer = new Date(); if(timer.getTime()-timer3.getTime()>800){ count++; timer3 = new Date(); if(count == 1){ servo1.angle(Back1); servo2.angle(Front2); }else if(count == 2){ servo1.angle(Front1); servo2.angle(Back2); count = 0; }else{ servo1.angle(Mid1); servo2.angle(Mid2); count = 0; } } } },300); } obniz.onclose = async function() { }
  1. 感 想
    • Line の 通 知 は 思 っ た 以 上 に 簡 単 だ っ た 。
    • 初 め て の JavaScript だ っ た の で そ こ は 苦 労 し ま し た 。
    • Ambient に 食 い し ば り の デ ー タ を 保 存 し た か っ た が 時 間 切 れ
    • 髪 の 毛 が 生 え て い る 部 位 か ら 筋 電 位 が 取 れ る よ う に な っ た の は 大 き な 収 穫 で し た 。
1
naranavinのアイコン画像
ガジェットクリエーター アナログ・デジタル回路設計 組込ソフトウェア、Assistech 筋電を使ったものが多いです。 おもな作品 ・テンプラー筋電位車いす、サイボーグポイど、筋電位うさ耳、動くうさ耳、フリーエナジ?回るぜ、ムカデロボ ・i+Padタッチャー、筋電位スイッチ
ログインしてコメントを投稿する