TOPPERS 活用アイデア・アプリケーション開発
コンテスト

部門

：

アプリケーション開発部門

作品のタイトル

：

３Ｄパネルを使った非接触操作デモ機作成者：

木下浩彰（ファルコン電子株式会社）

共同作業者

：

対象者

：

イベント開催者、イベント企画者、展示会出展者

使用する開発成果物：

TOPPERS/ASP カーネル
Nucleo F401re(GCC)簡易パッケージ(utf8)
コンフィギュレータ Release 1.9.6

目的・狙い
当社が展示会で出展した際に、見学者に当社出展ブースへ立ち寄っていただくため、目立つような装飾をするためのデモ機として、開発時にサンプル出荷を始めたＡＳＫＡ

３Ｄという３Ｄパネルを使い、非接触で操作を行うデモ機を開発しました。
組込みマイコンやデバイスなどに対する技術力のＰＲも行いたかったので、ワンチップマイコンや組込み用のセンサなどで作り上げることを目標にしました。

アイデア/アプリケーションの概要
３Ｄパネルは光の屈折を利用して空中に画像を表示させるため暗くなる傾向があり、輝度を確保できるＬＥＤパネルを表示デバイスとして用いました。非接触操作のためのセンサはデジタル出力される距離センサ VL53L0X を３つ使い表示面を広範囲でカバーできるようにしました。
デモ内容は、①起動時には商品紹介のメッセージを空中に表示するデモ、表示内のボタン操作により②スライド操作ができるメーター表示デモ、もう１つで③複数のボタン操作が必要となるテトリス風ゲームのデモを実装しました。３つの表示モードは画面内のタッチにより切り替えるようにしました。

１．開発理由
当社ではＲＯＭ書き込みサービスを展開していますが、近年はマイコン内蔵の Flash メモリの書き込みも多くなり、マイコンメーカ様とのお付き合いも多くなってきました。また書き込み内容の確認作業などでマイコンの知識も必要となることから、展示会などでお客様やマイコンメーカ様と接する際に技術力をアピールすることもかねて、マイコンを使ったデモ機を開発し、展示しています。
しかし毎回同じデモ機を使っていては新鮮味に欠けることから新たなデモ機のアイデアを検討していたところ、サンプル出荷を開始したＡＳＫＡ ３Ｄという３Ｄ表示を行うパネルを知り、この３Ｄパネルを使ったデモ機を開発しようと考えました。
当初は Raspberry PI とＬＣＤディスプレイで表示してみようと考えましたが、手持ちの機材では十分な明るさが得られなかったここと、Raspberry PI 上で画像や映像を制御する技術の習得も難しかったことから、開発経験があり輝度も十分にとれるＬＥＤパネルをマイコンボードで制御し、表示を行うデモ機を作ることとしました。
また、昨年２０１８年のＥＴ展でデモを行ったところ、表示上のボタンなどを操作できるようになると面白いとの意見を多数いただきました。これを受けて距離センサを複数用いた非接触操作が可能なデモ機を開発することとしました。

２．特徴、機能●特徴
写真やあとで紹介する動画では分かりにくいですが、目視で今回使用した３Ｄパネルを見ると下図左の黄色の部分に表示が浮かび上がって見えます。これは実際に表示を行っているＬＥＤパネルと３Ｄパネルを挟んで面対称の位置になります。おな、浮かび上がる表示はＬＥＤパネルと対称ではなく、ＬＥＤパネルの表示面がＵ字にカーブして表示されているイメージです。
このため表示が浮かび上がる部分と並行になるよう下図右の赤印部分に距離センサを配置しています。

距離センサ
３Ｄパネル

ＬＥＤパネル

今回非接触操作のために用いた距離センサは ST マイクロエレクトロニクスの VL53L0X という赤外線レーザーを用いたセンサで、測定範囲が３ｃｍ～２００ｃｍとセンサ近くからミリ単位に近い精度で測定できます。また、超音波や赤外線 LED を使ったセンサよりも指向性が強く、近い距離に複数のセンサを配置しても今回利用した範囲では隣の操作の誤認識はほとんどありません。
測定結果も High Speed モードであれば 20 ミリ秒ごとに測定値を取得でき、I2C でデジタル出力されるので人の手の動きを容易に追従することができます。
今回、距離センサは横方向に３つ配置したので、横方向は３つのボタンや操作対象しか置けませんが、距離センサなので手前から奥方向は任意の位置に任意の数の操作対象を置いたり、直線的な操作を行うことができます。直線的な操作はデモの１つで体験することができるようになっています。

●機能
非接触操作のデモとして、大きく３つの機能があります。

（１）

（２）

（３）

（１）電光掲示板とデモ選択
表示奥に商品紹介などを行う文章がスクロールしながら流れる電光掲示板の機能があります。
表示手前には３つのボタンがあり、ボタンにタッチすることで他の２つのデモの選択と電光掲示する文章を次の文章へスキップすることができます。
電光掲示する文章はＳＤカード上のテキストファイルから読み出して表示します。テキストファイルの内容を変更することで表示する文章を任意に変更することができます。
今回は以下に示す４つのファイルの文章を順番に表示するようになっています。文字コードは SJIS なので、Windows PC などで容易に編集可能です。
0m.txt1m.txt2m.txt3m.txt表示される文章のスクロールスピードは、ボード上の可変抵抗を操作することで変更することができます。
電光掲示されている状態で手前中のボタンにタッチすると、現在表示中の文章をスキップして次の文章の表示に切り替わります。

（２）メーター表示デモ
電光掲示されている状態で手前左のボタンにタッチするとメーター表示のデモに切り替わります。
左右に２つの四角が表示され、それぞれの四角の中に指をかざすと指の位置にバーが表示され、その位置に応じた０～５０の数字が表示されます。指の位置を手前や奥方向にスライドさせると数値とバーが更新されます。左右のバーを同時に操作することも可能です
バーを操作してメーターを任意の値に設定するイメージでデモを作っています。
真ん中奥の方をタッチするとメーター表示デモを終了して電光掲示板へ戻ります。

（３）テトリス風ゲーム
電光掲示されている状態で手前右のボタンにタッチするとテトリス風ゲームのデモに切り替わります。
真ん中に大きな四角、手前に３つの小さな四角、右奥に数字が３つ表示されます。
少しするとブロックが奥から手前に移動してくるので、手前の左右にある小さな四角にタッチしてブロックを左右に移動させることができます。また、手前中の四角にタッチするとブロックを回転させることができます。
ブロックで横一列が埋まるとその列が消えます。ブロックが消えると消えたブロックの数に応じて右上の数字が加算されていきます。これが得点になります。いわゆるテトリスに似たルールで進行します。
真ん中奥の方をタッチするとテトリス風ゲームのデモを終了して電光掲示板へ戻ります。

●操作手順
電光掲示板用の文章のテキストファイルを入れたＳＤカードをセットし、＋５ＶのＡＣアダプタを接続してボード上の電源スイッチを入れれば装置がスタートします。終了は任意のタイミングで電源スイッチを切ります。
●動作動画
以下のＵＲＬで「３Ｄパネルを使った非接触操作デモ」の動作動画を見ることができます。
https://youtu.be/4MYyXlWFIEE

３．動作環境●ハードウェア構成
STM32F411RE NUCLEOSPIGPIO
フラットケーブル

ＳＤカードソケット／ＳＤカードLED マトリクスパネル

I2C
DIP スイッチ

GPIO(ADC)GPIOスイッチ
距離センサ

●回路図

距離センサ

距離センサ

可変抵抗●ソフトウェア構成
３Ｄパネルを使った非接触操作デモ機のソースファイルと各ファイルの概要を以下に記します。
|-- asp

TOPPERS/ASP カーネル`-- panel|-- Data||-- 0m.txt||-- 1m.txt||-- 2m.txt|`-- 3m.txt

ＳＤカードのサンプルデータ|-- fatfs||-- cc932.c

fatfs 流用||-- diskio.hfatfs 流用||-- ff.cfatfs 流用||-- ff.hfatfs 流用||-- ffconf.h

fatfs 流用||-- integer.hfatfs 流用||-- mmc.cfatfs 流用||-- spi.c

fatfs 流用|`-- spi.h

fatfs 流用|-- output|`-- Makefile

Makefile ファイル`-- panel|-- WaitMsec.S

微小時間待ちサブルーチン|-- WaitNsec.S

微小時間待ちサブルーチン|-- WaitUsec.S

微小時間待ちサブルーチン|-- fx_8x16rk_fnt.c フォントデータ|-- get_fontx2.c

フォントデータ取得処理|-- jiskan16_fnt.c

フォントデータ|-- matled_dev.c

LED マトリクスデバイスアクセスルーチン|-- matled_dev.h

LED マトリクスデバイスアクセスルーチン|-- matled_main.c

主制御処理|-- matled_main.h

主制御処理ヘッダファイル|-- matled_param.h

LED マトリクス表示用パラメータ|-- sample1.c

流用：TOPPERS 自動生成ファイル|-- sample1.cfg

流用：TOPPERS 自動生成ファイル|-- sample1.h

流用：TOPPERS 自動生成ファイル|-- tetris.c

テトリス風ゲーム処理|-- vl53l0x_dev.c

距離センサデバイスアクセスルーチン`-- vl53l0x_main.c

距離センサ処理４．開発環境●ハードウェア
マイコンボードLED マトリクスパネル
距離センサ

STM32F411RE NUCLEO
http://akizukidenshi.com/catalog/g/gM-10175/
LED マトリクスパネル P2.5 RGB 64×64
https://twitter.com/ShigezoneAkiba/status/1163003357264412672
秋月電子 ＶＬ５３Ｌ０Ｘ使用 レーザー測距センサモジュール
http://akizukidenshi.com/catalog/g/gM-12590/
TC4052BP

マルチプレクサ

http://akizukidenshi.com/catalog/g/gI-11486/（I2C の切り替え用、距離センサの切り替えに使用）

ＳＤカードソケット

秋月電子 SD カードスロット DIP 化モジュール

ＳＤカード

通常市販品（試作機では Class4/4GB カードを使用）

可変抵抗

１０ＫΩ×１（スクロールスピードの調整用）
ＤＩＰロータリースイッチ（０～９：負論理）

DIP ロータリースイッチ

http://akizukidenshi.com/catalog/g/gP-02275/（最初に電光掲示板へ出力する文章の選択用）

スイッチ
電源スイッチスライドスイッチ１個（動作確認用にスクロールを止める機能で使用）
トグルスイッチやロッカースイッチなど１個（外部電源のＯＮ／ＯＦＦに使用、ハード構成や回路図には未記入）
１６芯フラットケーブル

フラットケーブル

例 https://www.akiba-led.jp/product/1201
https://www.akiba-led.jp/product/1202（マイコンボードとＬＥＤパネルの接続用）●ソフトウェア
TOPPERS/ASP Nucleo F401re(GCC)簡易パッケージ(utf8)
ＲＴＯＳ

https://www.toppers.jp/download.cgi/asp_nucleo_f401re_gcc-20160219.zip※F411RE-NUCLEO ボードを使用し、SRAM サイズを 128KB へ変更

コンフィグレータ

Release 1.9.6（32bit Linux 用バイナリ）
https://www.toppers.jp/download.cgi/cfg-linux-static-1_9_6.gz

ＢＳＰ

ST マイクロサンプルコード／STM32CubeF4(Board Support Package)

http://www.st.com/ja/embedded-software/stm32cubef4.html

ファイルシステム

FatFs

LV53L0X ドライバ
ドットフォントデータ
テトリス風ゲーム
コンパイル環境

ST マイクロサンプルコード／X-CUBE-53L0A1
https://www.st.com/ja/ecosystems/x-cube-53l0a1.html
jiskan16.bdf
8x16rk.bdf
ESP32 用ソース／esp32_ILI9328_Tetris
https://github.com/MhageGH/esp32_ILI9328_Tetris
ubuntu 16.04-x86
GNU ARM Embedded Toolchain 5-2016-q3-update/Linux 32-bit

コンパイラ

https://developer.arm.com/-/media/Files/downloads/gnu-rm/5_4-2016q3/gc
c-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2