Raspberry Pi MCP3208 ADS1015 Anker Eufy SoloCam S340 N-01H
2026/2/3
友人から野立ての太陽光発電の電流センサー製作の依頼をうけました。
銅の高騰を受けて、はやりのケーブル盗難にあったそうです。そこで今後の対策を含め、早期発見並びに発電モニタリング装置の開発を依頼されました。
9回路分の電流センサー検知回路と遠隔で操作が可能なラズベリーパイを製作します。また、遠隔カメラ(防犯カメラ)も導入し、1つのパッケージを構成していきます。
ハード的には12ch電流センサーセンサーの製作となります。久々にHPの投稿は大掛かりな構成の装置の製作となりました。
基本構成
・12ch電流センサー基盤の製作
ADCコントローラ「MCP3208」「ADS1015」を融合させた
12ch電流センサーの開発。
・ラズベリーパイで定期計測
定期的に計測し、1日の発電結果をGメール送信させる。
遠隔でラズベリーパイに接続し、修正や状況を把握可能とする。
・モバイルルーターで遠隔通信
LTE回線で通信、安価な通信費とするためイオンモバイルを活用
・外部設置型のWIFI防犯カメラもリンク
モバイルルーターと接続し、侵入者の通知や録画を行う
概略図

すでに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:
ch0 = (data1)*1.5 #係数合わせ ⇒「*1.5」の部分
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
ラズベリーパイのWIFI設定をN-01Hに変更することでLTE回線でのリモート接続が可能となります。おさらいすると、WIFI設定の流れは以下となります。
1、モバイルルーター抜きで「PC」と「ラズベリーパイ」を自宅などの
環境でWIFI接続させる。
2、Raspberry Pi Connectでリモート接続し、AIなどを活用してADCチップ
(MCP3208・ADS1015)のプログラムを完成させる。
⇒ Raspberry Pi Connectの設定はネットに溢れているので
割愛します。
3、モバイルルーターN-01HのAPNをイオンモバイルに設定し、
「ラズベリーパイ」と「モバイルルーターN-01H」をWIFI接続する。
実際に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枚構成になってしまいます。
防犯カメラの通信ブロック図

スマホにアンカーのソフトウェアをインストールして、接続を確認します。ちゃんと接続するか不安でしたが、問題なく接続する事ができました。通信状況も問題なく、リアルタイム動画の画質も良好を確認しました。
テスト環境なので、自宅の夜間の様子(真っ暗)を撮影したのがこちらになります。
発電設備への不審者の識別は問題ないと判断しました。また、動体検知も優秀でしたのを付け加えさせていただきます。

かなり、はしよった内容となりまして申し訳ございません。
設計・開発が完了したので、次回は現地の太陽光発電施設へこれら機器をインストールする内容並びに結果について配信していきたいと思います。
電力高騰対策関係のメインページ – enjoy-the-rest-of-your-life へ返信する コメントをキャンセル