自動観察日記

自動で観察したい

Raspberry Pi カメラ用フラッシュの作製(3)

続きです

saibaimen.hatenadiary.jp

saibaimen.hatenadiary.jp

Raspberry PiのGPIOを制御する

RPI.GPIOをインストールします。

$ pip install rpi.gpio

次のようなコードを書いて動かすと、GPIO18から3.3Vをかけることができるようになります。
LEDを5秒おきに点灯-消灯を繰り替えすようにしています。

#!/home/pi/.pyenv/shims/python                                                                                                          
#coding=utf-8                                                                                                                           

import RPi.GPIO as GPIO  #GPIOにアクセスするライブラリをimportします。                                                                  
import time

GPIO.setmode(GPIO.BCM)  #GPIOへアクセスする番号をBCMの番号で指定することを宣言します。                                                  
GPIO.setup(18,GPIO.OUT) #BCMの18番ピン、物理的12番ピンを出力に設定します。                                                              

while True:
    GPIO.output(18,GPIO.HIGH)
    time.sleep(5)
    GPIO.output(18,GPIO.LOW)
    time.sleep(5)

Raspberry PiでパワーLEDを制御 - YouTube

(2)で作ったフラッシュを機能させる

以前作った、温湿度や写真を取得するプログラムを少し変えます。

#!/home/pi/.pyenv/shims/python                                                                                                          
# -*- coding: utf-8 -*-                                                                                                                 

import os
import Adafruit_DHT
import datetime
import RPi.GPIO as GPIO  #GPIOにアクセスするライブラリをimportします。                                                                  
import time

now = datetime.datetime.now() # 現在の日時を取得                                                                                        

sensor = Adafruit_DHT.DHT22
pin = 4
degC = '℃'

GPIO.setmode(GPIO.BCM)  #GPIOへアクセスする番号をBCMの番号で指定することを宣言します。                                                  
GPIO.setup(18,GPIO.OUT) #BCMの18番ピン、物理的12番ピンを出力に設定します。                                                              

def condition():
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    discomfort = 0.81*temperature + 0.01*humidity*(0.99*temperature - 14.3) + 46.3

    return humidity, temperature, discomfort

def takepic():
    cmd = 'raspistill -n -o /home/pi/log_condition/log_pic/{0:%Y%m%d%H}.png -t 500 -q 15 -e'.format(now)
    GPIO.output(18,GPIO.HIGH)
    time.sleep(1)
    cmdact = os.popen(cmd)
    time.sleep(1)
    GPIO.output(18,GPIO.LOW)

def main():
    # log current condition                                                                                                             
    file = open('/home/pi/log_condition/log_TH/{0:%Y%m%d}.txt'.format(now), 'a+')  #書き込みモードでオープン                            
    humidity, temperature, discomfort = condition()
    # Markdown記法(半角スペース2個で改行)                                                                                             
    file.write('時刻:{0:%Y/%m/%d %H:%M:%S}  \n'.format(now))
    file.write('湿度:{0:3.1f}%  \n'.format(humidity))
    file.write('温度:{0:3.1f} {1}  \n'.format(temperature,degC))
    file.write('不快指数:{0:3.1f} \n\n'.format(discomfort))

    #    take a picture                                                                                                                 
    takepic()

if __name__ == '__main__':
    main()

GPIO.cleanup()

これでフラッシュが使えるようになりました。
(9/2くらいから動かしています)

その他

今回は最大1000 mAまで印加できるパワーLED使いましたが、本当は3000 mAまで印加できるもの(XM-L2 U31A)を用意していました。
ですが、1Wまでしか耐えられない抵抗を買ってしまっていたので、とりあえず安かったのでついでに買っていたXP-E R2WCを使いました。
でも実際に使ってみて、ぶっちゃけもっとIfの小さいLEDで良かったんじゃないかと思うくらい明るかったです。