庭の水やりで身近なIoTを体験、自動水やりシステムの構築 〜LEDやLCDで水分量を表示〜:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第41回)
ラズパイを使って土中の水分量をもとにした水やりシステムを構築します。
前回は地中の水分を測定してコンソールに表示させてみました。しかしコンソール画面だけでは何となく物足りない気がします。そこで今回はそれまでのプログラムを元に、状態に応じてLEDを点灯させたり、LCD(液晶ディスプレイ)に情報を表示させる仕組みを作ります。
状態に応じてLEDを点滅
まずはブレッドボード上にLEDを取り付けて、Dryの場合は点灯、Wetなら点滅、VeryWetなら消灯としてみましょう。LEDをつなげるためには抵抗が必要ですが、抵抗値は以下の式で求められます。
抵抗値(Ω)=(電源電圧−順電圧値)÷電流値(A)
今回使ったのは手元にあった秋月電子通商で発売されている5mmピンク色LEDですが、このLEDは順電圧値が3.1V、電流値が20mAなので、今流しているラズパイの電圧は3.3Vですから、
(3.3−3.1)÷0.02=10(Ω)
となり、10Ω以上であれば大丈夫です。ただし10Ωだとさすがに明るすぎたので、100Ωの抵抗を取り付けました。
そして動かすプログラムは以下のようになります。gpiozeroでは、LEDのライブラリは「LED」になりますので、それをimportしておきます。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import subprocess from gpiozero import MCP3002 from gpiozero import LED Vref = 3.3 # 基準となるラズパイの電圧 led = LED(25) # LEDをGPIO 25(22番ピン)に接続 # 値の最大値と最小値 dry = 270 water = 119 interval = (dry - water) / 3 wet = water + interval lbdry = dry - interval try: while True: pot = MCP3002(channel=0) hum = round(pot.value * Vref * 100,1) if (hum < dry and hum > lbdry): print("Dry") led.on() elif (hum > wet and hum < lbdry): print("Wet") led.on() time.sleep(0.1) led.off() time.sleep(0.1) elif (hum > water and hum < wet): print("very Wet") led.off() time.sleep(0.2) except: KeyboardInterrupt subprocess.call('clear')
特にコンソールでの表示はいらないという場合であれば、上記のprint文を全て#でコメントアウトしてください。
ここまで来ると何となく測定器っぽいなと思えてきます。次回はこれを踏まえて、実際に水やりをする機構を作り上げていきます。
LCDに表示させる
ラズパイで使えるLCDはさまざまな種類がありますが、一番簡単なのはセンサーでも使っているSPI接続で使えるものと、I2Cで使えるものの2種類です。I2Cは2つの線でつなげて使えるので簡単です。そこでLCDはI2Cで使えるものの中から選択します。
そしてこれまたI2Cで使えるLCDはさまざまな種類があるのですが、ラズパイとの相性などを考えて「AQM0802A-RN-GBW」を使うことにしました。8W×2Lの表示ができる“AE-AQM0802”という名前で販売されているLCDは何種類かありますが、こちらはバックライト付きで、L2Cの通信を安定させるバスリピーター「PCA9515」が基板に搭載されているモデルです。ほかに16W×2Lという「1602」のLCDもありますが、今回は情報量が少ないので、8×2で十分です。
AQM0802を使うためのプログラムのポイントは、まず初期化のコマンドを送ってLCDを初期状態にして、それから表示させる必要があることです。AQM0802の初期化コマンドはデータシートから「0x38」「0x39」「0x14」「0x73」「0x56」「0x6c」「0x38」ですので、これを送る関数を設定しておきます。
これを踏まえたプログラムは以下のようになります。ここでは「wetmon.py」として保存します。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import subprocess import smbus from gpiozero import MCP3002 from gpiozero import LED Vref = 3.3 # 基準となるラズパイの電圧 led = LED(25) # LEDをGPIO 25(22番ピン)に接続 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) time.sleep(0.1) def writeLCD( message ): mojilist=[] for moji in message: mojilist.append(ord(moji)) i2c.write_i2c_block_data(addr, def_data, mojilist) #time.sleep(0.5) 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() 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(1) except: KeyboardInterrupt command(def_clear) subprocess.call('clear')
nanoなどで記述して保存したら、実行してみましょう。
$ python wetmon.py
AQM0802とコンソール画面に「Dry」などと表示されればOKです。次回は実際の水やりシステムを構築していきます。
関連記事
- 庭の水やりで身近なIoTを体験、自動水やりシステムの構築 〜水分センサーの取り付け〜
ラズパイを使って土中の水分量をもとにした水やりシステムを構築します。 - ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。今回はオーバークロックで快適動作を実現。 - ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」のレビューのファーストインプレッションをお届け。海外製品を日本国内で使うために気を付けるべきポイントも紹介。 - ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」でベンチマークテストを実施。その実力とは? - ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
今回は温湿度センサーモジュールとラズパイを組み合わせ、LINEと連携させる方法を紹介します。 - ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。 - 本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介します。 - ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回はラズパイで。 - ラズパイでスマートスピーカーを作る 「アレクサ!あしたの天気は?」 〜ソフトウェア準備編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回は米Amazonが開発したAIアシスタント「Alexa」をラズパイで使えるようにしてみます。 - これが“らずキャン△”だ! キャンプ場で役立つ「気温・湿度・気圧センサー」の作り方
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。まずはキャンプ場で気温、湿度、気圧を測れるデバイスを作ってみます。 - ラズパイで「YouTube」と「Amazon プライムビデオ」を見る
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。音楽や動画のメディアサーバ化するために入れたOS「OSMC」で、YouTubeやAmazon プライムビデオなどを楽しんでみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.