ではまず、ラズパイからポンプをコントロールできるか、テストプログラムで試します。以下のようにnanoなどで記述してください。
#!/usr/bin/env python # -*- coding: utf-8 -*- from gpiozero import Motor from time import sleep motor = Motor(forward=4, backward=14) while True: print("forward") motor.forward() sleep(2) print("stop") motor.stop() sleep(2)
これを「pumptest.py」などの名前で保存したら実行してみましょう。
$ python pumptest.py
ポンプが回る音が聞こえたでしょうか。2秒間隔で回ったり止まったりします。テストが成功したら、最後のプログラムを組み上げることにしましょう。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import subprocess import smbus from gpiozero import MCP3002 from gpiozero import LED from gpiozero import Motor Vref = 3.3 # 基準となるラズパイの電圧 led = LED(25) # LEDをGPIO 25(22番ピン)に接続 motor = Motor(forward=18, backward=23) # モーターをつないだGPIO i2c = smbus.SMBus(1) addr = 0x3e # AQM0802のアドレス # AQM0802の初期化 def_command = 0x00 def_data = 0x40 def_clear = 0x01 display_On = 0x0f LCD_2ndline = 0x40 + 0x80 # 値の最大値と最小値 dry = 270 water = 119 interval = (dry - water) / 3 wet = water + interval lbdry = dry - interval # AQM0802の関数 def command( code ): i2c.write_byte_data(addr, def_command, code) def writeLCD( message ): mojilist=[] for moji in message: mojilist.append(ord(moji)) i2c.write_i2c_block_data(addr, def_data, mojilist) def init_lcd (): command(0x38) command(0x39) command(0x14) command(0x73) command(0x56) command(0x6c) command(0x38) command(def_clear) command(display_On) init_lcd() writeLCD("Joutai:") try: while True: pot = MCP3002(channel=0) hum = round(pot.value * Vref * 100,1) if (hum < dry and hum > lbdry): command(LCD_2ndline) print("Dry") writeLCD("Dry ") led.on() motor.forward() time.sleep(5) motor.stop() time.sleep(5) elif (hum > wet and hum < lbdry): command(LCD_2ndline) print("Wet") writeLCD("Wet ") led.on() time.sleep(0.5) led.off() time.sleep(0.5) elif (hum > water and hum < wet): command(LCD_2ndline) print("very Wet") writeLCD("very Wet") led.off() time.sleep(10) except: KeyboardInterrupt command(def_clear) subprocess.call('clear')
プログラムは「clematispump.py」のような名前を付けて保存します。これで乾いていると水を差し、十分に湿ったら給水を止めるシステムが出来上がりました。水については30行目の「time.sleep(5)」で調整します。今は5秒間水を流すような設定です。これはそれぞれの環境で変えてください。ちなみにこの1サイクルは10秒間隔で動かしています。これもそれぞれの環境に応じて変えてください。
なお余談ですが、ポンプのテスト時には動作音がしたものの、実際に給水しようとホースを取り付けてもくみ取ってくれません。粗悪品を手に入れたのかと思いましたが調べてみると、水通しが必要な模様。ポンプごとバケツに入れて動作させたらしっかりと吸水しました。新しいポンプをポチる前に、こういったことがないか気をつけましょう。
最初はなんとか給水を自動化できないかと考えてスタートしたシステムですが、意外と時間がかかりました。このほかにもラズパイを使って作ることができるIoTシステムはあるかと思います。何かまた見つけたら、ここで紹介しようと思います。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR