ผู้เขียนบทความ:นายพีรพัฒน์ คงเสาร์ COE#15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566 กลุ่ม 1
1.ความเป็นมา
ปัจจุบันรถยนต์นับว่าเป็นปัจจัยที่จำเป็นต่อมนุษย์ ซึ่งต้องใช้สำหรับการเดินทางในชีวิตประจำวันประกอบกับอุตสาหกรรมรถยนต์มีการพัฒนาอย่างต่อเนื่อง ทำให้ปริมาณรถยนต์ในปัจจุบัน มีจำนวนมากขึ้นจึงทำให้สถานที่ต่างๆ เช่น ห้างสรรพสินค้า สถานติดต่อราชการ หรือสถานบันเทิงต่างๆ ทำการสร้างลานจอดรถ เพื่อรองรับรถยนต์ที่เข้ามาติดต่อหรือรับบริการ โดยที่ผ่านมาระบบการจดัการลานจอดรถนั้น ไม่ค่อยมีคุณภาพในหลายๆด้าน โดยเฉพาะระยะเวลาในการหาที่จอดรถซึ่งจะทำให้เสียเวลาเป็นอย่างมากกับปริมาณรถที่เข้ามาจอดในลานจอดรถจำนวนมาก
ผู้จัดทำโครงงานนี้จึงมีแนวคิดและเห็นความสำคัญที่เกิดขึ้นจึงเกิดความสนใจที่จะแก้ไขปัญหาดังกล่าวข้างต้นโดยการสร้างระบบลานจอดรถอัจฉริยะเป็นส่วนหนึ่งของกระบวนการช่วยให้มนุษย์ไม่เสียเวลาหาที่จอด
ลานจอดรถอัจฉริยะเป็นปัจจัยหนึ่งที่ช่วยให้ความสะดวกสบายดำเนินชีวิตเป็นอย่างมาก สามารถแสดงผลผ่านทางหน้าจอว่าเหลือที่จอดรถอีกกี่ที่ และยังมีไม้กั้นเปิด-ปิดอัตโนมัติเพื่อความสะดวกสบาย
2.วัตถุประสงค์
2.1เพื่อศึกษาและเข้าใจการเขียนโปรแกรมภาษา C เพื่อตรวจจับรถที่เข้าออกในลานจอดรถ
2.2 เพื่อนำความรู้การเขียนโปรแกรมภาษา C ไปประยุกต์ได้จริง
2.3 เพื่อนำการเขียนโปรแกรมภาษา C ไปใช้ตรวจจับรถที่เข้าออกในลานจอดรถ
3.ขอบเขต
3.1 IR Sensorสามารถตรวจจับรถที่เข้า-ออกจากลานจอดรถได้
3.1.1 เมื่อรถผ่านตัวIR Sensor ตัวที่1 จะสั่งให้ตัวServo Motorเปิด
3.1.2 เมื่อรถผ่านตัวIR Sensor ตัวที่2 จะสั่งให้ตัวServo Motorปิด
3.2 หน้าจอLCD หน้าลานจอดรถสามารถแสดงสถานะผ่านหน้าจอได้
3.2.1 เมื่อรถเข้าผ่านตัวIR Sensor ตัวที่1 จะขึ้นฟังชั้น Check IN
3.2.2 เมื่อรถเข้าผ่านตัวIR Sensor ตัวที่2 จะขึ้นฟังชั้น Check IN –เพื่อทำการลดจำนวนที่จอดรถลง
3.3 ลานจอดรถสามารถแสดงสถานะผ่านหน้าเว็บได้ และยังสามารถเปิด-ปิดตัวServo(ไม้กั้น)
4ประโยชน์ที่คาดว่าจะได้รับ
4.1 ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา C เพื่อตรวจจับรถที่เข้าออกในลานจอดรถ
4.2 สามารถนำความรู้การเขียนโปรแกรมภาษา C ไปประยุกต์ใช้ได้จริง
4.3 สามารถเขียนโปรแกรมภาษา C เพื่อตรวจจับรถที่เข้าออกในลานจอดรถ
5.ความรู้ที่เกี่ยวข้อง
5.1 โมดูล LCD I2C (16×2)
คุณสมบัติเด่นของจอ LCD 1602 พร้อม I2C
- แสดงผลชัดเจน: จอ LCD 16×2 คือพื้นที่สำหรับแสดงข้อความหรือข้อมูลที่มากพอสำหรับโปรเจ็กต์ของคุณ
- การต่อเชื่อมง่าย: ด้วยโมดูล I2C ที่มาพร้อม คุณสามารถเชื่อมต่อจอ LCD ไปยังบอร์ด Arduino ด้วยสายไฟแค่ 2 เส้น
- ปรับแต่งได้เต็มที่: ให้คุณสามารถกำหนดและปรับแต่งการแสดงผลในแบบที่คุณต้องการ
I2C มี 2 เบอร์ ดังนั้นการกำหนด Address ต้องเขียนให้ถูกต้องด้วย
// #define I2C_ADDR 0x3F // ในบางกรณี Address ของ I2C เป็น 0x3f
//ให้เปลี่ยน 0x27 เป็น 0x3F
Vcc -> 5V
Gnd -> Gnd
SDA -> 4
SCL -> 5
ตัวอย่างโค๊ด 1602 2004 LCD Adapter Plate IIC I2C Interface for arduino
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27 // <
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(I2C_ADDR,2,1,0,4,5,6,7);
void setup()
{
// lcd.begin (20,4); // <
lcd.begin (16,2); // <
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // ไปที่ตัวอักษรที่ 0 แถวที่ 1
lcd.setCursor(1,0); // ไปทตัวอักษรที่ 1 แถวที่ 1
lcd.print("Welcome ALL");
lcd.setCursor(3,1); // ไปที่ตัวอักษรที่ 5 แถวที่ 2
lcd.print("ArduinoAll");
}
void loop()
{
}
5.2 โมดูล Servo (MG90S Servo Metal Gear 180)
Servo MG90S ขนาดเล็กแข็งแรง น้ำหนัก 13.4 g เฟือง Servo ทำจากโลหะ ทอร์ก 2.2 kg-cm ที่แรงดัน 6 V ความเร็วในการหมุน 0.08 sec/60degree (6v) หมุนได้ 180 องศา
วิธีการต่ออุปกรณ์ สอนใช้งาน ESP32 MG90S Servo หมุนแบบ 0-180 องศา
1.เชื่อมต่ออุปกรณ์ตามด้านล่าง
ESP32 -> ESP32 MG90S Servo หมุนแบบ 0-180 องศา
• ขา D13 ->สายสีเหลือง
ESP32 -> Switching 5V 10A
• GND -> ( -V )
ESP32 MG90S Servo หมุนแบบ 0-180 องศา -> Switching 5V 10A
• สายสีแดง -> ( +V )
• สายสีน้ำตาล -> ( -V )
โค๊ตตัวอย่างการทำงานของServo MG90S
#include <ESP32Servo.h>
Servo myservo; //ประกาศตัวแปรแทน Servo
void setup()
{
myservo.attach(13); // D22 (กำหนดขาควบคุม Servo)
}
void loop()
{
myservo.write(0); // สั่งให้ Servo หมุนไปองศาที่ 0
delay(1000); // หน่วงเวลา 1000ms
myservo.write(90); // สั่งให้ Servo หมุนไปองศาที่ 90
delay(1000); // หน่วงเวลา 1000ms
myservo.write(180); // สั่งให้ Servo หมุนไปองศาที่ 180
delay(2000); // หน่วงเวลา 2000ms
}
5.3 โมดูล IR Sensor
เซ็นเซอร์ตรวจจับวัตถุสิ่งกีดขวางแบบอินฟาเรด ตัวIR Sensor เป็นเซ็นเซอร์ตรวจจับวัตถุรับค่าเป็นดิจตอล คือ 1และ 0 เมื่อมีวัตถุมาขวางหน้าตัวเซ็นเซอร์จะอ่านค่าเป็น1 และเมื่อไม่มีวัตถุขวางหน้าเซ็นเซอร์เป็น 0 และนี้คือการเรียกใช้โมดูล IR Sensor
วิธีการต่ออุปกรณ์ สอนใช้งาน ESP32 เซ็นเซอร์ตรวจจับวัตถุสิ่งกีดขวางและเส้นขาวดำแบบอินฟาเรด
ESP32 -> เซ็นเซอร์ตรวจจับวัตถุ
• VIN (5V) -> VCC
• GND -> GND
• D32 -> OUT
ตัวอย่างโค๊ต
int buzzer = 22;
int ledPin = 23;
int digitalPin = 32;
int val = 0;
void setup() {
pinMode(buzzer, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(digitalPin, INPUT);
Serial.begin(9600);
}
void loop() {
val = digitalRead(digitalPin);
Serial.print("val = ");
Serial.println(val);
if (val == 0) {
digitalWrite(buzzer, LOW);
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(buzzer, HIGH);
digitalWrite(ledPin, LOW);
}
delay(100);
}
5.4 การใช้งาน HTTP
HTTP ย่อมาจาก HyperText Transfer Protocol เป็นโปรโตคอลที่ใช้งานในด้านเว็บไซต์และในระบบอินเตอร์เน็ต ในปัจจุบันเมื่อต้องการให้อุปกรณ์ต่าง ๆ สามารถสื่อสารกับข้ามแพลตฟอร์ม มักจะนิยมใช้งาน HTTP เนื่องจากเป็นโปรโตคอลมาตรฐานที่มีมาให้ใช้งานในทุกภาษา และทุกอุปกรณ์ที่เชื่อมต่ออินเตอร์เน็ตได้ พื้นฐานของ HTTP มาจากโปรโตคอล TCP ที่มีการใช้เพื่อรับ – ส่งข้อมูลในรูปแบบตามมาตรฐาน และใช้พอร์ต 80 เป็นค่าเริ่มต้น กรณีใช้งานพอร์ตอื่นต้องระบุพอร์ตลงในลิ้งหรือ URL ด้วย
ก่อนเลย เราต้องมาทำความเข้าพื้นฐานการทำงานของเว็บไซต์กันก่อน ทันทีที่มีการพิมพ์ชื่อเว็บไซต์ลงในเว็บเบราว์เซอร์และกดปุ่ม Enter จะมีขบวนการต่าง ๆ ตามแผนผังดังนี้
ฟังก์ชั่นใช้งานที่เกี่ยวข้องกับการใช้ HTTP
ฟังก์ชั่นที่ใช้งานจะแบ่งได้ 2 กลุ่ม ดังนี้
ฟังก์ชั่นใช้สร้าง HTTP Server
ในขณะที่ชุดบทความนี้ได้จัดทำขึ้น ไลบารี่ที่ใช้สร้าง HTTP Server ยังไม่ถูกปล่อยออกมา ทำให้ยังไม่สามารถใช้งานไลบารี่เพื่อสร้าง HTTP Server ได้โดยตรง หากมีการอัพเดทไลบารี่แล้ว จะมีการเพิ่มเนื้อหาในส่วนนี้ต่อไป
ฟังก์ชั่นใช้สร้าง HTTP Client
การใช้งาน HTTP Client จะต้องมีการเรียกใช้ไลบารี่ HTTPClient ทุกครั้งก่อนใช้งาน และรูปแบบของการสร้างออปเจคด้วยคลาส HTTPClient มีรูปแบบดังนี้
HTTPClient::HTTPClient()
ไม่มีค่าพารามิเตอร์
ฟังก์ชั่นที่ใช้กำหนดค่าการขอข้อมูล มีรูปแบบดังนี้
bool HTTPClient::begin(String url); หรือ bool begin(String url, const char *CAcert);
มีรายละเอียดของพารามิเตอร์ดังนี้
- (String) url – ลิ้ง หรือ URL ของเว็บเพจ หรือลิ้งของหน้าที่ต้องการขอข้อมูล
- (const char*) CAcert – กรณีหน้าเว็บเป็น https จะต้องกำกับ CA หรือรหัสใบรับรองด้วย
และมีการตอบกลับเป็นข้อมูลชนิด bool ที่จะเป็น true เมื่อลิ้งถูกรูปแบบ
ฟังก์ชั่นที่ใช้ขอข้อมูลด้วยคำสั่ง GET มีรูปแบบดังนี้
int HTTPClient::GET();
ไม่มีค่าพารามิเตอร์ และตอบกลับมาเป็นข้อมูลชนิด int ซึ่งเป็นรหัสสถานะภาพ หรือรหัสผิดพลาดในการขอข้อมูล
ฟังก์ชั่นที่ใช้ขอข้อมูลด้วยคำสั่ง POST มีรูปแบบดังนี้
int HTTPClient::POST(String payload);
มีรายละเอียดของพารามิเตอร์ดังนี้
- (String) payload – ข้อมูลที่ต้องการส่งไปด้วย คั่นแต่ละชุดข้อมูลด้วยเครื่องหมาย & และข้อมูลต้องมีการเข้ารหัสก่อน
และตอบกลับมาเป็นข้อมูลชนิด int ซึ่งเป็นรหัสสถานะภาพ หรือรหัสผิดพลาดในการขอข้อมูล
รหัสผิดพลาดในการขอข้อมูล
const char* ssid = “ชื่อไวฟาย”;
const char* password = “รหัสไวฟาย”;
WiFiServer server(80); (เรียกตัวแปรเว็บเว็บเวอร์)
ทดลองใช้งาน HTTP Client แบบ GET
สำหรับลิ้งที่ใช้ในการทดลองคือลิ้ง http://ioxhop.info/files/test.txt เมื่อเข้าไปในหน้าเว็บจะพบข้อความว่า Hello, World! ซึ่งหากผลการทดลองถูกต้อง คำว่า Hello, World! จะถูก ESP32 ดึงมาได้
ก่อนอื่น ให้เข้าไปคัดลอกโค้ดที่ https://goo.gl/296Tzy จากนั้นแก้ไขในส่วนของ WIFI_STA_NAME และ WIFI_STA_PASS ให้ถูกต้อง แล้วอัพโหลดโค้ดลงใน NodeMCU-32S ได้เลย
จากนั้น เปิด Serial Monitor ปรับไปที่ 115200 band กดปุ่ม EN แล้วปล่อย 1 ครั้ง หลังจากเชื่อมต่อ WiFi สำเร็จแล้ว จะพบว่า ESP32 สามารถไปดึงข้อมูลจากในลิ้งที่กำหนดมาได้แล้ว
จากผลการทดลอง จะเห็นได้ว่า ESP32 เราสามารถที่จะใช้ HTTP Client ได้ง่าย ๆ เพียงใช้โค้ดไม่กี่บรรทัด ซึ่งโค้ดที่ได้ทดลองไปทั้งหมดมีดังนี้
ตัวอย่างโค๊ต
#include <WiFi.h>
#include <HTTPClient.h>
#define WIFI_STA_NAME "xxxxxxxxxx"
#define WIFI_STA_PASS "xxxxxxxxxx"
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(WIFI_STA_NAME);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_STA_NAME, WIFI_STA_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
String url = "http://ioxhop.info/files/test.txt";
Serial.println();
Serial.println("Get content from " + url);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == 200) {
String content = http.getString();
Serial.println("Content ---------");
Serial.println(content);
Serial.println("-----------------");
} else {
Serial.println("Fail. error code " + String(httpCode));
}
Serial.println("END");
}
void loop() {}
6. ผลการดำเนินงาน
นี้คือไดอะแกรมที่ใช้สำหรับการวางแผนในการทำงานของระบบลานจอดรถนี้
6.1 การวางแผนดำเนินงาน
6.1.1 ออกแบบโครงสร้างลานจอดรถ
เริ่มออกแบบลานจอดรถด้วยการสร้างลานจอดรถแบบ3Dขึ้นมาก่อนโดยใช้โปรแกรมVACTARYในการออกแบบภาพ3D
ภาพนี้คือภาพ3Dที่ได้ทำการออกแบบตัวของลานจอดรถขึ้นมา
6.1.2 ออกแบบโครงสร้างการวางวงจรและตัวโมดูล
ภาพนี้คือภาพ3Dที่ได้ทำการวางตัววงจรและตัวโมดูลของลานจอดรถ
ภาพนี้คือภาพ3Dมุมสูงของตัวลานจอดรถ
ภาพนี้จะเป็นภาพการต่อวงจรทั้งหมดของระบบลานจอดรถ
6.2 ขั้นตอนการทำแผ่นPCB
การดำเนินงานนี้จะมีขั้นตอนการทำบอร์ด PCB และการทำตัวลานจอดรถ
ออกแบบแผ่นPCB เพื่อนำมาเชื่อตัวกับตัวESP32และตัวโมดูลต่าง โดยใช้เว็บ EASY EDAในการออกแบบทั้งหมด
ภาพวงจรที่ได้ทำการออกแบบผ่านเว็บEASY EDA
ภาพการทำแผ่นPCB
ขั้นตอนในการแผ่นPCB
1.เริ่มต้นการปริ้นตัวที่เราได้ออกแบบจากเว็บEASY EDA ปริ้นใส่กระดาษโฟโต้
2.นำกระดาษโฟโต้กับตัวแผ่นทองแดงมาประกบกันและรีดด้วยเตารีดใช้เวลารีดประมาณ10-15นาที
3.นำกระแผ่นทองแดงที่เรารีบมาใส่กับน้ำยากัดทองแดง และใส่ลงไปในเครื่องกัด
4.หลังจากกัดทองแดงออกเสร็จแล้ว เราก็นำแผ่นทองแดงมาขับส่วนที่ไม่จำเป็นออก
5.นำแผ่นทองแดงไปเจาะรูตามที่เราได้ออกแบบไว้ในโปรแกรม เพื่อจะนำมาใส่ตัวESP32และตัวโมดูลต่างๆ
6.ทำการบัดกรีตัวโมดูลต่างลงในแผ่นPCBและใส่PIN HEADERเพื่อที่จะใส่ตัวESP32
7.หลังจากการบัดกรีเสร็จแล้วก็ทำการเช็คว่าที่เราบัดกรีสายไฟติดกันดีไหม
8.ทำการเคลือบด้วยด้วยน้ำยาเคลือบเพื่อให้เกิดสนิมบริเวณทองแดงและตัวที่เราบัดกรีไว้
6.3 การทำตัวลานจอดรถ
ใช้ไม้อัดและไม้ไอติมเป็นองประกอบหลัก นำมาตัดตามขนาดที่ต้องการและติดกันด้วยปืนกาวและน๊อต
ตกแต่งลานจอดรถให้สวยงาม
วางระบบวงจรทั้งหมดตามที่เตรียมไว้
6.4 การทำงานของระบบ
6.5 ส่วนของตัวโค๊ต
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
#define IR_1 2
#define IR_2 4
int spaceAvailable = 4;
int spaceAvailableTotal = 4;
bool sensor1 = false;
bool sensor2 = false;
bool in = false;
bool out = false;
const char* ssid = "MonkeyPeeZ";
const char* password = "0821362500";
WiFiServer server(80);
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" SMART PARKING ");
lcd.setCursor(0, 1);
lcd.print(" Peerapat ");
delay (2000);
lcd.clear();
lcdUpdate();
pinMode(IR_1, INPUT);
pinMode(IR_2, INPUT);
myservo.attach(32);
myservo.write(90);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("Server started");
}
void loop() {
checkIn();
checkOut();
if (spaceAvailable == 0) {
ParkingFull();
}
WiFiClient client = server.available();
if (client) {
String request = client.readStringUntil('\r');
client.flush();
if (request.indexOf("/servo_open") != -1) {
myservo.write(0);
}
if (request.indexOf("/servo_close") != -1) {
myservo.write(90);
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// เพิ่ม CSS และ Bootstrap
client.println("<style>");
client.println("body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; }");
client.println("h1 { color: #333; text-align: center; }");
client.println("a.btn { display: block; margin: 10px auto; width: 100px; text-align: center; text-decoration: none; background-color: #007BFF; color: #fff; border-radius: 5px; }");
client.println("a.btn:hover { background-color: #0056b3; }");
client.println("h2 { color: #333; margin-bottom: 10px; text-align: center; }");
client.println("p { color: #333; font-size: 18px; text-align: center; }");
client.println("</style>");
// ใส่ Bootstrap CSS
client.println("<link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">");
client.println("<!DOCTYPE HTML>");
client.println("<html><meta name='viewport' content='width=device-width, initial-scale=1'><body>");
client.println("<h1>Servo Control</h1>");
client.println("<a class=\"btn\" href=\"/servo_open\">Open Door</a>");
client.println("<a class=\"btn\" href=\"/servo_close\">Close Door</a>");
client.println("<h2>Parking System Status</h2>");
client.print("<p>Spaces Available: ");
client.print(spaceAvailable);
client.print("/");
client.print(spaceAvailableTotal);
client.println("</p>");
client.println("</body></html>");
client.stop();
}
}
void checkIn() {
if (digitalRead(IR_1) == LOW && digitalRead(IR_2) == HIGH && in == false && spaceAvailable > 0) {
myservo.write(0);
if (sensor1 == false && sensor2 == false) {
sensor1 = true;
in = true;
Serial.println("checkIn 1");
}
}
if (digitalRead(IR_1) == HIGH && digitalRead(IR_2) == LOW) {
if (sensor1 == true && sensor2 == false) {
sensor2 = true;
Serial.println("checkIn 2");
}
}
if (digitalRead(IR_1) == HIGH && digitalRead(IR_2) == HIGH && sensor1 && sensor2 && in) {
doorClose();
spaceAvailable--;
lcdUpdate();
Serial.println("spaceAvailable--");
}
}
void checkOut() {
if (digitalRead(IR_1) == HIGH && digitalRead(IR_2) == LOW && spaceAvailableTotal - spaceAvailable != 0 ) {
myservo.write(0);
if (sensor1 == false && sensor2 == false) {
sensor2 = true;
out = true;
Serial.println("checkOut 1");
}
}
if (digitalRead(IR_1) == LOW && digitalRead(IR_2) == HIGH) {
if (sensor1 == false && sensor2 == true) {
sensor1 = true;
Serial.println("checkOut 2");
}
}
if (digitalRead(IR_1) == HIGH && digitalRead(IR_2) == HIGH && sensor1 && sensor2 && out ) {
doorClose();
spaceAvailable++;
lcdUpdate();
Serial.println("spaceAvailable++");
}
}
void doorClose() {
myservo.write(90);
delay(500);
sensor1 = false;
sensor2 = false;
in = false;
out = false;
lcdUpdate();
}
void ParkingFull() {
lcd.setCursor (10, 1);
lcd.print("Full");
}
void lcdUpdate() {
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("Spaces Available");
lcd.setCursor (0, 1);
lcd.print("Level[1]: ");
lcd.setCursor (10, 1);
lcd.print(spaceAvailable);
}
7. สรุปผลและข้อเสนอแนะ
ผลจากการปฎิบัติการทำงานของลานจอดรถทำงานได้อย่างมีประสิทธิภาพ ตามที่ทดลองและคาดหวังไว้
1.สรุปผล
1.1 เซ็นเซอร์ทำงานได้มีประสิทธิภาพ
1.2 ตัวเซอร์โวหรือไม้กันสามารถทำงานได้อัตโนมัติ
1.3สามารถแสดงผลผ่านหน้าจอได้
1.4สามารถแสดงผลและเปิด-ปิดเซอร์โวผ่านหน้าเว็บไซต์ได้
5 ตัวลานจอดรถสามารถทำงานได้จริงและสารมารถนำไปประยุกต์ใช้งานในชีวิตจริงได้
2.ข้อเสนอแนะ
2.1 เพิ่มจำนวนที่จอดรถและเพิ่มระบบฐานข้อมูล (Database) เพื่อบันทึกการเข้าออกของรถแต่ละคัน
2.2 ประยุกต์และทดลองเพื่อนำไปใช้งานสถานที่จริงได้
8. ข้อมูลอ้างอิง
[1] CyberTice การใช้งาน Servo Motor [ออนไลน์]
[สืบค้นวันที่ 21 ตุลาคม 2566] : จาก
https://www.cybertice.com/article/109/สอนใช้งาน-arduino-ควบคุมservo-motor-0-180องศา.com
[2] CyberTice การใช้งาน IR Sensor [ออนไลน์]
[สืบค้นวันที่ 21 ตุลาคม 2566] : จาก
https://www.cybertice.com/article/100/สอนใช้งาน-arduino-เซ็นเซอร์ตรวจจับวัตถุ-ir-infrared.com
[3] CyberTice การใช้งาน LCD 1602 แบบ I2C [ออนไลน์] [สืบค้นวันที่ 21 ตุลาคม 2566] : จาก