โครงงาน ทีÉจอดรถส ่ วนบุคคลระบบ IOT ผ ู้จัดทํา นายประวริศ รอดภัย รหัสประจําตัว ŞŝśŘřŘŝŘŘřś นายอติกันต ์ อนิทรมุณ ี รหัสประจําตัว ŞŝśŘřŘŝŘŘŚŘ เสนอ อาจารย์ อนุวัฒน ์ สุชาโต โครงงานนีเป็ นส่วนหนึÊ Éงของวิชาการพฒันาโปรแกรมบนม ื อถ ื อ วทิยาลยัเทคนิคตรัง สํานักงานคณะกรรมการอาช ี วศ ึ กษา วทิยาลยัเทคนิคตรัง ปี การศ ึ กษา 2566
การพฒันาโปรแกรมบนม ื อถ ื อ ท ีÉจอดรถส ่ วนบุคคลระบบ IOT ผ ู้จัดทํา นายประวริศ รอดภัย รหัสประจําตัว ŞŝśŘřŘŝŘŘřś นายอติกันต ์ อนิทรมุณ ี รหัสประจําตัว ŞŝśŘřŘŝŘŘŚŘ เสนอ อาจารย์ อนุวัฒน ์ สุชาโต โครงงานนีเป็ นส่วนหนึÊ Éงของวิชาการพฒันาโปรแกรมบนม ื อถ ื อ วทิยาลยัเทคนิคตรัง สํานักงานคณะกรรมการอาช ี วศ ึ กษา วทิยาลยัเทคนิคตรัง ปี การศ ึ กษา 2566
ใบรับรองโครงงาน วิทยาลยัเทคนิคตรัง เรืÉอง ทีÉจอดรถส่วนบุคคลระบบ IOT โดย นาย ประวริศรอดภยั รหัส 65301050013 นายอติกนัต์อินทรมุณี รหสัŞŝśŘřŘŝŘŘŚŘ ไดร้ับอนุมตัิให้เป็นส่วนหนÉึงของการศึกษาตามหลกัสูตรประกาศนียบตัรวชิาชีพชÊนสูงั แผนกวิชา ช่างอิเลก็ทรอนิกส์สาขาวิชาอิเล็กทรอนิกส์อุตสาหกรรม (นายวรพงศ์แสนสิงห์) หวัหนา้แผนกวิชาอิเลก็ทรอนิกส์ วนัทÉี........เดือน.....................พ.ศ………… คณะกรรมการสอบโครงงาน ..................................................ประธานกรรมการ (นายวรพงศ์แสนสิงห์) ...................................................กรรมการ (นายอนุวฒัน์สุชาโต) ...................................................กรรมการ (นายวรพงศ์แสนสิงห์)
คํานํา โครงงานเรืÉองทีÉจอดรถส่วนบุคคลระบบ IOT โครงงานเล่มนีÊจัดทําขึÊนเป็ นเอกสาร ประกอบการเสนอโครงงานของนักศึกษาระดับชัÊนประกาศนียบัตรวิชาชีพชัÊนสูง ปี ทีÉ Ś วิทยาลัยเทคนิคตรังภายในเล่มได้จัดทาํตามรูปแบบของรายงานโครงงานเพÉือให้ผูส้นใจได้ใช้ ประกอบการศึกษาโครงงานได้อย่างเต็มทีÉคณะผูจ้ดัทาํหวงัเป็นอย่างยิÉงว่ารายงานเล่มนีÊจะเป็ น ประโยชน์อยา่งมากต่อผศู้ึกษา หากมีขอ้ผิดพลาดประการใดขออภยัไว้ณ ทีนÊี คณะผจู้ดัทาํ นาย ประวริศรอดภยั นายอติกนัต์อินทรมุณี
ก ชืÉอ : นาย ประวริศรอดภยั, นายอติกนัต์อินทรมุณี ชืÉอเรืÉอง : ทีÉจอดรถส่วนบุคคลระบบ IOT สาขาวิชา : อิเล็กทรอนิกส์อุตสาหกรรม คณะวิชา : อิเล็กทรอนิกส์ ทีÉปรึกษา :อนุวฒัน์สุชาโต ปี การศึกษา : ŚŝŞŞ บทคัดย่อ โครงงาน ทีÉจอดรถส่วนบุคคลระบบ IOT จดัทาํขÊนึโดยมีวตัถุประสงค์เพÉือช่วยให้ความสะดวก ในการใชช้ีวิตประจาํวนั วิธีดาํเนินการเริÉมเก็บรวบรวมขอ้มูลเบÊืองตน้ สาํรวจและสัมภาษณ์ความตอ้งการของนกัเรียน นักศึกษาและบุคคลทัวไป ออกแบบศึกษารายละเอียดการสร้างและหาประสิทธิภาพของระบบ Éของ โครงงาน
ข กติติกรรมประกาศ ในการคาํเนินการจดัทาํโครงงาน ทีÉจอดรถส่วนบุคคลระบบ IOT ผูจ้ดัทาํโครงงานขอขอบคุณ อาจารย์พิน ช่วยเจริญ อาจารยป์ระจาํวิชาและอาจารย์ยุทธนากรแสงแกว้ให้คาํแนะนาํและช่วย ตรวจสอบขอ้บกพร่องพร้อมทÊงัเสนอแนวทางแกไ้ขปัญหาต่างๆ และจนสาํเร็จ ทา้ยนÊีผูว้ิจยัขอบพระคุณบุคคลทุกท่านทÉีมิไดเ้อ่ยนามไว้ณ ทÉีนีÊ ทีÉมีส่วนช่วยให้โครงงานให้ สาํเร็จลุล่วงไปไดด้ว้ยดีและหวงัเป็นอยา่งยงÉิว่าโครงงานฉบบันÊีจะอาํนวยความสะดวกผใู้ชง้านหรือ ผทู้ีÉสนใจนาํไปศึกษาและพฒันาตอ่ ให้ดีขÊนึ หากโครงงานฉบบันÊีมีขอ้ผิดพลาดประการใด ผวู้ิจยัขออภยัและนอ้มรับคาํติชมไว้ณ ทÉีนีÊ คณะผจู้ดัทาํ นาย ประวริศรอดภยั นายอติกนัต์อินทรมุณี
ค สารบัญ หน้า บทคดัย่อ ก กิตติกรรมประกาศ ข สารบญัค-ง สารบญัตาราง จ สารบญัภาพ ฉ-ช บททีÉ1 บทนาํ ř.řความเป็ นมาของโครงงาน 1 ř.Śวตัถุประสงค์1 1.3 ขอบเขตโครงงาน 1 1.4 ประโยชน์ทีÉไดร้ับจากโครงงาน 1 ř.ŝวิธีดาํเนินการ 2 ř.Ş งบประมาณ 3 ř.şการพฒันาต่อยอด 3 บททีÉ 2 เอกสารวิจยัทีÉเกีÉยวขอ้ง 2.1 Adaptor 4-5 2.2 RFID Module 6-8 2.3 เซอร์โวมอเตอร์ 9-10 2.4 Module ESP32 11-13 2.5 ภาษา C 14-16 บททีÉ 3 วิธีดาํเนินการวจิยั 3.1 IOT (Internet of Things) 17-18 3.2 Blynk 19 3.3 บลอ็กไดอะแกรม 20 3.4 รูปแบบการต่อวงจร 21 3.5โคด้โปรแกรม 22-26 3.6โฟลค์ชาร์ต 27 3.7 ขัÊนตอนปฏิบตัิงาน ŚŠ-śŘ
ง บททีÉ 4 ผลการทดลอง 4.1การทดลอง 31 4.2 ผลการทดลอง 31 บททีÉ 5 สรุปผลการทดลอง ŝ.ř สรุปผลการทดลอง 32 ŝ.Ś ปัญหาและอุปสรรคในการทาํงาน 32 5.3ขอ้เสนอแนะ 32 บรรณานุกรม 33 ภาคผนวก 34-42 ประวตัิผจู้ดัทาํ 43-44
จ สารบัญตาราง ตารางทีÉหนา้ ř.řวิธีการดาํเนินการ 2 ř.Ś งบประมาณ 3
ฉ สารบัญภาพ ภาพทีÉหนา้ 2.1 Adaptor 5 2.2 RFID Module 6 Ś.ś หลกัการทาํงานของ RFID Module 8 Ś.Ŝ ประเภทของเซอร์โวมอเตอร์ 9 2.5 Data sheet Module ESP32 12 2.6 Module ESP32 13 3.1รูปการทาํงานของBlynk 19 3.2 บลอ็กไดอะแกรม 20 3.3 รูปแบบการต่อวงจร 21 3.4 แผนภาพขัÊนตอนการทาํงาน 27 3.5 บอร์ด ESP 32 28 ś.Şการทดสอบการทาํงานของวงจร 28 3.7การใชง้าน ผา่น Blynk 29 3.8 การเบิร์นบอร์ด 29 ś.šโฟลค์ชาร์ต 30
1 บททีÉř บทนํา 1.1 ความเป็ นมาของโครงงาน เนืÉองจากโมเดลชิÊนนีÊเป็ นแบบจาํลองทีÉจอดรถส่วนบุคคลระบบ IOT เพืÉอนาํมาสาธิตการต่อ ยอดในการสร้างทีÉจอดรถของของหน่วยงานต่างๆทีÉมีปัญหาใรการหาทีÉจอดรถ ซึÉงตอ้งขบัรถวน หาทีÉจอดรถจึงทาํให้เสียเวลา กลุ่มผวู้ิจยัจึงไดด้ดัแปลงและพฒันาโครงงานทีÉจอดรถส่วนบุคคล ระบบ IOT ควบคุมดว้ยระบบคอลโทรล ซÉึงง่ายต่อการใชง้านและสะดวกต่อผใู้ชป้ระตูมว้น เปิ ด-ปิ ด โดยระบบIoTทีÉจะใช้เซอโวมอเตอร์ เป็ นไมก้Êนที ัÉจอดรถโดยใชแ้อป Blynk 1.2 วัตถุประสงค์ของโครงงาน 1.เพืÉอลดเวลาในการคน้หาทีÉจอดรถและลดการเสียเวลาทีÉไม่จาํเป็นในการหาทีÉจอดรถ 2.เพืÉอศึกษาความพึงพอใจของนกัศึกษา ปวช.และ ปวส.วิทยาลยัเทคนิคตรัง ทีÉมีต่อทีÉจอด รถส่วนบุคคลระบบ IOT 1.3 ขอบเขตโครงงาน 1.พฒันาระบบ IOT ทีÉใชเ้ซ็นเซอร์RFID Module เพืÉอเปิ ด-ปิดไมก้Êนที ัÉจอดรถจอดรถ และ จะเลือกทีÉจอดรถตามหมายเลขของ Tag 2.สมารถเปิ ด-ปิดไมก้Êนที ัÉจอดรถผา่นแอปพลิเคชน ัÉ Blynk เมืÉอตอ้งการจะออกจากทÉีจอดรถ ř.Ŝ ประโยชน์ทีÉได้รับจากโครงงาน 1.4.1 สะดวกในการเดินทาง เขา้-ออกจากโรงจอดรถ 1.4.Śไดศ้ึกษาการเขียนโปรแกรม และการควบคุมดว้ยระบบ IOT
2 1.5 วิธีการดําเนินการ ตารางทีÉř.řวิธีการดาํเนินการ ระยะเวลาดาํเนินงาน(สัปดาห์ทีÉ) กิจกรรม/ขัÊนตอนการ ดําเนินงาน พ.ค.66 มิ.ย. 66 ก.ค. 66 ส.ค. 66 หมายเหตุ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ขัÊนตอนการเตรียมการ คน้ควา้ขอ้มูล นาํเสนอโครงงาน ขัÊนดําเนินการ จดัทาํอุปกรณ์ ดาํเนินจดัทาํ ขัÊนสรุปและ ประเมินผล ทดลองและสรุปผล สรุปและประเมินผล และจดัทาํรูปเล่ม
3 1.6 งบประมาณ ตารางทีÉř.Ś งบประมาณ 1.7การพฒันาต่อยอด 1.7.1 เพิÉมโปรแกรมในการเพิÉมเงืÉอนไขต่างๆ เช่น หากมีรถจอดอยู่เซ็นเซอร์อินฟราเรดจะ ตรวจจบัวตัถุแลว้เลือกทÉีจอดรถถดัไปให้หรือการเพÉมิการยนืยนัตวัตนหากทÉีจอดรถนัÊนไม่ใช่ ของ ตวัเองระบบจะแจง้เตือนไปยงัผดูู้แล ř.ş.Ś เพิÉมสวิตช์เปิ ด-ปิดไมก้Êน เมื ัÉอไม่ไดพ้กพามือถือ รายการอปุกรณ์ราคา จาํนวน บอร์ด ESP32 350 1 เซอร์โวมอเตอร์ 60 3 เซนเซอร์ RFID Module RC-522 + Tag 120 3 สายเชืÉอมต่อวงจร 100 1 Adapter 200 โครงสร้างสาํหรับวางระบบ 1400 รวม 2590
4 บททีÉŚ เอกสารงานวิจัยและเกียวข้องÉ ในการทาํโครงงานชิÊนนีÊไดศ้ึกษาขอ้มูลและเอกสารต่างๆ ทÉีเกีÉยวขอ้งกบัโครงงาน ได้ นาํเสนอตามลาํดบัดงัต่อไปนÊี จากเอกสารและงานวิจยัทÉีเกีÉยวของดงัต่อไปนÊี 2.1 Adaptor 2.2 RFID Module 2.3 เซอโวมอเตอร์ 2.4 Module ESP32 2.5 ภาษา C 2.1 Adaptor ก่อนทÉีจะรู้วา่ Adaptor ทาํหนา้ทีÉอะไรใชง้านอยา่งไร สิÉงทีÉตอ้งรู้ก่อนคือ Adaptor หรือ อะแดปเตอร์ นัÊนแปลวา่อะไร โดย Adaptor แปลว่า เครืÉองมือหรืออุปกรณ์ทีÉเชืÉอมต่อกบัส่วนทÉีมีขนาดหรือแบบ ทีÉแตกต่างกนัเพÉือให้เขา้กนั ไดก้บัอุปกรณ์ต่าง ๆ ซึÉง Adaptor คือการแปลงแรงดนัของไฟฟ้าทีÉสูงถึง 220 โวลตใ์นบา้นใหเ้ป็นแรงดนั ไฟฟ้าตÉาที ํÉเสถียรอยู่ทีÉ5โวลตถ์ึง20โวลต์เพÉือให้ผลิตภณัฑ์ อิเล็กทรอนิกส์ต่าง ๆ สามารถทาํงานไดต้ามปกติถา้ใหย้กตวัอยา่งแบบเห็นภาพไดช้ดัเจนก็คือเป็น ตวัปรับต่อ ตวัปรับแผงวงจร ทÉีมีสายไฟเชืÉอมต่อระหวา่งเครืÉองคอมพิวเตอร์หรือกบัอปุกรณ์ อิเล็กทรอนิกส์อืÉน ๆ ซึÉงถา้หากไม่มีตวัAdaptorก็จะทาํให้ไม่สะดวกต่อการใชง้านอิเลก็ทรอนิกส์ ต่าง ๆ ในชีวิตประจาํวนัของเราได้อะแดปเตอร์นÊนัเรียกไดว้า่เป็นแหล่งจ่ายไฟภายนอกเป็น อุปกรณ์แปลงแรงดนั ไฟฟ้า สําหรับอุปกรณ์อิเลก็ทรอนิกส์พกพาขนาดเลก็และเครÉืองใชไ้ฟฟ้า พบ ไดท้วÉัไปในผลิตภณัฑอ์ิเล็กทรอนิกส์ขนาดเล็กเช่น โทรศพัทม์ ือถือและคอมพิวเตอร์โนต้บุ๊กเป็น ตน้
5 2.1.1 Adapter ทําหน้าทีÉอะไรบ้าง ? หลงัจากทีÉไดท้าํความรู้จกักบัเจา้ตวัAdaptor กนั ไปบา้งแลว้มาดูหนา้ทีÉหลกัการทาํงานของ Adaptor กนับา้งดีกวา่วา่จริง ๆ แลว้ Adaptor นัÊนมีหนา้ทÉีหลกัๆ อะไรบา้งก่อนอÉืนตอ้งเขา้ใจก่อนวา่อุปกรณ์ ทางดา้นอิเลก็ทรอนิกส์แทบทุกชนิดลว้นแลว้ตอ้งใชไ้ฟกระแสตรงแต่ไฟฟ้าตามบา้นเรานÊนเป็ น ั กระแสสลบัซÉึงจะมีแรงดนัไฟฟ้าสูงถึง 220 โวลต์นบัวา่เป็นแรงดนั ไฟฟ้าทีÉมีค่าสูงเกินไปสาํหรับ การใชง้านอุปกรณ์ทางอิเลก็ทรอนิกส์ตา่ง ๆ ดงันÊนั ในการทาํงานของอะแดปเตอร์อธิบายไดง้่าย ๆ ก็ คือทาํหนา้ทีÉ แปลงไฟฟ้า จากไฟฟ้ากระแสสลบั (AC) ใหเ้ป็นไฟฟ้ากระแสตรง (DC) ทีÉมีความต่าง ศกัยต์ Éาลงไป เพื ํÉอให้สามารถจ่ายกระแสไฟฟ้ากบัอปุกรณ์อิเลก็ทรอนิกส์ไดน้นเองัÉ ภาพทีÉ2.1 Adaptor
6 2.2 RFID Module อาร์เอฟไอดี (RFID - Radio frequency identification) เป็นเทคโนโลยทีÉีใชค้ลÉืนวิทยุ (Radio frequency) ในการเก็บขอ้มูลเพืÉอใชร้ะบุตวัตน เช่น นาํไปแปะกบัสิÉงของเพืÉอใชร้ะบุตวัสิÉงของ ใช้ กบับตัรนกัเรียนเพÉือระบุขอ้มูลนกัเรียน Ś.Ś.ř ส่วนประกอบของ RFID Module เครืÉองอา่น / เขียน RFID (RFID Reader) เป็ นเครืÉองทีÉใชอ้่านขอ้มูล หรือเขียนขอ้มูลลงบตัร RFID ซึÉงเครืÉองทีÉใชอ้่าน/เขียนนีÊจะถูกแบ่งออกเป็ นช่วงความถีÉทีÉรองรับ รวมถึงรวมถึงรองรับการ อ่านเพียงอยา่งเดียว หรือรองรับการเขียนดว้ย บตัร RFID หรือแทก็RFID (RFID Tag) - ภายในจะประกอบไปดว้ย 2 ส่วน คือส่วนเก็บ ขอ้มูลและส่วนเสาร์อากาศ ตวัแทก็นÊีสามารถเก็บขอ้มูลไวไ้ดโ้ดยไม่ตอ้งใชพ้ลงังาน เมÉือมีการส่ง คลืÉนวิทยุเขา้มาทีÉตวัแทก็ตวัแทก็ก็จะส่งเป็นสัญญาณขอ้มูลกลบัไป แท็ก RFID จะถูกแบ่งออกเป็ น ช่วงความถีÉทีÉรองรับเช่นเดียวกบัเครÉืองอ่าน / เขียน และยงัแบ่งไดต้ามความจุของขอ้มูลอีกดว้ย Ś.Ś.Śการต่อใช้งาน โมดูล RFID Module ร่วมกับ Arduino MOSI - 11 MISO - 12 SCK - 13 ภาพทีÉŚ.2 RFID Module
7 NSS - 10 RST - 9 VCC - 3.3V GND – GND หรือถา้บนบอร์ดเขียนอีกแบบ SDA - 10 SCK - 13 MOSI - 11 MISO - 12 IRQ -ไม่ตอ้งต่อ GND - GND RST - 9 3.3V - 3.3V 2.2.3 หลกัการทํางาน หลกัการทาํงานเบÊืองตน้ของ RFID 1. Reader จะปล่อยคลืÉนแม่เหล็กไฟฟ้าออกมาตลอดเวลาและคอยตรวจจบัวา่มีTagในบริเวณ สนามแม่เหลก็ไฟฟ้าหรือไม่หรืออีกนยัหนÉึงก็คือการคอยตรวจจบัวา่มีการมอดูเลตสัญญาณเกิดขÊึน หรือไม่ 2. เมืÉอมี Tagขา้มาอยใู่นบริเวณสนามแม่เหลก็ไฟฟ้า Tagจะไดร้ับพลงังานไฟฟ้าทีÉเกิดจากการ เหนีÉยวนาํของคลืÉนแม่เหลก็ไฟฟ้าเพÉอให้ ืTag เริÉมทาํงาน และจะส่งขอ้มูลในหน่วยความจาํทีÉผา่น การมอดูเลตกบัคลืÉนพาหะแลว้ออกมาทางสายอากาศทÉีอยู่ภายในแทก็ 3. คลืÉนพาหะทีÉถูกส่งออกมาจากแทก็ส์จะเกิดการเปลีÉยนแปลงแอมปลิจูด, ความถีÉ หรือเฟส ขึÊนอยู่ กบัวิธีการมอดูเลต 4. Reader จะตรวจจบัความเปลีÉยนแปลงของคลืÉนพาหะแปลงออกมาเป็นขอ้มูลแลว้ทาํการถอดรหสั เพืÉอนาํขอ้มูลไปใชง้านต่อไป หลกัการทาํงานของPassive Tag ในย่านความถีÉตํÉาและสูง(LF และ HF) จะใช้หลกัการคู่ควบแบบเหนÉียวนาํ (Inductive coupling) ซึÉง เกิดจากการอยใู่กลก้นัของขดลวดจากเครÉืองอา่นทีÉกาํลงัทาํงานและสายอากาศของป้าย ทาํใหเ้กิด
8 การถ่ายเทพลงังานจากเครÉืองอ่านไปยงัป้ายผา่นสนามแม่เหลก็ไฟฟ้าทÉีเกิดขึÊน เมืÉอไมโครชิปไดร้ับ พลงังานก็จะทาํงานตามทีÉไดต้Êงัค่าไว้โดยเครÉืองอา่นจะรับรู้ไดจ้ากสนามแม่เหลก็ทÉีส่งมาจากป้าย จากหลกัการทาํงานแบบคู่ควบเหนÉียวนาํทาํให้ระยะในการอ่านขอ้มูลสูงสุดประมาณ 1 เมตร แต่ ทัÊงนีÊขึÊนอยกู่บักาํลงังานของครืÉองอ่าน และ คลืÉนความถีÉวิทยทุÉีใช้ ภาพทีÉ 2.3 หลกัการทาํงานของ RFID Module
9 ภาพทีÉŚ.4 ประเภทของเซอร์โวมอเตอร์ Ś.ś เซอร์โวมอเตอร์ เซอร์โวมอเตอร์ (Servo Motor) เป็ นมอเตอร์ทีÉมีการควบคุมการเคลืÉอนทีÉของมนั (State) ไม่ วา่จะเป็นระยะความเร็ว มุมการหมุน โดยใชก้ารควบคุมแบบป้อนกลบั (Feedback control) เป็น อุปกรณ์ทีÉสามารถควบคุมเครืÉองจกัรกล หรือระบบการทาํงานนÊนัๆ ใหเ้ป็นไปตามความตอ้งการ เช่น ควบคุมความเร็ว(Speed),ควบคุมแรงบิด(Torque),ควบคุมแรงตาํแหน่ง (Position),ระยะทาง ในการเคลืÉอนทีÉ(หมุน) (Position Control) ของตวัมอเตอร์ได้ซÉึงมอเตอร์ทัวไปไม่สามารถควบคุม É ในลกัษณะงานเบÊืองตน้ได้โดยใหผ้ลลพัธ์ตามความตอ้งการทีÉมีความแม่นยาํสูง ขนาดของServo Motorจะมีหน่วยในการบอกขนาดเป็นวตัต์(Watt)Servo Motorของ Panasonic จะมีขนาดตัÊงแต่ 50W-15kWทาํให้ผใู้ชง้านมีความหลากหลายในการใชง้าน Ś.ś.ř ประเภทของเซอร์โวมอเตอร์ โดยทัวจะมีทัÉ Êงดีซีและเอซีเซอร์โว ในเครืÉองจกัรรุ่นเก่าๆเราจะพบว่า DC Servo Motor มี การใชเ้ครืÉองจกัรกลอุตสาหกรรมมากกวา่AC Servo Motor เนืÉองจากช่วงทีÉผา่นมาการควบคุม กระแสกระแสสูงๆนัÊนจะตอ้งใช้SCRs แต่ปัจจุบนัทรานซิสเตอร์ไดพ้ฒันาขีดความสามารถใหต้ดั ต่อกระแสสูงและใชง้านทีÉความถีÉไดสู้งๆขÊึน จึงทาํใหร้ะบบควบคุมทางเอซีและระบบเซอร์โวไดถู้ก นาํมาใชง้านมากขÊึน ซึÉงสามารถแยกประเภทของเซอร์โวไดด้งันÊี 1. มอเตอร์ชนิดทีÉมีแปรงถ่าน เซอร์โวมอเตอร์ชนิดนีÊทีÉสเตเตอร์จะเป็นแม่เหล็กถาวร ส่วนโรเตอร์ยงัใชแ้ปรงถ่านและ คอมมิวเตอร์เรียงกระแสเขา้สู่ขดลวดอาร์เมเจอร์เหมือนกบัดีซีมอเตอร์ทวไป Éั 2. เซอร์โวมอเตอร์ชนิดทีÉไม่มีแปรงถ่าน เซอร์โวมอเตอร์ในกลุ่มนีÊประกอบดว้ยดีซีเซอร์โว(DC Brushless Servo ◌่โรเตอร์ทาํดว้ย แม่เหลก็ถาวร) เอซีเซอร์โว(AC Servo) ซึÉงมีทัÊงแบบซิงโครนสัเซอร์โวอะซิงโครนสัเซอร์โว (การ นาํอินดคัชนัÉมอเตอร์มาใชท้าํเป็นระบบขบัเคลืÉอนเซอร์โวมอเตอร์) และ สเตปปิÊงเซอร์โวมอเตอร์
10 Ś.ś.Śหลกัการทํางานของเซอร์โวมอเตอร์ การทาํงานของเซอร์โวมอเตอร์ชนิดนÊีจะคลา้ยกบัการทาํงานของซิงโครนสัมอเตอร์3 เฟส กล่าวคือเมืÉอมีการควบคุมให้คอนโทรลเลอร์จ่ายกระแสไฟฟ้าเขา้ไปยงัขดลวดทีÉสเตเตอร์ แกน เหลก็ของสเตเตอร์จะกลายเป็นแม่เหลก็ไฟฟ้าและหมุนเคลÉือนทีÉดว้ยความเร็วทÉีแปรผนัตามความถÉี ซึÉงเรียกว่าความเร็วซิงโครนสั (synchronous speed) หรือความเร็วสนามแม่เหลก็หมุน และจะดูดให้ โรเตอร์ซึÉงเป็นแม่เหลก็ถาวรหมุนเคลืÉอนทีÉตาม จากลกัษณะโครงสร้างของโรเตอร์และหลกัการทาํงานทีÉเหมือนกบัซิงโครนสัมอเตอร์ซÉึง เป็ นมอเตอร์แบบเอซี แต่ไม่มีแปรงถ่าน (Brushless) ไม่มีซีÉคอมมิวเตอรเตอร์จึงทาํให้มอเตอร์ชนิด นีÊมีชืÉอเรียกขานแตกต่างกนัออกไป เช่น เรียกทบัศพัทว์่าPermanent Magnet Synchronous Motor(PMSM) ซึÉงหมายถึงซิงโครนสัมอเตอร์ทีÉไม่มีแปรงถ่าน บา้งก็เรียกว่าเอซีเซอร์โวมอเตอร์ (AC Servo motor) หรือบา้งก็เรียกสÊันๆยอ่ๆว่า AC Brushless หรือ Brushless Motor
11 2.1 Module ESP32 ผูส้ร้างชิพ ESPคือคุณ TeoSwee Ann ชาวสิงคโปร์แห่งบริษัท EspressifSystem โดยใน โมดูล ประกอบด้วย ชิป Microcontroller + Wi-Fi Module ราคาถูก เพียง 100 กว่า ดังนัÊน ตัวมัน สามารถโปรแกรม ลงไปไดท้า ให้สามารถนา ไปใช้งานแทนไมโครคอนโทรลเลอร์ไดเ้ลยและมี พืÊนทีÉโปรแกรมทีÉมากถึง 4MB ทาํให้มีพÊนที ืÉเหลือมากในการเขียนโปรแกรมลงไป ESP32 คือ wifi microcontroller ทีÉถูกพฒันาต่อจาก ESP8266 โดยเพิÉม CPU เป็ น 2 core, WiFi ทีÉเร็วขึÊน, มีขา GPIO ให้ใช้งานมากขึÊน และรองรับ Bluetoothอีกดว้ย นอกจากนีÊESP32ยงัมา พร้อมกบัtouch-sensitive pins ทีÉสามารถใชป้ลุก ESP32จากโหมดdeepsleepและยงัมีhall effect sensorและtemperature sensor ในตวั (รุ่นล่าสุดของ ESP32ไม่มีtemperature sensor ในตวัอีกแลว้) และแน่นอนวา่ดว้ยคุณสมบตัิทÉีดีกวา่มากจึงทาํให้ESP32 มีราคาแพงกวา่ESP8266 พอสมควร โดยปกติแลว้ ESP32 จะใช้Arduino IDE ในการเขียนโปรแกรมควบคุม เช่นเดียวกบัESP8266 ซึÉง ผเู้ขียนตอ้งมีความรู้ในการเขียน codeดว้ยภาษา Lua หรือ C++ หรือ microPythonแต่สําหรับผทู้ Éีจะ ใชง้านในการทาํอุปกรณ์สมาร์ทโฮม คงไม่อยากเขียน code ใหวุ้น่วาย ปัจจุบนัมีโปรแกรมทÉีช่วยให้ คุณไม่ตอ้งเขียน code เช่น ESPHome หรือ TASMOTA ทาํให้ชีวิตง่ายขÊึนอีกเยอะโดยตวั ไอซี ESP32 มีสเปคโดยละเอียดดงันÊี ซีพียูใชส้ถาปัตยกรรม Tensilica LX6แบบ 2แกนสมอง สัญญาณนาฬิกา 240MHz มีแรมในตวั512KB รองรับการเชืÉอมต่อรอมภายนอกสูงสุด 16MB มาพร้อมกบัWiFi มาตรฐาน 802.11b/g/nรองรับการใชง้านทÊงในโหมด ั Station softAP และ Wi-Fi direct มีบลูทูธในตวัรองรับการใชง้านในโหมด2.0และโหมด4.0 BLE ใชแ้รงดนัไฟฟ้าในการทาํงาน 2.6V ถึง3V
12 2.1.1 ขาใช้งานต่าง ๆ ของ ESP32 รองรับการเชืÉอมต่อบัสต่าง ๆ มีGPIO จาํนวน 32 ช่อง รองรับ UART จาํนวน 3 ช่อง รองรับ SPIจาํนวน 3 ช่อง รองรับ I2C จาํนวน 2 ช่อง รองรับ ADC จาํนวน 12 ช่อง รองรับ DAC จาํนวน 2 ช่อง รองรับ I2 Sจาํนวน 2 ช่อง รองรับ PWM / Timer ทุกช่อง รองรับการเชืÉอมต่อกบั SD-Card ภาพทีÉŚ.5 Data sheet Module ESP 32
13 2.1.2 เซ็นเซอร์ต่างๆของ ESP32 วงจรกรองสัญญาณรบกวนในวงจรขยายสัญญาณ เซ็นเซอร์แม่เหลก็ เซ็นเซอร์สัมผสั (Capacitive touch) รองรับ 10 ช่อง รองรับการเชืÉอมต่อคลิสตอล 32.768kHz สาํหรับใชก้บัส่วนวงจรนบัเวลาโดยเฉพาะ 2.1.3 ESP32 ยังรองรับฟังก์ชัÉนเกียÉวกบัความปลอดภัยต่างๆ ดังนีÊ รองรับการเขา้รหสั WiFi แบบ WEP และ WPA/WPA2 PSK/Enterprise มีวงจรเขา้รหสั AES / SHA2 / Elliptical Curve Cryptography / RSA-4096 ในตวั 2.1.4 ปรสิทธิภาพการใช้งานของ ESP32 รับ – ส่งขอ้มูลไดค้วามเร็วสูงสุดทีÉ150Mbps เมืÉอเชืÉอมต่อแบบ 11n HT40 ไดค้วามเร็ว สูงสุด 72Mbps เมืÉอเชืÉอมต่อแบบ 11n HT20 ไดค้วามเร็วสูงสุดทีÉ54Mbps เมืÉอเชืÉอมต่อแบบ 11g และไดค้วามเร็วสูงสุดทีÉ11Mbps เมืÉอเชืÉอมต่อแบบ 11b เมืÉอใชก้ารเชืÉอมต่อผา่นโปรโตคอล UDP จะสามารถรับ – ส่งขอ้มูลไดท้ ีÉความเร็ว 135Mbps ในโหมด Sleep ใชก้ระแสไฟฟ้าเพียง2.5uA ภาพทีÉŚ.6 Module ESP32
14 2.4 ภาษา C 2.4.ř โครงสร้างโปรแกรมภาษา C โปรเซสเซอร์ไดเร็กทีฟ (Preprocessor directives) โดยส่วนนีÊจะเป็ นส่วนทีÉคอมไพลเลอร์จะมีการประมวลผลและทาํตามคาํสÉงัก่อนทÉีจะมีการคอมไฟล์ โปรแกรมซึÊงจะเริÉมตน้ดว้ยเครืÉองหมายไดเร็กทีฟ (dircctive) หรือเครืÉองหมายสีÉเหลีÉยม #แลว้จึงตาม ด้วยชืÉอทีÉตอ้งการเรียกใช้หรือกาํหนดโดยปกติแลว้ ส่วนนÊีจะอยู่ในส่วนบนสุด หรือส่วนหัวของ โปรแกรมและตอ้งอยนู่อกของฟังก์ชนÉัหลกัใดๆก็ตาม #include เป็นคาํสัÉงทีÉใช้อ้างอิงไฟล์ภายนอก เพืÉอเรียกใช้ฟังก์ชัÉนหรือตัวแปรทีÉมีการสร้างหรื อ กาํหนดไวใ้นไฟลน์ Êนัรูปแบบการใชง้านคือ #include<ชืÉอไฟล์.h> ตวัอยา่งทÉี1 #include<Wire.h> #include<Time.h> จากตวัอย่างจะเห็นวา่ ไดม้ีการอา้งอิงไฟล์Wie.hและไฟล์Time.h ซึÉงเป็ นไลบารีÉพืÊนฐานทีÉมีอยู่ ใน Arduino ทาํให้เราสามารถใชฟ้ ังก์ชนเกีÉัÉยวกบัเวลาทีÉไลบารีÉ Time มีการสร้างไวใ้ห้ใชง้านได้ การอา้งอิงไฟลจ์ากภายในหรือการอา้งอิงไฟลไ์ลบารีÉทีÉมีอยแู่ลว้ใน Arduino #define เป็นคาํสÉงที ัÉใชใ้นการแทนขอ้ความทีÉกาํหนดไวด้ว้ยขอ้ความทีÉกาํหนดไวซ้Éึงการใชค้าํสÉงนี ัÊ ขอ้ดีคือจะไม่มีการอา้งอิงกบัตวัโปรแกรมเลย รูปแบบ #define NAME VALUE ตวัอยา่งทÉีŚ #define LEDPIN 13 จากตวัอย่างไม่วา่คาํวา่LEDPIN จะอยสู่ ่วนใดของโคด้โปรแกรมก็ตามคอมไพลเ์ลอร์จะแทนคาํวา่ LEDPIN ดว้ยเลขřśแทน ซึÉงขอ้ดีคือเราไม่ตอ้งสร้างตวัแปรขÊึนมาเพืÉอเปลืองพืÊนทีÉแรมและยงัช่วย ใหโ้ปรแกรมทาํงานเร็วขÊึนอีกดว้ย
15 2.4.Ś ส่วนของการกาํหนดค่า (Globaldeclarations) ส่วนนีÊจะเป็ นส่วนทีÉใชใ้นการกาํหนดชนิดตวัแปรแบบนอกฟังก์ชน หรือประกาศฟังก์ชั ÉันÉ เพืÉอให้ฟังกช์ นทีÉัÉประกาศสามารถกาํหนด หรือเรียกใชไ้ดจ้ากทุกส่วนของโปรแกรม เช่น int pin = 13; Void blink(void); ฟังก์ชัน É setup() และฟังก์ชัน É loop() เป็นคาํสัÉงทีÉถูกบงัดบั ใหต้อ้งมีในทุกโปรแกรม โดยฟังกช์น Éั setup0 จะเป็ นฟังก์ชันแรกทีÉ Éถูกเรียกใช้นิยมใชก้าํหนดคÉา หรือเริ ํÉมตน้ ใชง้านไลบารีÉต่างๆเช่น ใน ฟังก์ชัน É setup() จะมีคาํสัÉง pinMode() เพืÉอกาํหนดใหข้าใดๆ ก็ตามเป็นดิจิตอลอินพุตหรืเอาตพ์ุต ส่วนฟังก์ชัน É Loop() จะเป็ นฟังก์ชันทีÉ Éทาํงานหลงัจากฟังก์ชน Éั setup() ไดท้าํงานเสร็จสิÊนไปแลว้และ มีการวนรอบแบบไม่รู้จบ เมืÉอฟังก์ชัน É loop() งานครบตามคาํสัÉงแลว้ ฟังก์ชน Éั loop() ก็จะถูกเรียก ขึÊนมาใชอ้ีก ตวัอยา่งทÉี3 int pin = 13 void setup(){ pinMode(pin,OUTPUT); } void loop(){ digital(pin,HIGH); delay(1000); digitalWrite(pin,LOW); delay(1000); } จากตวัอย่างทีÉ3 จะเห็นว่ามีการประกาศตวัแปรแบบนอกฟังกช์นÉัทาํใหส้ามารถกาํหนด หรือเรียกใชจ้ากในฟังกช์นัÉใดๆก็ตามได้ในฟังกช์น Éั setup () ไดม้ีการกาํหนดใหข้าทÉี13 เป็ นดิจิตอล เอาต์พุต และในฟังก์ชัÉนเถา ř วินาทีแลว้จึงกาํหนดให้เอาต์พุต 13 มีสถานะลอจิกเป็น 0 แลว้จึง หน่วงเวลา 1 วินาที จบฟังก์ชัน É loop() และจะเริÉมทาํฟังก์ชน Éั loop() ใหม่ ผลทีÉไดค้ือไฟกระพริบบน บอร์ดArduino Uno ในพอร์ต 13 ทาํงานแบบไม่รู้จบ
16 การสร้างฟังกช์นÉัและการใชง้านฟังกช์น Éั (Users-defined function) ในการสร้างฟังก์ชันขึ É ÊนมาคาํสัÉงต่างๆทีÉอยภู่ายในฟังกช์นÉัตอ้งอยภู่ายใตเ้ครืÉองหมายปี กกา เปิ ด และปี กกาปิ ด เท่านัÊน ภายใตเ้ครÉืองหมาย {} เราสมารถนาํ ฟังก์ชนัÉหรือคาํสÉังใดๆก็ไดม้าใส่ไว้ แต่จะตอ้งคนÉัดว้ยเครืÉองหมายเซมิโคล่อน ; โดยจะนาํคาํสัÉงทัÊงหมดไวบ้รรทดัเดียวกนัเลย หรือแยก บรรทดักนัก็ไดเ้พÉอืความสวยงามของโคด้ (ไม่มีผลกบัขนาดของโปรแกรมหลงัคอมไพล) ์ ตวัอยา่งทÉีŜ void Mode(int pin) { pinMode(pin,OUTPUT); } void setup(){ Mode(13); }
17 บททีÉś วิธีดําเนินโครงงานดําเนินการ/วิธีดําเนินการวิจัย กล่าวถึงการออกแบบโดยละเอียดยกตวัอยา่งดงัต่อไปนÊี 3.1 IOT (Internet of Things) 3.2 Blynk 3.3 บลอ็กไดอะแกรม 3.4รูปแบบการตอ่วงจร 3.5โคด้โปรแกรม 3.6 แผนภาพขัÊนตอนการทาํงาน (Flow Chart) 3.7 ขัÊนตอนปฏิบตัิงาน 3.1 IOT(Internet of Things) IoT หรือ Internet of Things (อินเทอร์เน็ต ออฟ ธิงส์) หมายถึงระบบทีÉช่วยให้อุปกรณ์ต่าง ๆ สามารถเชืÉอมต่อกบัอินเทอร์เน็ตและกนัเป็นระบบ เพืÉอให้สามารถสืÉอสารและแลกเปลีÉยนขอ้มูลกนั ได้ทาํให้สามารถควบคุมหรือจดัการอปุกรณ์เหล่านÊีผา่นเครือข่ายอินเทอร์เน็ตได้ตวัอยา่งเช่น หลอดไฟทีÉสามารถควบคุมผ่านสมาร์ทโฟน, หรือเซ็นเซอร์ทีÉสามารถตรวจจบัขอ้มูลและส่งตอ่ ไป ยงัระบบฐานขอ้มูลหรือแอปพลิเคชนัต่าง ๆ ไดเ้พÉือการวิเคราะห์หรือประมวลผลขอ้มูลนÊนเอง ัIoT มีการนาํไปใชใ้นหลายดา้น เช่น อุตสาหกรรม, บา้นอจัฉริยะ,การแพทย, การขนส่ง, ์ และอืÉน ๆ โดย มีการพฒันาและใชง้านอย่างกา้วร้าวในปัจจุบนั ต่อไปนีÊคือตวัอยา่งของแนวคิดการแบ่งเป็นเลเยอร์ทีÉสามารถนาํมาใชใ้นระบบ IoT Physical Layer (เลเยอร์ทางกายภาพ) เลเยอร์นีÊเกีÉยวขอ้งกบัการสืÉอสารขอ้มูลผา่นช่องทางทางกายภาพ เช่น การใชโ้ปรโตคอลทางไร้สาย, การใชเ้ครือข่ายในการสืÉอสาร, และการเชืÉอมต่อผา่นพอร์ตต่าง ๆ และอุปกรณ์ทีÉใชใ้นการส่งขอ้มูล. Communication Layer (เลเยอร์การสืÉอสาร) เลเยอร์นีÊเกีÉยวขอ้งกบัการจดัการการสืÉอสารระหวา่งอปุกรณ์ซÉึงรวมถึงโปรโตคอลและการกาํหนด รูปแบบขอ้มูลทÉีใช.้
18 Processing Layer (เลเยอร์การประมวลผล) เลเยอร์นีÊรับผิดชอบตอ่การประมวลผลขอ้มูลทÉีไดร้ับจากอุปกรณ์ต่าง ๆ โดยรวมถึงการแปลงขอ้มูล, การวเิคราะห์,และการจดัการขอ้มูล. Application Layer (เลเยอร์แอปพลเิคชัน) เลเยอร์นีÊรับผิดชอบตอ่การสร้างและให้บริการแอปพลิเคชนัทÉีใชง้านในระบบ IoT, เช่น แอปพลิเค ชนัสาํหรับการจดัการขอ้มูล,การควบคุมอุปกรณ์,และการแสดงผล. โปรโตคอลแบบแบ่งชัÊนในระบบ IoT สามารถแตกต่างกนั ไปขÊนึอยกู่บัวตัถุประสงคแ์ละโครงสร้าง ของระบบนัÊน ๆ การออกแบบระบบ IoT จะถูกทาํขÊึนโดยพิจารณาถึงปัจจยัต่าง ๆ เช่น ความตอ้งการ ในการสืÉอสาร, การประมวลผล, และการควบคุมอุปกรณ์ เพืÉอให้ระบบทาํงานไดอ้ย่างมี ประสิทธิภาพและมีประสิทธิภาพทีÉสูง.
19 3.2 Blynk Blynk คืออะไร BLYNK SERVER ป็ น IoT CLOUD จะคอยรอรับการติดต่อจากIoT NODE เช่น ESP8266 / ESP32 / RASPBERRY PI หรืออืÉนๆ หลงัจากเชืÉอมต่อไดแ้ลว้ก็สามารถใชง้านได้ BLYNK APP ทีÉมีทัÊง Android และ IOS ควบคุมอุปกรณ์ IoT NODE BLYNK SERVER BLYNK SERVER ถูกพฒันามาจากภาษา JAVA มนัสามารถทาํงานภายใต้OS อะไรก็ได้WINDOWS/ MAC / LINUX BLYNK SERVER เป็ น OPEN-SORCE แบบ GNU GENERAL PUBLIC LICENSE ทีÉสามารถ นาํ ไปใชง้านได้สามารถนาํไปต่อยอดเพÉอืการคา้แกไ◌้ขปรับปรุงโคด๊จากตน้ฉบบันาํ ไปคดลัอก แจกจ่าย เผยแพร่ได้ 3.1 รูปการทาํงานของBlynk
20 3.3 บลอ็กไดอะแกรม -ESP32 (เครืÉองมือสาํหรับเขียน โปรแกรม คอมไพลโ์ปรแกรม (Compile)และอปัโหลค โปรแกรมลงบอร์ด (Upload) -ใชภ้าษา C++ในการเขียนชุดคาํสÉงั ภาพทีÉś.2 บลอ็กไดอะแกรม TAG ID RFID RC-522 SERVO motor Blynk ESP 32 wroom 32D SERVO motor SERVO motor
21 3.4 รูปแบบการต่อวงจร ภาพทีÉ3.3รูปแบบการต่อวงจร 3.5 โค้ด Module ESP 32 #include <TridentTD_LineNotify.h> #include <SPI.h> #include <MFRC522.h> #include <ESP32Servo.h> #define BLYNK_PRINT Serial #define BLYNK_TEMPLATE_ID "TMPL6E7VZDdlN" #define BLYNK_TEMPLATE_NAME "testet" #define SSID "G" #define PASSWORD "qwertyui" #define BLYNK_AUTH_TOKEN "7EcfTmSQx_sgBRLoX1ukOysL5UGgTpDZ" #define LINE_TOKEN "DN9752kGBetjpUcbJxbgHhQrRhmYk4XTQjyArKyMDm3" #define buzzer_Pin 2 #include <BlynkSimpleEsp32.h> Servo myservo;//กาํหนดยสูของเซอร์โว Servo myservo2;//กาํหนดยสูของเซอร์โว Servo myservo3;//กาํหนดยสูของเซอร์โว
22 #define SS_PIN ŝ //กาํหนดขาSS (Slave Select) ของ RFID #define RST_PIN Ř//กาํหนดขา RST (Reset) ของ RFID MFRC522 mfrc522(SS_PIN, RST_PIN); // สร้างออ็บเจ็กต์MFRC522 void setup() { Serial.begin(115200); // เปิดพอร์ตซีเรียลสาํหรับการรายงานผล SPI.begin(); // เริÉมตน้ SPI mfrc522.PCD_Init(); // เริÉมตน้ RFID module myservo.attach(16);//กาํหนดขาสัญญาณของเซอร์โว myservo2.attach(4);//กาํหนดขาสัญญาณของเซอร์โว myservo3.attach(15);//กาํหนดขาสัญญาณของเซอร์โว Serial.println("Scan a RFID card/tag..."); Blynk.begin(BLYNK_AUTH_TOKEN, "G", "qwertyui"); Serial.println(LINE.getVersion()); WiFi.begin(SSID, PASSWORD); Serial.printf("WiFi connecting to %s\n", SSID); while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); } Serial.printf("\nWiFi connected\nIP : "); Serial.println(WiFi.localIP()); LINE.setToken(LINE_TOKEN); pinMode(buzzer_Pin, OUTPUT); } //ส่วนเซอร์โว void servo_1(){ myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที} } void servo_3(){ myservo2.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที } void servo_5(){ myservo3.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที }
23 //------------------ void loop() { Blynk.run(); // ตรวจสอบการตรวจจบัRFID card/tag if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { // อ่านหมายเลขซีเรียลของ RFID card/tag //Serial.print("Found card with UID: "); String content = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } content.toUpperCase(); //Serial.println(content); if (content == "13EE04DD") { //เปิ ดประตู servo_1(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน ช่อง Ařคุณ ประวริศไดใ้ชช้่องจอดแลว้"); } content.toUpperCase(); //Serial.println(content); if (content == "D3FAB9FA") { //เปิ ดประตู servo_3(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน ช่อง AŚคุณ อติกนัต ไดใ้ชช้ ่องจอดแลว้"); }
24 content.toUpperCase(); //Serial.println(content); if (content == "63C98BFC") { //เปิ ดประตู servo_5(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน Aśคุณ ยงยทุธไดใ้ชช้่องจอดแลว้"); } } } //ส่วนการควบคุมผา่นBlynk BLYNK_WRITE(V0) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉŞŘ องศา delay(300); myservo.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉśŘ องศา delay(300); myservo.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉŘ องศา delay(300); LINE.notify("รายงาน Ař ปิดไมก้Êนัเรียบร้อยแลว้"); } } BLYNK_WRITE(V2) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที}
25 myservo.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} myservo.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} LINE.notify("รายงาน Ařคุณ ประวริศไดเ้ปิดช่องจอด"); } } BLYNK_WRITE(V3) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo2.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); LINE.notify("รายงาน AŚ ปิดไมก้Êนัเรียบร้อยแลว้"); } } BLYNK_WRITE(V4) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo2.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300);
26 myservo2.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); LINE.notify("รายงาน AŚคุณ อติกนัต์ไดเ้ปิดช่องจอด"); } } BLYNK_WRITE(V5) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo3.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo3.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo3.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo3.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ř วินาที LINE.notify("รายงาน Aś ปิดไมก้Êนัเรียบร้อยแลว้"); } } BLYNK_WRITE(V6) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo3.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ř วินาที myservo3.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ř วินาที myservo3.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ř วินาที myservo3.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ř วินาที LINE.notify("รายงาน Aśคุณ ยงยทุธไดเ้ปิดช่องจอด"); }
27 3.6 แผนภาพขัÊนตอนการทํางาน (Flow Chart) ไม่ผา่นผา่น เริÉมตน้วิเคราะห์สภาพปัญหา/ประเมินความตอ้งการของผใู้ช้ออกแบบโครงสร้างโคด้สร้างแบบจาํลองทีÉจอดรถส่วนบคุคลระบบIOTทดสอบการใช้ สร้างโครงสร้างของ แบบจาํลอง นาํไปใชง้าน จดัทาํรูปเลม่นาํเสนออาจารย์จบโครงงาน
28 3.7 ขัÊนตอนปฏิบัติงาน 1. ทดลองบอร์ด ESP32โดยการทดลองดว้ยวงจรไฟ LED เพืÉอตรวจสอบความถูกตอ้งของ คาํสÉังระบบการทาํงานของบอร์ด การเชÉือมต่อระหว่างอุปกรณ์แอนดรอยด์กับบอร์ด ความเสถียร ของการเชืÉอมต่อและความเสถียรของการตอบสนองต่อคาํสัÉง 2. ต่อบอร์ด ESP32เขา้กบัวงจรและทดสอบการทาํงานของวงจร ภาพทีÉś.5 บอร์ด ESP 32 ภาพทีÉś.6การทดสอบการทาํงานของวงจร
29 ภาพทีÉ3.7 การใชง้าน ผ่าน Blynk ภาพทีÉ3.8 การเบิร์นบอร์ด
30 3.7.2 โฟล์คชาร์ต TAG ถูกตอ้ง Blynk RFIDRC522 ESP 32 ไมก ้Êนเปิ ด ั Start ไมก ้Êนปิ ด ั ภาพทีÉ3.9 โฟลค์ชาร์ต Blynk TAG ไม่ถูกตอ้ง เท็จ เท็จ ไมก ้Êนเปิ ด ั ไมก ้Êนปิ ด ั จรงิ จรงิ
31 บททีÉŜ ผลการทดลอง / วิจัยและวิเคราะห์ข้อมูล จากการทดลองทีÉจอดรถส่วนบุคคลระบบ IOT ให้ได้ผลดีและมีประสิทธิภาพและการ ทาํงานแต่ละส่วนของอปุกรณ์มีดงันÊี Ŝ.řการทดสอบ ทีÉจอดรถส่วนบุคคลระบบ IOT ř. โปรแกรมสัÉงการจากโทรศพัทส์ามารถทาํงานไดอ้ย่างสมบูรณ์ Ś. ตวัรับสัญญาณBlynkและWi-Fi สามารถรับสัญญาณไดด้ีสามารถควบคุมไดใ้นระยะไกล ś. กดปุ่มใหเซอร์โวมอเตอร์หมุน ้เปิดไมก้Êนัผา่นแอปBlynk Ŝ. กดปุ่มใหเซอร์โวมอเตอร์หมุน ้ ปิดไมก้Êนัผา่นแอปBlynk ŝ.นาํTAG แตะกบัซนเซอร์RFID – RC522 Ŝ.Ś ผลจากการทดสอบ ทีÉจอดรถส่วนบุคคลระบบ IOT เมืÉอมีการสัÉง ON/OFFดว้ยโทรศพัท์ไมก้Êนั เปิ ด-ปิ ด ตามคาํสัÉงผ่านBlynkจาก โทรศพัทม์ ือถือ ตามคาํสÉงผ่าน ัWi-Fiจากโทรศพัทม์ ือถือจากระยะไกลแ เมืÉอแตะ TAG เขา้กบัเซนเซอร์RFID-RC522ไมก้Êนัเปิด ตามคาํสัÉงทีÉไดเ้ขียนไวใ้นโคด้
32 บททีÉŝ สรุปอภิปรายผลและข้อเสนอแนะ ŝ.ř สรุปผลการทดลอง จากการศึกษาถึงการนาํ ทีÉจอดรถส่วนบุคคลระบบ IOT เพืÉอให้เกิดประโยชน์และอาํนวย ความสะดวกแก่ผูใ้ช้งาน งานวิจัยนีÊสามารถสร้างความสะดวกสบาย และประหยดัเวลาให้แก่ ผใู้ชง้านได้ ŝ.Ś ปัญหาและอุปสรรคในการทดลองสอดคล้องหรือขัดแย้งกบัทฤษฎีอย่างไร ř.ระบบทีÉพฒันาขÊนมีฟังก์ชั ึนÉการทาํงานหลายอยา่ง จึงทาํใหม้ีปัญหาเกิดขÊึนมาก ทัÊงเรืÉอง การวเิคราะห์และการออกแบบระบบ การเขียนโปรแกรม ซÉึงในการพฒันามีการเปลีÉยนแปลง เครืÉองมือทีÉพฒันาหลายครÊัง ทาํใหผ้คู้าํเนินโครงงานเสียเวลาในการศึกษาการใชง้านเครÉืองนัÊนๆ ค่อนขา้งมาก Ś.การเขียนโปรแกรม ซึÉงบางคาํสÉงัอาจตอ้งใชเ้วลาในการเขียน เพราะจะตอ้งมีการลองผิด ลองถูกอยเู่สมอเพÉอืให้คาํสÉงที ัÉเขียนขึÊนถูกตอ้งและตรงกบัความตอ้งการของระบบงาน ś.วงจรมีการขดัขอ้งกบัวงจรเก่าและเซอร์โวมอเตอร์เสียเนืÉองจากกาํลงัไฟจากESPśŚแรงพอทีÉจะ ทาํใหเ้ซอร์โวมอเตอร์ขดัขอ้ง ŝ.ś ข้อเสนอแนะและแนวทางในการพฒันา ř.สามารถเพิÉมเซ็นเซอร์ตรวจจบัวตัถุเช่น เซ็นเซอร์อินฟราเรด หรือเซ็นเซอร์อลัตร้าโซนิคใน การตรวจสอบวา่มีรถจอดอยู่หรือไม่ 2.สามารถเพิÉมสวิตช์เปิ ด-ปิดไมก้Êน เมื ัÉอไม่ไดพ้กพามือถือ ś.สามารถเพิÉมโปรแกรมในการเพิÉมเงืÉอนไขต่างๆ เช่น หากมีรถจอดอยเู่ซ็นเซอร์อินฟราเรดจะ ตรวจจบัวตัถุแลว้เลือกทÉีจอดรถถดัไปให้หรือการเพÉมิการยนืยนัตวัตนหากทÉีจอดรถนัÊนไม่ใช่ ของ ตวัเองระบบจะแจง้เตือนไปยงัผดูู้แล
33 บรรณานุกรม อรพินประวตัิบริสุทธÍิคู่มือเขียนโปรแกรมด้วยภาษา C.จีระพงษโ์พพนัธ์การเขียนโปรแกรมภาษา C. https://www.yupparaj.ac.th/thanphisit/bot1-3.html (วนัทÉีคน้ขอ้มูล:1กนัยายน Śŝ66) จาํหน่ายอุปกรณ์ไฟเบอร์ออฟติก Adaptor. http://www.thaiic.com/ (วนัทÉีคน้ขอ้มูล : Śกนัยายน Śŝ66) บริษทัไทยไอซีhttp://www.thaiic.com/ (วนัทÉีคน้ขอ้มูล : Śกนัยายน Śŝ66) อรพกัตรคงมาลยั,มอเตอร์กระแสตรง.https://www.prd.go.th/th/file/get/file/20210729d4 1d8cd98f00b204e9800998ecf8427e140258.pdf (วนัทีÉคน้ขอ้มูล:3กนัยายน Śŝ66) ณฐัพลแสนคาํ App blynk. http://cs.bru.ac.th/application-blynk/ (วนัทีÉคน้ขอ้มูล : Ŝ พฤศจิกายน 2565)
34
35 ภาคผนวก ก ภาพที3 ภาพทีŜ ภาพทีÉř ภาพทีÉŚ
36 ภาคผนวก ข โค้ดโปรแกรม ś.ś โค้ด Module ESP 32 #include <TridentTD_LineNotify.h> #include <SPI.h> #include <MFRC522.h> #include <ESP32Servo.h> ภาพทีÉŝ ภาพทีÉŞ ภาพทีÉş ภาพทีÉŠ
37 #define BLYNK_PRINT Serial #define BLYNK_TEMPLATE_ID "TMPL6E7VZDdlN" #define BLYNK_TEMPLATE_NAME "testet" #define SSID "G" #define PASSWORD "qwertyui" #define BLYNK_AUTH_TOKEN "7EcfTmSQx_sgBRLoX1ukOysL5UGgTpDZ" #define LINE_TOKEN "DN9752kGBetjpUcbJxbgHhQrRhmYk4XTQjyArKyMDm3" #define buzzer_Pin 2 #include <BlynkSimpleEsp32.h> Servo myservo;//กาํหนดยสูของเซอร์โว Servo myservo2;//กาํหนดยสูของเซอร์โว Servo myservo3;//กาํหนดยสูของเซอร์โว #define SS_PIN ŝ //กาํหนดขาSS (Slave Select) ของ RFID #define RST_PIN Ř//กาํหนดขา RST (Reset) ของ RFID MFRC522 mfrc522(SS_PIN, RST_PIN); // สร้างออ็บเจ็กต์MFRC522 void setup() { Serial.begin(115200); // เปิดพอร์ตซีเรียลสาํหรับการรายงานผล SPI.begin(); // เริÉมตน้ SPI mfrc522.PCD_Init(); // เริÉมตน้ RFID module myservo.attach(16);//กาํหนดขาสัญญาณของเซอร์โว myservo2.attach(4);//กาํหนดขาสัญญาณของเซอร์โว myservo3.attach(15);//กาํหนดขาสัญญาณของเซอร์โว Serial.println("Scan a RFID card/tag..."); Blynk.begin(BLYNK_AUTH_TOKEN, "G", "qwertyui"); Serial.println(LINE.getVersion()); WiFi.begin(SSID, PASSWORD); Serial.printf("WiFi connecting to %s\n", SSID); while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); } Serial.printf("\nWiFi connected\nIP : "); Serial.println(WiFi.localIP()); LINE.setToken(LINE_TOKEN); pinMode(buzzer_Pin, OUTPUT); } //ส่วนเซอร์โว
38 void servo_1(){ myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที} } void servo_3(){ myservo2.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที } void servo_5(){ myservo3.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(100); // ดีเลย์Ř.ř วินาที } //------------------ void loop() { Blynk.run(); // ตรวจสอบการตรวจจบัRFID card/tag if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { // อ่านหมายเลขซีเรียลของ RFID card/tag //Serial.print("Found card with UID: "); String content = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } content.toUpperCase(); //Serial.println(content); if (content == "13EE04DD") { //เปิ ดประตู servo_1(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน ช่อง Ařคุณ ประวริศไดใ้ชช้่องจอดแลว้");
39 } content.toUpperCase(); //Serial.println(content); if (content == "D3FAB9FA") { //เปิ ดประตู servo_3(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน ช่อง AŚคุณ อติกนัต ไดใ้ชช้ ่องจอดแลว้"); } content.toUpperCase(); //Serial.println(content); if (content == "63C98BFC") { //เปิ ดประตู servo_5(); tone(buzzer_Pin, 4000); // Play a 1kHz tone delay(200); // Wait for 1 second noTone(buzzer_Pin); // Stop the tone LINE.notify("รายงาน Aśคุณ ยงยทุธไดใ้ชช้่องจอดแลว้"); } } } //ส่วนการควบคุมผา่นBlynk BLYNK_WRITE(V0) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉŞŘ องศา delay(300); myservo.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉśŘ องศา
40 delay(300); myservo.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉŘ องศา delay(300); LINE.notify("รายงาน Ař ปิดไมก้Êนัเรียบร้อยแลว้"); } } BLYNK_WRITE(V2) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} myservo.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} myservo.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} myservo.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); // ดีเลย์Ř.ś วินาที} LINE.notify("รายงาน Ařคุณ ประวริศไดเ้ปิดช่องจอด"); } } BLYNK_WRITE(V3) { int buttonValue = param.asInt(); if (buttonValue == 1) { myservo2.write(90); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(60); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(30); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); myservo2.write(0); // เซอร์โว เคลืÉอนทีÉไปทีÉšŘ องศา delay(300); LINE.notify("รายงาน AŚ ปิดไมก้Êนัเรียบร้อยแลว้");