ESP32 でバッテリー電圧 + 室内温度モニターを作る


バッテリー電圧モニター ダッシュボード(電圧 14.2V / 室温 27℃ の表示例)
ダッシュボードの表示例(電圧 14.2V / 室温 27.0℃)

ログハウスに置いてある鉛蓄電池の電圧と室内温度を、スマホやPCからいつでも見られるようにした記録です。
ESP32 WROVER + カメラモジュールで電圧 / 温度 / 動体検知をまとめて監視、温度に応じて換気扇を ON/OFF する SSR 制御も追加しました。

できること

  • バッテリー電圧監視: 0〜20V を分圧抵抗で読み取り、ブラウザにリアルタイム表示
  • 室内温度監視: NTC サーミスタ (AT-THMS / SEMITEC 103AT-11) で温度計測
  • 温度連動 SSR 制御: 設定温度を超えたら GPIO13 → SSR → 換気扇を ON(ヒステリシス制御)
  • カメラ映像 + 動体検知: VGA グレースケールでフレーム差分検知、検知時は ntfy.sh で通知
  • 電圧異常通知: 注意 / 警告レベルを超えると ntfy.sh にプッシュ通知
  • 1日1ファイルの CSV ログ: 10分間隔で SPIFFS に保存、31日で自動削除、Webからダウンロード
  • 固定IPでローカルWebサーバー + MyDNS.jp DDNS で外部からもアクセス可能
  • WiFiManager: 初回設定は AP モードのキャプティブポータルから

ハードウェア構成

マイコン
Freenove ESP32 WROVER (CAM-OV2640 内蔵)
電圧計測
GPIO33 ← 分圧抵抗 R1=12kΩ + R2=2.2kΩ
温度計測
GPIO32 ← 10kΩ + NTC サーミスタ (B=3435K, R₀=10kΩ@25℃)
SSR出力
GPIO13 (HIGH=+3.3V) → DC-DC SSR →DC-ACインバータ→ AC100V換気扇
電源
USB 5V
OS
Arduino IDE / ESP32 core 3.3.8

分圧回路(電圧計測)

バッテリー(+) ──[ R1 = 12kΩ ]──┬── GPIO33 (ADC)
                                  │
                                [ R2 = 2.2kΩ ]
                                  │
バッテリー(-) ───────────────────┴── GND

分圧比は R2 / (R1+R2) = 2.2 / 14.2 ≒ 0.155。ADC レンジ 3.3V いっぱいで約 21.3V まで計測可能。校正は実測値ベースの 10 点区分線形補間。

温度分圧回路

3.3V ──[ 10kΩ ]──┬── GPIO32 (ADC)
                  │
                [ NTC 10kΩ @25℃ ]
                  │
                 GND

B 定数法で抵抗値から温度に換算。T[K] = 1 / (1/T₀ + ln(R/R₀)/B)

状態判定しきい値

電圧 状態
12.0V 以上 正常
10.0V 〜 12.0V 未満 注意
10.0V 未満 警告

注意レベルに入ると ntfy.sh で「優先度:高」、警告レベルでは「優先度:緊急」の通知を送信。連続通知を防ぐため 60 秒のクールダウンを設けています。

Web ダッシュボード

ブラウザで https://www.shinjo.tokyo:8080/ を開くと:

  • バッテリー電圧の大きな数字 + 正常/注意/警告 のバッジ表示
  • 室内温度の大きな数字 + 制御ピン(GPIO13)の ON/OFF 状態
  • カメラのライブ画像(10秒間隔で更新)
  • 動体検知インジケータ(赤いドットが点滅)
  • SSR 制御の ON/OFF 温度をブラウザ上から個別設定 → SPIFFS に保存
  • 電圧ログ CSV ファイル一覧 + ダウンロード
  • WiFi 設定リセット(Basic 認証 + 確認ページの2段階)

1.SSR のヒステリシス制御

ON 温度と OFF 温度を独立して設定できる方式に変更。たとえば「30℃ 以上で ON、25℃ 以下で OFF」と設定すれば、両閾値の間(25〜30℃)では直前の状態を維持するので、温度が閾値付近を行ったり来たりしても無駄な ON/OFF が発生しません。

2. WiFiManager でハードコードから卒業

以前はソース内に SSID/パスワードを書いてビルドしていましたが、現バージョンは初回起動時に VoltageMonitor-Setup という AP が立ち上がるので、スマホから接続してキャプティブポータルで WiFi を設定する方式に。

3. /wifi-reset は Basic 認証 + 確認ページ

誤って WiFi 設定をリセットすると再設定が面倒なので、ダッシュボードの「WiFi 設定リセット」ボタンには 2 段階の防御をかけています:

  1. クリック → Basic 認証ダイアログ → ユーザー名 / パスワード入力
  2. 認証 OK → 「実行 / キャンセル」ボタンの確認ページ表示
  3. 「実行」を押した時のみ POST で実リセット実行

4. CSV ログは 1日1ファイル / 31日で自動削除

10分ごとに /voltage_YYYY-MM-DD.csv に追記。31日経過したファイルは自動削除されるので SPIFFS が溢れません。NTP 同期成功直後にも 1 回書き込みを行うので、起動から 10 分待たなくても最初のレコードが見えます。

使ったライブラリ・サービス

【WebLog for Android 公開のお知らせ】

【WebLog for Android 公開のお知らせ】

PC版 WebLog (https://github.com/kazushinjo/weblog) の Android タブレット版を
GitHub で公開しました。アマチュア無線の交信記録 (QSO ログ) を Android タブレットで
管理できるアプリです。Jetpack Compose で実装しています。

■ 公開URL(リポジトリ)
https://github.com/kazushinjo/WebLogAndroid

■ APKダウンロード(最新: v0.1.1-debug)
https://github.com/kazushinjo/WebLogAndroid/releases/tag/v0.1.1-debug

■ 動作環境
・Android 8.0 (API 26) 以上
・タブレットでは左右2画面レイアウト(入力フォーム / 交信一覧)
・動作確認端末: I11_Power (Android 13) で 7,500件超のログを動作確認済み

■ 主な機能
・QSO の記録・編集・削除
・コールサイン重複チェック、入力候補表示
・QTH 入力時の JCC サジェスト(1,768件収録、都道府県+市区町村名)
・バンド・モードによる絞り込み、テキスト検索
・ADIF / CSV / JSON エクスポート
・PC版 WebLog のバックアップ JSON および HAMLOG CSV のインポート対応
・タブレット向け左右2画面レイアウト

──────────────────────────
■ v0.1.0-debug(初版) → v0.1.1-debug(2026-05-13 改修版)の更新内容
──────────────────────────

【表示・UI 改善】
・ボタンの色のコントラストを改善(紫背景に黒文字で読めなかった問題を修正)
・交信一覧を表形式に変更(PC版と同じ15列構成)
日付 / 時刻 / コールサイン / バンド / 周波数 / モード / RST送 / RST受 /
名前 / QTH / JCC / QSL / 備考 / 編集 / 削除
・列固定・スティッキーヘッダ・横スクロール対応
・一覧の表示は最新300件に固定(古いデータは検索・フィルタで参照)
・一覧の行をタップすれば編集モードに入るように
・ステータス行に「総交信数 / JCC局数 / バンド別件数」を集約

【インポート互換性の向上】
・CSV インポートを自動判別化
– HAMLOG / Turbo HAMLOG / PC版 weblog 形式
(ヘッダ無し、列固定順、Shift-JIS 対応、日付 YY/MM/DD、時刻 HHMM[:]J)
– WebLog 日本語ヘッダ形式(UTF-8)
– 判別結果はインポート後にトーストで通知
・JSON インポートが PC版 WebLog のバックアップ形式に対応
({version, exported, qsos: […]} ラッパー、remarks ⇔ 備考 マッピング)
・ADIF / CSV / JSON すべてで Shift-JIS / UTF-8 自動判定
・インポート処理をバルク INSERT 化(7,000件超でも UI が固まらない)

【入力補助】
・JCC サジェスト・JCC コード入力時に、QTH へ「都道府県+市区町村名」を
自動入力するよう変更
例: コード「1021」→「北海道上磯郡上磯町」、「11001」→「東京都港区」

【ドキュメント・配布】
・操作説明書 (.docx) を最新仕様に合わせて更新
・README / NOTICE (免責事項) を追加
・リポジトリを Public 化

──────────────────────────
■ 注意事項
──────────────────────────
・配布中のAPKは debug ビルド(デバッグキー署名)です。動作確認・身内配布用に
ご利用ください。Google Play 配布には対応していません。
・本プログラムを使用したことにより発生したいかなる損害についても、開発者は
一切の責任を負いません。ご利用は自己責任でお願いします。
・既に v0.1.0-debug をインストール済みの方は、そのまま上書きインストール可能です
(データは保持されます)。
・他の署名でインストール済みの場合は、一度アンインストールしてからどうぞ。
・adb 経由でインストールする場合は -t フラグが必要です:
adb install -r -t WebLogAndroid-v0.1.1-debug.apk

ご感想・不具合報告など、GitHub Issues または Facebook DM へお寄せいただけると
助かります。

#アマチュア無線 #HamRadio #WebLog #Android #JetpackCompose

【WebLog for Android 公開のお知らせ】

【WebLog for Android 公開のお知らせ】
アマチュア無線の交信記録アプリ「WebLog」の Android 版ソースコードを GitHub
で公開しました。
WebLog for iPhone/iPad をベースに、Android 向けに Jetpack Compose + Room
で作り直したものです。

主な機能
-コールサイン・日付・時刻・周波数・モード・RST・名前・QTH・JCC・QSL・備考の入力
– 周波数からバンドを自動判定
– モードに応じた RST デフォルト値の自動設定(SSB→59 / CW→599)
– コールサインの重複チェック・入力履歴サジェスト
– JCC 市区町村データベース(1,768件)によるサジェス- ADIF 3.1 エクスポート/インポート(日時は JST⇔UTC 自動変換)
– CSV エクスポート/インポート(HAMLOG データ互換)
– JSON バックアップ/リストア

– データ数の上限はありません
– スマートフォン:タブ切り替えレイアウト

– タブレット・横向き:左右 2 ペインレイアウト(iPad 版と同様)

ご注意

作者自身はビルドしての動作確認は行なっていません。

動作不良に対しては一切責任を負いません。

改変は自由ですが著作権は留保します。

https://github.com/kazushinjo/WebLogAndroid

GitHub

https://github.com/kazushinjo/WebLogAndroid

Android Studio でプロジェクトを開くだけでビルドできます(ビルド手順書付き)。

WebLog v1.08 リリースのお知らせ

  📻 WebLog v1.08 リリースのお知らせ

  アマチュア無線の交信記録アプリ「WebLog」をv1.08にアップデートしました!
🔧 v1.08 の変更点
  入力欄以外をタップするとキーボードが自動的に閉じるようになりました。

  —                                                    

  📱 iPhone / iPad アプリ版(非公開)
  SwiftUI製のネイティブアプリです。
  – コールサイン重複チェック
  – JCC/JCG ヨミ検索
  – ADIF / HAMLOG CSV 対応
  – iCloud Drive バックアップ                            
  – データ数の上限はありません

  🌐 ブラウザ版(weblog.html)

  インストール不要!HTMLファイルをブラウザで開くだけで使えます。
– Chrome / Edge / Safari / Firefox 対応
  – データはローカル保存(IndexedDB)
  – HAMLOGデータ互換
  – データ数の上限はありません
  📂 ブラウザ版はGitHubで公開中:

https://github.com/kazushinjo/weblog

  73 de JA6FUF / JH1XHX 🎙️ 

Weblogをgithubで公開いたしました

Weblogをgithubで公開いたしました
これはHamLogの
置き換えを目指したものではありません。
マルチプラットフォームでの動作が可能です。
これで入力したデータをHamLogに取り込んで
HamLogの多彩な機能を使うことができます。
使用にあたってはgithubの中にある操作説明書で
ご確認ください
改変はご自由ですがご連絡を頂ければ幸いです
iPhoneとiPadのNativeアプリも作成しましたが
appストア登録には年間100ドルほどかかりますので
あきらめてます
webLogのコードからの変換はClaudeCodeを使えば
簡単ですので時間がある方はトライしてみてください
私は15分でNativeアプリができました

https://github.com/kazushinjo/weblog

SUZUKI SX800Rキャブレター調整

キャブレターを洗浄した後に調整してください

  • スロットルストップスクリュー(スロットルストップネジ): スロットルレバーが戻りすぎるのを止めているネジです。これを締めるとアイドリング回転数が上がり、緩めると下がります。
  • パイロットスクリュー(エアスクリュー): 燃料と空気の混合比を調整するネジです。通常は「全閉から1.5〜2回転戻し」が標準ですが、微調整に使用します

調整手順

  1. 回転数の固定: スロットルストップネジを回して、エンジンが安定して回り続けるポイントに合わせます。
  2. 混合比の最適化: パイロットスクリュー(エアスクリュー)をゆっくり左右に回し、最も回転数が高くなる(エンジンの音が力強くなる)位置を探します。
  3. 最終調整: 回転数が上がりすぎた場合は、スロットルストップネジを少しずつ緩め、標準的なアイドリング回転数(耳で聞いて「トコトコ」と安定して回る程度)に落とします。

自作の430MHz7エレスタックの再作成

5年ほど使っていた自宅の430の7エレスタックですがエレメント固定に
プラスチックの板の切り出し部品と100均の束線バンドを使っていましたが
経年変化で束線バンドが切れてエレメントが落下して使えなくなったので
3Dプリンターで部品を作成して再作成。
材料は以前ののもが殆ど使えるのでラジエータの作成とクランプの交換
位で済みそうです
3Dデータは後日、フォールデッドダイポールの取り付け部品と共に
無償公開予定

フォールデッドダイポール寸法
中心周波数を 433.0MHz とした設計値です。

項目 寸法 補足
全長 326 mm 外寸の最大幅です。
エレメント間隔   20 mm 芯芯の距離です。
直線部分の長さ   306 mm 両端の半円部分を除いた
         直線部分の長さです。
給電部の隙間    10 mm 下側エレメント中央のカット幅
曲げ半径      10 mm 芯芯20mmを作るための曲げ半径