小型ですごいマシンのRaspberry piを使ってお手軽装置にLED照明を導入します。お手軽版なので作製するプログラムもシンプルです。
こちらは”お手軽版”のカテゴリーですが、今回のLED照射がなくても植物は成長します。電子工作が苦手な方は以前までのプロセスでお手軽装置は完成です。
続々と新しいRaspberry piが出ていますが今回使うのは初代です。つまりそれくらいで十分なものです。
Raspberry Piを使って水耕栽培のLED照明をします。
Raspberry PiとLED drive回路への接続
下記はRaspberry Piと以前紹介したLED駆動回路を基板化したものをつなげたものです。基板を安くつくってくれるとことがあるのでそこに発注しました。本当はデータを共有したかったのですがトランジスタに放熱板がとりつけられるようになっていなくて、使い方によっては異常に発熱するのでやめときます、、。
4本線が出ています。回路構成については、以前紹介したLED駆動回路の作製のページをご覧ください。PWM駆動するための1本、赤・青色用のセレクター用がそれぞれ1本ずつ、最後にGNDの共有です。実際にはPWM駆動しないので3つのIO portを制御するのみです。
Wiring Piのinstall
Raspberry PiでI/O制御するなら、定番のwiringpiですね。まずは、wiring piのinstallです。source codeをダウンロードしてきて自分のraspberry piにインストールする必要があります。sudo apt-getでのinstallはできません。
gitのインストール。これでsource codeにアクセスします。
1 |
$ sudo apt-get install git-code |
gitからsource codeを持ってきます。
1 |
$ git clone git://git.drogon.net/WiringPi |
とってきたsource codeをプログラムにします。場所を移動して./buildしてください。
1 2 |
$ cd wiringPi $ ./build |
versionが表示できれば正しくinstallできています。
1 |
$ gpio -v |
プログラムを作製する
青の信号用にPORT24, 赤の信号用に23を割り当てました。今回PWM駆動はしませんが回路の都合上何かしらの信号を入れなければならないので、PORT 18を使っています。
プログラムのタイマー機能ですがマルチスレッドで定期的に現在時間と設定時間を比較しています。
DAYTIME_STARTが昼間が開始する時間、ここだと6時ですね。
DAYTIME_ENDが昼間が終了する時間です。ここだと18時です。
6時から18時は赤のみのLED照射、18時から6時までは青のみです。なぜこのような制御をしているかは別のトピックで説明します。
Pythonです。適当なprogram名にして保存してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/usr/bin/python # config: UTF-8 from datetime import datetime import threading import time import RPi.GPIO as GPIO BLUE_PORT = 24 RED_PORT = 23 SW_PORT = 18 DAYTIME_START = 600 DAYTIME_END = 1800 print "start led management" def init(): GPIO.setmode(GPIO.BCM) GPIO.setup(SW_PORT, GPIO.OUT) GPIO.setup(BLUE_PORT, GPIO.OUT) GPIO.setup(RED_PORT, GPIO.OUT) GPIO.output(SW_PORT, True) def checkDayTime(): curTime = datetime.now().hour * 100 + datetime.now().minute if (curTime < DAYTIME_START) or (curTime > DAYTIME_END): print "current Time is {0} so Blue is on".format(curTime) GPIO.output(BLUE_PORT, True) GPIO.output(RED_PORT, False) else: print "current Time is {0} so Red is on".format(curTime) GPIO.output(BLUE_PORT, False) GPIO.output(RED_PORT, True) t = threading.Timer(60, checkDayTime) t.start() init() t= threading.Thread(target=checkDayTime) t.start() |
プログラムの開始
今回はpythonにバックグラウンドで動いてもらう必要があります。下記のようにbackgroundで実行するようにしましょう。
1 |
$ sudo ./program_name_python.py & |
sshで入っている場合にはnobupコマンドを使うとlogoutしてもバックグラウンドでプログラムが実行され続けます。
1 |
$ sudo nobup ./progmra_name_python.py & |
記事を読んでいただいてありがとうございます。この記事がいいなと思ったら下記のSNSボタンのクリックをお願いします。励みになります😁