概要
ソーラーパネルで発電可能な時だけRaspberryPi Zero Wを起動させる電池のないソーラー電源装置です。RaspberryPi Picoで電圧を監視し、電圧が落ちるとZeroに伝えてZeroをシャットダウンし、電圧が回復すればZeroを起動します。Zeroが安全にシャットダウンするまでの電力はスーパーキャパシタに蓄えます。
外観
回路
部品
太陽電池モジュール 2W SY-M2W
https://akizukidenshi.com/catalog/g/gM-08919/
電気二重層コンデンサー5F5.4V
https://akizukidenshi.com/catalog/g/gP-04247/
ショットキーバリアダイオード 40V3A SB340LS
https://akizukidenshi.com/catalog/g/gI-07788/
PchパワーMOSFET 30V40A MTP4835I3
https://akizukidenshi.com/catalog/g/gI-16096/
PchチップMOSFET DMG3415U(20V4A)
https://akizukidenshi.com/catalog/g/gI-03942/
MOSFET 2N7000
https://akizukidenshi.com/catalog/g/gI-09723/
リセットIC TCM809R
https://akizukidenshi.com/catalog/g/gI-02533/
5.1V ツェナーダイオード1N5231B
https://akizukidenshi.com/catalog/g/gI-06000/
トランジスタ TTC015B 160V2A
https://akizukidenshi.com/catalog/g/gI-09808/
Raspberry Pi Picoのプログラム
動作
- 電圧が4.5V未満の場合は待機
- 電圧4.5以上になったらZeroの通電を開始
- 電圧が3.5Vを下回ったら、Zeroにシャットダウン指示
- 30秒後にZeroの通電を遮断
- 1に戻る
プログラム(MicroPython)
import machine
from machine import UART, Pin, Timer
import utime
led = Pin(25, Pin.OUT)
tim = Timer()
def tick(timer):
global led
led.toggle()
tim.init(freq=0.5, mode=Timer.PERIODIC, callback=tick)
act = Pin(6, Pin.OUT)
relay = Pin(7, Pin.OUT)
act.value(0)
relay.value(0)
input_voltage = machine.ADC(1)
conv_factor = 3.3 / (65535) * 2
while True:
print('Waiting for the voltage to rise')
tim.init(freq=1.0, mode=Timer.PERIODIC, callback=tick)
while True:
vol = input_voltage.read_u16() * conv_factor
print(vol)
if vol > 4.5:
break
utime.sleep(1)
print('The voltage went up. Start Zero')
tim.init(freq=2.5, mode=Timer.PERIODIC, callback=tick)
act.value(1)
relay.value(1)
while True:
vol = input_voltage.read_u16() * conv_factor
if vol < 3.5:
break
utime.sleep(1)
print('The voltage has dropped. Shutdown Zero')
tim.init(freq=5.0, mode=Timer.PERIODIC, callback=tick)
act.value(0)
utime.sleep(30)
relay.value(0)
print('Turn off the power')
utime.sleep(5)
RaspberryPiの設定
概要
所定のGPIOを監視し、信号がLowになったらシャットダウンする。
準備
gpiozeroのインストール
プログラム(Python)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,time
import gpiozero
btn = gpiozero.Button(21)
print('waiting shutdown signal')
while True:
if btn.is_pressed:
print('shutdown signal is activate. shutdown now')
time.sleep(5)
os.system('sudo shutdown -h now')
break
time.sleep(1)
常駐設定
startup.sh作成
$ nano startup.sh
startup.sh
python /home/pi/check_shutdown.py &
rc.localに移動
$ sudo mv ./startup.sh /usr/local/bin/
$ sudo nano /etc/rc.local
exit 0の前に、startup.shを追記
startup.sh
exit 0
詳細
RaspberryPi Zeroのソーラー電源システム
https://tiblab.net/blog/2021/12/solar_system_for_rpi_zero-3/
Raspberry Pi Zeroソーラー電源システム製作中
https://tiblab.net/blog/2021/09/solar_system_for_rpi_zero/