3duilab が 2023年10月17日18時13分58秒 に編集
コメント無し
本文の変更
# 概要
「非接触タッチパネル」の記事ががアメリカの電子工作コンテスト **hackaday prize 2023**のファイナリストに選ばれました。記事の概要と、今まで非公開だった核心部も含め全て公開します。
「非接触タッチパネル」の記事がアメリカの電子工作コンテスト **hackaday prize 2023**のファイナリストに選ばれました。記事の概要と、今まで非公開だった核心部も含め全て公開します。
hackaday prize 2023 : Non-contact touch panel https://hackaday.io/project/192360-non-contact-touch-panel # 動画 @[youtube](https://youtu.be/2f2eTH_JftQ) 動画はhackaday prize 2023の動画をElchika用に編集しました。 # センサー基板 ![キャプションを入力できます](https://camo.elchika.com/0131f74a5a16fbe8656ae7965a665f4bbe777620/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f30643438316531342d363637642d343433302d623132322d333863666330313737383930/) ![キャプションを入力できます](https://camo.elchika.com/1af5a788546ed50d284c7d37119aa8a7cf274dfa/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f32616331636334312d333637632d343439652d626237362d623431323461616562306565/) ![キャプションを入力できます](https://camo.elchika.com/947a0ee64cdba12da1cfd67235479020c75faeee/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f38336237653135382d313639642d343933392d386130362d326138346464363034316436/) ![キャプションを入力できます](https://camo.elchika.com/0ebfa7372ca0efea3403d93a302bd58d809ebad2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f31383261393238312d643634642d346261612d383430372d666238333034373430323064/) # 原理 ### フォトリフレクタ ![キャプションを入力できます](https://camo.elchika.com/078b55c2b2c6c23020d360cb9115ec072a7a77ee/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f39313031396337642d346638332d343164332d613839312d653362306136646135373538/) ### スイッチングフォトリフレクタ 原理は**フォトリフレクタの赤外線LEDを10uSだけオンするスイッチングフォトリフレクタ**です。赤外線LEDは電流制限抵抗が無く、**絶対最大定格を超える1.5Aの電流が流れ**強い赤外線を放射します。 2年4ヶ月を超える連続動作試験でも壊れたり劣化せず今も動作中です。 @[youtube](https://youtu.be/ItxDSGHfcOE) # ブロック図 ![キャプションを入力できます](https://camo.elchika.com/679fe4e178fb3cffc24038a37fa22f6df29af707/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f33643663363964352d306361372d343764662d623362362d656563363435353261643963/) **赤外線LEDのスイッチ**はADコンバータを読む**SPIのSSをトリガー**にします。 ADコンバータはOE_ILEDをオンにすると赤外線LEDの反射光、オフのとき周囲の光を読みます。 SPIはSEL_SENピンで選択したセンサー又はカラーLEDのどちらか一つを制御します。 # 回路図と部品表 ![本体基板](https://camo.elchika.com/6c8b9a95e7996b2e5147c70d39622d8a17c620f5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f66316331303032642d306630312d346361622d393266392d383635373437353438303031/) ![センサー基板](https://camo.elchika.com/f9eabd5d973ee7c90405eaae5bce1322e754ea23/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f37346437373732332d633135372d343033322d616234312d666639323031613766613935/) ![本体基板、センサー基板部品表](https://camo.elchika.com/6785ccb197ce1153efe7e2d43012750b4b5e6f16/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f37383639313337642d383532312d343737322d383333352d396236393761663766373163/) # ソフトウェア(センサーの基本動作) ### SPIセッティング - SPI-MODE:0 - CLOCK:2MHz - 1サイクル 1.2mS以上 ### ADコンバータ読み込み手順 1. OE_CLED:LOW // カラーLEDオフ 2. A,B,C セット // センサーチャンネル選択 3. SEL_SEN: HIGH // SPIはセンサー制御 4. OE_ILED:LOW // 赤外線LEDオフ 5. SS :LOW 6. SPIでADコンバータ読み取り3バイト 値A 7. SS :HIGH 8. OE_ILED:HIGH // 赤外線LEDスタンバイ 9. SS :LOW // 赤外線LEDオン 10. SPIでADコンバータ読み取り3バイト 値B 11. SS :HIGH 12. 近似距離値 = B - A - C ※Cは起動直後に測定した校正値(周囲の明るさ) ### ADコンバータ読み込みプログラム ```C++:センサー8個を読む void Sensor::setAd(bool bInit) { // bInit:add val to adAryInit[] for (int col = 0; col < COL_LEN; col++) { setCol(col, bInit); // *** sensing *** } if (!bInit) // *** set CLED *** cled.set(val); // sensor-data, indicator } ``` ```C++:センサー1個を読む void Sensor::setCol(int col, bool bInit) { int ledSta = digitalRead(OE_CLED); digitalWrite(OE_CLED, LOW); out3bit(abc, col); digitalWrite(SEL_SEN, HIGH); digitalWrite(OE_ILED, LOW); // ILED-OFF int vOff = getAdc(col); // *** read ADC *** digitalWrite(OE_ILED, HIGH); // ILED-ON int vOn = getAdc(col); // *** read ADC *** digitalWrite(SEL_SEN, LOW); digitalWrite(OE_ILED, LOW); // ILED-OFF digitalWrite(OE_CLED, ledSta); if (bInit) adAryInit[col] += vOn - vOff - (vOff >> 2) + (vOn >> 4); else adAry[col] = noMinus(vOn - vOff - (vOff >> 2) + (vOn >> 4) - adAryInit[col]); val[col] = ad2val(adAry[col]); } ``` ※(vOff >> 2) + (vOn >> 4)は強い光に対する補正値です。 ### ロジック ![キャプションを入力できます](https://camo.elchika.com/5422ae068d6391d853fb7142df4b946e816e3469/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f33663335643638362d643561352d346463642d393230332d343135363635316262616532/) **ADコンバータは赤外線の強さを2回読みます**。1回目は赤外線LEDをオフにして周囲の明るさだけ、2回目は赤外線LEDを発光させて物体からの反射光を読みます。この差から起動直後に測定した周囲の明るさ校正値を引いた値が距離近似値です。 **距離近似値=(B - A) - C** A: 赤外線LEDオフのAD値、B: 赤外線LEDオンのAD値、C: 校正値(起動直後に測定した周囲の明るさ) # SPIと赤外線LED、ADコンバータ波形 ![SPIと赤外線LEDスイッチ波形](https://camo.elchika.com/b8bd9804aadbe6bbab334421606ccdc87052a5b7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f34623037643166642d313335372d343037332d393231392d643533386564383261653562/) SPIのSSをトリガーに赤外線LEDをオン(青)します。黄色はSPIのクロック(SCLK)です。 ![SPIとADコンバータ波形](https://camo.elchika.com/d64c23ea3c7f2fc5d29cc6113758db35bb1a927f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f38323365663965392d613233352d343939382d393235392d646464373030333133353337/) ADコンバータはSPIのSCLK(黄色)の中央付近でアナログ値を読んでいます。コントローラーによりSPIのSSのタイミングが大きくズレるとADコンバータの値が下がる事があります。Raspberry Pi, Arduino Uno, Arduino Nano Every, Nucleo F303k8では問題なく動作します。 # 非接触タッチパネル動作の概要 センサーの赤外線は透明OLEDディスプレイを裏から透過して約2センチの距離で指先を検出します。非接触でスワイプや選択などタッチパネルを操作できるので感染症拡大の防止に役立つと思います。 透明OLEDディスプレイは1.51インチの小さいものしか手に入りません。センサーが6個だけなので周囲の光ノイズを受けて誤検知しやすいです。そのためソフトウェアはどの方向から手が来るかしか見ていません。大きい透明OLEDが使えると商品の間隔が広くなるので誤検知が減って実用的なものができると思います。 ### 透明OLEDと非接触センシング @[youtube](https://youtu.be/GSI43l5moBs) コントローラー(ラズベリーパイ)のグラフ描画が少し遅れますがセンサーは高速でセンシングしています。空中では約20センチの距離を検出しますが透明OLEDディスプレイを通過すると減衰して4、5センチしか検出できません。 赤外線は透明アクリル板を通過してもほとんど減衰しませんが、**透明OLEDは透明な有機ELや配線などを含む複雑な構造なので光が拡散し減衰すると考えられます**。 # 透明OLEDディスプレイ **SparkFun透明OLEDブレイクアウト**を使っています。 https://www.sparkfun.com/products/retired/15173 制御はSPIです。センサーは SPI0、透明OLEDはSPI3を使います。 言語はPython3, MITの**luma.core ライブラリ**を使っています。 https://github.com/rm-hull/luma.core プログラムやユーザーマニュアルは**下記google drive**からダウンロードできます。 https://drive.google.com/drive/folders/16AX9YFIODV_R7OsrGI2nDDG8XKKObReu - Arduino_Nano_Every3.zip 双方向ハンドセンサー(書込済Arduino Nano Everyバンドル版)用スケッチ https://www.switch-science.com/products/9152 - Non-contact_touch_panel.zip 非接触タッチパネルプログラム(ハードウェアは発売していません、プログラムは参考用として下さい) - ユーザーマニュアル1_20.pdf (最新版ユーザーマニュアル) # 詳細写真と配線図 ![キャプションを入力できます](https://camo.elchika.com/6d5b69fda3c6d335e683e237550ff74cb2e24d62/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f61373935316530342d333337612d343534372d613533632d633434373239376133333332/) ![キャプションを入力できます](https://camo.elchika.com/a64dfd03737e97478d3e503af94126b57b37b9da/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f33353461643435362d353333372d343539302d613035332d306339393766363439393135/) ![ラズベリーパイ4と双方向ハンドセンサーの配線図](https://camo.elchika.com/c885b3fc98f19a6e9882cd8cef974bcd28ecf09b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f30363835626166382d396438662d343662622d393562622d356636323835366335666237/) ![キャプションを入力できます](https://camo.elchika.com/535a07e7ffd0935ed550136afcf55b1bb7f35003/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f61636436613961342d343865312d343631322d626239662d363238303062613665313738/) # 3年間未公開、技術の核心 ![キャプションを入力できます](https://camo.elchika.com/075bc48b1d71cb6c15eeda8fcc23a6de1908e1c2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f31383164613832352d646330322d343939302d626461342d3362323431386663646437372f37386262306532322d653735642d343035312d613737362d653939366231636331393834/) 図は同じ条件で手を近づけ、遠ざけた時のフォトトランジスタによる特性の違いを表します。**センサーに採用したLTR-209は弱い信号を補足できますが早く飽和する特性があります**。この特性がそのまま双方向ハンドセンサーの特性になっています。20センチを検出するのもこの特性のおかげです。 これが今まで秘密にしてきた技術の核心です。フォトトランジスタを高感度で直線性の良いものに変えるとセンサーの性能を上げられます。 # 終わりに 電子工作ブームやElchikaの目指すところはイノベーションとか最先端の追求ではありません。双方向ハンドセンサーや非接触タッチパネルはイノベーションを狙った技術ですがこちらに投稿させてもらいます。ご質問などはwebsiteのお問い合わせからお願いします。 若者に希望を持ってもらい日本の電機産業復活を目指します。 website https://interactive-hand-sensor.com/root/ マイコン付きセンサー発売中 https://www.switch-science.com/products/9152