自作ニンニク乾燥機、今年もちょっと改造するよ

今年も自作ニンニク乾燥機を使って、乾燥させています。

フレームも大きくして以降は、容量的にも問題ありません

基本的にはRaspberry PiとPythonのおかげで、全自動乾燥・・ではなるのですが

ただ、去年はちょっと乾燥させすぎたかな?・・と感じていて。

なので、今年は少しだけ乾燥工程を見直してみました。

これまでの乾燥工程では

・基本的に除湿機と有圧換気扇は24時間運転
・34度を超えたら除湿機停止(35度が乾燥に適した温度)
・33度以下になったら除湿機再運転

このような動作になるよう、プログラミングしていました。

除湿機は湿度を下げる為だけでなく、加温も兼ねているので、こういう動作にしています。

ただ、問題点として

・暑い日の日中、除湿機停止していても36度や37度になることがある
・24時間除湿機運転は、電気代が無駄
・実際、乾燥させすぎている

という事で、今年は以下のように修正

・5時~7時と20時~24時のみ除湿機運転
・それ以外は、温度に関わらず除湿機停止

夜間は加温をしない乾燥方法をテンパリング乾燥と呼ぶそうですが、その方式+気温が低い時間帯だけ除湿機を運転する事でなるべく35度を超える事が無いようにしました。

それに合わせて、Raspberry Piのプログラムも若干変更。

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import gspread
  4. import RPi.GPIO as GPIO
  5. import dht11
  6. import pigpio
  7. import time
  8. import datetime
  9. from oauth2client.service_account import ServiceAccountCredentials
  10. # initialize GPIO
  11. GPIO.setwarnings(True)
  12. GPIO.setmode(GPIO.BCM)
  13. # read data using pin 14
  14. instance = dht11.DHT11(pin=14)
  15. gpio_pin0 = 18
  16. ##GPIOにアクセスするためのインスタンスを作成
  17. pi = pigpio.pi()
  18. pi.set_mode(gpio_pin0, pigpio.OUTPUT)
  19. while(1):
  20.     jositsu = input('除湿機運転中は10・停止中は0を入力→')
  21.     if jositsu.isdecimal():
  22.         jositsu = int(jositsu)
  23.     break
  24. key_name = './cert/raspberrypi-1-******-************.json' # GoogleSheet認証キー
  25. sheet_name = 'RaspberryPi-1sheet' # シート名
  26. while True: # 全処理繰り返し
  27.     try: #エラーチェック
  28.         if __name__ == '__main__':
  29.             scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
  30.             credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope)
  31.             gc = gspread.authorize(credentials) # JSONキーファイルで認証
  32.             wks = gc.open(sheet_name).sheet1 # sheetをオープン
  33.         while True:
  34.             result = instance.read()
  35.             dtn = datetime.datetime.now()
  36.             while result.is_valid():
  37.                 B = result.temperature
  38.                 C = result.humidity
  39.                 D = 0.62198 * (6.1078 * 10 ** (7.5 * B / (B + 237.3)) * C / 100) / (1013.25 - (6.1078 * 10 ** (7.5 * B / (B + 237.3)) * C / 100)) * 1000
  40.                 D = round(D, 1)
  41.                 print("測定時刻: " + dtn.strftime("%Y/%m/%d %H:%M:%S"))
  42.                 print(" 気 温: " + str(B) + "C") # 元々小数点1桁で数字拾っていたので、簡単な表現に変更
  43.                 print("相対湿度: " + str(C) + "%") # 上と同じ
  44.                 print("絶対湿度: " + str(D) + "%")
  45.                 print(" 除湿機: " + str(jositsu))
  46.                 datas = [dtn.strftime("%Y/%m/%d %H:%M:%S"),B,C,D,jositsu]
  47.                 wks.append_row(datas)
  48.                 H = int(dtn.hour)
  49.                 if ((8<= H <= 19) or (0<= H <= 4)) and jositsu == 10:
  50.                     pi.hardware_PWM(gpio_pin0,50,84500)
  51.                     time.sleep(0.7)
  52.                     pi.hardware_PWM(gpio_pin0,50,72500)
  53.                     time.sleep(0.5)
  54.                     jositsu = 0
  55.                     print("8時-19時/0時-4時・除湿機停止")
  56.                 if ((20<= H <= 24) or (5<= H <= 7)) and jositsu == 0:
  57.                     pi.hardware_PWM(gpio_pin0,50,84500)
  58.                     time.sleep(0.7)
  59.                     pi.hardware_PWM(gpio_pin0,50,72500)
  60.                     time.sleep(0.5)
  61.                     jositsu = 10
  62.                     print("20時-24時/5時-7時・除湿機運転")
  63.                 print("---")
  64.                 time.sleep(1200)
  65.                 break
  66.             else:
  67.                 print("!測定不良!" + dtn.strftime("%Y/%m/%d %H:%M:%S"))
  68.                 print("---")
  69.                 time.sleep(3)
  70.     except Exception as err: #エラーを検知した場合
  71.         print(err) #エラーをプリントする
  72.     except KeyboardInterrupt: #Ctrl+Cを検知した場合
  73.         GPIO.cleanup() #GPIOを開放
  74.         print("cleanup")
  75.         break #冒頭tryを終了
  76. print("end")

相変わらず、ちゃんと理解せずなんとなくで修正しているので、どこか変なところがあってもよくわかりません(汗)

でもまぁ、とりあえず動いているのでヨシッ!

これで、ある程度乾燥するところまで自動運転です。

ニンニクの裏側を爪で押して、硬さを感じたらいったんは終了。

今年は乾燥させすぎないよう、注意を払っていきます。

乾燥後は温度・湿度チェックだけ

3週間ほど除湿機を使って乾燥させた後は、有圧換気扇だけの乾燥とし、温度・湿度の監視だけしていきます。

それ用のプログラムも用意しておきました。

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import gspread
  4. import RPi.GPIO as GPIO
  5. import dht11
  6. import time
  7. import datetime
  8. from oauth2client.service_account import ServiceAccountCredentials
  9. # initialize GPIO
  10. GPIO.setwarnings(True)
  11. GPIO.setmode(GPIO.BCM)
  12. # read data using pin 14
  13. instance = dht11.DHT11(pin=14)
  14. key_name = './cert/raspberrypi-1-******-************.json' # GoogleSheet認証キー
  15. sheet_name = 'RaspberryPi-1sheet' # シート名
  16. while True: # 全処理繰り返し
  17.     try: #エラーチェック
  18.         if __name__ == '__main__':
  19.             scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
  20.             credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope)
  21.             gc = gspread.authorize(credentials) # JSONキーファイルで認証
  22.             wks = gc.open(sheet_name).sheet1 # sheetをオープン
  23.         while True:
  24.             result = instance.read()
  25.             dtn = datetime.datetime.now()
  26.             if result.is_valid():
  27.                 B = result.temperature
  28.                 C = result.humidity
  29.                 D = 0.62198 * (6.1078 * 10 ** (7.5 * B / (B + 237.3)) * C / 100) / (1013.25 - (6.1078 * 10 ** (7.5 * B / (B + 237.3)) * C / 100)) * 1000
  30.                 D = round(D, 1)
  31.                 print("測定時刻: " + dtn.strftime("%Y/%m/%d %H:%M:%S"))
  32.                 print(" 気 温: " + str(B) + "C") # 元々小数点1桁で数字拾っていたので、簡単な表現に変更
  33.                 print("相対湿度: " + str(C) + "%") # 上と同じ
  34.                 print("絶対湿度: " + str(D) + "%")
  35.                 print("---")
  36.                 datas = [dtn.strftime("%Y/%m/%d %H:%M:%S"),B,C,D]
  37.                 wks.append_row(datas)
  38.                 time.sleep(1200)
  39.             else:
  40.                 print("!測定不良!" + dtn.strftime("%Y/%m/%d %H:%M:%S"))
  41.                 print("---")
  42.                 time.sleep(3)
  43.     except Exception as err: #エラーを検知した場合
  44.         print(err) #エラーをプリントする
  45.     except KeyboardInterrupt: #Ctrl+Cを検知した場合
  46.         GPIO.cleanup() #GPIOを開放
  47.         print("cleanup")
  48.         break #冒頭tryを終了
  49. print("end")

こちらも、なんとなくで作っています。

動けば(略

気温の高い日は、日中37度ぐらいいってしまう事もありますが、まぁそれぐらいなら問題ないでしょう。

ニンニクは、中途半端に温度下げて保管すると、発芽スイッチ入ってしまうので、多少高いほうが良いです。

大規模農家は、-2度とかの大型保冷庫で保管してたりするんですけどね。

そこまでの設備はありませんので・・

 

ともかく、出荷出来るほどには乾燥完了です。

あとは皮を剥いたりパッキングしたりシール貼ったり・・

結構まだまだ手間暇掛かりますが、もう少しで店頭に列られそうです!