作ってみました
LeafonyとOMRON製の顔認識センサを組み合わせてみました。 この記事はその製作記です。なるべく小さくシンプルに作ってみました。
使ったリーフ( ボード )
最初にすること
最初に仕様を考えます。
B5Tから推定結果を得て、リアルタイムにLCD表示する仕様とします。
・カメラ前のひとりを対象
・推定は性別、年齢、表情
・推定結果はLCD、LEDで表示
左の写真は B5Tのカメラ部。
右の写真は推定結果の表示部。LeafonyのLCDリーフと外部LED 2つを使用して表示することを目標としました。
次に3つのパートに分けます。
・構造、モックアップ、製作
・回路図、部品配置、基板手作り
・仕様調査、階層検討、プログラム
今回は製品の設計ではないので、製品設計のプロセスとか、細かい検査はしません。動けばOKという感じです。(気持ちが楽)
構造 中が見えるように
回路 ユニバーサル基板を使って
プログラム Arduino IDEで開発
ハードソフトの分かれ目、それはピン(ポート)アサインです。
CPUやボードはピンごとに機能が決まっています。使いたい機能からどのピンを使うかが決まります。同じ機能でも複数のピンで提供されている場合や、ひとつのピンで複数の機能が選択できる場合、基板のレイアウトと相談して決めます。( 配線の取り回しや、場合によってはノイズへの配慮 )
ピン数の多いCPU(ESP32など)はここで決めたことが後々大きく影響してきます。
構造を考える
Leafonyの特徴を出したい、中身が分かるようにしたいということで目標を設定しました。
・なるべく小さく
・中身が見えるように
・分解、組み立てが簡単
今は3D CAD使うことが多いのですが相変わらずモックアップ。バルザ材の木工は楽しいです。
FFC(フラットケーブル)の当たりをつけるのには実機の方が良いかなと思っています。
CADで検討 B5Tの制御部が大きいので、そこを基準にして大きさを決めました。

第2次試作 カメラを中に。これにもう少し改良(ステイを減らす)を加えたものが完成版
回路を考える
回路図を書く
回路は簡単。電源回路とインターフェースのみです。
操作はLeafonyのLCD基板のスイッチ。 表示はLCDと外付けLED 2つです。
電源はUSB給電にしました。身近で調達できるということで、PCでもUSBバッテリでもOKです。
左下は leafony 29pinリーフのピンアサインです。このあと作る基板の配線時に必要な情報です。
回路図上にはBLEリーフがありますが、これはオプションです。JP1はデバッグ時と単独で使用したときの電源切り替えで、ジャンパピンを想定しています。

実装方法を考える
今回は1台だけ作るので、ユニバーサル基板で手組みです。昔ながらのトレーシングペーパーで表面裏面の配線を描いていきます。
部品位置や干渉は、部品の実物を基板に載せて確認しながら進めます。右写真はまだ検討途上なので、コネクタが大きかったり実際は使わなかったモジュールも載っています。
二つ折りにして表裏を透過しながら描きます。拡げると実体配線図になります。

回路を作る
leafony用のM2ネジを切ります。
電工ペンチのねじカッタが便利です。
今回はユニバーサル基板に手組みです。「工作」のスタートです。
手元の部品は菊皿(絵画用)が便利
半田付はコネクタをカバーして保護
コネクタピンを付けたところ
Leafonyブロックを組み立てます。29pinリーフにはユニバーサル基板の接続用のコネクタピンを半田付け、コネクタ接点が近いので保護します。
左写真の「d4」 は自分で貼ったロット番号。故障のあるときなどにどのリーフか分からなくなるのを防ぎます。
リーフを組むときは接点をきれいに。
ブレッドボードで基本的な動きを確認します。Leafonyブロックがころころしないように開発ベンチを作ってみました。結構便利です。
ブレッドボードで明るさを調整
Leafonyブロック用の開発ベンチ
基本的なところの動作確認
SHコネクタはかなり小さいので、コンタクト付きリード線を購入しました。モックアップで取り回しを確認、長さを決めてカットです。
途中でピン番号が分からなくならないように、リード線の先にマジックペンで線を書きます。1ピンなら線1本、2ピンなら線2本という感じです。
長さを測りつつカット
ピン番号に合わせて印をつけます。
基板に取り付けたところ
ユニバーサル基板の半田面
部品を半田付けして基板部は完成です。
完成後に無水アルコールでフラックスや汚れを取り除きます。
リーフの実装前
リーフ(29pin)の実装時
ベース部にステイ用ネジを立てます。
最下段、B5Tの制御部を組み付けます。
ユニバーサル基板部を重ねます。
仮組みです。アクリル板は傷つきやすいので本組み立てまで保護シールは剥がしません。
仮組みで問題がなけれ、本組み立てです。モックアップで組み付け性も確認しているので楽に組み立てられます。
ハードウエアの完成です。アクリル板の保護シールを剥がすと透明感があります。どこから見ても中身が見える当初の目標通りの外観になりました。
プログラム考える
設計情報を集める
最初にすることは、LeafonyとB5Tの仕様書、取扱説明書、サンプルコードの熟読です。
どちらの情報もネット上にありますのでまずはPDFで保存。熟読には時間がかかるのでスマホに入れて移動中に読んだりしています。
全体構成を考える
AVRなのでAndroidがOSです。周辺を動かすためのインタフェースの確認です。
・I2C: LCDモジュール
・ソフトウエアUART: B5T
・パラレルI/O:LED, B5Tリセット
これらのライブラリを選定します。ハードウエアUARTはデバッグ用でPCと接続するために使用します。B5Tとはソフトウエアシリアルで接続します。
LCDはLeafonyのライブラリを参考にインタフェースを構成します。
B5T(HVC)とのインタフェースは階層化してポータビリティ(他のシステムに移植しやくすくする)を高めるために階層化することにしました。
右はこれらの機能とその関係を示しています。もっとも上位の設計図になります。

AI04 LCD ブロック図
インタフェースの概要
・PIO 入力:( 2本 )
・PIO出力: 3本
・I2C Bus: 1系統
・ソフトウエア UART:1系統
・ハードウエア UART:1系統
インタフェース( 通信 )
・B5T:ソフトウエア UART
PB0/TXD, PB1/RXD
・デバッグ:ハードウエア UART
PD1/TXD, PD0/RXD
インタフェース( 表示・操作 )
= 操作(入力) =
・LCDリーフ内
SW1: PD1 ( PD5 )
SW2: I2C ( SCL, SDA )
= 表示(出力) =
・LCDリーフ内
LCD: I2C ( SCL, SDA )
・Leafony外
LED-青: PB3
LED-赤: PB4
B5T リセット: PB2
使用するライブラリ
I2C制御:Wire.h
LCD制御:ST7032.h
ソフトウエア UART: SoftwareSerial.h
プログラムを作る
開発ツール
Arduinon IDE を使用しました。
Lefony ( AVR MCU )は、USBリーフとPCを接続して簡単に開発できます。
状態遷移
このアプリケーションは、カメラ前の人の性別、年齢、表情を推定してLCDに表示します。
これが続くだけです。なので、状態遷移はありません。至って簡素です。
フロー
setup() 初期化:
Leafony各リーフの初期化、B5T初期化をおこないます。
loop() メインループ:
1)B5Tに条件をコマンド送出
2)B5Tにデータ取得のコマンド送出
3)B5Tからデータ取得(受信)
4)データのエラー検出
5)LCD、LEDに結果の表示
B5Tとのインタフェース ~ 階層化
UART Interface
・上位: HVC Access
・下位: ソフトウエア シリアル
ソフトウエア UARTに対する送受信を担います。
可変長のデータ(Byte配列)と文字列長をポインタで受け渡します。受信は受信待ちのタイムアウト機能付きです。
HVC Access
・上位: HVC Control
・下位: UART Interface
HVC( B5T )の通信仕様に基づき下記を実装しています。
・B5T へのコマンド送信
・B5Tからのヘッダ受信
・B5Tからのデータ本体受信
HVC Control
・上位: アプリケーション
・下位: HVC Access
B5Tの機能ごとのAPIをアプリケーションに提供します。
データはB5Tの仕様に基づく構造体とその内容の定義により、アプリケーション側で簡単に記述できます。
階層化する
可搬性を高めるために3階層に分けました。
今回はAVRを使用するためリソース(メモリ)が多くありません。アプリケーションにリソースを多めに割り当てたいときに必要な機能だけ実装することもできます。
少ないリソースへの配慮
B5Tは最大同時に35名分のデータを取得できます。すべての機能と最大人数分のデータは、AVRのリソースでは足りません。
そのため HVC Controlに逐次処理用のインタフェースを設けました。アプリケーション側で少ないメモリでも処理が行えます。
右のコードは HVC ControlのAPIのひとつ(顔の角度を取得する機能)です。
※ B5T(HVC)のサンプルプログラム(OMRON製)を参考、引用しています。

完 成!

完成しました。カメラと向き合うと年齢や表情が表示されます。何か他の人から年齢を言われたみたいでちょっと恥ずかしい感じです。
こういうセンサの検査はどうしたらいいのでしょうか?
電圧計や物差しでは測れませんよね。そこですでに年齢の分かっている人の写真を使って、性別、年齢、表情が近いか見てみました。なるほど!と実感です。今までのアプリケーションに追加すると、付加価値増えそうです。
Leafonyは実証試作に向いています。
特にIoTで要求される、小型、電池駆動であり、多くの周辺機能を多種のリーフの組み合わせで簡単に実証試作機を実現することができました。
おまけ
三脚に取り付けてみました


ケースに入れてみました

かっこよくなりました。(笑)