ระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซ็นเซอร์วัดความชื้นในดิน (Smart greenhouse watering system with soil moisture sensors)

ผู้เขียนบทความ : 064 น.ส ธารารัตน์ ขาวยิน COE#15

คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์

วิชา:04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566

1.ความเป็นมา

         ในปัจจุบันพืชผลทางเกษตรมีผลผลิตที่ย่ำแย่ โดยมีปัจจัยหลายอย่าง เช่น แสงแดด น้ำ และ แร่ธาตุ เป็นต้น โดยบทความนี้จะนำเสนอเกี่ยวกับปัญหาเรื่องน้ำ การรดน้ำของพืชผลทางเกษตรนั้น ควรจะให้มีปริมาณที่เหมาะสมกับชนิดและผัก เพื่อให้พืชนั้นเติมโต ถ้าหากพืชผักได้น้ำในปริมาณที่มากจนเกินไป จะส่งผลให้รากของต้นพืชนั้นเกิดความเสียหาย และ เฉาตายในที่สุด

       จึงได้คิดค้นระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซ็นเซอร์วัดความชื้นในดินเพื่อนำมาควบคุมกำกับดูแลพืชผลทางการเกษตร ประหยัดเวลาของมนุษย์ โดยนำเซ็นเซอร์มาประยุกต์การใช้งาน ให้สามารถทำงานอัตโนมัติได้ อีกทั้งยังมีโหมดการทำงานสำรองในกรณีที่ระบบอัตโนมัติเกิดข้อผิดพลาด ก็ยังคงมีโหมดการทำงานอีกโหมด ค่อยสำรอง เพื่อให้ระระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซ็นเซอร์วัดความชื้นในดิน ยังคงทำงานได้ตามปกติ

2.วัตถุประสงค์

2.1 เพื่อศึกษาและสร้างระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซ็นเซอร์วัดความชื้นในดิน
2.2 เพื่อนำเซ็นเซอร์มาประยุกต์ใช้ในทางเกษตรกรรม
2.3 เพื่อเพิ่มผลผลิตทางการเกษตร ลดต้นทุน ประหยัดเวลา และเพิ่มความสะดวกสบายให้กับมนุษย์

3.ขอบเขต

3.1 สามารถวัดค่าความชื้นในดินได้
3.2 สามารถสั่งควบคุมการเปิด-ปิดการรดน้ำได้
3.3 สามารถแสดงค่าของเซ็นเซอร์และสถานะของเครื่องผ่านจอ LCD

4.ประโยชน์ที่คาดว่าจะได้รับ

4.1ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา Python เพื่อสร้างระบบ Smart Farm
4.2 สามารถนำความรู้การเขียนโปรแกรมภาษา Python ไปประยุกต์ใช้ได้จริง
4.3 สามารถเขียนโปรแกรมภาษา Python  เพื่อนำมาควบคุมกำกับดูแลพืชผลทางการเกษตร

5.ทฤษฏีและงานอื่นที่เกี่ยวข้อง

5.1ESP32 เป็นชิปไมโครคอนโทรลเลอร์ที่มาพร้อม WiFi มาตรฐาน 802.11 b/g/n และบลูทูธเวอร์ชั่น 4.2 เป็นรุ่นต่อยอดความสำเร็จของ ESP8266 โดยในรุ่นนี้ได้ออกมาแก้ไขข้อเสียของ ESP8266 ทั้งหมด

5.2RELAY รีเลย์ คืออุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าเปรียบเสมือนสวิตซ์สำหรับตัดต่อในวงจรควบคุมอัตโนมัติ

5.3DC Step-Downวงจรลดแรงดันแบบ Step-Down หรือเรียกอีกแบบว่า Buck Converter (บัคคอนเวอร์เตอร์) ใช้ลดแรงดันจากแรงดันสูงให้ต่ำลง ใช้หลักการสวิตชิ่ง-ตัวเหนี่ยวนำ(L) จึงทำให้มีความร้อนและความสูญเสียกำลังไฟน้อย ไม่เหมือนกับการลดแรงดันโดยใช้ IC ตระกูล 78xx / 317 ทั่วไปที่ใช้หลักการลดทอนทำให้เกิดความร้อนสูง  วงจรบัคคอนเวอร์เตอร์เมื่อลดแรงดันลงแล้วจะได้กระแส Output เพิ่มขึ้น

 

5.4เซ็นเซอร์วัดความชื้นในดิน Soil Moisture Sensor Moduleเซ็นเซอร์วัดความชื้นในดิน โดยใช้หลักการทำงานในการวัดค่าความต้านทานระหว่างขาอิเล็กโทรด ชุบโลหะกันการสึกหรอ จากนั้นจะมีวงจรเปรียบเทียบแรงดันโดยใช้ออปแอมป์ LM393 เทียบแรงดัน สามารถให้ output ทั้งในแบบ analog และ digital โดยปรับการส่งข้อมูลโดยใช้ Trimpot หากความชื้นในดินมีมากก็จะให้ Logic 1 ไปที่ขา D0 ส่วนขา A0 นั้นจะเป็นขา analog ให้แรงดัน 0-5V(ในทางอุดมคติ) โดยค่าจะแปรผันกลับ ตามความชื้น (ชื้นมาก ค่า A0 น้อย) เหมาะสำหรับนำไปเป็นโปรเจครดน้ำอัตโนมัติ


5.5 จอLCD 16*2แสดงผลชัดเจน: จอ LCD 16×2 คือพื้นที่สำหรับแสดงข้อความหรือข้อมูลที่มากพอสำหรับโปรเจ็กต์ Arduino ของคุณ การต่อเชื่อมง่าย: ด้วยโมดูล I2C ที่มาพร้อม คุณสามารถเชื่อมต่อจอ LCD ไปยังบอร์ด Arduino ด้วยสายไฟแค่ 2 เส้นปรับแต่งได้เต็มที่: ให้คุณสามารถกำหนดและปรับแต่งการแสดงผลในแบบที่คุณต้องการ

5.6 ปั๊มน้ำขนาดเล็ก ปั๊มลม vacuum pump DC 12V
สามารถดูดและเป่าอากาศหรือดูดของเหลวได้ ใช้แรงดันไฟฟ้า 12v

5.7 Switching power supply 12 v  ใช้ไฟน้อยช่วยประหยัดค่าไฟ และมีขนานเล็กติดตั้งได้ง่ายและยังระบายความร้อนได้ดี

5.8 Blynk App คือ แอปพลิเคชันสำเร็จรูปที่ใช้สำหรับงานที่เกี่ยวกับอินเทอร์เน็ตของสรรพสิ่ง (Internet of Things, IoT) ที่ทำให้เราสามารถเชื่อมต่ออุปกรณ์ต่าง ๆ เข้ากับอินเทอร์เน็ตในลักษณะการเชื่อมต่อเครื่องแม่ข่าย (Server) ไปยังอุปกรณ์ลูกข่าย (Client) เช่น Arduino,ESP-8266, ESP-32, NodeMCU และ Raspberry Pi ซึ่งแอปพลิเคชัน Blynk สามารถใช้งานได้ฟรีและใช้งานได้ทั้งบนระบบปฏิบัติการ IOS และ Android รูปที่ 12.2 แสดงภาพรายการอุปกรณ์ต่าง ๆ ที่สามารถเชื่อมต่อ แสดงผล และ/หรือ ควบคุมด้วย Blynk App ได้ โดยเริ่มต้นหลังจากสมัครเข้าใช้งาน เราจะได้รับ “Energy” ซึ่งเปรียบเสมือนเงินในโปรแกรมนี้ ในการเรียกใช้งานอุปกรณ์แต่ละตัว เราจะต้องแลกด้วย “Energy” และหาก “Energy” นี้ไม่เพียงพอ เราก็สามารถซื้อเพิ่มเติมได้ภายหลัง 

5.9 สวิตช์แบบกดติดกดดับแบบกดติดกดดับหรือแบบ push on / push off เป็นปุ่มกดที่เมื่อกดเปิด – ปิดลงไปแล้ว ตัวสวิตช์จะค้างในตำแหน่งนั้นทันที จะกลับสู่ตำแหน่งเดิมได้ ต่อเมื่อกดลงไปในอีกทางหนึ่งอีกครั้ง นิยมใช้กับเครื่องใช้ไฟฟ้า หรือ เครื่องจักร ที่มีฟังก์ชันการทำงานไม่ซับซ้อน เช่น Start/stop สายพานลำเลียง เป็นต้น

 

5.10โปรแกรมเขียน code python oopการเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming หรือ OOP) เป็นรูปแบบการเขียนโปรแกรมที่มองทุกอย่างเป็นวัตถุที่มีทั้งข้อมูลและฟังก์ชันการทำงานในข้อมูลก้อนเดียวนั่นคือออบเจ็ค ซึ่งนี่เป็นคุณสมบัติพื้นฐานของออบเจ็คที่มันสามารถมีทั้งข้อมูลและฟังก์ชันภายในตัวมันสำหรับการทำงานที่สมบูรณ์ นอกจากนี้ การเขียนโปรแกรมเชิงวัตถุยังมีคุณสมบัติที่สามารถนำไปใช้เพื่อช่วยให้การเขียนโปรแกรมมีประสิทธิภาพมากขึ้น

 

6.ผลการดำเนินงาน

6.1Diagram การทำงานของระบบ

6.2แผ่นผังการปฏิบัติงานด้วย (Flow chart) เพื่อออกแบบการทำงานในการเขียนโปรแกรม

6.3โค้ดในส่วนของ Import Libraries 

import BlynkLib
import BlynkTimer
import machine
import time
from machine import Pin, ADC, I2C
from ssd1306 import SSD1306_I2C

6.4โค้ดในส่วนของการ Hardware Configuration

soil_pin = ADC(Pin(36))
sw_pin = Pin(18, Pin.IN)
relay_pin = Pin(23, Pin.OUT)

Rref = 10000
RL10 = 50
GAMMA = 0.7

lcd = SSD1306_I2C(128, 64, I2C(0))

6.5โค้ดในส่วนของ Blynk Connection Setup

BLYNK_TEMPLATE_ID = "TMPL6n6igczWV"
BLYNK_TEMPLATE_NAME = "mind"
BLYNK_AUTH_TOKEN = "zr-pdwt2YZN3HuWIfeoveun62tQDU5VH"

ssid = "mind"
password = "12345678"

6.6โค้ดในส่วนของ Blynk Event Handler

BLYNK_CONNECTED = False

def on_connect():
    global BLYNK_CONNECTED
    BLYNK_CONNECTED = True

BLYNK = BlynkLib.Blynk(BLYNK_AUTH_TOKEN, connect=on_connect)
timer = BlynkTimer.Timer()

@BLYNK.on("V6")
def v6_write_handler(value):
    if value == 1:
        relay_pin.value(1)
    else:
        relay_pin.value(0)

6.7โค้ดในส่วนของ LCD Update Function

def update_lcd(soil_value):
    lcd.fill(0)
    lcd.text("Tararat Khawyin", 0, 0)
    lcd.text("soil = {}".format(soil_value), 0, 10)
    lcd.show()

6.8โค้ดในส่วนของ Main Loop Function

def main_loop():
    BLYNK.run()
    if not BLYNK_CONNECTED:
        return
    SWe = sw_pin.value()
    if SWe == 0:
        soil = soil_pin.read()
        if soil < 3100:
            print(" => very humid")
            print(soil)
            relay_pin.value(0)
            Stat = 0
        else:
            print(" => dry")
            print(soil)
            relay_pin.value(1)
            Stat = 1
        update_lcd(soil)
        BLYNK.virtual_write(6, Stat)
    else:
        print(" ON ")
        relay_pin.value(1)
        Stat = 1
        update_lcd(soil)
        BLYNK.virtual_write(5, SWe)
        BLYNK.virtual_write(6, Stat)

while True:
    main_loop()
    time.sleep_ms(1000)

6.9โค้ดส่วนของ Main Program Loop

while True:
    main_loop()
    time.sleep_ms(1000)

7.สรุปผล

จากผลการทดลองระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซ็นเซอร์วัดความชื้นในดินสรุปได้ดังนี้

  • เซนเซอร์สามารถรับค่าความชื้นในดินได้
  • จอLCDสามารถแสดงค่าแบบเรียลไทม์ได้ตามที่ต้องการต่างๆ
  • รีเลย์สามารถสั่งงานปั๊มน้ำตามเงื่อนไขที่กำหนด
  • สวิตช์เปลี่ยนโหมดสามารถควบคุมการเปิด-ปิดของปั๊มน้ำได้ตามที่กำหนดไว้ต่างๆ
  • แอพพลิเคชั่นสามารถแสดงค่าของเซนเซอร์ความชื้นในดิน,สถานะทำงานของสวิตช์และรีเลย์ได้อย่างรวดเร็ว
  • จากผลการทดลองหลายๆครั้งพบว่าปริมาณค่าความชื้นในดินที่พืชผักใช้ในการเจริญเติมโตจะอยู่ในช่วง 2050 -3100 ของค่าความชื้นในดิน
  • หลังจากทำการทดลองจะพบว่าระบบรดน้ำพืชผักในโรงเรือนอัจฉริยะด้วยเซนเซอร์วัดความชื้นในดินสามารถทำงานได้อย่างมีประสิทธิภาพ

7.1 ตารางบันทึกการรับค่าจากเซนเซอร์วัดค่าความชื้นในดิน

7.2 ตารางบันทึกการทำงานของปั๊มน้ำผ่านรีเลย์

7.33 ตารางบันทึกการทำงานของแอพพลิเคชั่น

อ้างอิง

เอกสารอ้างอิง
[1]. Madhusudhana Reddy Barusu; Puvvadi Naga Pavithra; Pallem Setty Rani Chandrika. Optimal Utilization of Water for Smart Farming Using Internet of Things (IoT) [ออนไลน์] 2566.
[สืบค้นเมื่อวันที่ 15 กรกฎาคม 2566]. จากhttps://ieeexplore.ieee.org/document/10101227
[2].ณัฐภูมิ สุดแก้ว.วัดความชื้นในดิน(Soil Moisture Sensor Module) [ออนไลน์] 2561
. [สืบค้นเมือวันที่ 19 ตุลาคม 2566].จาก
http://www.arduino-indy.com/product/19

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *