電子回路

2026年1月18日 (日)

マウスホイールによるズーム方向の変更

主に図面などの画像をあつかうアプリを操作する際に、マウスホイールによるズームイン/ズームアウトはとても便利な機能だが、アプリによってズーム方向が違ったり、ズーム方向の設定ができなかったりした場合、たいへんあつかいにくい。

私の場合、主にKicad、LTSpice、DesignsparkMechanicalあたりをよく使うが、KicadのZoom方向に慣れていて、LTSpiceとDesignSparkは逆なので扱いにくい。

そこで、今回はアプリ別にスクロール方向を変更する簡単な方法を備忘録として書いておく。やり方は次の通り。

①フリーのWindowsスクリプトツール”AutoHotKey”をダウンロードしてインストールする。
AutoHotKeyサイトのDownloadボタンを押して、V1.1をダウンロードして実行してインストールする。

②スクリプトを作成する。
テキストエディタで次のようにスクリプトを書き、適当な場所に保存する。ここではファイル名をZoomReverse.ahkとした。ファイル名は任意だが、拡張子はahkにすること。

;ここから
;DesignsparkMechanical
#IfWinActive ahk_exe SpaceClaim.exe
WheelUp::Send {WheelDown 1}
WheelDown::Send {WheelUp 1}
#IfWinActive

;LTSpiceXVII
#IfWinActive ahk_exe XVIIx64.exe
WheelUp::Send {WheelDown 2}
WheelDown::Send {WheelUp 2}
#IfWinActive

;LTSpice26
#IfWinActive ahk_exe LTspice.exe
WheelUp::Send {WheelDown 2}
WheelDown::Send {WheelUp 2}
#IfWinActive
;ここまで

この例はDesignsparkとLTSpiceXVII、LTSpice26の3種類のアプリのズーム方向を逆に設定している。
WheelDown 2
WheelUp 2
の数値はズームスピードの設定で、数値が大きいほど早くなる。

スクリプトが書けたら保存して、これを右クリックして、「プログラムから開く」→AutoHotKeyを実行すれば有効になる。
PCの起動時に自動的に有効になるように、スクリプトファイル(ahkファイル)のショートカットをスタートアップに登録しておくと便利。
スタートアップホルダはスタートメニューの「ファイル名を指定して実行」から
shell:startup
とすれば開くことができる。

注意すべきことは、これは対象のアプリがアクティブな場合のみ有効ということなので、そのアプリが画面に表示されていても別のアプリがアクティブな場合は有効にならない。

ちょっと慣れが必要かもしれないが、だいぶ便利です(^-^)

 

| | | コメント (0)

2026年1月15日 (木)

【備忘録】XilinxのWebPack ISE14.7をWindows11にセットアップする

昔は電子機器開発部署の部品棚にはロジックICの74シリーズのほとんどすべてが用意されていて、これらを使って開発の予備実験や試作などを行っていたものだが、もうそんなやり方は効率が悪いので、CPLDの開発環境を導入して74シリーズを使うのはやめようと思い、Xilinx(現AMD)のXC95xxとISE14.7をセットアップしたのは2010年頃だったろうか。それでもかなり遅い。
マイコンを使えばロジックICを使うような場面はだいたい賄えるので、CPLDを使う機会はほとんどなかったが、それでもロジック回路が組める環境があると安心感があった。

※注記 XC95シリーズのCPLDは生産中止品で、開発ツールISE14.7はほとんどこのXC95にしか使い道がないので、未来があまりないが、XC95シリーズは流通在庫が豊富であり、まだ当面の間入手は可能と思われます。

2016年頃にWindows10を導入したらISE14.7が動かなくなってしまい、ときどき思い出したようになんとか動かす事はできないかいじったりしていたが、結局決定的な解決策がないまま放置して、あれから10年近くCPLDが使えない状態になってしまっていた。
2026年年初からパソコンを新調し、環境を整備していたが、このときにまた、もう一度ISE14.7を導入してCPLDが使えるようにできないかな……?と思い、ネットで調べてみると、いつの間にやらAMDのISEアーカイブサイトにWindows10、11対応のISE14.7が上がっていたので、テストしてみることにした。ただこれは、Windows上にlinuxの仮想マシンを導入して、そこにISE14.7をインストールするというやり方で、デバイスドライバやダウンロードケーブルがちゃんと動作するのか?という不安があった。
結論を先にいうと、特に問題はなく、すんなり使えるようになった。備忘録として以下にまとめておく。

Windows10またはWindows11にISE14.7を導入する場合、あらかじめOracleのVirtualBox(仮想マシン)を入れておく必要がある。私は別の用途ですでにVirtualBox7.1.10をインストールしていたので、とくに問題はなかった。
VirtualBoxが入ったら、AMDのアーカイブサイトより、
Xilinx_ISE_14.7_Win10_14.7_VM_0213_1.zip
をダウンロードし解凍したら、Windows上からxsetup.exeを実行して、あとは案内に沿ってインストールする。
※ちょっとうろ覚えだが、途中ダウンロードケーブルのデバドラを入れるチェック項目があったように思う。入れ忘れ注意!!

インストールが完了したら、VirtualBoxのVirtualBoxマネジャーを開くと、図1のようにISE14.7が追加されているのが確認できる。
(windows98seとubuntuの22.04、14.04は先に入れてあったもの。)
Virtualbox
図1.VirtualBoxにISE14.7が追加されている


このままでも動くのかもしれないが、ネットで情報収集したところ、いくつかの設定を行う必要があるらしい。
ISE14.7_VIRTUAL_MACHINEを選んだ状態で、設定アイコン(歯車)をクリックすると、各種の設定ができる。
※以下の設定は、VirtualMachineが停止している状態で行います。

上から順に、
まず一般→高度でクリップボードの共有を双方向に設定。
次にシステム→マザーボードで
・メインメモリーを6144MBに設定。
・チップセットをPIIX3に設定。
システム→プロセッサーで
・プロセッサー数を2に
・PAE/NXを有効化にチェック
システム→アクセラレーションで
・仮想化支援機能:ネステッドページングを有効化
ディスプレイ→スクリーンで
・ビデオメモリーを128MBに設定
・グラフィックコントローラーをVBoxSVGAに設定。
ネットワーク→アダプター1
・割り当てをNATに設定
USB
・USBコントローラを有効化にチェック、USB2.0にチェックを入れる。
・USBデバイスフィルターで、Xilinx USB Cable、Digilent USB Cable、Digilent USB Cable2の3つに☑が入っていることを確認。
・共有フォルダーに、Windowsと共有する任意のフォルダーを設定しておく(右の+マークで追加)。
ユーザーインターフェイス→デバイス
・共有フォルダ、クリップボードの共有にチェックが入っていることを確認。

以上で触れていないところはデフォルトのままでいいと思われる。

すべての設定ができたら、ISE14.7_VIRTUAL_MACHINEをダブルクリックするか、これを選んだ状態で起動ボタンを押すと、Linuxの仮想マシンが起動する(図2)。

Linuxforise14_7
図2.Linuxの仮想マシンが起動

これでこの仮想マシンのデスクトップ上にあるProject Navigatorをダブルクリックすれば、ISE14.7が起動する(図3)。


Ise14_7
図3.ISE14.7を起動している様子


起動できたので、簡単なテスト回路をVHDLで記述して動作確認しておく。使用デバイスはXC9572XL(PC44)。
テスト用の回路は図4に示す通り。電源の3.3Vは外部からACアダプタとレギュレータで供給し、クロックは部品箱に入っていた8.192MHzの水晶発振器を使用した。

Test_sch
図4.製作したテスト用回路


ISE14.7による回路記述は次の通り。
ファイルのNew Projectから、XC9572test20260110という名前(任意)をつけてプロジェクトを作成する。このときに、Locationに、上で設定したWindowsと共有しているホルダを指定するとWindowsからも見ることができるので管理しやすくなる。次のページでデバイスとパッケージ、開発言語(VHDL)を選択してFinishするとプロジェクトが生成される。
この状態ではソースファイルがないので、VHDLを記述するファイル(*.vhd)とピン接続を記述指定するファイル(*.ucf)を作成する。
左上ペインのプロジェクト名を右クリックして、"New Source"を選び、VHDL MODULEを選んで、"ledMain.vhd"と名前をつけてNext,Finish。同じく"New Source"から"Inplementation Constrains File"を選び、"led.ucf"と名前をつけて生成する。
ピン配置はGUIではできないのでucfファイルで行う。

今回記述したテスト用のledMain.vhdは次の通り

--ここから
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

entity testmain is
    Port ( LED1 : out  STD_LOGIC;
           LED2 : out  STD_LOGIC;
           clk  : in   STD_LOGIC
);
end testmain;
architecture rtl of testmain is
signal ledcnt : unsigned(19 downto 0):="00000000000000000000";
signal led_sig : std_logic:='0';
begin
process(clk)
begin
if(rising_edge(clk)) then
  if ledcnt = to_unsigned(1000000,ledcnt'length)then
    led_sig <= not led_sig;
    ledcnt <= to_unsigned(0,ledcnt'length);
  else
    ledcnt <= ledcnt + 1;
  end if;
end if;
end process;
LED1 <= led_sig;
LED2 <= not led_sig;
end rtl;
--ここまで

これはクロックを100万カウントするごとにLED1を点滅させる回路で、LED2はLED1の反転。

次に、led.ucfは次の通り。

--ここから
# Clock
NET "clk" LOC = "P5";

# LEDs
NET "LED1" LOC = "P18";
NET "LED2" LOC = "P19";
--ここまで

vhdとucfが書けたら保存して、ledMain.vhdを選んだ状態で、左中段ペインのImplement Designを右クリックしてRun。
そうするとすべての処理が一括で行われて、最後に
Process "Generate Programming File" completed successfully
が出たら成功だ。

次に生成されたオブジェクトファイルをCPLDに書き込む。
製作した基板に電源とダウンロードケーブル(DLC9LPMCを使用)を接続し、
ISEのToolsからiMPACTを起動する。Warning はOKで抜けて、
まず左ペインのBoundary Scanをダブルクリックすると、右ペインに
”Right Click to Add Device or Initialize JTAG chain”
と出るので、その部分で右クリックして、"Initialize Chain"を選択。
すると、接続しているデバイスが表示されるので、"Yes"を選んでContinue。
先ほどビルドされたオブジェクトファイル"testmain.jed"をOPEN。
OKで抜けて、あとは左下ペインのProgramをダブルクリックすれば書き込まれ、書き込みが終了すると回路が動作する。
動作している様子は次の通り(動画1)。

動画1.動作の様子

コード記述でロジック回路が組めるというのは、いまだにちょっと感動します(^-^)
今回使用したXC9572というCPLDデバイスは、マクロセルという回路単位が72個入ったもので、マクロセルというのはざっとフリップフロップ1個とゲート数個だと考えれば、だいたい実装可能な回路規模のイメージができる。
今回は8.192MHzのクロックを100万分の1に分周してLEDを点滅させていて、100万分の1は大体2の20乗分の1なのでごく大雑把にはDフリップフロップ20個程度だと考えればよい。実際のところ、ISEのFitter Reportを見ると、72個のマクロセルのうち22個を使ったと書いてあるので、ほぼ計算が合う。

実務上はそれほど使う機会が多いとは思えないが、逆にこの程度の規模のCPLDでなにかおもしろいものができないか考えるのも面白いかもしれない。

 

| | | コメント (0)

パワーアンプ用スイッチング電源の起動不良

動画1.パワーアンプ電源のヒカップ(hiccup:しゃっくり)現象
(右側のスイッチング電源の緑LEDと、中央のコンデンサ基板のピンクLEDがチカチカしています。)


長らく使っている無帰還パワーアンプですが、どうもこのところ電源スイッチを入れるとスイッチング電源が起動に失敗し、ヒカップ動作に陥るようになってしまいました。ヒカップとは、スイッチング電源の過電流保護動作によって、しゃっくりのようにON→保護によりシャットダウン→ON→保護により……を繰り返す現象のことで、すんなり電源がONになることもあれば、ヒカップに陥って、もう一度電源を入れ直さないとONできないこともあります。ヒカップ現象の様子を動画1に示します。

このアンプを製作してから長らく問題なく動作していましたが、ここ最近はかなりの頻度でヒカップ現象が起こるようになったので、原因の調査と対策を行いました。

まず原因ですが、スイッチング電源の使い方が仕様外でした。申し訳ございません。
もし無帰還25WまたはFET入力無帰還25Wを、製作例通りCincon社製スイッチング電源CFM60S240を使用して製作された場合は同じ不具合が出る可能性があるので、本記事の内容にしたがってスロースタート回路を追加するか、スイッチング電源の出力に入れる平滑コンデンサを2500μF以下にしてください。

今回の不具合の原因は、スイッチング電源の出力につけた平滑コンデンサ(4700μF)が電源の負荷として重く、電源が起動に失敗するというもので、これは製作例に記載したCincon社製スイッチング電源CFM60S240の仕様書を読むと負荷コンデンサは2500μFとなっているので明らかにオーバーしています。仕様書はちゃんと読まないといけませんね(^-^;

ダウンロード - datasheetcfm60sseries.pdf

それはこの仕様書の3ページ目の、"Load Capacitance"のところに記載されていました。
つまり外付けの平滑用のコンデンサは2500μF以下にする必要があります。


製作例にも書いた通り、従来は±24Vの両方の電源出力に4700μFの平滑用ケミコンを付けていました。なので、これをそのまま使えるように、スロースタータ回路を製作しました。回路を図1に示します。


Delay_sch
図1.ヒカップ対策用スロースタート回路

図1の回路中、C1とC4の4700μFが平滑用のコンデンサです。電源ON時に、このコンデンサにドカッと充電電流が流れることでスイッチング電源の保護回路が働いてヒカップ状態に陥るので、対策としてMOSFETで充電電流を緩やかにします。そのためにゲート入力電圧を100kΩと47μFでゆっくり上昇させています。47μFと並列に入れた100kΩはゲート電圧が最大定格を超えないようにすることと、47μFの放電のために付けています。FETは部品箱に大量に入っていたIRFW540で、これは以前秋月のお楽しみ袋に入っていたものです。定格は100V28A、ON抵抗は52mオームです。50V10A以上で、Vgsが5V前後でON抵抗が0.1Ω以下のMOSFETならおおむね大丈夫だと思います。
マイナス側の回路はPチャネルを使って上下対象にしたほうが見た目かっこいいですが、部品の入手性が良くないので、同じデバイスを使って同一回路としました。

配線してしまってから写真を撮っていないことに気がついたのでわかりにくくなってしまいましたが、写真1に実装の様子を示します。この裏側に4700uFのコンデンサが2本付いています。
スイッチONの様子を動画2に示します。

Imgp5021
写真1.スロースタート回路実装の様子

動画2.スロースタート回路による対策後の電源ON


そういうわけで、4700uFでも安定して起動できるようになりました(^-^)



| | | コメント (0)

2026年1月 9日 (金)

格安タブレット P85T のバッテリー交換   

20240920p85t_20260109123401

関連記事:格安タブレット TECLAST P85T の不具合と対処方法


2024年の夏に約9500円で購入したTECLASTの格安タブレットP85Tだが、予想より早く電池が劣化し、2025年末には実用上かなり厳しい状態となった。

今回の電池寿命による症状は、従来とは様子が異なっていて、電池残量が80%とか、まだまだ余裕がある場面で突然電源が落ちるというものだ。故障かもしれないと思いいろいろ調べてみたが、どうやら電池がくたびれてきて内部抵抗が上がってくると、突発的な電流増加のときに大きな電圧降下が生じ、リセットしてしまうということらしい。
これは高性能で演算能力の高いCPUに対して、AIなど高負荷なアプリを使用したときに起こるらしく、確かに最初にこの現象が出たときも、AIによる詰将棋をやっているときだった。
この現象が出始めたのが2025年の10月頃だったので、購入からわずか1年2ヶ月ほどだ。ただ、突然落ちる場面もそれほど頻度が高くはないし、バッテリーも半日以上もつ状態だったので、まだしばらくは大丈夫だろうと、だましだまし使っていた。
そこから2ヶ月が過ぎて、年が明けてからは、AI詰め将棋だけではなく、ほかのアプリを使っているときでも突然落ちる頻度が増えてしまったので、電池の交換に踏み切ったのだ。

以下にP85Tの電池交換を記すが、リチウムイオン電池は発熱発火などの危険を伴う電池であるため、自己責任でお願いします。

さて、まずは蓋を開けて電池サイズを測ったところ、102x98xt3.5ほどだった。電池の写真を写真1に示す。

P85t_orgbatt00
写真1.元々入っていた電池。3410298というモデルナンバーはそのまま寸法をあらわしている。

Model:3410298
と書いてあるが、これは厚さ3.4mm、102mmx98mmという寸法をあらわしているようだ。
写真2に接続の様子を示す。

P85t_orgbatt
写真2.オリジナルの電池の接続

オリジナルの電池は6ピンのコネクタで接続されていた。赤2本が+、黒2本が-(GND)、黄色が温度検知用サーミスタ、そして青が謎なのだが、観察したところディスプレイのON/OFFを示す信号が来ていた。なんのために電池に接続されているのかは謎のままだ。
交換に使えそうな電池を探したところ、aliで同じくらいのサイズのものを見つけた。購入した電池のリンクを付けるつもりだったが、いま見てみるとすでに販売されていない。試してみたい方は同サイズでコネクタが付いたものを自力で探してください。
購入品はコネクタピッチは同じで、配線が赤赤白黒黒となっていて5ピン、白はサーミスタで、1本足りないが挿入は可能なので、装着してみたところ動作はOKのようだ(^-^)(写真3)

P85t_battconnect
写真3.新しい電池をコネクタに接続。1本足りないが装着できて、動作OK。


さて、この作業の最大の難所は蓋開けだ。
この手のタブレットはネジ止めではなく強固なパッチン止(はめ殺し)で蓋が閉まっているため、開けるのはかなりのテクニックと慣れが必要だ。今回は0.15から0.2mmほどのステンレスの隙間ゲージをじわじわ差し込んで拠点を作り、そこに細いマイナスの精密ドライバを入れてこじ開けたが、かなりの難易度で、ここを乗り越えなければ電池交換はできない(写真4)。

P85t_open
写真4.タブレットのこじ開け作業。P85Tは側面下側から50mmの箇所にヘラを差し込み拠点にするとよさそうだ。

また、この作業に入る前に注意したいのが、SDカードの取り出しだ(写真5)。SDカードが入ったまま無理やり開けようとすると、SDカードホルダを壊してしまうので、要注意だ(写真5)。

Sdcard
写真5.SDカードは忘れずに抜いておくこと!


もう一つ気をつけたいのが、スイッチのところに付いている樹脂製のスイッチボタンだ。これを折ってしまったり、なくしたり、再度蓋を閉めるときに入れ忘れないように注意が必要だ(写真6)。


P85t_sw
写真6.プラスチックのスイッチパーツを無くしたり破損したり付け忘れたりしないよう注意。


今回入手した電池のコネクタは5PINで、1ピン少ないため、抜けやすくなっている。抜けないようにセロテープなどで補強するといいかもしれない。新しい電池を装着した様子を写真7に示す。ちょっとピンボケになってしまった。申し訳ない(^-^;

P85t_all
写真7.新しい電池装着の様子。コネクタリードが長いので、うまく収まるようにループさせる。


そういうわけで、これであと1年くらいは使えるのではなかろうか(^-^)


| | | コメント (0)

2025年11月26日 (水)

SDRドングルでAM受信(2) 【基板頒布あり】

Blogpcballover
図1.ワンセグチューナードングル用クリスタルコンバーター基板

前回の記事もどうぞ!

というわけで、少し前に安価なワンセグ用USBドングルとフリーソフトSDR#でAMラジオを受信する実験を紹介しましたが、その後回路を改良し、定数を見直した結果、かなり感度アップして放送局によっては実用レベルとなったので、基板を起こしました(図1)。

実験室は東京都中野区の鉄筋マンションの3階で、室内に7mほどのビニル線アンテナを張って実験していますが、各局の受信状況は次のとおりです。

NHK1(594kHz)

NHK2(693kHz)

AFN(810kHz)

TBS(954kHz)

文化(1134kHz)

NHK1、2はまあまあ聞き取れるレベル、AFNとTBSは十分実用レベル、文化放送はかろうじて何かが聞こえるレベル、ニッポン放送はほとんど聞こえない、という状況です。

SDR#での各局のスペクトルは次のとおり。

20251126_crycon_sdr_all_freq
図2.受信スペクトル


このように、受信強度は前回に比べるとかなり改善しました。

今回製作した基板の回路図を図3に示します。

Blog_sch_20251128143301

図3.今回製作した基板回路図(きれいな図面を見たい方は記事末尾のマニュアルをDLしてください。)


回路左側のJ3(アンテナ入力)にアンテナ線を接続し、回路右側のJ4出力から、ワンセグチューナーのUSBドングル(DS-DT308SV
)のアンテナ入力に接続しています。

アンテナ入力(J3)から入力したRFを信号を、NJU77701(34MHz CMOSオペアンプ)で増幅し、トロイダルトランスを使ったDBMに入力します。局部発振器は100MHzとし、電源はパソコンのUSBポートから供給しています。

前回の記事で紹介した受信音声では、ブーンという100Hzのノイズが聞こえたため、その後追求したところ、パソコンのACアダプタからかなり強力な100Hzのリップルが出ていて、USBアイソレータを使ったり、基板の電源をバッテリーに換えたり、アンテナと基板をPCから離すなどの対策をしても解決しませんでしたが、ACアダプタを交換したらウソのようにノイズが消えました。ACアダプタのケミコンがへたっていたか、それともそのACアダプタの仕様なのか……AMはかなりノイズの影響を受けやすいのですが、今回はACアダプタの交換によってパソコンのUSBからの電源供給でもほぼ問題のないレベルにできました。使用するPCやACアダプタ、その他の状況によってはノイズ対策が必要になる可能性があります。

今回は局部発振器を100MHzとしました。そうすると理想的にはたとえば810kHzのAFNは100.810.000Hzになりますが、100MHzの発振器に誤差があり、実際の100MHz発振器の周波数は100.001940MHzでした(図4)。

   Xtaloscfreq
図4.100MHzの局部発振器の周波数は100.001940MHz


そのため、810kHzのAFNの受信周波数は100.811940となってしまい、見づらいので、SDR#の周波数シフト機能を使って表示周波数をシフトします(図5)。


  F_shift_marking
図5.周波数をシフトすることで、AFNの周波数表示を810kHzに調整する


左下の枠で囲った部分がshift設定で、さきほど局部発振器の周波数が100.001940MHzだったので、shift値に-100.001940を設定して、shiftにチェックを入れると、AFNがぴったり810kHzに表示されます(^-^)

今回は周波数の変換がわかりやすいように局部発振器の周波数を100MHzにしましたが、この機能を使えば、局発にどのような周波数を使っても気にする必要はなくなります。

今回の基板では、追加実験のために、局部発振器を7050サイズの表面実装発振器のほかに14P DIPサイズの長方形型発振器、同じく8P DIPサイズの正方形型発振器、それに74HCU04(DIP)とHC-49パッケージの水晶発振子を使ったオシレータなどに変更できるように実装パターンを用意しています。
また、RFプリアンプについても追加実験ができるよう、SOT-23-3、SOT-89-3、SOT-343-4、SOT-363-6の各実装パターンと、2.54ピッチユニバーサルスペースを設けています。
電源はUSB-CのVBUS(+5V)となっていますが、2.5ピッチ2ピンコネクタからの電源入力(3.3~5V)も可能です。


民法AM放送はあと3年ほどでほとんど廃止になってしまいますが、この機会にSDR#でAMラジオ受信に挑戦してみるのもおもしろいと思います。


今回製作した基板を次のとおり頒布します。
今回は生基板の他に、
チップ部品実装済みで、リード部品とトロイダルコア2個、コイル用0.2Φホルマル線、ドングル接続用MCXコネクタ付き同軸ケーブルをセットした、すぐに実験・体験ができるキットをご用意しました(^-^)

マニュアルは以下リンクからダウンロードしてください。
MF_Conv_Manual.pdf


① 生基板のみ 1枚 1000円(税・送料込み)
 
② チップ部品実装済み基板 & 部品セット 1セット 3500円(税・送料込み)
チップ部品実装済み基板+リード部品、トロイダルコア、0.2Φホルマル線、MCXコネクタ付き同軸ケーブルセット
※アンテナ線とワンセグチューナードングル、電源用USB-Cケーブルはご用意ください。

ご希望の方は表題に「AMコンバーター基板頒布」、
本文にご希望のセット番号、お名前、送付先郵便番号、ご住所、電話番号をお書きのうえ、

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

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


| | | コメント (0)

2025年11月 6日 (木)

インダクタの不思議

Nvna
写真1.高周波測定に革命を起こしたnanoVNA
2020年頃にアリエクで12000円ほどで購入。


前回、安価なワンセグチューナ用USBドングルを使用するSDRでAM放送を受信することを目的に、アップコンバータを付加する記事を書いたが、使用するDBM(ダブルバランスドミキサ)のコイルをまじめに設計して測定しておこうと思い、nanoVNAを使って作業していたら、ちょっと不思議な感じがする事象に出会ったので備忘録として書いておこうと思う。
高周波の世界の住人なら常識かもしれないが、オーディオ帯域に生息する私としては少々不思議な感じがしたのだ。

DBMに使用するトロイダルコアトランスの、コアや巻き数を変えて何パターンかを作って、それが狙い通りのインダクタンスになっているかどうか確認作業をしていた。その作業中、ふと、

「バイファイラ巻きにした2巻線の両端をそれぞれ接続して並列接続にしたもののインダクタンスはどうなるんだろう?」

つまり、断面積が2倍の導線を同回数巻いたのと同一(インダクタンスは等しい)なのか、それとも個別のインダクタを並列に接続したの(インダクタンスは1/2)と同等だと考えるのか。
コアが共通で、コイルを通過する磁束は共通しているので、前者になりそうな気がするのだが、どうも確信が持てないので、nanoVNAで実測してみることにした。

測定対象は、以前アリエクで購入した外径8x内径4xt3の特性不明なフェライトトロイダルコアに、Φ0.2mmホルマル線を、①2巻線分離で5T(5回巻き)、②2巻線バイファイラで5T、③比較用として単線で5Tの3種類のトロイダルコイルを用意し(写真2)、①、②の2巻線のものについては、2巻線をそれぞれ単体で測定(他方はオープン)、および2巻線を並列接続して測定、の組み合わせで、周波数を1MHz、100MHzの2とおりで評価した。
測定結果を表1、表2に示す。

Inductors
写真2.測定対象のトロイダルコイル
左からバイファイラ5T、分離巻き5T、単線巻き5T


表1.1MHzでの測定結果
L1mhz

表2.100MHzでの測定結果
L100mhz


まず、表1の1MHzでの測定結果は、予想通りいずれの巻き方においてもインダクタンスは同等の結果となった。つまりバイファイラでも分割巻きでも、同じコア上に同回数巻いたコイルの並列接続は、単線の同回数巻きのコイルと同等ということだ。

次に同じ測定を100MHzで行った結果を表2に示す。
この結果がとても興味深い。バイファイラ巻きの場合は、それぞれの単線で測定しても並列接続にして測定してもほぼ同じ結果となり、これは単線巻きのみのものともほぼ等しくなった。
ところが、同じコア上に分離して巻いた場合は結果が異なっている(表中赤文字)。
分離巻きの各単線のインダクタンスは、バイファイラ巻きの場合のおよそ1.7倍、そしてこれらを並列接続するとインダクタンスは半減している。

バイファイラ巻きと分離巻きでもっとも違うところは、2巻線の線間容量だろう。1MHzという低い周波数では線間容量は無視できたが、100MHzでは顕在化したということか。
また、分離巻きで並列接続時に、個別のインダクタンスのおよそ半分になっているのは、2巻線間の結合係数の低下が原因だろうか。周波数が上がって、結合係数が低下するということは、周波数の上昇に伴い透磁率μが低下しているからとも考えられる。
そうすると、今回使用したコアは、100MHzではかなり性能が低下している可能性がある。ちなみに、今回使用したトロイダルコアでは、インダクティブからキャパシティブに転じる周波数は約350MHzだったので、100MHzではまだ余裕があるように思う。

そういうわけで、数MHzから上の帯域を扱う場合はオーディオ領域の感覚ではなく、厳密に物理的に考える必要がある、ということがわかった。

ところで、今回測定に使用したnanoVNAは、高橋知宏氏が2016年頃に個人的に開発したものが世界に広まって進化したものだそうだ。これまでVNA(ベクター・ネットワークアナライザ)は企業の高周波開発部隊にしかないような、大変高価(数百万円~数千万円)な計測器で、個人で所有するようなことはまず考えられなかったし、企業であっても高周波を専門に扱う部門でなければ縁がなった。つまり高周波は計測の敷居が高いので、小規模の開発グループや個人では、なかなか定量化して事象を考察したりすることが難しく、どうしても出たとこ勝負や勘や経験に頼る傾向が強かったように思う。ところがnanoVNAが世に出たおかげで、高周波の測定、解析の敷居が大幅に下がり、理詰めで検討することが容易になったことは非常にありがたいことで、これはここ10年で起こった大革命だといっても過言ではないと思う。髙橋知宏さん、ありがとうございます。


| | | コメント (0)

2025年10月 1日 (水)

SDRドングルでAM受信

Overview_20250930153901
写真1.ブレッドボードに組んだアップコンバータとドングルSDR


ワンセグチューナのUSBドングルを使って、パソコンを広帯域受信機(SDR)として使用する方法はよく知られていて、おおよそ30MHz~1.6GHzの範囲をオールモードでカバーすることができる。

構成としては写真2に示すようなAmazonでも売っているUSBのワンセグチューナーと、フリーのラジオ受信用ソフトSDR#、それにデバドラの置き換えユーティリティZadigを使って簡単に導入することができる(たとえばこのサイトで説明されている)。


Dsdt308sv
写真2.Amazonで1200円ほどの安価なSDRドングル  DS-DT308SV

ドングルに付属のロッドアンテナだけでは少々受信感度が低いので、感度よく受信するには大きめのアンテナをつなぐ必要がある。FM放送を受信する程度であれば、ロッドアンテナに1~2mほどのビニル線をつなぐだけでもわりと受信できる。

ところで、ちょっと残念なのはこのドングルは受信周波数の下限が24MHz程度なので、それ以下のAM放送や短波帯は受信できない。そこでよく紹介されているのは、ドングルを改造してトランスを介してQ信号をダイレクトに入力して、SDR#の受信設定をDirect Samplingにする方法と、もうひとつはアップコンバータを使用してターゲット周波数を高い周波数に変換して受信する方法だ。

今回は、後者のアップコンバートによる方法で、極力入手性のよい部品(っていうか部品箱に入ってた部品)でAMラジオの受信を試してみた。この方法ではドングルを改造しなくて済むので、工作難易度は低い。
アップコンバートは、任意の周波数を足して、ターゲットの周波数を高い周波数に変換する方法で、たとえば954kHz(TBS放送)に100MHzの発振周波数を足して100.954MHzとして受信する。
アップコンバータを構成する主な要素は、加算周波数の信号を生成する発振器と、加算周波数信号を足し込むDBM(ダブルバランスドミキサー)で、発振器はESP32からarduinoでSi5351(PLLオシレータ)を使用して100MHzを生成し、DBMは秋月で150円で入手できるNJM2594と、手持ちのフェライトコアとショットキーバリアダイオードを使って手作りしたものの2通りを試してみた。

100MHzを生成する部分はESP32+Si5351を使用したが、これは単に100MHzのオシレータを使ってもよい。
Si5351のモジュールは秋月でもAmazonでもaliでも売っているので、容易に入手可能で、サンプルプログラムも豊富にある。
今回は、ESP32をArduinoで使用し、こちらサンプルプログラムを使って100MHzを生成した。この中で、次のようにclk0を100MHzに設定した。

si5351.set_freq(10000000000ULL, SI5351_CLK0);

DBMにNJM2594を使用した回路は図1の通り。

Njm2594sch
図1.DBMにNJM2594を使用した回路


電源は、PCにUSB接続されたESP32のブレークアウトボードから5Vと3.3Vを供給している。
アンテナからの入力信号は、広帯域オペアンプNJU77701Fで高周波増幅してからDBMに入力している。
Si5351のみ電源が3.3V、NJM2594およびNJU77701の電源は5Vなので注意してほしい。
USBドングルチューナーのロッドアンテナはmcxコネクタになっているので、ここに回路の出力(J1)を接続する。
アンテナには、室内で2mほどのビニル線を接続した。

SDR#で受信している様子を図2に示す。

20250930_2594tbs_l
図2.DBMにNJM2594を使用したコンバータでの受信

放送内容が聴き取れたのは954kHzのTBSラジオのみだったが、いちおう目的は達成された。
実際にやってみると、Si5351による100MHzの発振周波数が実際には100.020MHzになっているため、TBSラジオの受信周波数は100.974MHzとなっている。録音は次の通り。

20250929TBS_NJM2594

ほかの局については、AFNはなにか放送されていることはわかるが、内容はまったく聴き取れない程度、NHK1,NHK2は僅かにSDR#のスペクトル表示がされているように見えるものの、音としてはまったく聞こえなかった。

次に、DBMにNJM2594のかわりに、トロイダルトランス2個とショットキーダイオードを使ったものを試してみた。回路を図3に示す。

Trans_dbmsch_20250930164701
図3.トロイダルトランスとショットキーダイオードのDBMを使用した回路

この回路はNJM2594の部分をトランスとダイオードを使ったDBMに置き換えている。
トロイダルコアは以前秋月で購入したTR-10-5-5ED使用したが、現在は販売終了となっているため、代替品はFT-37-43がよいと思われるが、入手困難な場合は、秋月で入手できるFT-50-43またはFT-50-61などでも使用可能と思われる。
今回はついでにAliで入手した正体不明の8x4xt3のトロイダルコアも試してみた。
ダイオードは部品箱に入っていたND412Gというショットキーを使用したが、これも秋月で入手可能な高周波用の1SS106などが代替可能だと思われる。
100MHz入力側のトランスT1、Mix出力側のトランスT2は、線を3本束ねて巻くトリファイラ巻きとして、回路図のように結線する。
巻線にはΦ0.2のホルマル線を使用し、巻き数は次の通り。


表1.トランスT1、T2の巻き数(トリファイラ巻き)
Trans_data_20250930164701

Aliの正体不明のトロイダルコアはμが低いかもしれないので、巻き数を若干増やし巻いた。根拠はまったくない……
トロイダルトランスを使用したDBMを写真3,写真4に示す。
また、コア単体の写真を写真5に示す。大きい方がTR-10-5-5ED。


Tr10trans
写真3.トロイダルコアTR-10-5-5EDを使用したDBM


Ali_trans_20250930164701
写真4.Aliで購入した正体不明のトロイダルコアを使用したDBM


Cores_20250930164701
写真5.トロイダルコア 大きい方がTR-10-5-5ED


それではまずはTR-10-5-5EDを使用したDBMによる受信の様子を図4に示す。

20250930_sdr2l
図4.TR-10-5-5EDを使用したDBMによる受信

NJM2594に比べて、受信感度がかなり上がっている。ノイズフロアも上がっているが、信号レベルがかなり上がっているため、聞こえる局が増えた。実際に聞いた感じでは、TBS(954kHz)ははっきり聞き取れるレベル、AFN(810kHz)も音楽や言葉が聞き取れる(英語は聞き取れない)。NHK第2(693kHz)は、何か受信できているのはわかるが聞き取れない。NHK第1(594kHz)、文化(1134kHz)、ニッポン(1242kHz)は画面上スペクトルが出ているが、聞こえなかった。
TBSの録音は次の通り。

20250930TBS_Troidal_DBM


次に、Aliで購入した正体不明のトロイダルコアを使用したもの。図5に受信の様子を示す。


20250930_sdr_ali2l
図5.Aliで購入したトロイダルコアを使用したDBMによる受信

これはTR-10-5-5EDとほぼ同等か、若干高感度という意外な結果となった(@_@)
TBSの録音はつぎのとおり。

20250930TBS_Troidal_Ali_DBM

以上の通り、TBSラジオは受信レベルが高く、完全に聞き取れる受信状態となった。ただ、ブーンというノイズが大きく、これはESP32に接続しているPCのUSB電源か、ESP32モジュールが由来の可能性が高い。電源に電池などを使い、発振器も単体のものを使用すれば改善する可能性がある。
アンテナは室内のビニル線2mほどという条件で、この程度の受信ができたので、満足な結果だったと思う。


今回の検証では上記のほかに、バーアンテナとバリコンによる同調回路、およびLCによるLPFも検討したが、いずれも感度が低下してしまい、期待した効果が得られなかった。
ほとんど秋月で入手可能な部品で構成できたので、中波受信に挑戦してみたいという方におすすめします。AM放送はあと3年ほどでなくなってしまうので、記念に実験してみてはいかがでしょうか?



| | | コメント (0)

2025年9月 3日 (水)

WIFI温湿度気圧計の廉価センサ基板対応

密かに人気がある、2022年に発表したESP32-SOLO-1とBME280を使ったWIFI温度湿度気圧計について、BME280が高騰してしまったので、
基板改造とファーム変更により廉価なBMP280+AHT20センサ基板に対応する記事を追記しました。次の製作記事をご覧ください。

温湿度気圧計製作記事


| | | コメント (0)

2025年7月24日 (木)

カオスふたたび

Chaos
図1.夏によく合う涼しげなカオス


カオス現象について取り上げたのは2022年の記事で、あれからもう3年経ってしまった。
事の発端は、当時タモリ倶楽部で取り上げられた早稲田大学の「役に立たない機械コンテスト」に出品された、二重振り子を応用したメトロノームで、リズムがしっちゃかめっちゃかで実に役に立たなそうだったが、二重振り子はカオス現象を紹介するためによく使われる。

2022年当時、私はこのカオス現象を電子回路で再現させて、カオスの音を聴いてみたいと思ってあれこれ実験した。2つの発振回路が、相互に周波数を変更するような作用を行うように構成すれば再現できるのではないか……?そう思い何通りか実験してみたがどうにもういまく行かなかった。たいていは発振状態が安定してしまい、カオスと呼べる状態にはならなかったのだった。
そこでネットで、電子回路でカオス現象を再現する方法がないか調べてみたところ、chua回路なるものを発見した。これは1983年にchuaさんという技術者によって発明された回路だそうだ。さっそくLTSPICEでシミュレーションし、実際に回路も組み立てて検証したところ、カオス波形が得られた。カオス波形は、X信号とY信号のリサージュ波形として得られるものだった。

このカオス波形の音を聴いてみたいと思ったが、当時はXYのリサージュをうまいこと音声信号に変換する方法を思いつかず、苦肉の策でX+Y信号、X-Y信号の2種類を生成して聴いてみたが、ホワイトノイズのようにしかならず、結果として面白みに欠けるものだった。リサージュということなら位相差を演算すればいいのではないか?というところまでは考えたのだが、結局そこまではやらなかった。これらはすべて2022年の記事に記している。

ところで先日、トランジスタ技術の最新号を読んでいたら、アナログ乗算器を使った位相差演算回路の製作記事が載っていた。これを読んでいて、カオス信号の音声化がうまくいっていなかったことを思い出した。この位相差演算回路を使えば、カオス信号をもう少しそれらしく音声信号化できるのではないか……?
しかし記事ではアナログ乗算器というICを使っていて、経験のない分野なのでたとえばこれがLTSPICEでシミュレーションできるのか?など、わからない点も多く、またしても棚上げにしそうになったが、よく考えてみれば回路で実現するよりも、すべてプログラムでやってみた方が早く、しかもいろんな検証ができるのではないかと思い、pythonを使って検証してみることにした。

まずはpythonでchua回路のシミュレーションを考える。chua回路は次の微分方程式で与えられる。

Chua_function
Chua_constants_20250725070901

ただし、α、βは回路部品(抵抗、コンデンサ、インダクタ)に依存する定数、m0,m1は非線形素子の特性を決める定数。

pythonを使って、この微分方程式を数値的に解いてプロットしたグラフが、冒頭図1のカオスのグラフだ。実際にpythonで、この微分方程式を定義して、それを解く部分は次のとおり。(プログラムの全体は記事の下の方でリンクします。)


###Pythonコード抜粋

# Chua回路の微分方程式
def chua_circuit(t, state, alpha, beta, m0, m1):
x, y, z = state
# 非線形関数 h(x)
h = m1 * x + 0.5 * (m0 - m1) * (abs(x + 1) - abs(x - 1))
dxdt = alpha * (y - x - h)
dydt = x - y + z
dzdt = -beta * y
return [dxdt, dydt, dzdt]

# パラメータ設定
alpha = 15.6
beta = 28.0
m0 = -1.143
m1 = -0.714

# 初期条件と時間範囲
initial_state = [0.1, 0.0, 0.0]
t_span = (0, 100)
t_eval = np.linspace(t_span[0], t_span[1], 10000)

# 微分方程式を数値的に解く
solution = solve_ivp(chua_circuit, t_span, initial_state, t_eval=t_eval, args=(alpha, beta, m0, m1))

###ここまで

このコードでは、x,y,z空間上で、10000ポイント分の数値演算ができ、その3変数のうちのxとzをプロットしたものが図1だ。これは典型的なカオスのグラフとなっている。
実際のコードは次のとおり。

ダウンロード - 20250721chua_000.py

ダウンロード - variable_sine_tone_builder_wav.py

上の20250721chua_000.pyがchua回路のシミュレーションプログラム本体で、下の
variable_sine_tone_builder_wav.pyは、任意の正弦波を発生させてwavファイルに記録する関数を含むファイルだ。

使い方は、上の2つのファイルを同じホルダに配置し、20250721chua_000.pyを実行する。
すると、図1に示すカオスのグラフが表示され、同ホルダ内にカオスのグラフを音声化したものが生成される。
まずは理屈よりも先に、生成されたカオスの音を聴いていただこう(音量注意)。
20250805追記
91行目を次のように変更して、再生速度を2倍にしたパターンも録音してみた。こちらの方がスピーディでいいかもしれない。
ab.add_tone(freq=vFreq,level_db=-6,pan=vPan,dur_s=0.01,fade_ms=5)

chuaWav000.wav

20250805chuaWav2x.wav  (2倍速Ver.)

なんとなくそれらしいサウンドになったように思うが、どうだろうか?ヨガのBGM用に売れるかもしれない。
これは、図1のカオスグラフのxの変域に対して、約65Hz~3kHzの範囲の正弦波を割り付けている。
x<0の領域では、440/3|x|、x>=0の領域では440*3xとしている(20250721chua_000.pyの85、87行目)。
これは単にxの変域に周波数を割り付けているだけで、当初想定した位相差演算などはしていない。

それでは位相差を演算してそれを音に変換するとどうだろうか。

chuaWavHilbert000.wav

20250805chuaWav_hilbert2x.wav  (2倍速Ver.)


思ったほどおもしろい効果は得られず、個人的には上の単純割り付けの結果の方が良いように思う。
これはカオスの演算結果x,yに対してそれぞれをヒルベルト変換し、ポイント毎の瞬時位相を求めてその差をとることで、位相差を演算して、その結果を約70Hz~2.7kHzに割り付けている(20250721chua_000.pyの80,82行目)。

また上記のいずれに対しても、共通して、演算結果zの値に応じて、-1(左)~1(右)のパンポットを割り当てている。

以下、コードの簡単な説明。

まずはコード本体の20250721chua_000.pyにおいて、45行目で微分方程式を数値的に解いて、47行目で演算結果x,y,zを各10000個のリストデータとして得ている。61行目以降で、これらのデータのうちx,zをプロットして、図1のグラフを得ている。

次にデータの音声化は、ヒルベルト変換で位相差を使うか、単に変域のデータを使うかを72行目のhilbertフラグで設定する。hilbert=1ならヒルベルト変換による位相差、hilbert=0なら変域データ。

任意の正弦波を発生する関数はvariable_sine_tone_builder_wav.pyに含まれているので、20250721chua_000.pyの13行目以降でAudioBuiderライブラリをインポートしている。
使い方は、
ab = AudioBuilder(sample_rate=48000)
(74行目)として、AudioBuilderオブジェクトをabとして、48kHzサンプリングのインスタンス化をして、ab.add_tone(freq=vFreq,level_db=-6,pan=vPan,dur_s=0.02,fade_ms=10)
(91行目)で各ポイントデータに対してfreq(周波数)、level_db(信号レベル)、pan(パンポット-1~1)、s(信号長さ(s))、フェードイン/アウト時間(ms)をそれぞれ設定して、ポイントデータ毎の正弦波を追加していく。
すべてのデータ(10000個)に対して信号の割り付けができたら、
ab.write_wav("chuaWav000.wav", normalize="store_true", peak=0.99)
(95行目)で、信号ピークを0.99に正規化したオーディオ信号を"chuaWav000.wav"として書き出す。

以上の処理で、グラフと音声信号を生成している。


2022年の記事と比べると、格段にカオスっぽいサウンドが得られたと自負しているが、いかがでしょうか?

 

| | | コメント (0)

2025年7月16日 (水)

アースノーマットタイマーの製作(20250731追記あり)

Earthtimer


【20250731追記】
この元記事では、トランスレスでマイコンの電源を確保することをあきらめたが、あとになってうまく実現しているサイトを見つけた。
電子マスカットというサイトのこの記事だ。思いつきでいきなり作ってあきらめるより先に、ネットをよく調べるべきであった。少しのことにも先達はあらまほしきこと也(^-^;
この記事ではトランスレスで5V20mA程度確保できるということなので、フォトトライアックの駆動も十分できる。次回はこのやり方を試してみたい。

ところで、元記事では、規定時間(10時間)経つと自動的にオフし、Deep sleepに入って、翌日の同じ時間にsleepタイマーによって自動的にオンする、というプログラムにしていたが、Deep sleep時のクロックは内部のRCクロックであるため誤差が大きく、実際に使ってみると一日で数分の狂いが生じる。
シングルコアのESP32を、WIFIを使わずにwhileループで止めていても消費電流は微々たるものなので、sleepには入れずに、時間が満ちるまでmillis()で数えながらwhileで回して待って、前回のオンから24時間後にリセットしてまたオンするというプログラムに変更した。millis()はメインクロックを基準としているため高精度で、10日間連続稼働で5秒以内の誤差だった。なので、夏のあいだは完全に手放しにできるが、リキッド切れにはくれぐれも注意したい(^-^;

【変更後のプログラム】

/*
 *         Earthmat Timer Ver 0.01
 *         Copyright 2025 Nobutsugu Higo
 *         2025/07/17
 *
 * 20250717 スリープは時間が不正確なので、スリープしないでmillis()で時間待ちに変更
*/

uint32_t duration_ms;

void setup() {
  Serial.begin(115200);
  pinMode(33,OUTPUT);//HでAC100V オン
  pinMode(19,OUTPUT);//Test LED
  delay(100);

  Serial.println("Hello (^-^)/");

  uint16_t on_duration_minutes=600;//アースノーマット稼働時間設定 10時間=600分
  //uint16_t on_duration_minutes=1;//テスト用 1分
  duration_ms=on_duration_minutes*60*1000;//稼働時間をmsで計算
  //esp_sleep_enable_timer_wakeup((1440-on_duration_minutes) * 60 * 1000000LL);//24時間-稼働時間(uS)

  digitalWrite(33,1);//アースノーマット(AC100V出力)をオン

}

void loop() {
 
  while(duration_ms > millis()){//目標時間が経過するまでループ
    delay(500);
    Serial.print("duration=");
    Serial.println(duration_ms);
    Serial.print("millis()=");
    Serial.println(millis());
    digitalWrite(19,!digitalRead(19));//動作中はLED点滅    
  }
 
  digitalWrite(33,0);//目標時間が経過したのでAC100V オフ
  digitalWrite(19,0);//LED OFF

  while(86400000 > millis()){//24h=86400000ms
  //while(120000 > millis()){//test 2min=2000ms
    delay(1000);
    Serial.print("CountDown");
    Serial.println(86400000-millis());
    //Serial.println(120000-millis());
    digitalWrite(19,!digitalRead(19));
  }
  ESP.restart();
}

*******************ここまで


【20250716元記事】

去年まで煙の出る渦巻きタイプの蚊取り線香を使っていたが、いろいろと面倒なので、とうとうアースノーマットを導入した。
5月のGWあたりからぼちぼち蚊が出始めたので、60日ボトルと本体のセットをアマゾンで970円で購入して使っていた。

この2ヶ月ほど使ってみて、ときどき朝に切り忘れて一日中焚きっぱなしということがあって、リキッドが1日分無駄になったと思うとちょっとくやしい、ということが何度かあった。家の中に出るイエカは通常夜間のみに出る。いっぽうヤブにいるヤブ蚊は日中も出るが、部屋の中に入ることは、都会ではほとんどない。よって、通常は部屋で蚊の対策をするのは夜間だけで十分なのだ。

なので、ちゃちゃっとマイコンを使ってアースノーマット専用のタイマーが作れないか検討した。マイコンでタイマーを組んで、ACをON/OFFするトライアックを積んでやればよい。

問題となるのはマイコンの電源で、まじめにやろうとするとトランスかスイッチング電源か、あるいはACアダプタを使って供給することになる。
ACアダプタを使うのが簡単だが、ACアダプタとアースノーマット用にコンセントを2口使うのは、どうにもスマートではない。
電池駆動もなくはないが、電池切れのことを考えると、どうも気乗りがしない。

そこで、図1のような超手抜き回路でマイコン用の電源を確保できないか検討した。クラスの学級委員の女子が見たら激怒しそうな不真面目な回路だ(^-^;

Tenuki
図1.超手抜き電源回路
LEDの順方向電圧2つ分でスーパーキャパシタに充電して使う。


これならAC100Vを引き込んでいるので、アースノーマット用の電源もここから引けて、コンセントは1口で済む。
出力電圧は3.6~4V程度で、スーパーキャパシタに貯めておけば、低消費なマイコンなら十分動かせるだろう。

さっそく製作にとりかかったが、いやまてよ、マイコンからトライアックを駆動するためのフォトトライアックの一次側の電流は、たしか10mAくらい必要じゃなかったっけ!?
ここであえなく、超手抜き電源方式は頓挫してしまった……やっぱりまじめに生きないとダメだ……(-_-)

数日間放ったらかしになっていたが、タブレットを眺めながらごろごろしていたら、とてもよさそうな小型電源基板を見つけた。AC100入力で5V700mAが出せて、大きさは切手ほど。これこれ、こういうのでいいんだよ!写真1。

Wxdc12003
写真1.超小型スイッチング電源 WX-DC12003
アマゾンで5個999円だった。アリエクだと送料を入れても1個130円くらいで買える。


これでいちばんの懸案であったマイコン電源確保の問題が片付いたので、仕切り直して製作に入った。
使う部品は、マイコンにはこのあいだ秋月で10個1000円で投げ売りしていたので20個買ってきたESP32-SOLO-1、フォトトライアックは以前に秋月の福袋に大量に入っていたMOC3021、トライアックは以前中華温調はんだごてに使われていておもしろそうだったのでアリエクで10個106円で買っておいたBT136-600E。
もうほとんど冷蔵庫にあるあり合わせ材料で適当に何か作るというノリだ。

回路は図2のとおり。

Earthtimer_sch_20250715121901

図2.アースノーマットタイマー回路図    この回路のAC Outletにアースノーマット本体を接続する。
※1 ESP32のTx、RxにUSB-シリアルを接続してPCと通信してプログラムしますが、この回路では省略しています。
※2 プログラム書き込み時はIO0をLにしてリセットしますが、この回路では省略しています。

実際に作ってみると、スイッチング電源のGNDが高域で安定せず、マイコンが誤動作してまともに動かないので、ノイズとGNDの安定のための対策としてC4(Yコンデンサ)を入れた。今回は部品箱に入っていた0.01uF/3kVの高耐圧セラミックコンデンサを使用したが、通常はもう少し低い容量のもの(1000pF~4700pF)がいいと思う。
※Yコンデンサとは、GNDの高周波基準の安定化やノイズ対策としてACラインと2次のGNDの間に入れるコンデンサのことで、IEC規格でclass Yとして分類されているものです。

あとはプログラムをどうするか、ということになるが、ESP32-SOLO-1はいわずと知れたWIFIマイコンで、WIFIのみならずBluetoothも使える。そうするとたとえば、WIFIに接続しておいてネットワーク経由でNTPを使って正確な時間管理ができたり、WIFI経由でパソコンやタブレットからアースノーマットを制御したり、あるいはオン時間、オフ時間の設定をパソコンやタブレットから行ったり、果てはアレクサに声でON/OFFをお願いするとか、ありとあらゆることができる。

今回のきっかけは、そもそもアースノーマットを切り忘れて、リキッドが無駄になるのが惜しい!ということだったので、ON/OFFの制御だけ夏のあいだ確実にやってもらえればそれでいい。

それなら毎日夜7時に自動的に電源オンして、よくあさ5時に自動的にオフしてくれればいいか?
こうなると、ほとんど手放しになるので、すぐにアースノーマットの存在を忘れそうだ。そうすると2ヶ月後にリキッドが切れているのにも気付かず、ある日の夜中に蚊の猛攻で起こされることになる……(^-^;

そういうわけで、なにもかも自動化するというのも考えものだ。
結局、毎晩自分でボタンを押してオンすると、10時間後に自動的に電源をオフする、という最小限の機能とすることにした。
それならばESP32-SOLO-1である必要はなく、もっと安いCH32V003あたりでもいいかもしれない。なにしろポートをひとつ(LEDも含めると2つ)オン・オフするだけなのだから。

arduinoで書いたコードは次のとおり。
リセットボタンを押すと冒頭からプログラムを開始しアースノーマットをオンして、10時間経過するとアースノーマットをOFFしてスリープに入る。次にまたアースノーマットを動かしたいときはリセットボタンを押す。

/*
 *         EarthNomat Timer Ver 0.00
 *         Copyright 2025 Nobutsugu Higo
 *         2025/07/15
*/

uint32_t duration_ms;

void setup() {
  Serial.begin(115200);
  pinMode(33,OUTPUT);//HでAC100V オン
  pinMode(19,OUTPUT);//Test LED
  delay(100);

  Serial.println("Hello (^-^)/");

  uint16_t on_duration_minutes=600;//アースノーマット稼働時間設定 10時間=600分
  duration_ms=on_duration_minutes*60*1000;//稼働時間をmsで計算
  esp_sleep_enable_timer_wakeup((1440-on_duration_minutes) * 60 * 1000000LL);//24時間-稼働時間(uS)

  digitalWrite(33,1);//アースノーマット(AC100V出力)をオン

}

void loop() {
 
  while(duration_ms > millis()){//目標時間が経過するまでループ
    delay(500);
    Serial.print("duration=");
    Serial.println(duration_ms);
    Serial.print("millis()=");
    Serial.println(millis());
    digitalWrite(19,!digitalRead(19));//動作中はLED点滅
   
  }
 
  digitalWrite(33,0);//目標時間が経過したのでAC100V オフ
  digitalWrite(19,0);//LED OFF

  delay(1);

  esp_deep_sleep_start();//Deep Sleepに入る
  Serial.println("zzz");// ここは実行されない
  delay(1000);// ここは実行されない
  ESP.restart();// ここは実行されない
}
///////////////////////////////////ここまで////////////////////////////////////////
 
 
このコードではアースノーマットの稼働時間を10時間(600分)として設定している。これは必要に応じて変更すればよい。
アースノーマット稼働中は、LEDを1秒ごとに点滅している。
稼働時間が経過したら、アースノーマット用の電源供給を停止して、スリープに入る。スリープ時間は(24時間ー稼働時間)としているので、
放っておいても、翌日の同じ時間にアースノーマットが稼働し始めるが、これはあくまでも保険的機能で、稼働開始時は毎日自分でボタンを押すことにしたい。
また、
esp_deep_sleep_start();
のあとにもコードがあり、最終行で
ESP.restart();
としているが、実際はesp_deep_sleep_start()よりあとのコードはすべて実行されないので意味はない。スリープから目覚めたあとはリセットと同じ扱いとなることがわかるように、あえて書いておいた。

なお、ESP32-SOLO-1はESP32のシングルコア版で、arduinoで使うにはコンパイラを変更する必要がある。
そのあたりは過去記事ESP32-SOLO-1を使うを参照してほしい。もちろん面倒のない普通のESP32も使えるし、ESP32に限らず、arduinoで使えるマイコンならほとんど使えると思う。arduinoマイコンでDeepsleepがない場合は、代わりにwhile(1)として無限ループで止めておいて、次回はリセットボタンを押して起動ということにするのが最も簡単に済むと思う。

実際の製作は、タッパウェアに適当に詰め込んで、ESP32の基板はビニル袋に入れて絶縁し、そのビニル袋が適度にクッションになって中身が動かないように工作した(写真2~5)。

20250712tupperware1
写真2.配線の様子


20250712tupperware2
写真3.基板をビニル袋でくるんで絶縁する


20250712tupperware3
写真4.ビニルがクッションになるようにして詰め込んでフタを閉める
フタには起動用のリセットスイッチ。


Earthtimer
写真5.アースノーマットと今回製作したタイマー


これで今年の夏は快適に過ごせそうだ(^-^)

 

| | | コメント (0)

より以前の記事一覧