ผู้เขียนบทความ : 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