ผู้เขียนบทความ :รหัสนักศึกษา070 น.ส.สิตานันท์ เพชรขำ CoE#15
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์
วิชา 04-513-201 การโปรแรกมคอมพิวเตอร์ขั้นสูง 1/2566
1.ความเป็นมา
ปัจจุบันในประเทศไทยมีการพัฒนาความเจริญก้าวหน้าทางเทคโนโลยีทางด้านเกษตร อย่างแพร่หลายโดยเฉพาะระบบดูแลการเกษรอัตโนมัติ จากการศึกษาและสำรวจสภาพปัญหาทางด้านการเกษตร โดยวิธีการเพาะปลูกพืชผักในพื้นที่โล่งแจ้ง เราจึงพบปัญหาในควบคุมเข็มแสงในโรงเรือนสำหรับการเกษตร เพื่อแก้ปัญหาดังกล่าวผู้ประดิษฐ์จึงได้ทำการพัฒนาระบบทางด้านการเกษตร โดยการสร้างระบบควบคุมแสงสว่างอัตโนมัติด้วยเซ็นเซอร์วัดปริมาณความเข้มแสงขึ้นมาเพื่อใช้ในการเพิ่มปริมาณแสงให้กับพืชผัก โดยมีเป้าหมายเพื่อให้พืชผักได้รับปริมาณความเข้มแสงตามที่พืชผักต้องการใช้ในการเจริญเติบโตอย่างรวดเร็ว และให้พืชผักได้รับปริมาณความเข้มของแสงในสภาพอาการแปรปรวน
2.วัตถุประสงค์
1.เพื่อศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อวัดปริมาณความเข้มแสง
2.เพื่อนำความรู้การเขียนโปรแกรมภาษา python มาพัฒนาเทคโนโลยีด้านการเกษตร
3.เพื่อนำการเขียนโปรแกรมภาษา python มาประยุกต์ใช้ควบคุมแสงสว่างในโรงเรือน
4.เพื่อใช้การเขียนโปรแกรมภาษา python สร้างระบบอัตโนมัติด้วยเซนเซอร์วัดปริมาณความเข้มแสง
3.ขอบเขต
1.สามารถวัดปริมาณความเข้มแสง
2.สามารถควบคุมปริมาณความเข้มแสงในโรงเรือน
3.สามารถออกแบบระบบควบคุมปริมาณความเข้มแสงภายในโรงเรือนสำหรับปลูกพืชผักด้วยเซนเซอร์วัดปริมาณความเข้มแสงและแสดงผลบนแอพพลิเคชัน Blynk
4.ประโยชน์ที่คาดว่าจะได้รับ
1.ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อการพัฒนาเทคโนโลยีด้านการเกษตร
2.สามารถนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง
3.สามารถเขียนโปรแกรมภาษา python เพื่อควบคุมแสงสว่างในโรงเรือน
5.ความรู้ที่เกี่ยวข้อง
5.1.บอร์ดไมโครคอนโทรลเลอร์ ESP32 38 pin
เป็น Micro Controller ที่รองรับการเชื่อมต่อ WiFi , Bluetooth – BLE ในตัว ภาษาที่ใช้ในการพัฒนาโปรแกรมคือ ภาษา C หรือ Python ภาษา Python ต้องทำการอัพเกรดเฟิร์มแวร์ให้รองรับ Python การพัฒนาโปรแกรมขึ้นอยู่กับผู้ที่พัฒนา โปรแกรม IDE ที่ใช้พัฒนาคือ Arduino IDE หรือ Visual Studio สำหรับ Visual Studio จำเป็นต้องติดตั้ง Plugin Espressif IDF หรือ PlatformIO IDE และต้อง Enable (Arduino) ESP32 รองรับการเชื่อมต่อ WiFi และ BLE หรือ Bluetooth ได้โดยไม่ต้องซื้อโมดูลเพิ่มเติม บอร์ด ESP32 เองยังมีการทำงานที่แบ่งเป็น 2 Core และ Pin I/O เลือกฟั่งชั่นการทำงานได้ใน Pin เดียวกัน เช่น การแปลง Analog to Digital หรือ Digital to Analog การเชื่อมต่อ SD Card Camera PWD RTC และ Touch เป็นต้น
การทำงานของโปรแกรม
-Toolchain หรือเครื่องมือที่ใช้พัฒนา เช่น การเขียนโปรแกรมภาษา C ที่สร้างมาเป็นโปรเจค
-Build tools เป็นเครื่องมีอที่แปลงให้เป็นภาษากลางที่เหมาะสำหรับบอร์ด MCU ESP32
-ESP-IDF เป็นเครื่องมือพื้นฐานที่แปลงโปรเจค Toolchain ให้เป็นภาษาของเครื่อง
5.2. Sensor LDR
ความสว่างมีหน่วยเป็นลักซ์ (lux) เป็นหน่วยที่ใช้วัดค่าความสว่าง (Illuminance) ต่อพื้นที่ หรือคิดเป็นลูเมนต่อตารางเมตร โดยในปกติความสว่างตามสถานที่ต่าง ๆ นั้นได้มาจากแหล่งกำเนิดที่แตกต่างกัน เช่น จากหลอดไฟ ดวงอาทิตย์หรือแสงจากไฟบริเวณข้างเคียง เป็นต้น ในทางปฏิบัติจะมีการกำหนดค่าความสว่างที่เหมาะสม กับการใช้งานในสถานที่นั้น ๆ ซึ่งโดยทั่วไปจะมีค่าไม่น้อยกว่า 50-500 ลักซ์ ตัวต้านทานที่แปรค่าตามแสง (Light Dependent Resistor, LDR) แอลดีอาร์ (LDR) หรือชื่อเต็ม ๆ คือ Light Dependent Resistor หรือตัวต้านทานที่แปรค่าตามแสง คือ ตัวต้านทานชนิดที่เปลี่ยนสภาพความนำไฟฟ้า (Conductance) ได้เมื่อมีแสงมาตกกระทบ ทำจากวัสดุสารกึ่งตัวนำที่ไวต่อแสง บางครั้งเราเรียก LDR เซนเซอร์ชนิดนี้ว่าโฟโตรีซีสเตอร์ (Photoresistor) หรือ โฟโตคอนดัคเตอร์ (Photoconductor) โมดูลวัดความสว่างที่ใช้ LDR เป็นเซนเซอร์ โมดูลนี้ให้สัญญาณเอาต์พุตได้ ทั้งแบบแอนะล็อกที่ช่อง (A0) ซึ่งมีค่าระหว่าง 0 – 1023 และแบบดิจิทัลที่ช่อง (D0) ค่า 0 กับ 1 โดยสามารถปรับระดับแรงดันที่นำเปรียบเทียบได้โดยการหมุนตัวต้านทานปรับค่าได้ (VR) บนบอร์ด และจะต้องป้อนใช้ไฟเลี้ยง 3.3-5V ให้กับวงจร ซึ่งบนบอร์ดจะมีแอลอีดีแสดงสัญญาณไฟเลี้ยง (PWR LED) และระดับสัญญาณที่เปรียบเทียบ (D0 LED) ด้วย
5.3.สวิตช์แบบกดติดกดดับ หรือ push on / push off
เป็นประเภทที่นิยมใช้ในฟังก์ชันการทำงานแบบไม่ซับซ้อน เช่น Start/stop.เมื่อมีการกด Push button Switch หน้าสัมผัสดังกล่าวจะเปลี่ยนสถานะ จาก NO เป็น NC หรือจาก NC จะเป็น NO แต่เมื่อปล่อยมือออกจาก Push button Switch หน้าสัมผัสจะถูกล็อกไว้โดยกลไกลของสวิตซ์ ซึ่งสามารถกลับสู้สภาวะปกติในแหน่งเดิมได้โดยโดยกด Push button Switchอีกครั้งทำให้คลายล็อก จะมีแรงผลักดันจากสปริงให้Push button Switchเข้าสู้สภาวะปกติ
5.4.จอแสดงผล LCD แบบเรียลไทม์
Character LCD เป็นจอที่แสดงผลเป็นตัวอักษรตามช่องแบบตายตัว เช่น จอ LCD ขนาด 16×2 หมายถึงใน 1 แถว มีตัวอักษรใส่ได้ 16 ตัว และมีทั้งหมด 2 บรรทัดให้ใช้งาน การเชื่อมต่ออุปกรณ์จะเป็นการเชื่อมต่อแบบอนุกรม – เป็นการเชื่อต่อกับจอ LCD ผ่านโมดูลแปลงรูปแบบการเชื่อมต่อกับจอ LCD จากแบบขนาน มาเป็นการเชื่อมต่อแบบอื่นที่ใช้สายน้อยกว่า เช่น การใช้โมดูล I2C Serial Interface จะเป็นการนำโมดูลเชื่อมเข้ากับตัวจอ LCD แล้วใช้บอร์ด Arduino เชื่อมต่อกับบอร์ดโมดูลผ่านโปรโตคอล I2C ทำให้ใช่สายเพียง 4 เส้น ก็ทำให้หน้าจอแสดงผลข้อความต่างๆออกมาได้ โดยจะเชื่อมต่อขาอุปกรณ์ดังนี้
-VIN (5V)-> VCC
-GND-> GND
-D21 -> SDA
-D22-> SCL
5.5. Relar 5v
Relay 1 channel DC 5V module
รีเลย์ (Relay) เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ถูกนำมาใช้งานกันอย่างแพร่หลายในวงจรควบคุมอัตโนมัติ โดยจะทำหน้าที่เปรียบเสมือนสวิตซ์ไฟ ที่ใช้แรงดันไฟฟ้าในการเปิด-ปิดอุปกรณ์ไฟฟ้าต่าง ๆ เพื่อควบคุมวงจรอัตโนมัติ หากเกิดข้อผิดพลาดระหว่างวงจรไฟฟ้า รีเลย์ จะทำการสั่งให้เบรกเกอร์ตัดวงจรไฟฟ้าทันที เพื่อความปลอดภัยในการใช้งาน
– รีเลย์ 1 แชนแนล
– แรงดันไฟเลี้ยง : 5Vdc
– สัญญาณทริกทำงานที่ลอจิก 0 (Active Low)
5.6. Applications Blynk
Blynk App คือ แอปพลิเคชันสำเร็จรูปที่ใช้สำหรับงานที่เกี่ยวกับอินเทอร์เน็ตของสรรพสิ่ง (Internet of Things, IoT) ที่ทำให้เราสามารถเชื่อมต่ออุปกรณ์ต่าง ๆ เข้ากับอินเทอร์เน็ตในลักษณะการเชื่อมต่อเครื่องแม่ข่าย (Server) ไปยังอุปกรณ์ลูกข่าย (Client) เช่น Arduino, ESP-8266, ESP-32, NodeMCU และ Raspberry Pi ซึ่งแอปพลิเคชัน Blynk สามารถใช้งานได้ฟรีและใช้งานได้ทั้งบนระบบปฏิบัติการ IOS และ Android
การเริ่มต้นใช้งาน Blynk App
ขั้นตอนการสมัครและเปิดใช้งานแอปพลิเคชัน Blynk App มีดังนี้
1. ค้นหาและติดตั้งแอปพลิเคชัน Blynk – IoT
2. เปิดโปรแกรม Blynk App แล้วทำการสร้างบัญชีผู้ใช้ (account) แล้วเข้าใช้ (sign up) ดังรูปที่ 12.4
3. เมื่อเชื่อมต่อ Blynk Server ได้แล้ว โปรแกรมจะพร้อมให้เราสร้างโปรเจคใหม่ โดยการเลือก ‘+ New Project’ แล้วตั้งชื่อโปรเจค เป็น Blynk Test จากนั้นจึงเลือกอุปกรณ์เป็น NodeMCU และเลือกการเชื่อมต่อเป็นแบบ Wi-Fi จากนั้นจึงกดปุ่ม Create ก็จะมีการส่งอีเมลรหัส Token มาให้ในอีเมลที่ลงทะเบียนไว้ เพื่อให้ผู้ใช้นำไปเป็นรหัสที่ใช้ในการเชื่อมต่อระหว่าง NodeMCU และ Blynk ต่อไป
4. ภายใน Blynk จะมีปุ่มต่าง ๆ ให้เลือกสร้าง App ได้ตามที่ผู้ใช้ต้องการ
5.7. สวิตชิ่งเพาเวอร์ซัพพลาย (Switching Power Supply)
สวิตชิ่งเพาเวอร์ซัพพลาย (Switching Power Supply) คือ อุปกรณ์แปลงแรงดันไฟฟ้ากระแสสลับ AC (Alternating Current) ที่มีแรงดันสูง (High Voltage) แปลงเป็นแรงดันไฟฟ้ากระแสตรง DC (Direct Current) ที่มีแรงดันต่ำ (LowVoltage) เช่น จากแรงดันไฟฟ้าทางด้านอินพุต (Input) 220Vac แปลงเป็นแรงดันไฟฟ้าทางด้านเอาต์พุต (Output) ที่มีแรงดันต่ำ 5Vdc, 12Vdc, 24Vdc เป็นต้น
สวิตชิ่งเพาเวอร์ซัพพลาย (Switching Power Supply) จะทำงานในลักษณะเดียวกันกับหม้อแปลงแรงดัน (Transformer) ทั่วไป แต่สวิตชิ่งเพาเวอร์ซัพพลาย (Switching Power Supply) มีประสิทธิภาพที่ดีกว่าและมีขนาดเล็กกว่า โดยหลักการทั่วไปของสวิตชิ่งเพาเวอร์ซัพพลาย (Switching Power Supply) จะประกอบด้วยดังนี้
1. เรคติไฟเออร์ (Rectifier) ทำหน้าที่แปลงแรงดันไฟฟ้ากระแสสลับ AC (Alternating Current) ให้เป็นแรงดันไฟฟ้ากระแสตรง DC (Direct Current)
2. คอนเวอร์เตอร์ (Converter) ทำหน้าที่แปลงความถี่แรงดันไฟฟ้ากระแสตรง (Frequency Converter DC Voltage) ให้เป็นแรงดันไฟฟ้ากระแสสลับที่ความถี่สูง (High Frequency AC Voltage) และแปลงแรงดันไฟฟ้ากระแสสลับ (AC) ให้เป็นแรงดันไฟฟ้ากระแสตรง (DC) โดยมีความต้านทานทางด้านเอาต์พุตของแรงดันไฟฟ้ากระแสตรงให้ได้ตามความต้องการอีกครั้ง
5.8.โปรแกรมเขียน code python oop
การเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming หรือ OOP) เป็นรูปแบบการเขียนโปรแกรมที่มองทุกอย่างเป็นวัตถุที่มีทั้งข้อมูลและฟังก์ชันการทำงานในข้อมูลก้อนเดียวนั่นคือออบเจ็ค ซึ่งนี่เป็นคุณสมบัติพื้นฐานของออบเจ็คที่มันสามารถมีทั้งข้อมูลและฟังก์ชันภายในตัวมันสำหรับการทำงานที่สมบูรณ์ นอกจากนี้ การเขียนโปรแกรมเชิงวัตถุยังมีคุณสมบัติที่สามารถนำไปใช้เพื่อช่วยให้การเขียนโปรแกรมมีประสิทธิภาพมากขึ้น
นี้คือตัวอย่างในการเขียนโค้ดเพื่อใช้ควบคุม Bord Esp32
การประกาศหรือเรียกใช้งานแอปพลิเคชัน Blynk
#define BLYNK_TEMPLATE_ID "TMPL6Jy8PzI86"
#define BLYNK_TEMPLATE_NAME "NEW"
#define BLYNK_AUTH_TOKEN "ZwWh_WWQ0BrA2oZXrw5dkBDE85Y4eAv_"
#define BLYNK_PRINT Serial
การเรียกใช้ไลบารี่
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
การตั้งค่าอุปกรณ์ที่ใช้งาน
void setup() {
Serial.begin(115200);
pinMode(sw, INPUT);
pinMode(light, INPUT );
pinMode(relay, OUTPUT);
lcd.begin();
lcd.backlight();
digitalWrite(relay,LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
การกำหนดเงื่อนไขการทำงานของอุปกรณ์ให้ทำงานแบบวนลูป
void loop() {
Blynk.run();
int SWe = digitalRead(sw);
if (SWe == 0) {
int light = analogRead (A0);
if (light < 1600) {
Serial.println(" => Very bright");
Serial.println(light);
digitalWrite(relay,LOW);
int Stat = 0 ;
lcd.setCursor(0, 1);
lcd.print ("Light = ");
lcd.setCursor(8, 1);
lcd.print (light);
lcd.setCursor(13, 1);
lcd.print ("OFF");
Blynk.virtualWrite(V6, Stat);
} else {
Serial.println(" => Dark");
Serial.println(light);
digitalWrite(relay,HIGH);
int Stat = 1;
lcd.setCursor(0, 1);
lcd.print ("Light = ");
lcd.setCursor(8, 1);
lcd.print (light);
lcd.setCursor(13, 1);
lcd.print ("ON");
Blynk.virtualWrite(V6, Stat);
}
lcd.setCursor(0, 0);
lcd.print("Sitanan Phetkham");
Blynk.virtualWrite(V5, SWe);
Blynk.virtualWrite(V7, light);
delay (1000);
lcd.clear();
}
if (SWe == 1) {
Serial.println(" ON ");
digitalWrite(relay,HIGH);
int Stat = 1;
lcd.setCursor(0, 0);
lcd.print("Sitanan Phetkham");
lcd.setCursor(2, 1);
lcd.print ("Switch = on");
Blynk.virtualWrite(V5, SWe);
Blynk.virtualWrite(V6, Stat);
}
}
6.ผลการดำเนินงานและผลการทดลอง
6.1บล๊อกไดอะแกรมกรทำงานของระบบ
6.2ผลการทดลองระบบ
6.2.1ตารางบันทึกการรับค่าจากเซนเซอร์วัดปริมาณความเข้มแสง
6.2.2ตารางบันทึกการแสดงสถานะการทำงานของสวิตช์และหลอดไฟผ่านรีเลย์
6.2.3ตารางบันทึกการแสดงค่าและสถานะการทำงานของอุปกรณ์ต่างๆบนแอพพลิเคชั่นบริ้ง
7.สรุปผลการทดลอง
จากผลการทดลองระบบควบคุมปริมาณความเข้มแสงภายในโรงเรือนสำหรับปลูกพืชผักสามารถสรุปได้ดังต่อไปนี้
1.ระบบควบคุมปริมาณความเข้มแสงภายในโรงเรือนสำหรับปลูกพืชผักเป็นไปตามที่กำหนดไว้ในแผนการปฏิบัติงาน
2.เซนเซอร์ (LDR) สามารถรับค่าปริมาณความเข้มแสงได้
3.จอ LCD สามารถแสดงผลแบบเรียลไทม์ได้
4.รีเลย์สามารถทำงานได้ตามเงื่อนไขที่กำหนด
5.สวิตช์เปลี่ยนโหมดสามารถควบคุมการเปลี่ยนโหมดระหว่างอัตโนมัติและโหมดแมนนวลได้ตามที่กำหนดไว้
6.แอพพลิเคชั่นสามารถแสดงค่าของเซนเซอร์,สถานะทำงานของสวิตช์และรีเลย์ได้อย่างรวดเร็ว
7.จากผลการทดลองหลายๆครั้งพบว่าปริมาณความเข้มของแสงที่พืชผักใช้ในการจะเจริญเติบโตจะอยู่ในช่วง 100 – 1600 ของปริมาณความเข้มแสงซึ่งจะเป็นแสงในช่วงเวลา 7:00 น.-10:00 น.
8.หลังจากทำการทดลองจะพบว่าระบบควบคุมปริมาณความเข้มแสงภายในโรงเรือนสำหรับปลูกพืชผักสามารถทำงานได้อย่างมีประสิทธิภาพ
8.อ้างอิง
[1]. Sagar A.Mahajan ; S.D.Markande.Design of intelligent system for indoor lighting. [ออนไลน์] 2557. [สืบค้นเมื่อวันที่ 14 กรกฎาคม 2566 ] จาก .https://ieeexplore.ieee.org/document/7860139
[2]. บุญเรือง วังศิลาบัตร. เซนเซอร์แสง (LDR) [ออนไลน์] . [ สืบค้นเมื่อวันที่ 18 ตุลาคม 2566 ].จาก.https://www.kbmeng.com/media/wysiwyg/pdf/6_.pdf