概要
非接触空間センサー※を使った次世代の非接触インターフェイスを研究しています。今回は線上(1次元)移動の制御実験をしました。手元を見ずに直感的にパラメータ(色、長さ)を変化させつつ、速度や方向も制御できるシステムです。
※https://interactive-hand-sensor.com/root/
- ロール :左右の角度で速度制御
- 空中スワイプ :一周回る
- ピッチ(前方トリガー):前後の角度で色を変える
- ピッチ(後方トリガー):前後の角度で長さを変える
動画
特徴
- 操作が簡単(同じ手で連続的に操作できる)
- 疲れにくい(細かい字を読んだり、ボタンを探す手間が要らない)
- 2次元的(非接触のスマートフォン)ではない3次元の動きを活用している
- 衛生的で使いやすい
- トリガーなど一部の操作は予め知っておく必要がある
プログラム(Raspberry Pi Pico)
train_control.py
from machine import PWM
from Sensor_CLED import *
from state_machine import *
# *************** off led8x8 **********************
def offLed8x8():
oe8 = getPinOut('OE_I8x8')
fix8 = getPinOut('FIX_8x8')
lst0 = [0 for _ in range(8)]
oe8(True)
spi.write( bytearray(0, 127) ) # col, row
fix8(True)
fix8(False)
oe8(False)
# ***************************************************
def makePwm(gpio, freq, duty16): # CLED PWM
pwm = PWM(gpio)
pwm.freq(freq)
pwm.duty_u16(duty16)
def makeIndi(): # make indicator
val = True
def closure(dummy):
nonlocal val
CLed.setIndi(val)
val = not val
return closure
def makeIntv(): # make interval for neopixel
flg = False
def setFlg(dummy): # set flag
nonlocal flg
flg = True
def chkFlg(): # check flag
nonlocal flg
rev = flg
flg = False
return rev
return setFlg, chkFlg
tims = [] # global to fix bugs
def makeTimer(funcs): # funcs: (func, Hz)
global tims
for fn, hz in funcs:
tims.append(Timer())
tims[-1].init(freq=hz, mode=Timer.PERIODIC, callback=fn) # freq / period
# ***************** main ********************
if __name__ == '__main__':
try:
makePwm(pwmCled_gpio, 50, 1<<11) # set pwm 1<<15
setNeoFlg, chkNeoFlag = makeIntv()
funcHz = ((makeIndi(), 1),(setNeoFlg, 20)) # indicator:1Hz, neoFlag:0.7Hz
makeTimer(funcHz)
State_machine.init()
print('******************* START ********************')
CRI = 500
cled = CLed()
cled.turnOn(5)
Sensor.init() # *** initialize Sensor ***
cled.turnOn(0)
evt = Event.HAND_LEFT
offLed8x8()
while True:
Sensor.setAd()
cled.turnOn()
adt = Sensor.getAd()
if not State_machine.isChgSta(): # not CHANGE_HUE, CHANGE_LEN
if MotionDetection.swipeLR(adt):
evt = MotionDetection.getLrEvt()
elif chkNeoFlag() and not MotionDetection.swipe_LR[0]:
evt = MotionDetection.getEvent(adt) # print 'a'
State_machine.exec(evt, adt)
except KeyboardInterrupt:
print("\nCtl+C")
train.clr()
CLed.turnOn(0)
終わりに
- 問題解決型ではない
- 未来を妄想し、発明したセンサーで実現している
- SF作品を創るつもりで斬新なシステムを考える
テーマは斬新な非接触インターフェイスの仕様でマニアックな内容です。3次元インターフェイスはSF映画にもあまり登場しないのでヒントが少なく妥当性の判断が難しいです。皆様の感想をコメント頂けると嬉しいです。
未来的なセンサーを発明して斬新な開発をするSFプロトタイピングは世界でも珍しいです。世界中で電子機器開発が加速する中で必要なのは未来を妄想しオリジナルを出すことではないでしょうか。イノベーションを起こし電機産業の復活と若者、子供たちに希望を残すため一人で開発を続けています。(感染症対策も)
投稿者の人気記事
-
3duilab
さんが
2022/02/24
に
編集
をしました。
(メッセージ: 初版)
-
3duilab
さんが
2022/02/26
に
編集
をしました。
ログインしてコメントを投稿する