3duilab が 2022年02月24日20時57分27秒 に編集
初版
タイトルの変更
非接触センサーでLED電車制御(スピード、色、長さ)
タグの変更
非接触センサー
RaspberryPiPICO
Neopixel
赤外線センサ
メイン画像の変更
記事種類の変更
製作品
本文の変更
# 概要 非接触空間センサー※を使った次世代の非接触インターフェイスを研究しています。今回は**線上(1次元)移動の制御実験**をしました。手元を見ずに**直感的にパラメータ(色、長さ)を変化させつつ、速度や方向も制御できる**システムです。 ※https://interactive-hand-sensor.com/root/ - ロール :左右の角度で速度制御 - 空中スワイプ :一周回る - ピッチ(前方トリガー):前後の角度で色を変える - ピッチ(後方トリガー):前後の角度で長さを変える # 動画 @[youtube](https://youtu.be/ZJDYC7UeQCI) # 特徴 - 操作が簡単(同じ手で連続的に操作できる) - 疲れにくい(細かい字を読んだり、ボタンを探す手間が要らない) - 2次元的(非接触のスマートフォン)ではない3次元の動きを活用している - 衛生的で使いやすい - トリガーなど一部の操作は予め知っておく必要がある # プログラム(Raspberry Pi Pico) ```Python: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プロトタイピング**は世界でも珍しいです。世界中で電子機器開発が加速する中で必要なのは未来を妄想しオリジナルを出すことではないでしょうか。イノベーションを起こし電機産業の復活と若者、子供たちに希望を残すため一人で開発を続けています。(感染症対策も:smile:)