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

部門

：

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

作品のタイトル：

デジタル文字遊び作成者：

石岡之也（個人）

共同作業者

：

対象者

：

幼児～大人

使用する開発成果物：

TOPPERS/ASP 1.9.3
ARM Cortex-M4 アーキテクチャ・GCC 依存部パッケージ

目的・狙い
展示会で RFID センサのデモボードを入手し、RFID カードや RFID タグから UIDが容易に読み出せることが分かり、RFID を個人認証や設備管理、商品タグなど以外に利用できないかと思いました。また昨年応募したデジタル玩具の「デジタルお絵かきボード」が ET 展や OSC の展示で人気があることが分かり、今回は RFID と組み合わせたデジタル玩具を検討して開発しようと考えました。
アイデア/アプリケーションの概要
RFID カードやタグの UID と文章を関連付けて SD カード上のテキストファイルとして管理します。RFID カードをセンサにかざすと関連付けられた文章を LED パネル上にスクロールしながら表示します。また LCD 上に SD カード上の文章用テキストファイルから読み取った文章２０個と RFID カードから読み取った UID が表示されます。LCD 上のタッチセンサで文章を選択し、「とうろく」ボタンを押すことでUID と文章をオンボードで関連付けることができます。「さくじょ」ボタンで UIDに関連付けられた文章の削除もできます。

１．開発の背景
２０１８年のＥＴ展で RFID の拡張ボード付きのマイコン評価ボードを入手し、デモプログラムで Suica などのカードの UID をワンチップマイコンで簡単に読み出せること、また、UID は RFID カードや RFID タグそれぞれに固有に番号が付加されていることが分かりました。この UID を使って何かを認識するようなシステムが作れないか考えました。
当初は RFID カードを用いて出退勤のタイムレコーダや入退室の履歴、ドアロックの開錠などのシステムを考えましたが、いずれも既存の製品が存在することと業務に絡む特定の用途に限られることから開発は断念しました。
次に検討したのが、昨年開発してコンテストに応募した「デジタルお絵かきボード」のように子供から大人までが楽しめるデジタル玩具です。展示を行ったＥＴ展や OSC で LED パネルを使ったインタラクティブな工作物に人気のあることが分かりました。このことから絵や文字を扱う玩具をネットで探してみました。
文字を使った定番の玩具が文字と絵を組み合わせた積木やカードでした、また動物や物の形をかたどった積木も多く目にしました。これらを見て、RFID カードに絵を描いて、それをセンサにかざすと絵の名称などが表示されるシステムを考えました。RFID タグを使えば積木にタグを貼ったり入れたりすることで、積木そのものを直接センサにかざして名称を表示させることができます。

２．デジタル文字遊びの概要
背面

ＬＥＤパネルSD カード

可変抵抗マイコンボード(STM32F446)

タッチパネル、SD カードソケット付き
SPI LCD ディスプレイ

RFID センサ

裏面（１）基本動作
・２００ミリ秒の待ちを入れながら RFID センサを監視し、UID の読み出しを試みる。
・RFID センサに RFID カードなどが載せられ UID の読み出しに成功したら UID を LCD へ出力する。
・読み出した UID から登録情報を確認し、UID と文章が登録されているか確認する。
・UID が登録されていた場合、文章をフォントデータを利用してドットイメージへ変換する。
・UID の読み出しができなかった場合、また、UID が登録されていない場合、プログラム内で保持している音符データをドットイメージへ変換する。
・LED パネルを制御するタスクでドットイメージを LED パネルへスライドさせながら表示する。
・ドットイメージのスライド速度は、可変抵抗により早くしたり遅くしたりすることができる。
（２）登録情報
・起動時に SD カード上のファイル master.txt に記録されている UID と文章が登録情報として読み込まれる。
（３）登録情報の追加
登録情報は SD カード上の master.txt を直接編集する以外に、動作中に以下の操作で追加することができる。
・起動時に SD カード上のファイル：msg.txt に記された文章が読み込まれて LCD 上に表示される。
・RFID センサにカードやタグをかざして UID を読み込ませる。
・UID が LCD に表示されている状態で LCD 上の文章にチェックを入れて「とうろく」ボタンを押すことで登録情報に追加され、SD カード上の master.txt も更新される。
（４）登録情報の削除
登録情報は SD カード上の master.txt を直接編集する以外に、動作中に以下の操作で削除することができる。
・RFID センサに登録済みのカードやタグをかざして UID を読み込ませる。
・UID が LCD に表示されている状態で「さくじょ」ボタンを押すことで街頭する UID の登録情報が削除され、SD カード上の master.txt も更新される。

３．動作環境●マイコンボード
ＳＴマイクロエレクトロニクス社 STM32F446RE-NUCLEO ボード。
<http://akizukidenshi.com/catalog/g/gM-10176/>●LED マトリクスパネル
3mm 64 x 32 ドット RGB マトリクスパネル<https://www.akiba-led.jp/product/1160>●接続ケーブル
拡張ボード経由で STM32F446RE-NUCLEO と LED マトリクスパネルを接続する１６芯フラットケーブル。
< https://www.akiba-led.jp/product/1201 >●2.8 インチ液晶モジュール
ILI9341 コントローラを搭載した SPI 接続の 320 x 240 ドットのカラーグラフィック LCD。
LCD 面にタッチパネルセンサが付属し、SPI でタッチ位置の情報を取得可能。
LCD を配置する基板に SD カードソケットが付けられ SPI で SD カードにアクセス可能。
<http://www.aitendo.com/product/16038>●RFID モジュール
PHILIPS 社製 NFC コントローラ PN532 を搭載した RFID カードやタグから情報を読み出すモジュール。
インターフェースは SPI、I2C、HSU (High Speed UART)が利用可能。今回は SPI を使用。
<http://www.aitendo.com/product/16607>●RFID カード
ISO/IEC 14443 Type A の RFID チップが入ったカード。
<http://www.aitendo.com/product/11089>●RFID タグISO/IEC 14443 Type A の RFID チップが入ったシールタイプのタグ。
NFC タグ NXP NTAG203/213 お試しセット<https://www.aisan.co.jp/products/nfc.html#NFCtrykit>

４．開発環境開発環境や使用した TOPPERS 成果物を以下に記します。
PC Linux 上に ARM クロスコンパイラのインストールと TOPPERS 成果物を展開し、コンフィグレーション後にデジタル文字遊びのプログラムの作成とビルドを行いました。
なお、PC Linux 上での環境構築方法を Qiita へ投稿してありますので、そちらも参照ください。
Qiita : TOPPERS/ASP をビルドして動かしてみる< https://qiita.com/Yukiya_Ishioka/items/9ecbe080939600c323c6 >以下に開発環境に必要なソフトウェアとそのダウンロード元を記します。
●TOPPERS/ASP カーネル ターゲット非依存部パッケージ< https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz >●TOPPERS/ASP カーネル ターゲット依存部
ARM Cortex-M4 アーキテクチャ・GCC 依存部パッケージ< https://www.toppers.jp/download.cgi/asp_arch_arm_m4_gcc-1.9.5.tar.gz >●コンフィギュレータ Release 1.9.6< https://www.toppers.jp/download.cgi/cfg-1.9.6.tar.gz >●ビルド用プラットフォーム
PC Linux / Ubuntu 16.04-i386< http://ftp.riken.jp/Linux/ubuntu-releases/xenial/ubuntu-16.04.6-desktop-i386.iso >●クロスコンパイラ
GNU Arm Embedded Toolchain: 5-2016-q3-update September 28, 2016 (32bit 版)<https://developer.arm.com/-/media/Files/downloads/gnu-rm/5_4-2016q3/gcc-arm-none-eabi-5_4-2016q3-2016092
6-linux.tar.bz2?revision=111dee36-f88b-4672-8ac6-48cf41b4d375?product=GNU%20Arm%20Embedded%20Toolchain,32-bit,,Linux,5-2016-q3-update>

５．ハードウェア構成と回路図●ハードウェア構成
LED パネル(64 x 32)
可変抵抗
外部電源
５Ｖ

GPIO
(ADC)

フラットケーブル
GPIO

GPIO
制御信号
GPIO

SPI

SPI

スイッチ
制御信号
GPIO

RFID センサ

STM32F446RE-NUCLEOLCD、タッチパネル、SD カードソケット

●回路図

６．ソフトウェア構成●ディレクトリ、ソースファイルの構成

ディレクトリ名
ASP

ファイル名

説明

[DIR]

---

ASP カーネルのファイルが配置されているディレクトリ

[DIR]

---

デジタル文字遊びのソースが配置されているディレクトリ

[DIR]

デバイスアクセス処理の各ソースが配置されているディレクトリ

lcd_ili9341.c

LCD ディスプレイへのデバイスアクセスや制御処理のソースファイル

lcd_tp.c

タッチパネルへのデバイスアクセスや情報取得のソースファイル

matled.c

LED パネルへのデバイスアクセスや制御処理のソースファイル

matled.hLED パネル用ヘッダファイル

nfc.c

RFID モジュールへのデバイスアクセスや制御処理のソースファイル

nfc.h

RFID 用ヘッダファイル

spi.c

SPI のデバイスアクセスや制御処理のソースファイル

spi.h

SPI 用ヘッダファイル

stm32f4xx.h

STM32F4 用ヘッダファイル

stm32f446xx.h

STM32F446 用ヘッダファイル

system_stm32f4xx.h

STM32F4 用システム処理用ヘッダファイル[DIR]

FatFs ソースファイル用ディレクトリ

[DIR]

ドットフォント用ディレクトリ

fx_8x16rk_fnt.c

半角ドットフォントファイル

jiskan16_fnt.c

全角ドットフォントファイル

read_fontx2.c

ドットフォントアクセス用ソースファイル[DIR]

ARM CMSYS 用ヘッダファイル[DIR]

ビルド用ディレクトリ

Makefile

ビルド用メイクファイル[DIR]

デジタル文字遊びのアプリケーション用ディレクトリ

mojiasobi.c

デジタル文字遊びの主処理のソースファイル

sample1.c

TOPPERS/ASP 自動生成サンプルタスクソースファイル

sample1.cfg

TOPPERS/ASP 自動生成サンプルタスクコンフィグレーション

sample1.h

TOPPERS/ASP 自動生成サンプルタスクヘッダファイル

WaitMsec.S

微小時間待ち、ミリ秒サブルーチン

WaitNsec.S

微小時間待ち、ナノ秒サブルーチン

WaitUsec.S

微小時間待ち、マイクロ秒サブルーチン

dev

fatfs
MojiAsobi
fontinclude
objsrc

● ソフトウェア構成
デジタル文字遊びは３つのタスクで構成されています。
各タスクの概要を以下に記します。
（１）メインタスク／入り口関数：main_task()
プライオリティ「５」で動作します。
他タスクの起動後、name_main()を呼び出しデバイスの初期化を行います。
現在はデバイスの初期化完了後、tslp_tsk()を繰り返して休眠します。
将来の機能拡張用の予備タスクとして休眠させています。
（２）LED パネル制御タスク／入り口関数：name_task1()
プライオリティ「９」で動作します。
メインタスクによる初期化の完了を待った後、LED パネルへのデータの出力と可変抵抗値を読み出して表示する文字のスライドスピードを調整します。
tslp_tsk()で３ミリ秒の待ちを入れながら LED パネルへの出力を繰り返します。
（３）文字遊び主タスク／入り口関数：name_task3()
プライオリティ「１１」で動作します。
メインタスクによる初期化の完了を待った後、SD カードから登録情報 master.txt と登録用文章を収めたmsg.txt の各ファイルの内容を読み込み、登録情報の構築と LCD への出力を行います。
初期処理を終えた後、タッチパネルに対する処理と RFID の UID に対する処理を繰り返します。
繰り返し処理の終端で tslp_tsk()により２００ミリ秒の待ちに入ります。

７．操作や画面表示（１）起動直後
LCD の上から UID 表示域、登録／削除ボタン、状態メッセージ域、登録追加用文章が表示されます。
LED パネルには音符記号が繰り返し表示されます。表示はスクロールが先頭に戻るか、表示文の更新が行われたときに表示色が変化します。また、読み込んだ UID が未登録の場合も音符記号の繰り返しになります。

（２）RFID カード／タグの読み込み
RFID センサに RFID カードやタグを置くと LCD の上端に UID が１６進数で表示されます。
今回利用した TypeA では UID が４バイトと７バイトの２種類があります。カードやタグがセンサ上にある間は「ID」部分が赤色で表示されます。外すと「白色」になります。

（３）UID の登録
UID が表示されている状態で登録したい文章先頭部分の□にタッチしてチェックを入れ、上部にある「とうろく」ボタンを押下すると UID とチェックを入れた文章が関連付けられ登録されます。
同じ UID に既に文章が関連付けられていた場合、上書きされて最後に登録された情報が記録されます。このとき SD カード上の master.txt も更新されるので、次に装置を立ち上げた時も最後の登録情報が残ります。

（４）UID の削除
UID が表示されている状態で上部にある「さくじょ」ボタンを押下すると UID の登録情報が削除されます。
このとき SD カード上の master.txt も更新されるので、次に装置を立ち上げた時も最後の登録情報が残ります。
該当する UID が存在しない場合には STAT に失敗したことが表示され、内部の状態は変化しません。
なお、UID の削除時、登録用の文章へのチェックは意味を持ちません。
（５）操作動画
製作したデジタル文字遊びの動作動画が以下から見ることができます。
< https://youtu.be/MfwDijUkkIk >