Maker Faire Tokyo 2020に出展します

今年は「チームいわて」で参加します。コロナウィルスへの対応で、チームメンバーに展示を託すリモート参加です。出展作品は次の2点です。
(1)「LabVIEW Community Edition用の無料の電子ブック紹介」
(2)「球体をテトラヘクス結合したピースによるピラミッドパズル」

「LabVIEW Community Edition用の無料の電子ブック紹介」

LabVIEWは研究開発や工場の自動化などで使われているプログラミング環境で、計測・制御分野で強みを持っています。今年の5月に非商用であれば無料で使えるCommunity Editionがリリースされましたので、ArduinoやRaspberry Piを使っているメイカーに使い方を紹介したいと考えています。

電子ブックのダウンロードサイト
日本語版
英語版
初めてLabVIEWに触る人でもこの本だけで使いこなせるように、29個のサンプルプログラムを用意しました。きっとプログラムを動かしながら理解を深められると思います。
電子ブックの内容
1章 : LabVIEWで学ぶプログラミング
2章 : LabVIEWコミュニティ版を使ってみよう
3章 : グラフィカルプログラミングにふれる
4章 : 自分のアプリを作ってみる
5章 : LabVIEWとArduino
6章 : LEDの特性を調べてみよう
7章 : 半導体センサを使ってみる

「球体をテトラヘクス結合したピースによるピラミッドパズル」

六角形を4個並べた図形をテトラへクスと言い、7種類の図形があります。

OLYMPUS DIGITAL CAMERA

六角形の内接円でテトラへクスを作ると下のようになります。
薄い円形の板ではなく球でピースを作ります。
7種類を2セットで、14個のピースを作るには56個の球が必要です。
56個の球を積み上げると一辺が6個の正四面体になります。
1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)+(1+2+3+4+5+6) = 56

さて、球体をテトラヘクス結合した14個のピースでうまく正四面体が出来上がるでしょうか?

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

難しいパズルだと感じるかもしれませんが、組立手順はたくさんあります。

問題です。球に外接する立体を使って同じように正四面体を作るにはどんな立体を使えば良いでしょうか?

OLYMPUS DIGITAL CAMERA

菱形12面体と言います。表裏が120°ずれているので、表裏違いのピースが3種類増えます。表裏違いのピースを組みとして、7組14個でパズルを作ったのですが、球のパズルよりも8倍難しいと考えられます。

来場者にこんな話をしたかったのですが、今年は残念です。

ESP32でI2Sを使ってみる

ESP32はWiFiやBluetoothが使える高機能なボードです。I2S(Inter-IC Sound)というサウンドをデジタル通信できる機能も持っていて、I2S対応のマイクモジュールやアンプモジュールを接続してArduino IDEで制御することができます。

OLYMPUS DIGITAL CAMERA

ESP32のプログラムガイド」や「ESP32のI2Sマイク研究」、「I2Sマイク、ESP32、Arduino、SPH0645LM4H」などの記事を参考にしながら試してみました。

結論から書くと、マイクからの入力をイヤフォンで聞くことができましたが、音質がどうこうというレベルにはなっていません。タイムラグをまったく感じないのは今後に期待できるかもしれません。

興味のある方への参考と、自分のための備忘録

ESP32は「 MH-ET LIVE MiniKit」を使用しました。マイクは「Sipeed 1マイクモジュール」2個、アンプは「GY-PCM5102」を使用しました。

ESP32のI2Sは2本あり、入力か出力どちらかを選択できます。今回はI2S_0をマイク入力、I2S_1をアンプ出力に使います。それぞれバッファメモリが使えますので、マイクの入力バッファからデータを読んで、32ビット符号付整数に変換して、処理(たんなる掛け算)して、バイト配列に戻してから、アンプ出力のバッファに書き込みます。delay()を入れずに繰り返して呼び出していますが、アンプ出力を見る限りではバッファがうまく丸く収めてくれているようです。

OLYMPUS DIGITAL CAMERA

マイクモジュールの配線
DA — IO18(1kΩでGNDに接続)
CK — IO23
LR — L:3.3V, R:GND
WS — IO19
V — 3.3V
G — GND

OLYMPUS DIGITAL CAMERA

アンプモジュールの配線
SCK — GND
BCK — IO16
DIN — IO21
LCK — IO17
GND — GND
VIN — 3.3V

OLYMPUS DIGITAL CAMERA

 

フルカラーウェルカムボードの製作

OLYMPUS DIGITAL CAMERA

壁時計に使っているESP32と32×8 LEDパネルのスケッチを書き換えてSendai Micro Maker Faire用のウェルカムボードを作りました。

使用部品と配線はESP32と32×8フルカラーLEDでデジタル壁時計をつくるを参照してください。
外装についてはデジタル壁時計の組み立てを参照してください。

英数字の5×8フォントを作って表示させたのが新しい点です。フォントデータが96行あるので見苦しいですが、それ以外はシンプルに書いたつもりです。左端から右端に向かってLEDの色が変化していくプログラムに、”フォントピクセルだけ表示する”という条件をつけています。

フォントデータはAppleⅡeの資料を見かけたのでデータ化してみました。

 

 

 

 

 

 

Sendai Micro Maker Faireに出展します

仙台マイクロメイカーフェアに出展します。( #SendaiMMF )

2020年1月25日 12:00-17:00
産業見本市会館(仙台市) サンフェスタ301

 

いろいろな素材で作ったスクエアキューブパズルの紹介とLabVIEW 2014 Home版で書いた解探索プログラムのデモを行います。

リーフレット

LabVIEWユーザー会(2019)のお知らせ

例年NI Daysで開催されてきたLabVIEWユーザー会ですが、今年は日本でのNI Daysがなくなったので、独自開催を計画中です。
日時は2019年12月14日(土曜日) 13:00からを予定しています。場所は未定(浜松町周辺が候補)で、11月15日ぐらいまで参加者の人数を把握して決定するようです。会費は無料ですが、会場費を割り勘で負担する予定です。
予定しているプログラムなど詳細は下記URLのEventsから確認してください。
https://jlabcon.wixsite.com/jlabcon-top

私は、NIのディスカッションフォーラム「北東北ユーザー会」で紹介したIndustrial ShieldsのM-DuinoとSIEMENSのSIMATIC IOT2020を持参します。また、Arduino UNOの互換機でFPGA機能があるXLR8も、使いこなせていませんが、持参します。
また、テトロキューブ16個で4x4x4の立方体をくみ上げるパズルのLabVIEW版を作成しているのですが、自動的に解を探索するLabVIEWプログラムを(出来たところまでですが、)紹介します。画面上でパズルで遊ぶ部分はできましたのでNIのディスカッションフォーラム「北東北ユーザー会」の別トピックスで紹介します。

LabVIEWユーザー会に関する問い合わせは上記URLからお願いします。

FPGAベースのArduino互換機”XLR8″のアナログ入力について

<XLR8について>
Alorium Technologyの”XLR8″(写真下)はIntel MAX10 FPGAにATmega328互換機能を書き込んだArduino UNO互換ボードです。ユーザーがFPGAのXcelerator Blocksというエリアに機能を追加することができます。FPGAプログラムはライブラリとして提供されているものを使うこともできますし、独自のプログラムを作成することもできるそうです。

OLYMPUS DIGITAL CAMERA

<購入先の例>
https://www.digikey.jp/product-detail/ja/alorium-technology-llc/XLR8R22M08V5U0DI/2003-1000-ND/9607423

<はじめに>
XLR8のアナログ入力は12ビットで、しかも10ビットのArduino UNOよりも高いサンプリングレートで使うことができるということなので興味を持ちました。また、Arduino UNOは高いサンプリングレートで使用した時に誤差が大きくなるということですので、サンプリングレートと同時に測定データの誤差を視覚的に把握したいと思いました。
https://www.aloriumtech.com/adc-12/

<調査方法>
アナログ入力で得られたデータをいったん配列(500要素)に保存して、データがすべて書き込まれた後でシリアル出力でPCに出力するスケッチを作成しました。受け取ったデータはArduino IDEのシリアルプロッタでグラフに表示させます。
アナログ信号としてはファンクションジェネレータの三角波を入力しました。三角波の周波数を調整してシリアルプロッタに表示されたデータが目視で1周期となる周波数を求め、概略のサンプリングレートの値を計算しました。

<分かったこと>
私なりの結論ですが、XLR8のアナログ入力はUNOに比べて分解能が4倍で、サンプリング周波数が3.7倍程度高く(最大250KHz)まで使えそうなので一考に値すると思います。

 

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

<具体的な調査方法>
Arduino UNOのアナログ電圧のサンプリングレートは、ADCクロックの分周比で設定できます。下記スケッチのADCSRAの下位3ビットに”001″から”111″を書き込みます。デフォルトの分周比は128(“111”)で9.6kHzのサンプリングレートです。分周比が小さいほどサンプリングレートが高くなりますが、誤差も大きくなるそうです。三角波を入力することで誤差の程度を視覚的に判断したいと思います。三角波はおよそ0-3Vです。

Arduinoのスケッチは要素数500個の配列に測定データを記憶させて、測定が終了してからシリアルプロッタでデータをグラフに表示することにしました。

XLR8のデフォルトの分解能は10ビットなのでライブラリ”XLR8ADC”を使ってsetup関数の中で12ビットに変更します。
スケッチの”XLR8ADC.begin();  XLR8ADC.set12bitMode();”が12ビットに変更している箇所です。その他はUNOで使っているスケッチと同じです。

<UNOの結果>
Arduino UNOのデフォルトの状態(分周比128)です。シリアルプロッタのグラフには500個のデータが表示されます。データを見ながら周波数を調整して、三角波の1周期が表示されるようにしたところ18Hzでした。18Hzの1周期は55.5msecで、500データありますから、0.111msec間隔となり、サンプリング周波数は9kHzぐらいと見ることができます。グラフのピーク値は1024*3/5=614あたりになっています。

16分周

8分周から波形にギザギザが少し見え始めました。

4分周で誤差が目立ち始めました。

2分周はどこが1周期なのか判別ができません。
ということで、Arduino UNOでサンプリングレートを上げたい場合は16分周ぐらいを使うようです。

128分周—–18Hz–サンプリング周波数9KHz
64———測定せず
32———測定せず
16———133Hz–サンプリング周波数66.5KHz
8———-236Hz–サンプリング周波数118KHz
4———-385Hz–サンプリング周波数192.5KHz
2———-1周期の判断できず

<XLR8の結果>
XLR8の128分周のグラフです。18Hz、0-3Vの信号ですが、12bitなので縦軸が4096*3/5=2458付近の大きな数値になっています。

128分周—–18Hz–サンプリング周波数9KHz
64———測定せず
32———測定せず
16———133Hz–サンプリング周波数66.5KHz
8———-236Hz–サンプリング周波数118KHz
4———-385Hz–サンプリング周波数192.5KHz
2———-400Hz–サンプリング周波数200KHz

FPGAで忠実にATmega328互換の動作をしているようで、サンプリングレートは同じですが、ADCがMAX10のものなので分周比2でも綺麗な波形です。

4.8KHzの信号を入れてみても大丈夫そうです。

<XLR8倍速モードの結果>
さて、XLR8は倍速モードも持っていて、FPGAを書き換えることで16MHZのATmega328から32MHZのATmega328になります。

128分周—–36Hz–サンプリング周波数18KHz
64———測定せず
32———測定せず
16———267Hz–サンプリング周波数133.5KHz
8———-464Hz–サンプリング周波数232KHz
4———-500Hz–サンプリング周波数250KHz
2———-500Hz–サンプリング周波数250KHz

サンプリング周波数は250KHzで頭打ちですが、2分周のグラフも特に変ではありません。

<結果のまとめ>
XLR8のアナログ入力はUNOに比べて分解能が4倍で、サンプリング周波数が3.7倍程度高くまで使えそうなので一考に値すると思います。

LabVIEW Community Editionの情報 (191001)

メイカー、ホームユーザー向け(非商用)に無料で使える「LabVIEW Community Edition」が来年以降オープンされるとのことです。NI Communityでの質疑から分かった情報をまとめます。

– LabVIEW Community Editionは非商用での利用に限り無料で使うことができます。

– LabVIEW Community EditionはLabVIEW Professional Editionと同じ機能が透かしなしで使うことができます。
LabVIEWがインストールされていないPCでも実行できるプログラムを作成することができます。従来のHome/Student Editionはフロントパネルやダイアグラムにエディション名が書かれた透かしが入っていましたが、LabVIEW Community Editionには透かしが入りません。

– Raspberry Pi, BeagleBone, ArduinoでLabVIEWを使うことができるLINXの新しいバージョンが提供されます。

– ベータ版は2019年第4四半期、正式版は2020年5月にLabVIEW2020版でリリースされる予定です。
LINXの新しいバージョンのベータ版はすでに”NI Software Technology Preview”で公開されています。2019年第4四半期にリリースされるベータ版も”NI Software Technology Preview”で公開されます。

以上(191001)

OLYMPUS DIGITAL CAMERA

デジタル壁時計の組み立て

前回の記事「ESP32と32×8フルカラーLEDでデジタル壁時計をつくる」では配線とプログラムについて説明しました。

ここではESP32とLEDマトリックスをケースに収めて和室の長押(なげし)の上に取り付けた例を紹介します。長押の隙間にACアダプター入れてESP32のUSBに給電しています。

OLYMPUS DIGITAL CAMERA

ケースは2mm厚のボール紙をレーザーカッターで加工して、5枚重ねの中にESP32とLEDマトリックスを埋め込みました。LEDとの配線はESP32に直接ハンダ付けをして最小限の高さにしています。

ESP32をはめ込む場所の周囲は熱を分散させる目的でアルミテープを貼っています(この写真撮影の後でWiFiアンテナの近傍はまずいだろうということでアンテナ付近のアルミテープを除去しました)

LED組み込みフレームの前面にはLED光を拡散させるために和紙を糊付けしました。チューブの先にスポンジキャップが付いた糊で手軽に塗ったらムラになってしまいました。ムラは使っている時にはまったく目立たないので良しとしました。ESP32組み込みフレームを白のマスキングテープで固定して完成です。

OLYMPUS DIGITAL CAMERA

プログラムは少し変更しました。分単位で時刻表示が変わりますので、切り変わる10秒前になると色相が左から右に変化します。0秒になった時にその時点の色で時刻を表示します。表示のためのループを高速で回すために1秒ごとの時刻更新はタイマー機能を使うことにしました。
また、寝ている時にはまぶしくないように23時から6時までは表示を暗くしています。

 

 

 

 

ESP32と32×8フルカラーLEDでデジタル壁時計をつくる

「夜中に目が覚めた時、もう一寝入りするか、そろそろ起きるか、知りたくなりますね。身動きせずにねぼけた目を開けるだけで時刻がわかる大きなデジタル時計が欲しいと思いました。日中は明るくカラフルで楽しい表示でも、暗くなったらまぶしくない明るさで落ち着いた色で表示してくれる時計があったらいいですね。」

2年前に作った「手作りの大型7セグメントフルカラー表示器を使った置き時計」はその後もブレッドボードのまま動作を続けています。壁に掛けられるようにリメークしようかと思いましたが、大きなサイズのフルカラーLEDマトリックスが3699円で売っていたので、これを使った方が楽にできると思って新しく作ることにしました。

OLYMPUS DIGITAL CAMERA

構成
(1) ESP32でWiFi LANに接続し、NTPで時刻を定期的に取得する。
(2) ESP32でTimeライブラリを使い、NTP時刻で定期的に校正しながら1秒ごとに時刻を得る。
(3) ESP32でFastLEDライブラリを使い、32×8 LEDマトリックスを制御する。
(4) 時刻表示用数字フォントはComic San MS Bold Italic 96pointをベースにして8×7のグレースケールフォントを自作する。

部品リスト
(1) ESP32(MH-ET LIVE ESP32 MiniKit):AliExpressで$6ぐらいで購入できます。
(2) フルカラーLEDマトリックス(32×8 10mmピッチ):Quimat Arduino用RGB LED パネル…..

配線
ESP32 MiniKit-J2-6pin(5V) —– LED Matrix 5V
ESP32 MiniKit-J2-8pin(GND) —– LED Matrix GND
ESP32 MiniKit-J2-10pin(IO16) —– LED Matrix Din

OLYMPUS DIGITAL CAMERA

Arduino IDEへの追加
ESP32ボードの追加 「Arduinoで遊ぶページ」などを調べてください。
FastLEDライブラリの追加 「ArduinoでNeopixel操作」などを調べてください。

Arduinoプログラム
青色で1秒ごとに時刻を表示するプログラムです。
– NTPサーバーに300秒ごとにアクセスしますが、loop()関数の if(SecCount>=xxxx)で自由に変更してください。
– FastLEDライブラリは高度な色指定ができますので自由に改造してください。
– フォントデータは、3次元配列 NumFont[10][FontHeight][FontWidth]です。好きなフォントに改造してください。

 

OLYMPUS DIGITAL CAMERA

WiFi LANでのESP32環境センサーノードとESP32データロガー

ESP32 environment sensor node and data logger on WiFi LAN

Overview
In order to investigate the temperature distribution in the indoor space, we created a system that records data from multiple environmental sensor nodes wirelessly to a data logger. The environmental sensor node performs intermittent operation by connecting the BME280 environmental sensor to the ESP32 as a battery drive to facilitate installation. The data logger connects the real-time clock and SD card to the ESP 32 and records the received time and data in a file for each sender. Assign a fixed IP address with the ESP32 MAC address using a dedicated WiFi router. Data is sent from the environmental sensor node to the data logger’s IP address using UDP, and the data logger learns the environmental sensor node number from the sender IP address.

概要
屋内空間の温度分布を調べるために、複数の環境センサーノードから無線でデータロガーに記録するシステムを作りました。環境センサーノードは設置を容易にするために電池駆動としてESP32にBME280環境センサーを接続して、電池の交換頻度を減らすために間欠動作を行います。データロガーはESP32にリアルタイムクロックとSDカードを接続して、受け取った時刻とデータを送信元ごとのファイルに記録します。専用のWiFi ルーターを使って使用するESP32のMACアドレスで固定IPアドレスを割り当てます。環境センサーノードからデータロガーのIPアドレスに向けてUDPでデータを送り、データロガーは送信元IPアドレスから環境センサーノードの番号を知ります。

使用した機材

ESP32: MH-ET LIVE ESP-32 Mini kit

10ピン4列のピンソケットには分割ロングピンソケット 1x42 [FHU-1x42SG] (秋月電子通商)を使用しました。
http://mh.nodebb.com/topic/5/mh-et-live-esp-32-devkit-mini-kit-user-guide-updating

環境センサー: BME280 GYBMEP

ライブラリ:BlueDot BME280 Library

BME280 : ESP32
VIN           : 3.3V
GND         :GND
SCL           :IO22
SDA          :IO21

マイクロSDモジュール:

ライブラリ: ESP32標準 SD(esp32)

配線
SD             : ESP32
CS             : IO5
SCK          : IO18
MOSI       : IO23
MISO       : IO19
VCC          : VCC
GND         : GND

リアルタイムクロック: DS3231 ZS-042モジュール


充電できないCR2032を使用するため充電用パターンをカットしました。

ライブラリ:DS3231FS

配線
DS3231      : ESP32
32K             : NC
SQW           : NC
SCL             : IO22
SDA            : IO21
VCC            : VCC
GND          : GND

無線LANポータブルルーター: エレコムWRH-300BK3-S

ESP32のMACアドレスを調べて、MACアドレスとIPアドレスを紐付けにします。SSIDのスティルス機能を使い、登録されたMACアドレス以外は接続を拒否しています。

電池ケース: マルツGB-BHS-3X4C-LW(単3×4本 スイッチ・フタ・リード線付き)
ESP32のVDDに+6V、ESP32のGNDに0Vを接続します。

 

動作の安定性について
ESP32環境センサーノードは送信時に毎回起動するような動作のため安定して動作します。ESP32データロガーは連続動作のためWiFi LANへの接続不良の場合やSDへの記録が正常に行えない場合はESP32をリスタートすることにしました。

 

ESP32環境センサーノードのスケッチ

 

 

ESP32データロガーのスケッチ