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

 

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

「スクエア&キューブパズル」地産材でのクラフト製作の勧め

“Square & cube puzzle” :Recommendation for crafting with local wood

この記事はMFTokyo2019 (Maker Faire Tokyo 2019 )エントリーシートの予稿です。

「メイカーフェア東京2019での計測・解析ラボのプロフィール」
計測・解析ラボは盛岡市を拠点に個人事業としてLabVIEWプログラムの受託開発とArduinoなどオープンなハード・ソフトの講習会を行っています。プログラムとレーザーカッターを使った木工パズルデザインは3年目となり、地域の木材活用と木工クラフト作家との連携を模索しています。MFTokyo2019ではパズル作品を通しての交流やメイカー向けLabVIEW Home版の情報共有を行いたいと思います。

「メイカーフェア東京2019での出展内容の紹介」
正方形から立方体を組むことのできる幾何学的な美しさが特徴のスクエア&キューブパズルです。立方体4個を平面に並べた5種類のピースを16個使ったパズルで、PCやスマホで疲れた目を休めて指先を使い立体図形に親しむことができます。レーザーカッターで作ったプロトタイプを見本に岩手県内の木工家に地域材を使ったクラフト製作を勧めています。もちろん3Dプリンターでの自作も可能です。

12cm Cube(Left) and 6cm Cubes(Right)
15mmのアカマツ材をレーザー加工

 

デモビデオ@ユーチューブ

パズルのデモビデオ(ユーチューブ)

 

「スクエア&キューブパズル」の製作の経緯
MFTokyo 2018では「チーム岩手」から「プログラミングとレーザーカッターの素敵な関係」というタイトルで参加しました。2次元の図案をレーザーカッターで加工すると厚みのある2.5次元のパズルに成ります。次回のMFTokyo 2019ではレーザーカッターで3次元のパズルを作成したいと考えていました。

ちょうどFusion 360を使い始めて立体的な箱物を作る時のはめ込み設計に便利なことに気がついて操作の練習をしていたのですが、レーザーカッターで作ったピースを組み立てて立方体にするアイデアが浮かびました。正方形から切り出したピースが立方体になるパズルは幾何的に美しい構成です。単位立方体の個数で表現すれば次のような関係に成ります。

(正方形)  (立方体)  (単位立方体の個数)

8 x 8 = 4 x 4 x 4 =64

27 x 27 = 9 x 9 x 9 = 729

128 x 128= 16 x 16 x 16 = 4096

とりあえず、一番小さな組み合わせの4 x 4 x 4の立方体で考えることにしました。テトロミノというテトリスで有名な形状は正方形4個の組み合わせで5種類できるので、Fusion 360で4 x 4 x 4の立方体のモデルを作って4個づつ”結合”して全てテトロミノにすることができるか実験してみました。何度か試行錯誤して16個のテトロミノに分割できました。次はその16個で正方形ができるかやってみました。正方形になりました。

平面パズルに使っている厚さ6mmのアカマツ板では2.4cmのキューブにしかならないので、厚さ10mmを注文して作成しました。できることはできるのですが、まだ小さいので、レーザーカッターの限界と言われる15mmの板を注文して作りました。正方形のサイズは12cm、立方体のサイズは6cmになります。正方形の外枠を14cm角にすると持ち運びを考えるて手頃な大きさだろうと思います。外箱は一関の金森紙器さんに作ってもらいました。

一関市の金森紙器さんの外箱

テトロミノについて知っておこう
正方形を2個つなぎ合わせた形状をドミノ と言います。3個つなぎ合わせたのがトロ ミノ、4個つなぎ合わせたのがテトロミノ です。5個つなぎ合わせるとペントミノで すが、このようにN個つなぎ合わせた図形 の総称をポリオミノと言います。テトロミノは5種類ありますが、図形の特 徴からI、L、T、Z、Oと呼ばれています。 I、L、Tは見た目通りですが、正方形をO、 残った1個がZです。
スクエア&キューブパズルには4個の単位立方体で作 ったテトロミノが16個入っています。5種類のテトロミノから16 個選ぶ方法はたくさんありますが、I型が3個、L型が4個、T型が2 個、Z型が3個、O型が4個の組み合わせに しました。

地産材でのクラフト製作の勧め
岩手に旅行で来た時に地元のクラフトマン が作ったスクエア&キューブパズルを目にする日が来 るかもしれません。地域の木材を使ったパ ズルは、木の種類によって色や木目、重さ や手触りが違うことを発見して自然を身近 なものとして考え、豊かな森林への関心を 高めることができるでしょう。西和賀町に 広がる国内有数のブナ林、北限のツバキが 咲く大船渡、遠野地方の広葉樹、久慈の南 部赤松、平庭高原の白樺など広い岩手県に は地域を代表する木が多くあります。天然 木の手触りの良さとともに地域性が感じら れるスクエア&キューブパズルが各地で購入できたら 嬉しいことです。もちろん秋田の杉、青森 のヒバなどを使って各地のクラフトマンが 作ってくれたらもっと面白いだろうなと思 います。

スクエア&キューブパズルに関連する特許
独自の発想で作ったパズルですが、幾何的にきれいなパズルなので誰か他の人も考えていただろうと思って、スクエア&キューブパズルに関係する特許について調 べてみました。古い特許ですが1988年にアメリカで登録され た「BLOCK PUZZLE」という特許があり ました。テトロミノ16個を正方形に詰める パズルとテトロキューブ(立方体を立体的に4個つないだ図形)16個を立方体に組むパズ ルを併記しています。正方形に詰めるパズルの厚みを変えるだけで立方体ができるのですが、念頭にはなかったようです。

サイコロでスクエア&キューブパズルを作ろう
とりあえずパズルが欲しい人はサイコロを瞬間接着剤で接着してパズルピースを作ってみましょう。16mmのサイコロが50個入りで1100円ぐらいで購入できます。

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

 

メイカーフェア東京2018

メイカーフェア東京2018に出展します。
木目のパズル「プログラミングとレーザーカッターの素敵な関係」というタイトルで「チームいわて」のメンバーとして参加します。
ブースはC/02-02です。
「LabVIEW Home版をメイカーな人たちに広めよう」ということで、FM音源モジュールを接続したArduinoに、LabVIEWから音源パラメータを送り込むプログラムをデモします。

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

タッチディスプレイでLabVIEWのUIをクリックすると、
パラメータがArduinoに送られて、音源モジュールのレジスタが書き換えられ、
音源もジュールからPCのマイク端子に音声信号が送られ、
LabVIEWで信号を受け取って波形とパワースペクトルが表示され、
PCのイヤホン端子から外部スピーカーで音が出る、
というものです。

今回のデモ用にたまたまHPの安いノートPCを購入したのですが、タッチディスプレイの便利さを実感しました。
ブースレイアウトを確認してパッキングしました。

OLYMPUS DIGITAL CAMERA

(180803)

木目のパズル「プログラミングとレーザーカッターの素敵な関係」

Wood grain puzzle “Lovely relationship between Processing programming and laser cutter”

この記事はMFT2018 (Maker Faire Tokyo 2018 )エントリーシートの予稿です。

出展者のプロフィール
レーザー加工といえばイラストレーターで図案を描いてMDFを切り抜くものという風潮に抗って、Processingプログラムでパズル図案を描いて、地元の木材をレーザーカッターで切り抜いて木目のパズルを作っています。本業は計測の自動化と解析処理用のLabVIEWプログラムを提供していますので、LabVIEWホーム版を使ったArduino+FM音源YMF825の音作りツールも紹介する予定です。

出展内容
プログラムで描いた画像をレーザー光線がたどって切り取ってくれる。画面の中の五角形が厚みを持った五角形の木片になる。ジグソーパズルの無限の組み合わせをプログラムで描いて、地元の木材でパズルを作ってみよう。絵はいらない、木目が元の場所を教えてくれるから。久慈の南部アカマツ、遠野の桜、浄法寺のウルシ、木目は木の物語。プログラミングとレーザーカッターの素敵な関係を提案します。木目のパズルを見に来てね。

ジグソーパズルの製作
(1)Processingでピースの形状をランダムに作画します。
(2)レーザーカッターで切断します。
(3)パズルの完成です。
(4)画面の図形が厚みを持ってさわれる!!!

デモビデオ「プログラミングとレーザーカッターの素敵な関係」
https://www.facebook.com/koji.ohashi.12/videos/1696150310460940/

五角形のパズル

OLYMPUS DIGITAL CAMERA

Processingでレーザー加工用図形をプログラムしよう!!

Processingって何?

たくさんあるプログラムツールの中でProcessingを選ぶ理由は四つ。
(1) オープンソースなので無料で使うことができる。
(2)図形をPDFで出力できる。
(3)グラフィック関連の関数が一通り揃っている。
(4)プログラムサンプルが豊富で使いやすい。

 

タングラムという古典的な図形パズルを例にプログラム方法を紹介します。

タングラムって何?

プログラムで作成するタングラムの図案。
図案が少し違いますが、タングラムを切断加工している様子です。
プログラムサンプル

processingでのプログラムはディスプレイに表示することを主眼に作られているのでピクセルが基本単位です。72ピクセルが1インチ(25.4mm)ですから、1mmは72/25.4ピクセルとなります。長さ100mmは100*72/25.4ピクセルとなります。つまり、欲しい寸法(mm)とプログラムで使うピクセルの変換は72/25.4を掛ければ良いだけです。

また、ドキュメントサイズを変数で指定することとPDFライブラリを使用していることに注目してください。

 

 

5V駆動のステッピングモーターを試す

28BYJ48 DC 5V 4-フェーズ5線式ステッピングモータとULN2003ドライバボード
これも去年の春に購入したまま眠っていたパーツです。中国直送で200円前後で購入できます。

便利なライブラリを見つけて動かしてみたという段階です。通常のstepperライブラリではなく、AccelStepperというライブラリを使うことでハーフステップで滑らかに駆動することができます。28BYJ-48モーターでの使い方は42Botsの記事に従いました。

回転数は1000pps(およそ15rpm)が上限で、それ以上はトルクが小さくなり指でシャフトをつまむと止まってしまいます。

 

 

美しいミニマリズムの8pinoで光る置き物を作る

最近のArduino IDEではボード追加で8pino(Trinket 8MHz)をプログラミングできるようになりました。価格は888円なので中国直送互換機には及びませんが、ボードの小ささでは群を抜いています。

I2Cの加速度センサーで姿勢を検知して傾けるとフルカラーLEDの色や光の強さが変わるようにプログラミングしてみました。

用意した機材
8pino
GY521(加速度・ジャイロセンサー)
マイコン内臓フルカラーLED

機能
加速度センサーで置き物の前後左右方向の傾きに応じて目に配置された2個のLEDの色と明るさが変化します。不感帯を設けて垂直に静止している時には光らないようにしています。

メモリーが小さいのでプログラムもミニマル目指して推敲を重ねました。「最大5,310バイトのフラッシュメモリのうち、スケッチが5,176バイト(97%)を使っています。グローバル変数は69バイトのRAMを使用しています。」