NT名古屋11/9(土),10(日)に出展↓します 出展者用リンク
ハードウェア・モーションスイッチ
ソフトウェア・モーションスイッチ
キューブタイプ
- 赤外線パルスで20センチの簡易距離センサーアレイを実現
- 昆虫の複眼のように広い範囲の動作を素早く検出
- 現代的なモーションセンサーでお客様と共に近未来デバイスを創る
概要
投稿
YouTubeと投稿
開発スポンサー募集中! 技術の詳細公開中、ダウンロードも
新規、変更
- 新:エルチカに実践的なモーション・スイッチを投稿しました(24/7/31)
- 新:モーション・スイッチ キットを発売しました。販売サイトはこちら(24/7/25)
- 新:TikTokとYouTubeにモーション・スイッチを投稿しました(24/7/15)
- 新:TiktokとYouTubeに発明の秘密を投稿しました(24/6/30)
- 新:TiktokとYouTubeに双方向ハンドセンサーの概要を投稿しました(24/6/9)
- 新:TiktokとYouTubeにニュートンのゆりかごを投稿しました(24/5/15)
- 新:hackaday prize 2023 ファイナリストに選ばれました(23/8/18)
他のセンサーとの比較
センサー | AIカメラ | LIDAR | 双方向ハンドセンサー |
測定原理 | 画像をAI(ソフトウェア)で分析 | 赤外線レーザー光を放射し飛行時間を測定 | 普通の赤外線を放射し反射光の強さを測定 |
配置と測定角度 | 一点から放射状に測定 | 一点から放射状に測定 | 線状、平面状にセンサーを展開しピンポイントで上空を測定 |
測定速度 | 遅い | 遅い | 速い |
短所 | 奥行き方向の精度が悪い 映像が残り、プライバシーが見られる恐れ 死角がある 応用の自由度が低い | 死角がある、 応用の自由度が低い 目を傷つける場合がある | 距離が測定できない 検出距離が短い(約20センチ) 認知されていない |
長所 | 1m以上の長距離でも測定可能 性能が保証されている 情報が多く使いやすい | 1m以上の長距離でも測定可能 距離測定の精度が高い 情報が多く使いやすい 暗いところでも測定できる | マイコンで制御でき応用の自由度が高い 死角がなく、3次元的に空間の変化を捉える 暗いところでも測定できる |
リンク
センサー基板発売中
販売サイト 製品は黒色(緑の基板は色以外製品と同じ試作品)技術詳細
ハードウェア
センサー基板
※赤外線LEDとフォトトランジスタに黒いカバーをつけています。これが無いと横からの光を検出して正しく検出できません。最初は銀紙を巻いていましたが現在は塩ビ端末保護キャップ 端子カバーを切って使っています。
ブロック図
距離読み取りの手順
- マイコンはADコンバータをSPIインターフェイスで読みます。
- このSPIのSSをトリガーに10uSec(マイクロ秒)のパルスをワンショットマルチバイブレータで発生します。
- 10uSecのパルスでMOSFETのゲートをオンします。
- 赤外線LEDに10uSecの時間、約1.5Aの電流を流しオーバードライブします。(電流制限抵抗なし)
- ADコンバータはフォトトランジスタの出力を電圧変換した値を読みます。
- マイコンはADコンバータの値から距離近似値を検出します。
回路図と部品表(回路図はユーザーマニュアルが見やすいです)
フォトトランジスタの特性
フォトトランジスタの特性でセンサーの性能が決まります。センサーに採用したLTR-209は感度が高く飽和しやすい性質があります。フォトトランジスタを高感度で直線的な特性の物にするとセンサーの性能が上がります。
フォトリフレクタ
スイッチングフォトリフレクタ
赤外線LEDを10uSだけオンして強く発光させADコンバータで反射光を読み取ります。これが技術の核心です。
スイッチングフォトリフレクタは私が2019年に発明した技術でまだ認知されていません。
スイッチングフォトリフレクタ記事
私は昔、半導体の故障解析の仕事をしていました。MOSFETやLSIの電流リークなどの故障箇所を見つけSEM(走査型電子顕微鏡)で写真を撮ります。半導体の故障原因は結晶のわずかな歪やゴミなどで、そこから電流リークなどが起こることが多いです。歪のない綺麗な半導体は壊れ難いです。
一方で最近は半導体プロセスの微細化で世界が競争しています。赤外線LEDはLSIチップと違って微細化の対象ではないかもしれませんが平均的な精度が上がり歪の無い半導体が製造可能になっています。これらの要因で昔に比べ半導体(赤外線LED)が壊れ難くなったのがその背景です。
ソフトウェア
ADコンバータ読み込み手順
- OE_CLED:LOW // カラーLEDオフ
- A,B,C セット // センサーチャンネル選択
- SEL_SEN: HIGH // SPIはセンサー制御
- OE_ILED:LOW // 赤外線LEDオフ
- SS :LOW
- SPIでADコンバータ読み取り3バイト 値X
- SS :HIGH
- OE_ILED:HIGH // 赤外線LEDスタンバイ
- SS :LOW // 赤外線LEDオン
- SPIでADコンバータ読み取り3バイト 値Y
- SS :HIGH
- 近似距離値 = Y – X – Z ※Zは起動直後に測定した校正値(周囲の明るさ)
ADコンバータ読み込みプログラム
センサー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); // set sensor-data
}
センサー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)は強い光に対する補正値です。
ロジック
ADコンバータは赤外線の強さを2回読みます。1回目は赤外線LEDをオフにして周囲の明るさだけ、2回目は赤外線LEDを発光させて物体からの反射光を読みます。この差から起動直後に測定した周囲の明るさ校正値を引いた値が距離近似値です。
距離近似値=(Y – X) – Z
X: 赤外線LEDオフのAD値、Y: 赤外線LEDオンのAD値、Z: 校正値(起動直後に測定した周囲の明るさ)
SPIと赤外線LED、ADコンバータ波形
SPIクロックと赤外線LEDゲートドライブ波形
SPIのSSをトリガーに10uSec赤外線LEDをオンします(青)
SPIクロックとADコンバータ波形
ADコンバータ(青)はSPIのクロック(黄)の中央付近でアナログ値を読んでいます。コントローラーによりSPIのSSのタイミングが大きくズレるとADコンバータの値が下がる事があります。Raspberry Pi, Arduino Uno, Arduino Nano Every, Nucleo F303k8では問題なく動作します。
ダウンロード(google ドライブ)
- Arduino_Nano_Every_3a.zip : Arduino Nano Everyの基本プログラム(最初の動画)
- ユーザーマニュアル1_20.pdf : ユーザーマニュアル(回路図付き)
- Manual_Program1.zip : ユーザーマニュアルとArduino, Rsspberry Pi, mbedプログラム