2026年9月 4日 (金)

Parametric Wav Player 録音機能付き ベータ版


Prplayer_beta
図1.Parametric Wav Player 3.0.6 Beta

先日リリースしたParametric Wav Playerですが、フィルタ処理およびATT後のデータをwavファイルとして取り出す機能を追加しました。
図1に示すように、Recボタンを追加しました。これは、

・再生中にRecボタンを押すと、押した箇所からもういちどこのボタンを押すか、その曲が終了するまでをファイル出力
・再生開始前にRecボタンを押しておくと、そのあと再生開始した曲の先頭から、もういちどボタンを押すか、その曲が終了するまでをファイル出力

という動作をします。つまり、一回の操作で最大一曲、または一曲の任意の一部がファイル出力されます。
ファイルフォーマットは、サンプリング周波数はソースファイルと同じでビット深度は32bitのWavファイルです。
具体的には、このアプリのホルダ内にCaptureというホルダが生成され、その中にCapture.wavというファイルとして生成されます。

ちょっとしたフィルタのテストなどに便利だと思います(^-^)
以下からダウンロードしてお使いください。

ダウンロード - prplayer306beta.zip


| | | コメント (0)

2026年8月23日 (日)

ステレオレコードの左右


Mv2104_lp
写真1.1964年のアルバム”Oscar Peterson Trio Plays”

オスカー・ピーターソン・トリオの1964年のアルバム”Oscar Peterson Trio Plays”に収録された”Fly Me To The Moon”がとても好きで、数あるアーティストの”Fly Me To The Moon”の演奏の中でもトップだと思っている。

この録音に出会ったのはおそらくぼくが大学生の頃で、時期としては1980年代のうしろの方ではないかと思われる。CDの値段がだいぶこなれてきて、古いジャズのオムニバス盤がさかんに出された時代だった。
どこで購入した、何というタイトルのCDだったかも今となってはわからないのだが、”オスカー・ピーターソン・トリオ・ベスト”のような感じの16曲入りのオムニバスCDで、ディスクは行方不明だが、リッピングしたものが残っている。

この”Fly Me To The Moon”の演奏がとにかくサイコーなのだが、残念なことに音質がいまひとつだ。

そこで、先日リリースしたParametric Wav PlayerでのRIAAレコード音源再生の検証も兼ねて、1964年のアルバム”Oscar Peterson Trio Plays”を購入してダイレクトリッピングして、Parametric Wav PlayerでRIAA再生して聴いてみた。
オムニバス盤は、音源にオリジナルマスターが使われているとは限らないので、音質が落ちるケースもあり、最初にこの演奏が収録されたレコードで聴いたほうが音質がいいのではないかという期待もあった。演奏の最初の方だけキャプチャーしたので聴いてみてほしい。

Fly Me To The Moon オムニバスCD

Fly Me To The Moon オリジナルアルバム(LP)

聴いていただくとわかると思うが、残念ながら音質は大差なかった。
ただ、面白いことに気がついた。

オリジナルアルバムの方は、ウッドベースが右から聴こえてくるが、オムニバスCDは配置が逆だ。つまり左右が入れ替わって録音されている。

いままでなんとなく、音楽アルバムのMixは、左側に低音、右側に高音が配置されることが多いような感じがしていた。これはぼく自身ピアノやキーボードをやったことがあるから、そういう気がしていただけで、統計的にそういう傾向があるのかどうかはわからない。ピアノの場合は左が低音で右が高音なので、演奏者の感覚では左低右高になるのだ。

この2つのFly Me To The Moonでは、オリジナルアルバムは右からベースの音が聞こえるので、感覚からすると逆の感じがする。一方でオムニバスCDは左にベースがいるので、なんとなくこの方が自然な感じがするのだ。
これはオムニバス盤を作るときに意図的に反対にしたのか、それとも単につなぎ間違えたのかはわからない。しかしオムニバス盤の制作で左右が逆になっているケースがあるということだ。

実際のライブシーンでは、どんな配置になっているのかを考えてみた。
ピアノトリオで、グランドピアノとドラムスとウッドベースの場合、ステージはどのような配置になるだろうか?これはステージの広さにもよるが、ほぼ図1のようにしかなり得ないのではないか?

Photo_20260823161501
図1.ジャズピアノトリオの配置


グランドピアノは、胴体の凹んでいる部分から斜め方向への音がもっとも良いとされる。この図で矢印の方向だ。つまりこれを客席の中央方向とするには、ピアノは客席から見て舞台の左側(下手側)に図のように配置する。こうするとピアニストの顔も客席から見えて都合が良い。
ドラムスは全体のバランスから考えると、中央の後ろの方に配置したい。そうなればウッドベースは必然的に舞台右側(上手側)となる。
これがもっとも自然な配置ではないだろうか。

そうすると、右からベースが聴こえるオリジナルアルバムのほうが自然な配置だということになる。
実際のライブでの配置と、左低右高の感覚は逆だということなのだ。

おもしろいので、手持ちの音楽ソースがどうなっているか調べてみた。

ビル・エバンスのポートレートinジャズ(1959年)に収録された枯れ葉は、左にベース、右にドラムなので、演奏者感覚の左低右高だ。

ミルト・ジャクソンのBAGS&FLUTES(1957年)のBag's New Grooveも同じく、左にベース、右にドラム(やや不明確)。

デイブ・ブルーベックのTake Five(1959年)では、左にピアノ、中央にベース、右にドラム、B面のUnsquare Danceは左にピアノ、ベースは中央、ドラムは左右にパンを振っている。

サンプルとしては少ないものの、どちらかというと左低右高の演奏者感覚でMixされたもののほうが多いような印象だ。

最近の録音(特にJAZZ、POPS)ははっきり左右に楽器を分けるようなMixはあまりやらなくなっていて、いかに自然に、それでいてステレオの立体感を出すか、あるいは作品としてどのように仕上げるのがいいのか、などいろいろな要件を検討して制作されているのだろうと想像されるが、時代とともにステレオMixの傾向があるということを意識して音楽を聴くのも面白いかもしれない。


| | | コメント (0)

2026年8月12日 (水)

ドライブアクセスランプ2 ( 基板頒布あり )

 

動画1.ドライブアクセスランプ  リリース版


先日、ドライブアクセスランプの製作記事を上げたところ、思いのほか反響が大きかったので、気をよくして基板を起こして頒布することにしました。動画1は動作の様子です。
今回は基板のレイアウトに合わせてピン配置を変えてファームウェアを新しくし、起こした基板は4連バーグラフLEDまたは5連バーグラフLEDを2つ、または個別の1608サイズチップLEDが使えるようになっています。
1608サイズチップLEDを使用した場合は動画2のようになります。

動画2.チップLED使用の場合


今回新しく製作した基板の回路図は図1のとおりです。また生基板を写真1に示します。

Accesslampsch
図1.ドライブアクセスランプ回路図


Namakiban
写真1.生基板(左がLED面、右がRP2040-Zero実装面)


もともとの設計思想では、4ドライブでR/W独立表示なので、4連のバーグラフを2個使うということですが、4連のバーグラフLEDの入手性がやや悪く、5連のバーグラフのほうが入手性がよかったため、実装パターンを5連用としてどちらも実装できるようにしました。
5連のバーグラフを使う場合は1番下のLEDは余るので、全ドライブ兼用(GPIO0)として使えるように接続していますが、使用しない場合は接続している抵抗(R5,R11)を未実装とします。

ファームウェアとPC側のアプリは以下からダウンロードしてお使いください。
ダウンロード:DriveMonitor_set4.zip

詳しい使い方は次のマニュアルをご覧ください。
ダウンロード:DriveAccessLamp_Manual.pdf

このアクセスランプは、RP2040-Zero基板単体でも、実装のフルカラーLED がアクセスランプとして動作するため、ファームウェアとアプリのインストールだけで、工作なしで使用可能です。
また純正RaspberryPI PICO(または互換品)単体の場合も、ボードに実装されているLED(GPIO25)が全ドライブ兼用LEDとして動作するので、これもファームウェアとアプリのみで使用可能です。

また今回使用したRP2040-ZeroボードはUSB-C接続のため、写真2に示すようなUSB-Cオス - USB-Aオス 変換アダプタを使うと、ノートPCのUSB-Aポートに直挿しできて便利です。

Usbadaptor Tyokketu
写真2.USB変換アダプタを使用すると、ボートPCのUSB-Aポートに直挿し可能


以下の通り基板とキットを頒布します。
すべて送料消費税込みの価格です。

① 部品フルセット(USB変換アダプタなし)  1800円
・RP2040-Zeroを含む部品セットです。ファームとアプリはダウンロードしてお使いください。
・LEDは4連バーグラフ(緑、赤)と砲弾型の青を同梱します。

② 部品フルセット(USB変換アダプタ入り)  2250円

③ 生基板のみ1枚               600円


ご希望の方は表題に「ドライブアクセスランプ基板頒布」、本文にお名前、送付先郵便番号、ご住所、電話番号をお書きのうえ、

dj_higo_officialアットhigon.sakura.ne.jp
(アットを@に替えてお送りください)

までメールをお送りください。

代金の振込先のご案内メールをお送りします。入金が確認でき次第発送します。

BOOTHでも販売しています。

| | | コメント (0)

2026年8月 7日 (金)

国コード検索プラグイン

ブラウザに表示される2桁の国コードを簡単に検索するプラグインを作りました。

最近、AIによる自動翻訳が普及したためか、このブログを外国から見に来る人が急激に増えていて、足跡を見ると国コードが出ます。たとえば”US”とか”FR”とかならわかりますが、”NL”とか”CH”とかだと、ぱっと見でどこの国なのかわかりません。(NLはオランダ、CHはスイスです。)
その都度ネット検索や、外務省の一覧表を参照するのも面倒なので、右クリックのコンテキストから簡単に国名検索できる、ブラウザ用のプラグインを作ってみました。

使い方は次のとおりです。

country-code-lookup.zipをダウンロードして解凍し、ホルダごと、
"C:\Program Files\Google\Chrome\"にコピーします。
※コピー先は任意ですが、登録後に削除や移動をしないでください。
② Chromeを開き、アドレスバーに chrome://extensions/ と入力してエンターキーを押します。
③ 画面右上にある「デベロッパー モード」のスイッチをオンにします。
④ 画面左上に表示される「パッケージ化されていない拡張機能を読み込む」ボタンをクリックします。
⑤ "country-code-lookup"ホルダを選択して読み込みます。

これで、chromeに表示された2文字の国コードを選んで右クリックすると、コンテキストメニューに

「**」の国名を検索

が出るので、これを選択すると、国名がポップアップ表示されます。

edgeでも同じ方法で使えるようになります。
なかなか便利ですよ(^-^)

| | | コメント (0)

2026年8月 4日 (火)

ジャコウアゲハ

20260804jakou1
写真1.ジャコウアゲハ①


今朝、東高円寺の蚕糸の森公園を散歩していたら、黒い蝶が落ちていたので、拾い上げてよく見るとジャコウアゲハのオスだった(写真1)。
黒い系統のアゲハは、中野界隈ではクロアゲハしか見たことがなかった(遠目からかなり大きい黒いアゲハを見たことがあり、もしかしたらナガサキアゲハかもしれない)ので、今回ジャコウアゲハを見つけてちょっと驚いた。ここにジャコウアゲハがいるということは、近くに食草のウマノスズクサが生えているのかもしれない。

 20260804jakou2
写真2.ジャコウアゲハ②


20260804jakou3
写真3.ジャコウアゲハ③

この個体は拾った時点ではまだ硬化しておらず、口吻もきれいに巻かれていたので、死んで間もないか、あるいはまだ微かに生きていたのかもしれない(写真2)。
腹部には赤い警戒色が出ていて(写真3)、これは毒蝶の印である。毒蝶は襲われる危険性が低いからか、とても優雅に飛ぶものが多いように思う。

そういえば、去年2025年の8/6、やはり朝の散歩の帰りに、桃花小学校の脇の道でゴマダラチョウの死骸を見つけてもって帰ってきた(写真4)。迂闊なことにブログに書いていなかったので、ここにまとめて書いておく。
中野周辺ではアカボシゴマダラは時々見かけるが、死骸とはいえ、この近所でゴマダラチョウを見たのはこの時が初めてで、少し驚いた。なぜかというと、ゴマダラチョウは平地よりも少し山地寄りに生息しているような印象がしていたからだ。

20250806gomadara
写真4.2025年8月6日に拾ってきたゴマダラチョウ


ゴマダラチョウの幼虫の食草(食樹)はエノキであり、エノキは昆虫に大人気の植物だ。ぼくが知っているだけでもゴマダラチョウ、アカボシゴマダラオオムラサキヒオドシチョウテングチョウ、それに詳しくないが蛾が数種類、鱗翅目以外ではタマムシ(成虫)が来たりする。
このうち、中野で目撃したことがあるのはゴマダラチョウ、アカボシゴマダラ、それにテングチョウである。テングチョウは何年か前に桃園緑道で目撃した。

去年の8/6、ゴマダラチョウを拾った日は、虫が鳴き始めたと書いていた。その翌日8/7は立秋だったので、虫たちはカレンダーを見て出番を待っていたかのようだ。そうすると、ことしも明日か明後日辺りには虫が鳴き始めるかもしれない。

追記
そういえば、今の季節、蚕糸の森公園では早朝からセミの大合唱で、8/4時点ではミンミンゼミ、アブラゼミが優勢、クマゼミが時折聞こえてくる程度で、まだツクツクボーシは出てきていない。
ニイニイゼミはたぶんいるのだと思うが、鳴き声があまり目立たないので、いるのかどうかわからない。しかしニイニイゼミは抜け殻が特徴的で、他のセミたちは抜け殻がツヤツヤしているが、ニイニイゼミだけはなぜか泥んこなのだ。

追記2
2026年8月9日、早朝の散歩で秋の虫が鳴きはじめているのを確認した。

 

| | | コメント (0)

2026年7月28日 (火)

両刀マウス2026


Bimouseabout

ぼくが個人的に作って公開したフリーウェアのひとつに、”両刀マウス”があります。
2011年当時、DJの現場で機材の配置が良くなくて、左手にマウスを持つセッティングにしたいということがあって、コントロールパネルのマウスを開いて、マウスを左手用に設定する……という手間を省くために、両ボタン長押しで左右ボタンの機能を入れ替える、というユーティリティアプリを作ったのでした。
 
使ってみると、上記の目的の他に、

・左手でマウスを操作しながら右手でテンキーを打つ
・右手で歯磨きをしながら左手でマウスを持ってパソコンを操作する

などの場合に便利で、いまでも毎日使っています。
必要な時だけ、サッと変更して、またサッと戻せるのが便利なところです。

2015年にVectorにフリーウェアとして登録したところ、窓の杜のお気に入りで紹介されて、とても嬉しかったのをおぼえています(^-^)

さて初期の開発からすでに15年ほど使っていますが、いくつか欠点がありました。
・ボタン左右入れ替えをするための操作を、左右ボタン同時長押しとしたが、これを行うとコンテキスト(右クリックすると出てくるメニュー)が出てしまって、ちょっと面倒
・3秒長押しとしていたが、押すタイミングによって反応時間にばらつきがある
・当時Visual Basicで開発していたため、配布する場合に依存ファイルが多く、インストーラー付きで配布していた

そういうわけで、これらをナントカしなきゃなあ……と思いつつ、長い歳月が……(^-^;

今回はAIに手伝ってもらって、C#に移植して、上記の欠点を改良しました。

・ボタン入れ替えの操作を、ホイールチルト左右長押しとした(ホイールチルト付きマウス使用が前提)
・長押しを安定的に1.5秒に設定した
・インストーラーは付けず、好きな場所にホルダを展開して、exeを実行する使用にした(アンインストールは削除するだけ)

そういうわけで、さっそくBOOTHに登録し、Vectorにも登録申請中です。

フリーウェアですのでどしどしお使いください(^-^)

ダウンロード - 両刀マウス2026

【使い方】
① インストール
bimouse2026_xxx.zipを解凍して、ホルダごと任意の場所に置いてください。

② 起動
・BiMouse2026.exeをダブルクリックして起動します。起動すると常駐します。
・BiMouse2026.exeのショートカットを作成し、スタートアップに登録することをおすすめします。

※ このアプリの実行には.NET Frameworkが必要です。.NET Frameworkが入っていないPCで実行すると、
"You must install or update .NET to run this application"
というメッセージとともに、"Download it now"ボタンが出ますので、ボタンを押して.NETを
インストールしてから再度BiMouse2026.exeを起動してください。

③ 操作方法
起動、常駐している状態でマウスホイールのチルトを左に長押しすると左手用マウスに、
チルトを右に長押しすると右手用マウスにセットされます。

④ 終了方法
本アプリを終了したいときは、画面右下の通知領域に表示されている本アプリの赤青のアイコンを
右クリックして、終了を押してください。

【著作権など】
・本アプリはSLDJ合同会社と作者 肥後信嗣が著作権を有しています。
・無断での再配布は禁止します。ダウンロードへのリンクはご自由にどうぞ。
・雑誌、メディア等に掲載の際はご一報ください。

 

| | | コメント (0)

2026年7月20日 (月)

PCドライブのアクセスランプの製作(20260724追記、アップデートあり)

【 20260730 追記 】
PC側のアプリ DriveAccessMonitor.zip をアップデートしました。
修正点は、startup登録時にComポートが見つからないなどの不具合を避けるため、起動にWAITを5秒設けました。
これにより起動が5秒遅くなります。

【 20260729 追記 】
4ポイントバーグラフを2個使って見やすくしてみました。

動画B.4ポイントバーグラフ 2個使い

これは上からつぎのような並びになっています。

ドライブ0  R  W
ドライブ1  R  W
ドライブ2  R  W
ドライブ3  R  W
ALLドライブ  R/W

バーグラフが全部たて並びよりも圧倒的に見やすくなりました(^-^)
RP2040-Zero搭載のフルカラーは従来通りです。



【 20260724 追記 】

ファームウェアをアップデートし、RP2040-Zeroボードに搭載のフルカラーLED WS2812Bを、最大4ドライブに対して色別で点滅できるようにしました(動画A)。



動画A.RP2040-Zero 単体動作追加


これにより、最大4ドライブに対し、

① ドライブ別、R/W別に外付けLEDを合計8個点滅
② ドライブ、R/W兼用でRaspberryPI PICOに搭載のLED(GPIO25)を点滅
③ ドライブ、R/W兼用で1個の外付けLED(GPIO15)を点滅
④ ドライブ別にRP2040-Zeroボードに搭載のフルカラーLED WS2812B(GPIO26)を色別で点滅

という動作が可能になりました。
このうち、②は工作なしでRaspberryPI PICO(または互換品)をつなぐだけで動作、④も同じく工作なしでRP2040-Zeroをつなぐだけで動作するようになりました。
PC側の専用アプリは変更ありませんので、下の元記事のリンクからダウンロードしてください。

ファームウェア
ダウンロード - drivemonitor_200a.ino.uf2(ドライブ1が緑色)
ダウンロード - drivemonitor_200b.ino.uf2(ドライブ0が緑色)


200aと200bは、RP2040-Zeroボードに搭載のフルカラーLED WS2812Bを使用時に、緑色をドライブ0、1のどちらに割り付けるかの違いです。
これはCドライブに緑を使いたかったのですが、PCによってCドライブがドライブ0の場合とドライブ1の場合があるからです。


RP2040-Zeroを使う場合は、USB A (オス) USB-C (オス) 変換アダプタ(写真A)を使えば、パソコンのUSB Aポートに直挿しできます(写真B)。

Usb_ac
写真A.USB A ー USB C アダプタ


Imgp0090
写真B.PCのUSBポートに直挿し



【 これより元記事 】



動画1.製作したアクセスランプ
この動画で使用しているPCは、メインのCドライブとサブのDドライブの2ドライブしか積んでいないので、動作確認用としてUSBメモリーを2つ挿して、合計4ドライブとし、アクセスを発生させるためにCドライブ以外はCrystalDiskMarkでR/Wテストを同時に行った。

動画2.RaspberryPI PICO(純正ボード)のみによるアクセスランプ
GPIO25のLEDを全ドライブ共通のアクセスランプとして使用する。工作なしで接続するだけでOK!



パソコンにおいてSSDが普及してからというもの、徐々にドライブのアクセスランプがなくなる傾向が続いていて、現在販売されているノートPCではほとんど付いているのを見なくなりました。
また、コンパクトで高性能なミニPCは、本体をモニターのうしろに付けるなどして使うと、そもそも本体が見えないので、アクセスランプが付いていたとしても見ることができません。
ハードディスクの時代を知っている者としては、ドライブの動作音もアクセスランプもないというのは、なんとなく心許ない感じがするし、実用上では、たとえば大容量のインストール作業や、全画面表示や真っ黒な画面でのインストールなどが長時間続くと、ひょっとしてフリーズしているのではないか?という疑念が出てきて、確かめるすべがない、ということがままあります。
こういう場合にドライブのアクセスランプがチカチカしていれば、作業は進んでいるんだな、と、確認できて、安心できるのです(^-^)

そこで今回は手軽な材料で、USB接続の外付けアクセスランプを製作したので紹介します。

今回製作したアクセスランプの仕様は次のとおり。
① 対応ドライブは4台まで
② 最大4台のドライブに対し、個別にR/W(リードライト)を区別してLEDを点灯(LED8個)
③ 最大4台のドライブに対し、いずれかのドライブが、R/Wいずれかの動作をしていれば点滅するLEDを別に1個
④ 最大4台のドライブに対し、ドライブ別に、フルカラーLED WS2812Bが4色で点滅する
⑤ アクセスランプ側のデバイスはRaspberryPI PICOを使用
⑥ PC側はC#による専用アプリを使用


従来パソコンに付いていたアクセスランプは、全ドライブ兼用でなおかつR/W兼用だったため、上の仕様③を用意しました。

このアクセスランプを作るには、RaspberryPI PICOのボードと表示用のLED、それにLED用の抵抗が必要です。
回路図を図1に示します。

Driveaccessmonsch
図1.アクセスランプ回路図
LEDの色によって輝度が違うため、抵抗値で調整してそろえている。


回路図といっても、PICOのGPIO0~7およびGPIO15に、抵抗を介してLEDを繋いであるだけの回路です。
今回使用したPICOボードはPR2040-Zeroというもので、Aliexpressで1個400円くらいから売られていて、Amazonやスイッチサイエンスなどでも入手可能です(図2)。

Rp2040zero
図2.今回使用したPICOボードRP2040ーZero


また、今回使用したLEDは、バーグラフ用に作られたもので、内蔵LED10個のうち9個を使っています(図3)。

Led_bargraph
図3.今回使用したLEDアレイ
Aliexpressで10個726円!

今回はRP2040ーZeroを使用したため、上の回路図には出てきませんが、正規品のRaspberryPI PICOおよびコンパチ品は、GPIO25に接続されたLEDがボードに搭載されているので、全ドライブR/W共通のアクセスランプだけなら工作の必要はありません。ボード上のLEDがアクセスランプとして動作します。

各ドライブのR/Wに対応するGPIOは表1のとおりです。
すべてのドライブでR/W兼用のLED信号はGPIO25(RaspberryPI PICO正規品およびコンパチ品の搭載LED)およびGPIO15(外付け用)。

冒頭に示した動画1はドライブ別にLEDを接続した場合の動作、動画2はRaspberryPI PICOボード上のLED(GPIO25)のみによる全ドライブ兼用の動作です。

表1.GPIO対応表
Diskvsgpio


セットアップと使い方は以下のとおりです。

① PICOボードにファームウェアを書き込む

ダウンロード - drivemonitor_200a.ino.uf2(ドライブ1が緑色)

ダウンロード - drivemonitor_200b.ino.uf2(ドライブ0が緑色)

200aと200bは、RP2040-Zeroボードに搭載のフルカラーLED WS2812Bを使用時に、緑色をドライブ0、1のどちらに割り付けるかの違いです。
これはCドライブに緑を使いたかったのですが、PCによってCドライブがドライブ0の場合とドライブ1の場合があるからです。


このファームウェアをダウンロードします。
※ダウンロード時に、ブラウザによって図4のようにブロックされる場合は、”保存”を押してダウンロードしてください。

Block
図4.ダウンロードのブロック(driveaccessmonitor.zip の例:保存を押して続行します。)


ダウンロードできたら、以下の手順で書き込みます。
・BOOTSELボタンを押しながらPCにUSB接続(正規品RaspberryPI PICO)
・USB接続した状態で、BOOTボタンを押しながらリセット(リセットボタンがあるもの)
すると、PICOがドライブとして認識されるので、ここにダウンロードしたuf2ファイルをDrag&Dropすれば書き込まれます。


② COMポートの確認
ファームウェアが書き込まれると、COMポートとして認識されるので、デバイスマネージャでCOMポート番号を確認します(図5)。

Devicemanager
図5.COMポート番号を確認。
ここではCOM14がアクセスランプ。わからない場合は抜き差しして確認してください。


③ PC側のアプリのインストールおよび実行
つぎのファイルをダウンロードして、任意の場所に解凍してください。
ダウンロード - driveaccessmonitor.zip

※ダウンロード時に、ブラウザによって図4のようにブロックされる場合は、”保存”を押してダウンロードしてください。

解凍したら、まずホルダ内の"SetCOM.exe"を実行。このとき図6のように起動がプロテクトされた場合は、”詳細情報”をクリックしてから”実行”を押して実行します。


Protect1
図6.プロテクト画面が出たら、詳細情報→実行


次に、.NET Frameworkがインストールされていないと図7のようなメッセージが出るので、Download it now を押して.NET Frameworkをインストールし、再度"SetCOM.exe"を実行します。起動できたら、なにもせずに右上の✕を押して一旦終了します。


Sssrcnet1_20260720190601
図7..NET Frameworkのインストール画面(これはSSSRCアプリの例)

 

次にホルダ内のDriveAccessMonitor.exeを実行。
再度図6のプロテクト画面が出たら、先ほどと同じように詳細情報から実行します。
数秒待つと図8に示すCOMポートエラーが出るのでOKを押して、次の図9の画面が出たら先程調べたCOMポートを選んでOK。図10の確認画面が出たらOK。


Comporterror
図8.COMポートエラー


Setcom
図9.アクセスランプのCOMポートを設定


Setcmplete
図10.COMポート設定完了


これで数秒待つと動作を開始し、タスクバーの通知領域に図11のようなアイコンが表示されます。

Kidou_20260720185601
図11.通知領域のアイコン(表示されない場合は ^ を押して隠れているアイコンを表示)


これでアクセスランプが動作開始しているはず!


④その他の留意事項
・本アプリの終了は、通知領域のアイコンを右クリックして”終了”を押します。
・ドライブは、ディスク0~3のように認識されますが、ディスク0がCドライブになるとは限りません。これはWindowsのスタートメニューを右クリックして”ディスクの管理”を起動し、確認できます(図12)。
したがって、特定のドライブに対してLEDの色を決めたい場合は、先にディスク番号を確認し、表1のGPIO対応表にしたがってLEDを接続してください。
・COMポートを設定しなおしたい場合は、いちど本アプリを終了し、本アプリのホルダ"DriveAccessMonitor"の中の"SetCOM.exe"を実行してCOMポートを設定し直してください。設定ができたら再度本アプリを起動します。
・アクセスランプを常時使用する場合は、アクセスランプをUSBに繋いだままにしておき、本アプリをスタートアップに登録してください。ただし、COMポートが変更になった場合は再設定が必要です。


Mngedisk
図12.ディスクの管理
ディスク0がCではなくDドライブになっている。


やっぱりドライブのアクセスランプがあると安心感があるなあ……(^-^)


| | | コメント (0)

2026年6月29日 (月)

RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑥ z-2項をシフトする理由

この記事は

RIAAフォノイコライザをIIRデジタルフィルタで実装する ①準備編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ③シミュレーション編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ④実装・評価編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証

の続編です。

過去記事

RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編

の中で、フォノイコライザのアナログ伝達関数(sドメイン)を双一次変換によってデジタルの伝達関数(zドメイン)に変換するという計算を行った。この内容をもう一度書くとこうだ。まずフォノイコライザのアナログ伝達関数は

Analog_eq    (式1)

であり、sとzの関係は

Sz  (式2)

で、ただしこれはsについて解こうとすると複素数の対数になるので、計算が困難となるため、次の式で近似する。

Sztransfer  (式3)

式1に対して、式3の変換式を代入して整理すると、フォノイコライザのデジタル伝達関数(zドメイン)が得られる。このときの計算結果から、全体にかかる定数項を省くと次の式が得られる。

Digitaleq_org   (式4)

ところが、よく使われる式は、分子のz-2項の係数をz-1項にシフトしてz-2項はネグる、すなわち

Dijitaleq_20260629162801   (式5)

という形になっていて、それがなぜだか謎だったのだ。今回はこの理由がわかったので、書いておこうと思う。
上の式のままだとどうも目がチカチカするので、もう少し実用的な形に書き直すと以下のようになる。

96kriaaorg  (式6)

96kriaa (式7)

式6は96kHzサンプリングのRIAAイコライザのデジタル伝達関数、式7は式6のz-2項をz-1にシフトして、z-2項をネグった、よく使われる形。
元記事を書いた当初、なぜこういう操作をしているのか、理由がわからなかったのだ。

ところが先日、パラメトリックWAVプレーヤーの記事を書くために調べ物をしていて、とうとう理由を見つけたのだ。
式4の分子を取り出して因数分解すると次のようになる。

Shiki8  (式8)


ここで、デジタル周波数応答を見るときの前提として

Ztos (式9)

であり、ここでのωは1サンプル進むごとに位相がどれだけ進むかを表していて、たとえばω=0(直流)では位相は進まずz=1、ナイキスト周波数の場合は、サンプリング周波数の半分なので1サンプルごとにω=180deg、つまりラジアンでπなので、

Photo_20260629160101(式10)  (オイラーの公式より、-1)
なので、

Z1
Nyquist (式11)

つまりナイキスト周波数のとき式11が成り立つ。そうすると、式8の
1z1
の部分は、ナイキスト周波数で0点ということになり、つまりナイキスト周波数ではゲインが0(伝達関数が0)になることを示している。
フォノイコライザの実装上、ナイキスト周波数で0になるという性質は不要で、しかも再生周波数にナイキスト周波数が近いと影響が出て、高域でゲインが低下することになる。なので式8のこの部分をネグって1とすると、最終的に式5になる、というのが真相のようだ。

過去記事の
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証
でこの部分をネグらなかった場合とネグった場合の比較をしているが、96kHzサンプリングで、ネグらないで実装した場合、20kHzのゲインが1.4dBほど下がってしまうという結果になっている。一方、ナイキスト周波数でゼロになる部分をネグったよく見られる実装では、ゲインの偏差は+0.5dBほどだった。なので辻褄は合っている。

これはよく考えてみるととても面白い現象で、もとのアナログ伝達関数(sドメイン)で周波数を無限大に飛ばしたときにゲインが0になる、という事象が、デジタル伝達関数(zドメイン)ではナイキスト周波数でゲイン0という事象に変換されたことになる。まるで無限に広がっていた宇宙に対して、ドメイン変換したらナイキスト周波数というブラックホールが現れて、高域の周波数軸が歪んで吸い込まれてしまうような感じに見える。

実際のところ、比較記事では、ネグらなかった場合は高域ゲインが若干下がる代わりに位相は正しく、ネグった場合はゲインはごく僅かに上る程度に留まった分、位相はかなり回ってしまうという結果になっており、計算の正当性から言えば、どちらかというとネグらないほうが正しいような感じもする。しかしながら20kHzで-1.4dBという結果は聴感に影響があるため、世間では高域が下がらない方を選んでいる、というのが本当のところのようだ。

| | | コメント (0)

2026年6月27日 (土)

パラメトリックWAVプレーヤー

今回は、再生音質をパラメトリックイコライザーで調整して出力することができるパラメトリックWAVプレイヤーアプリをリリースしたので、その紹介です。

BOOTHにて公開しています!

最新版 ダウンロード
更新履歴
3.0.2 randomモードで再生ボタンを押した場合の一曲目もランダム化しました。
3.0.3 一部のサウンドデバイスで、WASAPIモードでの再生できなかった不具合を対策しました。
3.0.4 プレイリストを一括消去するDel All、および複数選択による一括削除を追加しました。
3.0.5 選択している曲があるのにPlayボタンで先頭から再生されるバグを修正しました。
3.0.6 Beta フィルタ後の信号をファイル出力する機能を追加しました。詳細はこちら


これはWAVファイルのデジタルデータを直接IIR(Biquad)フィルタにかけて、音質調整をして出力することができるWAVプレイヤーで、結論を先にいうと、周波数特性の改善だけではなく、同時に位相特性も改善されて、定位感が大幅に改善します!びっくり(@_@)

きっかけはオーディオ仲間の I さんからの電話でした。いわく、
「おもしろいDACの製作記事を見つけたから作ってみたらなかなかよかったよー(^-^)」

そのおもしろいDACとは、この記事で紹介されているRaspberry Pi PICOを使ったものです。
この作者は、スピーカー単体特性を苦労して改善するよりも、ソースのイコライジングで特性を補うほうが合理的なのではないか?というアプローチをしていて、そのひとつの答えとして、PICO2を使って、8段のパラメトリックイコライザを内蔵したDACを開発し、最終的にスピーカーから出力される音の周波数特性を改善するということを実現しています。
ぼくも実際に作ってみましたが、なるほどとてもよくできていて、安価でコンパクトでしかも効果的です。すばらしい!(^-^)!

ぼくもこれをシステムに組み込んで使おうかとも考えたのですが、いくつか気になる点がありました。
・DACチップ一体で作っているため、DACチップの置き換えなどができず、たとえばSSDACを使おうとするとSSDACに組み込まなければいけない。
・PICOのベースクロックはUSBの48MHzに合わせて作ってあるため12MHzであり、たとえばCD系(44.1kHz)の11.2896MHzのクロックはどうしても割り切れない系のPLLに頼らざるを得ない。

それならPCのアプリとして作れば、フィルタの段数も増やせそうだし、出力をUSBのDACにすれば選べるし、そのほうがよさそうだな……
と考えて、とりあえずC#を使ってコンソールでWAVを再生する実験をして、そのあとBiquadフィルタを実装して通す実験をしたところうまくいったので、それならカタチにしよう!と思って、コツコツと作り始めました。

カタチとしては、パラメトリックフィルタを内蔵したWAV専用のプレーヤーアプリで、対応フォーマットは44.1kHz、48kHz、88.2kHz、96kHzのWAV、出力は接続しているUSBサウンドデバイスが選択できて、WASAPI出力も選べるようにしました。
内臓のフィルタは、パラメトリック(ピーキング)フィルタが左右独立で30段、ローシェルフ、ハイシェルフフィルタが左右独立で各一段、それに係数を任意に設定できるBiquadフィルタを左右独立で5段としました。またダイレクトリッピングしたアナログレコードを再生できるように、フォノイコライザも内蔵し、フォノイコライザの特性はRIAA、NAB、Colombia/LP、Decca、AES(2種)、Old RCA(4種)と、合計10種類で、ほぼすべての特性をカバーしています。
(このうち、パラメトリック16段、Low Shelf、High Shelf、Biquad3段、RIAAフォノイコは無料でお使いいただけます。 )

アプリのUIはこんな感じです。

Photo_20260627143001
図1.Parametric Wav Playerの外観

上側にある小さな窓がプレーヤー本体で、後ろに写っている大窓がフィルタ設定画面です。

このアプリは、単にちょっと凝ったトーンコントロールと、任意設定できるデジタルフィルタを内蔵したプレーヤーだと考えて、面白がって音質をあれこれいじって再生するという使い方が手軽にできますが、作者の目的は、視聴位置での周波数特性を改善することにあります。

実際に自室のシステムで試してみたので、以下に紹介します。


今回の目的は、部屋の視聴位置でのスピーカーの周波数特性を改善することです。
大きな方針としては、視聴位置に測定用のマイクを設置して、スピーカーからホワイトノイズを出力したときに、マイクで拾った信号をFFTで観察して、フラットになるようにフィルタを設定する、ということです。
FFTはWaveSpectra を使う方針ですが、WavSpectraは低域が正確に測れないので、先にREWUMIK-1を使って、視聴位置での音場特性を測ります。

まず、普段使用しているスピーカーですが、Auratone5CとVictorのSX-100を直列にして、無帰還アンプで鳴らしています。スピーカーはどちらも12.5Cmフルレンジユニットが使われています(写真1)。

Sp_system
写真1.使用しているスピーカーシステム

これをUMIK-1とREWで、視聴位置で測定した結果を図2に示します。

Rew

図2.視聴位置での音圧周波数特性(赤線)


これは想像していたよりだいぶひどい特性です(^-^;
以前、Auratone5Cは軸上10センチの位置で特性を測ったことがあって、その結果は図3のようでした。


Image
図3.Auratone5Cの軸上10センチでの音圧周波数特性


この特性を見る限りでは、低域が物足りないものの、全体としては素直で悪くないものでしたが、2mほど離れた今回の視聴点ではずいぶん特性が変っています。
さて、それでは図2の、REWで示された視聴点の特性から、まず低域のローシェルフフィルタと、高域のハイシェルフフィルタの設定を仮決めしておきます。ローシェルフ、ハイシェルフフィルタは図4、図5に示すような特性のフィルタです。この例ではカットオフ周波数Fcに対して、Gain15dB、Q=0.8を設定した場合を示しています。


Lowshelf000 Highshelf000
図4.ローシェルフフィルタ            図5.ハイシェルフフィルタ


つまりカットオフ周波数から下のゲインを調整するのがローシェルフで、上のゲインを調整するのがハイシェルフフィルタです。
さきほどのREWの測定結果から、ローシェルフとハイシェルフのフィルタ特性を次のように仮決めしました。

Low Shelf:Fc=75Hz、Gain=15dB、Q=0.7
High Shelf:Fc=14kHz、Gain=12dB、Q=1.0

まずこの設定でフィルタをかけて調整を進めていきます。

本アプリでのフィルタをかけた状態でスピーカーの音場特性を測るには、UMIK-1とWaveSpectraを使います。REWは内蔵音源を使う測定なので、本アプリを使った測定はできないからです。
ホワイトノイズを録音したWAVファイルを用意して、それを本アプリで再生し、視聴位置にUMIK-1を設置してここで集音した信号をWaveSpectra で観測します。

まずは、フィルタを一切かけない状態での初期状態の特性を図6に示します。


20260626ws000
図6.初期状態の視聴位置でのスピーカー音圧特性


これは先程のREWで測定した図2の特性とおおむね一致しています。

ここに先ほど決めたローシェルフ/ハイシェルフフィルタの設定をアプリに入力して、フィルタOnして測定したものを図7に示します。


20260626ws001lshson110mark
図7.ローシェルフ/ハイシェルフフィルタをOnにした音圧特性


これで高域が改善しているのがわかります。
次に、この図で○印をつけた110Hz付近にディップがあるので、これをParametricフィルタで改善します。設定は次の通り。

Fc=110Hz、BW=0.2、PeakGain=8dB

説明が前後しますが、Parametricフィルタ(Peaking Filter)の特性を図8に示します。この例では、中心周波数Fcに対して、PeakGain=15dB、BW=1.0を設定しています。


Peaking001
図8.Parametric(Peaking)フィルタの特性

Parammetricフィルタは、特定の周波数のゲインを増減するフィルタなので、ここでは110Hz を狙って8dB 上げる設定をしています。
このフィルタをOnして測った特性を図9に示します。

20260626ws002_110hzon992mark
図9.110Hzの改善結果と、992Hzのピーク


これで先程の110Hzのディップが解消しました。次に992Hz付近にピークがあるので、これをつぶします。

Fc=992Hz、BW=0.2、PeakGain=ー8dB

これで、特性は次のようになりました。

20260626ws003_992hzonmark
図10.992Hzの改善


このようにして、全体にわたってディップとピークを地道につぶしていきます。
だいたい満足なところまで行った結果を図11に示します。

20260626ws004_20k
図11.全帯域改善


これで目立つ凹凸を消すことができましたが、10kHz以上が少し下がっています。これを次のように改善します。

Fc=20kHz、BW=0.5、PeakGain=9dB

すると次のような特性が得られました。


20260626ws005_last
図12.最終調整結果


もう一度最初の無調整の図6を再掲しますが、大幅に改善していることがわかります。

20260626ws000
図6.初期状態の視聴位置でのスピーカー音圧特性(再掲)


さてこれでいよいよ実際に音楽を聞いてみます。
当然ながら低域と高域は改善されているので、低域の厚みと高域のヌケ感が改善されることは予想できますがはたして……


(@_@;


まさにこんな感じの印象でした!
低域と高域のレベルが改善されたのは当然なのであまり驚かなかったのですが、それでは何に驚いたかというと、定位感が大幅に改善したことに驚いたのです。
長いことオーディオをやっていますが、これほどの改善効果を体験するのは非常にめずらしく、思い返してみれば50年近く前に、カセットデッキのアジマス調整をしたときに、霧が晴れるように音質が改善したあの時の感動に匹敵するほどの衝撃です。

音圧の周波数特性を改善したことで、なぜ定位感が改善したのか?
これは考えてみれば当然かもしれないのですが、音圧の変化と位相特性は最小位相の範囲内では表裏一体であり、音圧特性を改善すれば位相特性も同時に改善するということです。これはたとえば、フォノイコライザの補正カーブは必ず一意に位相特性を伴い、逆特性で戻せば位相特性もフラットに戻る、というのと同じことです。
しかしこれはゲインと位相が常に一意に変化する最小位相系に限った現象であって、たとえば壁からの反射による影響や、スピーカーからの距離の差によるような非最小位相系は改善されません。それでも今回は目を見張るほどの改善がありました。

以上のように、今回は想像をはるかに超える効果を得ることができました。
みなさんにもぜひ体験していただきたいと思いますし、マルチシステムを使っておられる場合はどのような効果が得られるのか、ということにも興味があります。
本ソフトはトップにリンクした通り、BOOTHからダウンロードでき、詳しい操作説明はマニュアルが同梱されていますので、興味のある方は参照してください。

マニュアルだけここに貼っておきます。

ダウンロード - parametricplayermanual.pdf

【20260628追記】
このアプリに搭載したフォノイコライザについて解説しておこうと思います。
じつはこのアプリに搭載されたフォノイコライザは、ちょっとした目玉だと思っています。というのは、現存するであろうほぼすべてのイコライザ特性を網羅しているからです。
フォノイコライザのIIRデジタルフィルタへの実装については、過去記事で書いていますので、参照してください。

【参考記事】
RIAAフォノイコライザをIIRデジタルフィルタで実装する ①準備編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ③シミュレーション編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ④実装・評価編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑥ z-2項をシフトする理由

さて、今回はもっとも普及しているRIAA規格を始めとして、現存する規格を網羅して合計10種類のフォノイコライザの規格をカバーしています。このアプリに搭載しているフォノイコライザの規格と、その時定数は次の表1に示すとおりです。

表1.搭載したフォノイコライザの時定数
20260817-153417

RIAA以外の規格については、時期によって数値が変ったりするものもあり、判然としない場合もあります。
たとえばNAB規格は、最初期にはT1=2242として発表されましたが、後にColumbia/LPとの互換性を考慮してT1=1592に変更されたと言われています。このあたりが、NABとColumbia/LPが混同されたり、「ほとんど近い」と言われる理由のようです。
AESについては、高域時定数T3に諸説あり、オリジナルの規格はT3=63.6とする説が有力ですが、後にRIAAとの統合プロセスを考慮し、T3=75として扱っているイコライザーも存在したようです。
old RCAの規格についてはさらにややこしく、RCAがLP製造を開始した最初期の規格はT2=265、T3=63.6だったと言われています。しかし一部の文献や、のちのヴィンテージ機器では、T2=199、T3=75としているものが存在します。T2=265、T3=75や、T2=199、T3=63.6という組み合わせについては文献がありませんが、念のため搭載しました。

これらの定数に対して、Biquadフィルタに実装する公式は次のとおりとなっています。時定数T1~T3は上述の通り、Fsはサンプリング周波数です。これはフォノイコライザの伝達関数を双一次変換(BLT)でデジタルに変換したものです。


Dijitaleq_20260629162801  (式1)


このソフトで実際に信号を処理した場合の理論値と実測値の結果を表2に示します。Fsは96kHzで測定しています。
なお、理論値については次の式2によって求められ、表2の数値はいずれも1kHzのゲインを0に正規化しています。

Gainfomula  (式2)

表2.フォノイコライザ各規格の実測値(Fs=96kHz)
Eq_actualvalue

測定は正弦波を入力し、20Hzでサウンドカードの最大出力がクリップしない値(約5Vp-p)に設定し、そこから同じ入力条件のまま
周波数を徐々に上げて、20kHzまでについて、デジタルオシロのカーソル機能で振幅(p-p)を計測しました。
20Hzで5Vp-pでも20kHzではおよそ40dB下がって50mVほどになるため、ノイズの影響や読み取り精度を考慮すると16kHzや20kHzの
測定精度はやや低いです。
また過去の記事でも検証しましたが、式1の計算では、サンプリング周波数が下がるほど高域のゲイン特性が若干上がる傾向が出ます。
そのためか、いずれも周波数が高い方で誤差がプラス方向にやや高めに出ています。
しかしながらいずれも1dB以内の誤差におさまっているので、まあまあなのではないでしょうか。


参考サイト
簡単なデジタルフィルタの実装

Audio-EQ-Cookbook

 

| | | コメント (0)

2026年3月20日 (金)

Loraデバイス E220-900T22S の動作確認

20260320lora
写真1.LoRaデバイスの送受信実験回路


Loraデバイスの動作試験を行ったので、備忘録として書いておく。

Loraとは、スペクトラム拡散技術を応用した、低消費電力での長距離通信を可能にする無線通信方式。

そもそも何のためにこの検証をしようと思ったかというと、マンション1階の郵便受けに荷物が届いたかどうかを検知するための無線センサが作れないかどうか考えたのが始まりだった。

現在、鉄筋コンクリート4階建てのマンションの3階に住んでいて、郵便受けは一階の入口に設置されており、ステンレス製だ。条件としては、郵便受けを改造せず、アンテナを外部に引き出すのもNGとする。つまりステンレスの箱の中から、外部にアンテナを出さずに、データを電波で送ってそれを受信できるか?ということだ。

以前、Wifiで信号が送れないか予備実験を行ったが、うんともすんともデータは送れなかった。このときはESP32を使用した。

LoRaに採用されているスペクトラム拡散方式の通信技術は、ノイズや干渉に強いという特徴があるため、ひょっとしたら郵便受けの中から部屋に向けて通信が可能なのではないかと思ったのだ。

そういうわけで、さっそく秋月にいって、LoRaモジュールを2個購入してきた。E220-900T22S(JP)-EV2というもので、1個1980円。アリエクに慣れているとちょっと高い買い物だが、まあしょうがない。

とりあえず片方のデバイスから"hello(^-^)/"と送信して、これをもう片方のデバイスで受信できるようにし、送信側のデバイスを1階の郵便受け内部に設置して、3階の部屋でこれを受信できるか検証するのが、今回の目的である。
結論を先に書いておくと、郵便受けの中から2秒ごとに送信した"hello(^-^)/"信号が、3階の部屋で大体2~3分に一度受信できた。予想としては、Wifiと同じくまったく受からないのではないかと思っていたので、意外な結果だった。

必要最低限のコードで通信テストを行う手順は以下の通り。

使用するマイコンはESP32。よくあるUSB接続のブレークアウトボードを使った。環境はArduino、バージョンはesp32_3.3.5。
LoRaモジュールE220のConfigが初期値である前提ならば、透過送信モード(Transparent)が使用でき、ハンドシェイクやペアリングをせずにテキストの通信ができる。送信、受信のコードは次の通り。

////////////////////////////送信コード ここから
/*
  20260319 Lora E220 送信テスト
  arduino esp32_3.3.5
  Device Config = Default
  M0=M1=0
  AUX:Open
  E220 Tx → ESP32-16
  E220 Rx → ESP32-17
*/

HardwareSerial LoraSerial(2);

void setup() {
  Serial.begin(115200);
  LoraSerial.begin(9600, SERIAL_8N1, 16, 17);
  delay(1000);
  Serial.println("TX start");
}

void loop() {
  LoraSerial.println("hello (^-^)/");
  Serial.println("sent: hello (^-^)/");
  delay(2000);
}
////////////////////////////送信コード ここまで

////////////////////////////受信コード ここから
/*
  20260319 Lora E220 受信テスト
  arduino esp32_3.3.5
  Device Config = Default
  M0=M1=0
  AUX:Open
  E220 Tx → ESP32-16
  E220 Rx → ESP32-17
*/

HardwareSerial LoraSerial(2);

void setup() {
  Serial.begin(115200);
  LoraSerial.begin(9600, SERIAL_8N1, 16, 17);
  delay(1000);
  Serial.println("RX start");
}

void loop() {
  while (LoraSerial.available()) {
    char c = LoraSerial.read();
    Serial.write(c);
  }
}
////////////////////////////受信コード ここまで

LoRaモジュールは、VCCに3.1~5.5Vの電源電圧を供給し、M0,M1端子はGNDに接続、AUXはオープン、Tx,RxはそれぞれESP32の16,17pinに接続する。
コードは、
LoraSerialと名付けたUARTのインスタンスに対し任意の文字列を送るだけのごく単純なものだ。

ところがやってみると、受信できていない。
そこで、LoRaモジュールのConfigがどのような設定になっているか調べてみることにした。
ArduinoにLoRa用のライブラリ"EByte LoRa E220 library by Renzo Mischianti 1.0.8"を追加し、次のArduinoコードを書き込んで実行する。
ダウンロード - 20260319_lora_e220_readconfig_000_ok.ino

すると、シリアルモニタに次のようにConfigの内容が表示された。2個のデバイスの両方とも同じ内容だった。

/////////////////////////////////
E220 configuration read start
Status code: 1
Status: Success
----------------------------------------
HEAD : C1 0 8

AddH : 0
AddL : 0

Chan : 0 -> 410MHz

UART parity : 1 -> 8O1
UART baud : 11 -> 9600bps (default)
Air data rate : 0 -> 2.4kbps

Sub packet : 0 -> 200bytes (default)
TX power : 0 -> 22dBm (Default)
RSSI ambient noise : 0 -> Disabled (default)

WOR period : 0 -> 500ms
LBT enable : 0 -> Disabled (default)
RSSI enable : 0 -> Disabled (default)
Fixed transmission : 1 -> Fixed transmission (first three bytes can be used as high/low address and channel)
----------------------------------------

内容を注意深く見ていくと、デフォルト設定ではない箇所がある。
ひとつはUART parity : 1 -> 8O1で、これはデフォルトでは8N1であるべき。そしてもうひとつは、
Fixed transmission : 1 -> Fixed transmission (first three bytes can be used as high/low address and channel)
この部分は、上の通信プログラムを実行させるには"Transparent transmission"になっていないといけない。
周波数は920MHzなのだが、410MHzになっているのはおかしい。

そこで、次のコードを書き込んで実行し、すべてのパラメータをDefaultに修正する。
ダウンロード - 20260319_lora_e220_setconfigdefault000_ok.ino

実行したら、再度、上に書いたConfigの読み込みコードを書き込んで実行し、内容を確認する。次の内容になった。

----------------------------------------
HEAD : C1 0 8

AddH : 0
AddL : 0

Chan : 0 -> 410MHz

UART parity : 0 -> 8N1 (Default)
UART baud : 11 -> 9600bps (default)
Air data rate : 10 -> 2.4kbps (default)

Sub packet : 0 -> 200bytes (default)
TX power : 0 -> 22dBm (Default)
RSSI ambient noise : 0 -> Disabled (default)

WOR period : 0 -> 500ms
LBT enable : 0 -> Disabled (default)
RSSI enable : 0 -> Disabled (default)
Fixed transmission : 0 -> Transparent transmission (default)
----------------------------------------

これで、上で述べた箇所が修正された。すなわち、
UART parity : 0 -> 8N1 (Default)
Fixed transmission : 0 -> Transparent transmission (default)
この部分が修正された。周波数が410MHzと表示されているのはおかしいのだが、読み出しソフトのバグだろうか?

この修正を2つのデバイスに行ったうえで、再度上に書いた送受信コードを書き込んだところ、こんどはちゃんと受信できた\(^o^)/

このデバイスをより本格的に使用するには、たとえば透過モードではなく固定通信モードに設定して、送信先のアドレス、チャンネルを指定して特定の相手にのみデータを送るなどの方法がある。手順を大雑把に述べると、モードをTransparent transmissionからFixed transmissionに変更し、送信するシリアルデータを[ADDRH][ADDRL][CHAN][DATA...]のようにする。
たとえば、宛先アドレスが0x0002、チャンネルが0x00、データが"hello"なら、

uint8_t data[] = {
0x00, 0x02, 0x00, // 宛先アドレス(H,L) + チャンネル
'h','e','l','l','o','\n'
};
LoraSerial.write(data, sizeof(data));

こんな感じになるだろう。

そういうわけで、とりあえず送受信ができるようになったので、送信側を3.8Vのリチウムイオン電池駆動にして、同じく秋月で715円で売っていた専用のアンテナをつけて紙袋に入れ、1階の郵便受けの中に入れて、3階の自室で受信確認をしたところ、2秒ごとに送信している"hello (^-^)/"が2~3分に一度受信できる、という結果になった。これならひょっとしたら実用できるかもしれない。構想としては、光センサをつけて、郵便受けになにかが入ることで反射光の状態が変化したら、信号を送信するようにすれば、荷物検知ができそうだ。

やはり今回の金属製郵便受けの内部から電波を送信するというプロジェクトの最大のネックはアンテナで、アンテナの外出しおよび郵便受けの改造はNGという条件ではかなり困難だ。通信をより確実にするためにできることがあるとすれば、郵便受けの箱そのものに給電してしまって飛びを確認するか、あるいは扉に開けられている細長い穴をスロットアンテナとして使うか、くらいだが、細長い穴は41mmで、920MHzの波長は約30センチ、1/2λなら15センチなので、41mmでは全く足りない。なかなかむつかしい課題だ……


| | | コメント (0)

«ストリート・デビュー!!(20260507追記あり)