遠隔地 12ch電流センサー製作と防犯カメラの一体運用に向けて

Raspberry Pi MCP3208 ADS1015 Anker Eufy SoloCam S340 N-01H   

2026/2/3

概略図

すでにMCP3208のADC(アナログ-デジタル コンバター)の8回路の電流測定回路構成は出来上がっています。過去の投稿内容はこちら

今回、ADCを追加していく訳ですが、私が取りました選択は
 ・ADS1015 I2C接続=4ch
 ・MCP3208 SPI接続=8ch(従来のADC構成)
の12CH(回路)の電流測定回路を製作し、ラズベリーパイにて動作管理していく計画です。


ADS1015の製作
 CTセンサーを活用した回路構成はMCP3208と同じです。回路概要は以下となります。4回路を1つの基盤に実装します。

手配線で製作しました。下の写真が製作したADS1015基盤になります。
写真は、上から下の流れで検出回路構成が構築されています。上から
 ・CTセンサー接続端子:極性なし
 ・整流回路(ブリッジダイオード)
 ・コンデンサと抵抗ソケット
 ・ADS1015基盤
と回路上の流れを構成しました。
抵抗は着脱可能とするため、ソケットに抵抗を装着する仕様にしています。




MCP3208の製作

 前回と同様の回路構成です。ADC1015同様、抵抗は着脱可能な仕様としました。こちらの製作記はこちらになります。

完成したのが以下の写真です。
ラズベリーパイ+ADS1015+MCP3208 
12回路の電流センサーのハードウェアです。



 いつもながら、ここまでは簡単に製作できまます。難しい回路構成ではないのが理由です。しかし問題はここからです。ADC(アナログ-デジタル コンバター)の動作はPython(パイソン)の専用プログラムが必要になります。目的どおりにプログラムが動いてくれるまで、カット&トライが続きます。難題対応していくなかで、解決策の有効打が分かってきました。
それはAIを活用することです。

Raspberry Pi Connect
 Pythonプログラムを構築し、動作させて動くかどうかの確認を行いますが、エラーを吐き出しても、理解が難しいです。そこでエラーの内容をそのままコピーしてGoogle先生にかけます。
もちろん「AIモード」です。有効な情報を導いてくれます。
この有効性に気づくまで時間がかかってしまいました。

なので、Pythonプログラム製作前にRaspberry Pi Connectの接続を成立させておくのです。すると、PCからラズベリーパイをリモートさせ、不具合対応が容易になります。
以下、利点を列記します。
 ・ラズベリーパイの処理能力ではインターネット接続の負荷が高く、Python
  コードのエラー検索にとても時間がかかるが、PCでは処理能力上、容易に
  検索可能。
 ・リモート環境はどのみち必要なのでこのタイミングで構築しておき、Python
  プログラムの不具合解決に活用する。


ラズベリーパイのリモート接続は以下がある。
 
 VNC    ・・・WIFI環境に限られる接続。遠隔地(WIFIが届かない
          エリア)との接続は不可。一方で接続速度は速い。


 Connect  ・・・ラズベリーパイ専用のリモート接続。最近のラズベリー
          パイOS(Bookworm)に装備されるようになった。
          LTE接続・WIFI接続共に可能。


 TeamViewer・・・サードパーティー製のリモート接続アプリ。LTE接続・WIFI
          接続に対応するが、接続時間は極端に短く、課金が前提
          となる。試用してみたが課金しなければ実用に向かない。



 リモート接続方法はほかにもあると思われるが、ラズベリーパイ純正のConnectを活用していくのが良いと判断した。リモート接続したうえでADC動作のPythonプログラムの動作をAIを活用して実装した。

ADS1015+MCP3208動作プログラム
必要なプログラムは以下とななります。

  pip3 install adafruit-ads1x15 –break-system-packages
  pip3 install adafruit-blinka –break-system-packages
  pip3 install adafruit-circuitpython-ads1x15 –break-system-packages

 全て末に ”–break-system-packages” が付与されています。このコードを付けないとインストールができません。はじかれてしまい、エラーが出ます。
ADS1015は「adafruit」ツールを活用するので、必ずインストールする必要があります。
 実際、こちらはエラー表示が多発し、AIにて解決を行ってきました。


 MCP3208はすでに製作記もあり変更点はございません。そして2つのADCチップの計測プログラムが以下となります。 

MCP3208+ADS1015計測プログラム(ADCコントローラ)

#!/usr/bin/env python3

#-– coding: utf-8 –

#channel 0 pin1-GND

import spidev
import datetime
import time
import csv
import sys
import board
import busio
from adafruit_ads1x15 import ADS1015, AnalogIn, ads1x15

#import Adafruit_ADS1x15

#ads = Adafruit_ADS1x15.ADS1015()

i2c = board.I2C()
ads = ADS1015(i2c)

spi = spidev.SpiDev()
spi.open(0,0) #port 0,cs 0
spi.max_speed_hz = 1000000 # 1MHz

adc = spi.xfer2([0x06,0x00,0x00])
data1 = ((adc[1] & 0x0f) << 8) | adc[2]

#print (str(Vref*data1/4096) + “V”)

adc = spi.xfer2([0x06,0x40,0x00])
data2 = ((adc[1] & 0x0f) << 8) | adc[2]

#print (str(Vref*data2/4096) + “V”)

adc = spi.xfer2([0x06,0x80,0x00])
data3 = ((adc[1] & 0x0f) << 8) | adc[2]

adc = spi.xfer2([0x06,0xc0,0x00])
data4 = ((adc[1] & 0x0f) << 8) | adc[2]

adc = spi.xfer2([0x07,0x00,0x00])
data5 = ((adc[1] & 0x0f) << 8) | adc[2]

adc = spi.xfer2([0x07,0x40,0x00])
data6 = ((adc[1] & 0x0f) << 8) | adc[2]

adc = spi.xfer2([0x07,0x80,0x00])
data7 = ((adc[1] & 0x0f) << 8) | adc[2]

adc = spi.xfer2([0x07,0xc0,0x00])
data8 = ((adc[1] & 0x0f) << 8) | adc[2]

#i2c = busio.I2C(board.SCL, board.SDA)

#ads = ADS.ADS1015(i2c)

#ゲインの設定です

#指定によって、取得できる電圧の範囲が変わります

#- 2/3 = +/-6.144V

#- 1 = +/-4.096V

#- 2 = +/-2.048V

#- 4 = +/-1.024V

#- 8 = +/-0.512V

#- 16 = +/-0.256V

GAIN = 1
RANGE = 4.096 * 2
UNIT = RANGE / 4096
data = 0
volt = 0

#ads1015_pin1 = 0

#ads1015_pin2 = 1

#ads1015_pin3 = 2

#ads1015_pin4 = 3

data9 = AnalogIn(ads, ads1x15.Pin.A0)
data10 = AnalogIn(ads, ads1x15.Pin.A1)
data11 = AnalogIn(ads, ads1x15.Pin.A2)
data12 = AnalogIn(ads, ads1x15.Pin.A3)

while 1:

ch1 = (data2)*1.5
ch2 = (data3)*1.5

ch3 = (data4)*1.5
ch4 = (data5)*1.5

ch5 = (data6)*1.5
ch6 = (data7)*1.5

ch7 = (data8)*1.5
ch8 = (data9.voltage)*1200   #係数合わせ ⇒「*1200」の部分

ch9 = (data10.voltage)*1200
ch10 = (data11.voltage)*1200

ch11 = (data12.voltage)*1200

print (‘各チャンネルの発電量 ‘)
d = datetime.datetime.today() # 年月日の表示

print (‘%s年%s月%s日’ % (d.year, d.month, d.day))
print (‘%s時%s分%s秒’ %(d.hour,d.minute,d.second))

print (‘ch0 %d’ %(ch0))
print (‘ch1 %d’ %(ch1))
print (‘ch2 %d’ %(ch2))
print (‘ch3 %d’ %(ch3))
print (‘ch4 %d’ %(ch4))
print (‘ch5 %d’ %(ch5))
print (‘ch6 %d’ %(ch6))
print (‘ch7 %d’ %(ch7))
print (‘ch8 %d’ %(ch8))
print (‘ch9 %d’ %(ch9))
print (‘ch10 %d’ %(ch10))
print (‘ch11 %d’ %(ch11))

f=open(‘/home/ya/Strings.csv’, ‘a’)   
# CSVファイル上書き、環境に合わせて書き換え

writer = csv.writer(f, lineterminator=’\n’)

body = [‘%sh%sm’ % (d.hour,d.minute),str(int(ch0)),str(int(ch1)),str(int(ch2)),str(int(ch3)),str(int(ch4)),str(int(ch5)),str(int(ch6)),str(int(ch7)),str(int(ch8)),str(int(ch9)),str(int(ch10)),str(int(ch11)),]
writer.writerow (body)

spi.close()


基本的にはMCP3208で製作したプログラムにADS1015のプログラムを追記した格好です。現地の電流値を確認して係数を合わせていきます。
計測毎にCSVに上書きされ、1日分の計測データをメール送信させていきます。
Gメール送信プログラムは以前のサイトを参照してプログラムを組みます。

ラズベリーパイには以下のソフトで動作させます
 1、MCP3208+ADS1015計測プログラム(ADCコントローラ)
 2、Gmail送信プログラム ⇒ 製作記へ
 3、CSV消去プログラム ⇒ 製作記へ
 4、クロン定義
    cron(クロン)を起動させてプログラムの動作時間を設定します。
    ※ 詳細はのちほどでてきます。
    コマンド  $ crontab -e
 5、日本語化
    あった方がいいので、記載しました


モバイルルーター(N-01H)をイオンモバイル用に設定

 WIFIではとうてい接続ができない遠隔通信を想定しています。そこで、LTE接続にて通信のハブになる機材が必要です。そこで、このNー01Hのモバイルルーターを活用することとしました。

イオンモバイルはドコモのデータ回線契約 1GB=525円 のプランを選択!
とても安価です。

 モバイルルーター N-01HはANP設定を行う必要がります。デフォルトではドコモのモペラになっていました。
 このN-01HのANP設定は本体画面ではなくネットから「http://192.168.179.1」を入力し、パスワードの設定と進みます。取り扱い説明書がネット上にありますので参考に設定していくと、イオンモバイルでの運用が可能となります。

必要情報は以下です。

  APN   :n-aeonmobile.com
  ユーザー名:user@n-aeonmobile.com
  パスワード:0000

実際にRaspberry Pi Connectでリモート接続した「ラズベリーパイの画面」と「Raspberry Pi Connectの画面選択中の画像」です。





ラズベリーパイの時間制御

ラズベリーパイの起動は「プログラムタイマー」を活用します。

ラズベリーパイを常時稼働し続けると動作不安定になると想定されるため、夜間の時間帯はシャットダウンさせて、朝一番でプログラムタイマーにより起動させる方式としました。

ラズベリーパイの動作はcron(クロン)で時間制御を掛けます。今回は太陽光発電のモニタリングなので、以下の動作タイミングとしました。


クロンの設定

LANG=ja_JP.UTG-8

*/5 5-19 * * * /home/pi/”ADCコントローラ”.py start

06 19 * * * /home/pi/gmail.py start

14 19 * * * /home/pi/fremove.py start

24 19 * * * sudo shutdown -h now

時間軸の解説

04:30 プログラムタイマーにより
    ラズパイ起動
05:00 ADCコントローラが5分毎に
    電流値計測
19:00 ADCコントローラの計測終了
19:06 Gメールにて計測結果(CSV)
    を送信
19:14 CSV消去
19:24 ラズベリーパイシャットダウン

テスト送信した結果です。CTセンサを4個つないで、自宅のPCとモニタ2台の電力計測した結果です。


防犯カメラ Anker Eufy SoloCam S340

購入したのは、こちらになります。

この機種では接続方法によって2種類あり、価格も大きく違いWIFI接続の
S340の方が安価です。

 S340 WIFI接続型
 S330 LTE接続型

モバイルルーターで太陽光発電施設にある機器は全て接続させることを目論んでいるので、ここでのチョイスはS340で安価な方となります。

また、LTE接続のS330の場合はこの防犯カメラで通信回線が完結すればいいのですが、ラズベリーパイの接続も必要となります。やはりルーター機能で通信を一元化することが重要と考えました。でなければイオンモバイルのシムが2枚構成になってしまいます。


防犯カメラの通信ブロック図

 スマホにアンカーのソフトウェアをインストールして、接続を確認します。ちゃんと接続するか不安でしたが、問題なく接続する事ができました。通信状況も問題なく、リアルタイム動画の画質も良好を確認しました。
 テスト環境なので、自宅の夜間の様子(真っ暗)を撮影したのがこちらになります。

発電設備への不審者の識別は問題ないと判断しました。また、動体検知も優秀でしたのを付け加えさせていただきます。



 かなり、はしよった内容となりまして申し訳ございません。
設計・開発が完了したので、次回は現地の太陽光発電施設へこれら機器をインストールする内容並びに結果について配信していきたいと思います。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

“遠隔地 12ch電流センサー製作と防犯カメラの一体運用に向けて” への1件のフィードバック

  1. […] 電力計測システムの記事   「電力量測定 Raspberry PiとA/D(MCP3208)を使ってIot」  「遠隔地 12ch電流センサー製作と防犯カメラの一体運用に向けて」 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です