日光が当たる時だけRaspberryPiを稼働させるソーラー電源システム

概要

ソーラーパネルで発電可能な時だけ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のプログラム

動作

  1. 電圧が4.5V未満の場合は待機
  2. 電圧4.5以上になったらZeroの通電を開始
  3. 電圧が3.5Vを下回ったら、Zeroにシャットダウン指示
  4. 30秒後にZeroの通電を遮断
  5. 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/

ページトップへ