毎日特定の時間にLEDを光るようにPythonプログラムとcronの設定を行います。
経緯
水槽のフタに置く重り用にサボテンを買ってきたのはいいのですが、
調べてみるとサボテンは日光に当てなきゃ枯れるらしい。
ということで、
毎日午前10時から1時間サボテンにLEDの光を当てることにします。
ハード面
Raspberry PIでLED点灯コントロール、Part1 パワーLEDとMOS FET
ソフト面
Raspberry PIでLED点灯コントロール、Part2 Pythonでコントロールする
ハード面・ソフト面ほとんど同じですが、
1時間LEDを光らせる設定に変更します。
sudo vim /home/username/myproject/python/lightTimer.py #!/usr/bin/python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23,GPIO.HIGH) time.sleep(3600) GPIO.cleanup()
#!/usr/bin/python
上のコードは必要なのかどうなのかよくわかりませんが、
なんとなく入れておきました。
次にcronの設定を行います。
sudo crontab -e 0 1 * * * python /home/username/myproject/python/lightTimer.py
1時にlightTimer.pyを実行する設定になっていますが、Rapsberry Piの時計が9時間遅れているので実際には午前10時に実行されます。
crontab -eで設定しても実行されません。
sudo crontab -eで設定するとRootで実行されるのでGPIOを含んだPythonプログラムを実行することができます。
pythonではなく/usr/bin/pythonと絶対パスで記載しないと実行できないとかネット書いてありましたが、pythonだけでも実行できていました。うまくいかないときは、/usr/bin/pythonで記載しておくといいかもしれません。
サボテンを水槽の蓋の上に設置!
パワーLEDをオンにしたところ
で、ここで不具合に気づきました。
lightTimer.pyを実行すると下記の警告が出てきます。
RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(23, GPIO.OUT)
GPIO23ピンを使用中、これ自体は別にいいのですが、GPIO.cleanup()をしたときに別のところで使っているGPIO23ピンもクリーンアップされてしまいます。つまりWebサイトに設置したLED点灯ボタンが反応しなくなってしまいます。この不具合を避けるために下記の対策を取ります。
lightTimer.pyのクリーンアップ自体を削除して所定の時間がたったらLOWにするだけにします。
sudo vim /home/username/myproject/python/lightTimer.py #!/usr/bin/python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23,GPIO.HIGH) time.sleep(3600) GPIO.output(23,GPIO.LOW)
lightTimer.pyでLEDが点灯中はWebサイトに設置した点灯ボタンを無効にします。
sudo vim /home/tadashi/myproject/python/script.py #修正箇所のみ表示しています #if (time_stamp <= time.time() - 20): if (time_stamp <= time.time() - 20 and GPIO.digitalRead(LIGHT) == GPIO.LOW):
以上で、時間になったらLEDが光ってサボテンに光を照射、Webサイトに設置した点灯ボタンも普通に動く状態になりました。
ちなみにサボテンは光がないと枯れるそうです。
蛍光灯ぐらいじゃパワー不足なんだとか。
植物の光合成に必要なもの
青色LEDと赤色LED
白色LEDには青色LEDが含まれているけど、赤色LEDは入っていないそうです。
白色パワーLEDだけでたぶん大丈夫だと思いますが、
ダメそうな場合、赤色LEDを設置しようと思います。
コメントを残す