เครื่องให้อาหารปลา IoT ควบคุมด้วย ESP8266

 

เครื่องให้อาหารปลา IoT ควบคุมด้วย ESP8266

อภิรักษ์ นามแถ่ง

งบประมาณ 1,400 บาท (ไม่รวมโครงสร้างฟีดอาหาร)

 

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

 

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

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

                วันนี้ผู้เขียนจะมาแนะนำการสร้างเครื่องให้อาหารปลาอัตโนมัติ หรือที่เรียกว่า Timer Feeder เพื่อแก้ไขปัญหาหากท่านไม่อยู่บ้านเป็นเวลาหลายวัน หรือแม้กระทั่งถ้าท่านอยู่บ้านแล้วบางครั้งก็ลืมให้อาหาร เครื่องนี้สามารถแก้ปัญหานี้เพื่อให้น้องปลาของเราได้ทานอาหารอย่างตรงเวลาทุกวัน ซึ่งโครงงานนี้สามารถตั้งเวลาได้สูงสุด 3 ครั้งในหนึ่งวันและสามารถเลือกระยะเวลาทำงานในแต่ละครั้งได้ตั้งแต่ 1-20 วินาที มีฟังก์ชันพิเศษ คือ สามารถกำหนดให้เครื่องส่งข้อความแจ้งเตือนมายังผู้ใช้ได้เมื่ออาหารหมดผ่านแอพพลิเคชัน Line

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

                ในส่วนของเครื่องมือที่ใช้เชื่อมต่อผ่านอินเทอร์เน็ตทำให้โครงงานของเราตามกระแส IoT (Internet of Things) ได้ เครื่องมือนั้นมีให้เลือกใช้งานหลากหลายเว็บ หลากหลายผู้ให้บริการ มีทั้งที่มีให้ใช้แบบฟรีและเสียตังค์ หนึ่งในนั้น คือ Firebase จาก Google เพื่อไม่เป็นการเสียเวลาเชิญอ่านต่อได้เลยครับ

 

รูปที่ 1 หน้าเว็บของ Firebase Hosting

รูปที่ 2 หน้าต่าง Google Account

Google Firebase คืออะไร?

                Firebase เป็น Project ที่พัฒนาโดยบริษัทยักษ์ใหญ่อย่าง Google ถูกออกแบบมาให้เป็น API และ Cloud Storage สำหรับพัฒนา Realtime App ซึ่ง Firebase นั้นรองรับการทำงานร่วมกับ Modern Platform แทบทุก Platform (Angular, JavaScript, Node.js, iOS/OSX, Java/Android และ REST เป็นต้น) รวมถึงสามารถสร้างเว็บไซด์บน Web Hosting ได้โดยไม่ต้องเสียเงินสักบาท

                หลาย ๆ ท่านคงจะรู้จักกับ Hosting หรือ Web Hosting มาบ้างแล้ว ซึ่ง Firebase Hosting ก็จัดว่าเป็น Web Hosting เหมือนกัน แต่จะมีส่วนที่แตกต่างกับ Web Hosting ทั่วไปที่มีให้เช่าอยู่ คือ Firebase Hosting ฟรีนั่นเอง แต่ข้อเสียก็มีอยู่บ้าง คือ เราไม่สามารถตั้งชื่อเว็บไซต์ได้เอง ซึ่งทาง Firebase จะสร้างให้โดยจะอ้างอิงกับโปรเจคที่สร้าง (จะกล่าวในภายหลัง) และอีกข้อคือ ไฟล์ที่นำไปเก็บไว้บน Firebase Hosting จะต้องเป็น Static file อย่างเช่น ไฟล์ HTML, JavaScript, CSS หรือรูปต่าง ๆ ซึ่งจะไม่สามารถเอา php หรือภาษาที่ทำงานในฝั่ง Server Side Script ไปวางได้

                เนื่องจากเป็น Hosting ที่ยอมรับแต่ Static file เพราะฉะนั้น จะเหมาะกับเว็บที่มีแต่ Front-end เท่านั้น เช่นเว็บที่ไว้แนะนำตัวเองง่ายๆ หรือเว็บธุรกิจส่วนตัว เป็นต้น ด้วยเหตุนี้ท่านสามารถเลิกเช่า Web Hosting ที่เสียเงินอยู่ย้ายมาใช้ Firebase Hosting แบบฟรีๆ ได้เลย หรือถ้าท่านมีชื่อ Domain อยู่แล้ว ก็สามารถกำหนดให้ Domain ชี้มายัง Firebase Hosting นี้ได้เลย เพื่อไม่เป็นการเสียเวลา เชิญอ่านต่อได้เลยครับ

 

รูปที่ 3 หน้า Dialog สร้าง Project

เริ่มต้นใช้งาน Firebase Hosting

                การจะใช้งาน Firebase Hosting ได้จำเป็นต้องมี Google Account เสียก่อน ซึ่งปัจจุบันหากท่านใช้สมาร์ทโฟนที่เป็นแอนดรอยด์อยู่ก็คงมี Account แล้ว หากท่านไม่มีก็ให้สมัครก่อนครับ การเปิดใช้งาน Firebase Hosting สามารถเข้าไปที่ https://console.firebase.google.com และทำการ Sign-In ด้วย Google Account ดังรูปที่ 2

                หลังจากนั้น คลิกที่ปุ่ม CREATE NEW PROJECT ก็จะพบหน้า Dialog ให้กรอกชื่อ Project name และเลือก Country/region (ดังรูปที่ 3) เมื่อเสร็จแล้วกดปุ่ม CREATE PROJECT ได้เลย ขณะนี้เราก็เข้ามาที่ส่วนของ Firebase Console แล้ว (ดังรูปที่ 4)

                โครงงานนี้จะเหมือนกับโครงงาน IoT ทั่วไป คือจะมีส่วนหลักๆ อยู่ 2 ส่วน คือซอฟต์แวร์กับฮาร์ดแวร์ ส่วนของฮาร์ดแวร์นั้นจะไม่ค่อยยุ่งยากสักเท่าไหร่นัก เนื่องจากวงจรไม่มีความซับซ้อนและอุปกรณ์ก็มีไม่เยอะ (ดังจะหล่าวในภายหลัง) แต่ความยุ่งยากจะตกไปอยู่ในส่วนของซอฟต์แวร์ ไม่ว่าจะเป็นซอฟต์แวร์ของ ESP8266 NodeMCU ที่เขียนด้วย Arduino IDE และซอฟต์แวร์ส่วนของไฟล์ html ที่เป็นหน้าเว็บที่เรา เพื่อไม่เป็นการเสียเวลา ลงมือทำขั้นตอนต่อไปกันเลยครับ

 

รูปที่ 4 โปรเจคที่เราสร้างสำหรับโครงงานนี้

รูปที่ 5 แก้ไขกฎในการเข้าถึง Database

รูปที่ 6 ออปเจ็คทั้งหมดของโปรเจค

การกำหนดส่วนของ Database

                ก่อนอื่นท่านจะต้องเข้าไปตั้งค่าเว็บเพจของท่านให้สามารถเข้าถึงได้ทั้งการอ่านและเขียน นอกจากการเข้าถึงผ่านหน้าเว็บ Firebase console ซึ่งนั้นก็คือ เว็บเพจที่เรากำลังสร้างอยู่นั่นเอง ในส่วนนี้ให้เข้าไปที่ Database -> RULES ให้แก้ไขกฎ read และ write เป็น true ทั้งสองค่า ดังรูปที่ 5 เสร็จแล้วให้กด PUBLISH เพื่อยืนยันการตั้งค่า

                ขั้นตอนต่อไปให้กำหนดการใช้งานคอนโซลของ Firebase โดยกดกลับมาที่ DATA แล้วสร้างออปเจ็คขึ้นมาโดยกดที่เครื่องหมาย “+” แล้วให้สร้างออปเจ็คชื่อ period1 – period3 เพื่อแยกออปเจ็คเป็นแต่ละช่วงเวลาที่ต้องการตั้งค่า ภายในออปเจ็คจะมีส่วนออปเจ็คย่อยลงไป คือ HourOn, MinOn และ WorkingTime สำหรับตั้งชั่วโมง, นาที และระยะเวลาในการเปิดแต่ละครั้งตามลำดับ ดังแสดงในรูปที่ 6

รูปที่ 7 เมนูการตั้งค่าโปรเจค

รูปที่ 8 การเข้าไปอ่านค่า Secret Key

รูปที่ 9 ชื่อของ Firebase Host

การเก็บค่า Database Secrets

            ในโปรเจคจะต้องสร้าง Token หรือ Secret Key ขึ้นมาเพื่อให้ ESP8266 สามารถเข้าไปใช้งาน Database ของ Firebase ได้ ก่อนอื่นให้เข้าไปในหน้าโปรเจคแล้วกดปุ่ม Settings (ปุ่มรูปเฟือง) -> Project Settings (ดังรูปที่ 7) จากนั้นเลือกไปที่ Service Accounts > Database Secret ให้ดูที่ข้างล่างของเมนู Database Secrets จะมีบรรทัดที่เป็นจุดๆ สีดำอยู่ ให้กดปุ่ม Show เพื่อแสดง Secret Key (ดังรูปที่ 8) ในโครงงานนี้จะเป็น “6wCc2QsWbRdRZ8BfSXEegrQFkEvq0kPQnxWfUIsK” แล้วคัดลอกเก็บไว้ในโปรแกรม Notepad หรือโปรแกรม Text Editor อื่นๆ เพื่อให้สะดวกต่อการนำมาใช้ในโค้ดส่วนของ ESP8266

            อีกส่วนหนึ่งที่จะต้องนำไปใส่ในโค้ดของ ESP8266 คือ Firebase Host จะอยู่ในส่วนของ Database -> DASHBOARD-> Domain (ดูได้จากรูปที่ 9) ในโครงงานนี้จะได้เป็น “semipowermeter.firebaseapp.com” จะเห็นว่า Firebase Host นี้จะเป็นชื่อของโปรเจคของเราต่อด้วย “firebaseapp.com”

 

รูปที่ 10 วงจรสมบูรณ์

รูปที่ 11 ตำแหน่งการยึดเซนเซอร์อินฟราเรด

หลักการทำงาน

                รูปที่ 10 เป็นวงจรสมบูรณ์ของโครงงานนี้ หัวใจหลักจะใช้ ESP8266 NodeMCU เป็นหัวใจสำคัญ นอกจากจะทำหน้าที่ประมวลผลเหมือนไมโครคอนโทรลเลอร์ทั่วไปแล้วยังสามารถเชื่อมต่อกับอินเตอร์เน็ตได้ผ่านเครือข่าย WiFi ซึ่งโมดูล ESP8266 นั้นมีอยู่ด้วยกันหลายรุ่น ตั้งแต่เวอร์ชันแรกที่เป็น ESP-01 จนปัจจุบันมีถึง ESP-12 แล้ว ในโครงงานของเราก็จะใช้เป็น ESP-12 ที่ฝังอยู่ใน NodeMCU จึงทำให้อุปกรณ์ภายนอกลดลงไปได้เยอะจึงทำให้วงจรมีขนาดเล็กตามไปด้วย

                โครงงานนี้มีทั้งส่วนอินพุตและเอาต์พุต โดยอินพุตจะรับค่าแรงดันจากเซนเซอร์อินฟราเรดเข้าขา A0 แรงดันที่ได้จากเซนเซอร์จะมากหรือน้อยนั้นขึ้นอยู่กับระยะความห่างระหว่างเซนเซอร์กับวัตถุ ซึ่งในกรณีนี้จะเป็นการตรวจจับระดับของอาหารเม็ดที่อยู่ในถึงเก็บ หากอาหารมีอยู่มาก ระดับของอาหารจะอยู่สูงและใกล้กับตำแหน่งของเซนเซอร์อินฟราเรดของเราที่อยู่ฝาด้านบนของถึงเก็บ (ดังรูปที่ 11) การสะท้อนกลับมาของแสงอินฟราเรดจะมีปริมาณที่เข้มข้นสูง ดังนั้นจะทำให้แรงดันที่ส่งออกมาก็จะสูงตามด้วย ในทางตรงกันข้ามหากระดับอาหารน้อยการสะท้อนกลับก็จะน้อย ทำให้แรงดันนั้นน้อยตามไปด้วย ซึ่งจุดนี้เองจะทำให้เรารู้ว่าระดับอาหารอยู่ที่ตำแหน่งใดนั่นเอง ในส่วนของเอาต์พุตจะส่งลอจิกออกไปขับทรานซิสเตอร์เบอร์ 2N4401 เป็นขนิด NPN ดังนั้นการจะกำหนดให้ทรานซิสเตอร์ทำงานจะต้องส่งลอจิกสูงไป ซึ่งทรานซิสเตอร์นี้จะใช้สำหรับควบคุมมอเตอร์อีกทอดหนึ่ง

                การแสดงผลจะใช้จอ OLED (Organic Light-Emitting Diode) display ภายในมีชิป SSD1306 ควบคุมการทำงาน ขนาดหน้าจอ 128×64 ขนาด 0.96″ เชื่อมต่อแบบ I2C ใช้ไฟได้ทั้ง 3.3V หรือ 5V หน้าจอสว่างทำให้มองเห็นได้อย่างชัดเจน สามารถวาดภาพกราฟฟิกส์เป็นรูปต่างๆ รวมถึงแสดงตัวอักษรตามรูปแบบและขนาดที่ต้องการได้ การจัดการหน่วยความจำภายในของ SSD1306 ที่เรียกว่า Graphic Display Data RAM (GDDRAM) สำหรับขนาด 128×64 พิกเซล แบ่งเป็น Column และ Page ซึ่งมีทั้งหมด 128 คอลัมน์ (หมายเลข 0..127) และมีทั้งหมด 8 เพจ (หมายเลข 0..7) แต่ละเพจ จะประกอบด้วย 8 บรรทัด ดังนั้นจึงมี 8×8 = 64 บรรทัด (rows) การแสดงผลของจอภาพขึ้นอยู่กับค่าบิต (0 หรือ 1) สำหรับแต่ละพิกเซลที่ได้เขียนข้อมูลลงในหน่วยความจำ GDDRAM

                ท่านอาจจะสงสัยว่าโครงงานนี้เป็นเครื่องตั้งเวลา แต่ไม่เห็นมีไอซี RTC (Real Time Clock) ที่เป็นฐานเวลา ที่ไม่มีเพราะผู้เขียนเห็นว่าระบบต้องเชื่อมต่อกับอินเทอร์เน็ตอยู่แล้ว จึงอาศัยฐานเวลาจาก NTP (Network Time Protocols) ซึ่งเป็น Protocol ที่ใช้สำหรับปรับเทียบเวลา ( Time Synchronization) ของ Computer โดยอาศัยเครือข่าย Internet เป็นสื่อกลางในการส่งข้อมูลเวลามาตรฐานไปยังเครื่องลูกข่าย โดยมีเครื่องแม่ข่าย (NTP Server) เป็นตัวให้บริการส่งเวลามาตรฐาน เพื่อใช้ในการปรับเทียบเวลาให้ตรงกลับเวลามาตรฐาน (Time Standard) ซึ่งเป็นค่าเวลาที่ทาง Time & Frequency Lab ดังนั้นเราจึงสามารถเชื่อมต่ออินเทอร์เน็ตแล้ว Synchronize เวลามาตรฐานผ่านระบบ NTP มาใช้งานได้ทันที

                ในส่วนของภาคแหล่งจ่ายไฟจะใช้หม้อแปลงสวิตชิ่งของ Hi-Link แปลงไฟ 220v เป็น 5V กระแส 600mA ดังนั้นท่านสามารถป้อนแรงดัน 220 VAC เข้าที่ CON1 ได้เลยโดยไม่ต้องใช้อะแดปเตอร์เพิ่มอีก ทำให้วงจรมีขนาดเล็ก ไม่เกะกะเวลานำไปติดตั้ง

 

รูปที่ 12 ลายวงจรพิมพ์ขนาดเท่าแบบ

รูปที่ 13 ตำแหน่งการลงอุปกรณ์

การประกอบ

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

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

                การตรวจสอบแรงดันแต่ละจุดให้เทียบกับวงจรรูปที่ 10 ขั้นแรกให้ป้อนแรงดัน 220 VAC ผ่าน CON1 ขณะนั้น LED1 จะติดสว่าง จากนั้นให้นำโวลต์มิเตอร์มาวัดระหว่างขา VIN และขา GND ของ NodeMCU ถ้าถูกต้องแรงดันที่ได้จะต้องเท่ากับ 5 โวลต์ จากนั้นให้วัดแรงดันที่ขา 3.3V และขา GND ของ NodeMCU จะต้องได้แรงดัน 3.3V ถ้าหากแรงดันทุกจุดเป็นไปตามที่กล่าวไว้แสดงว่าพร้อมจะทดสอบการทำงานขั้นตอนต่อไปแล้ว

 

รูปที่ 14 หน้าต่าง Login ของเว็บ LINE Notify

รูปที่ 15 เลือกเมนู “หน้าของฉัน” เพื่อเข้าไปหน้าออก Token

รูปที่ 16 กดปุ่มออก Token เพื่อเข้าหน้าต่างสำหรับการออก Token

รูปที่ 17 การกรอกข้อมูลและเลือกรับการแจ้งเตือนในขั้นตอนออก Token

การตั้งค่า LINE Notify

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

                การจะใช้งานได้นั้น ขั้นแรกเราต้องมี LINE Account ที่ลงทะเบียนด้วย Email แล้ว เพื่อใช้ในการสมัคร LINE Notify โดยเข้าไปสมัครได้ที่ https://notify-bot.line.me/th/ แล้วกด “เข้าสู่ระบบ” แล้ว Login บัญชี LINE ด้วย Email และรหัสผ่านดังแสดงฝนรูปที่ 14 จากนั้นให้กดลูกศรชี้ลงด้านข้างชื่อบัญชีแล้วเลือก “หน้าของฉัน” (ดังรูปที่ 15) จากนั้นเลื่อนลงมาด้านล่างให้กดปุ่ม “ออก Token” ซึ่งในหน้าออก Token นี้ในช่องป้อนชื่อ Token ตัวอย่างในโครงงานนี้ผู้เขียนใช้คำว่า “Fish Feed” ชื่อนี้จะแสดงเมื่อมีการแจ้งเตือน ผู้ใช้สามารถใส่เป็นชื่ออื่นๆ ได้ตามต้องการ และเลือกการแจ้งเตือน

                ขั้นตอนต่อไปให้เลือกชื่อที่ต้องการให้แจ้งเตือน ดังตัวอย่างนี้ผู้เขียนกำหนดให้มีการแจ้งเตือนมาที่ LINE ของผู้เขียนเอง โดยเลือกไปที่ “รับการแจ้งเตือนแบบตัวต่อตัวจาก LINE Notify” จากนั้นกด “ออก Token” ดังแสดงในรูปที่ 18

 

รูปที่ 18 แสดง Token ที่ระบบออกมาให้

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

 

รูปที่ 19 การกำหนดชื่อและพาสเวิร์ดของเครือข่าย WiFi

รูปที่ 20 และ API ของ Firebase และ Line Notify ที่ต้องการเชื่อมต่อ

รูปที่ 21 กำหนดเลือกใช้งาน Line Notify

โปรแกรมส่วน Arduino IDE

                ESP8266 NodeMCU เป็นโมดูล Wi-Fi ที่มีสามารถโปรแกรมการทำงานลงบนหน่วยความจำได้ ทำให้เราสามารถนำมาใช้แทนไมโครคอนโทรลเลอร์ได้เลย และมีผู้พัฒนาให้สามารถนำมาใช้ร่วมกับ Arduino IDE ทำให้ง่ายต่อการใช้งาน เรียกว่าถ้าท่านเคยใช้ Arduino อยู่แล้ว ก็สามารถเขียนโปรแกรมสั่งงานควบคุมการทำงานของ ESP8266 ได้

                ซึ่งในโครงงานนี้ผู้เขียนก็จะนำเอา Arduino IDE มาใช้งานร่วมกับ ESP8266 NodeMCU เขียนโค้ดเหมือนกับ Arduino ทั่วไป ซอฟต์แวร์ส่วนนี้จะอยู่ในกระเป๋า Arduino (สามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download) การใช้งานจะต้องทำการแก้ไขซอร์สโค้ดบางส่วนเพื่อให้สามารถเชื่อมต่อกับ Firebase และ Line Notify ได้ ในส่วนของบรรทัดที่ 15 จะเป็นชื่อและบรรทัดที่ 16 เป็นรหัสผ่านของ Wi-Fi ที่เราจะเชื่อมต่อ บรรทัดที่ 18 และ 19 เป็นการกำหนดชื่อ Host และ API ของ Firebase ส่วนสุดท้าย คือ บรรทัดที่ 20 เป็น API ของ Line Notify ที่ได้มาในขั้นตอนการออก Token (ดังแสดงในรูปที่ 18) เมื่อแก้ไขเสร็จแล้วให้ทำการแฟลชโปรแกรมให้กับ ESP8266 NodeMCU โดยให้เลือกบอร์ดเป็น NodeMCU 1.0 (ESP-12E Module) ดังรูปที่ 22

 

รูปที่ 22 เลือกบอร์ดเป็น NodeMCU 1.0 (ESP-12E Module)

รูปที่ 23 พิมพ์ข้อความที่ต้องการแปลงเป็น URL Encode

รูปที่ 24 ข้อความหลังจากกดปุ่ม Encode

                เนื่องจากไมโครคอนโทรลเลอร์ไม่รองรับ UTF-8 ทำให้ไม่รองรับการพิมพ์ภาษาไทยลงไปตรงๆ หากต้องการส่งข้อความที่ไม่ใช่ภาษาอังกฤษ ต้องแปลงข้อความให้อยู่ในรูปที่เรียกว่า URL Encode ก่อน โดยใช้บริการแปลงจากเว็บ http://meyerweb.com/eric/tools/dencoder/ เมื่อเข้าไปในเว็บแล้วให้พิมพ์ข้อความที่ต้องการ (ดังรูปที่ 23) จากนั้นกดปุ่ม Encode ก็จะปรากฏข้อความที่ถูกแปลงแล้วออกมา อาทิเช่นผู้เขียนใส่คำว่า “อาหารปลาเหลือน้อยกรุณาเติมด้วยครับ” ลงในกล่องข้อความแล้วกดปุ่ม Encode จะเห็นว่าข้อความจะถูกแปลงดังรูปที่ 24 ซึ่งโครงงานนี้จะมีการแจ้งเตือนอีกส่วนหนึ่ง คือ การแจ้งเตือนเมื่อให้อาหารเสร็จ จากนั้นให้เอาข้อความที่ Encode ออกมาได้ไปใส่ในตัวแปรดังรูปที่ 25 เมื่อเกิดสภาวะขึ้นทั้งอาหารหมดและให้อาหารสำเร็จ ข้อความจะถูกส่งไปยัง Line ที่กำหนดไว้ดังแสดงในรูปที่ 26

 

รูปที่ 25 ตัวแปรที่ใช้เก็บข้อความ URL Encode

รูปที่ 26 ข้อความที่ส่งมายังไลน์กลุ่มที่กำหนดไว้

รูปที่ 27 หน้าต่าง Login เข้าใช้งานเว็บ App Inventor 2

รูปที่ 28 หน้าเว็บการสร้าง Project ใหม่บน App Inventor 2

รูปที่ 29 ตำแหน่ง User Interface บนแอพพลิเคชัน

รูปที่ 30 กำหนด Host และ API ของ FirebaseDB1

สร้างแอพพลิเคชั่น Android ด้วย App Inventor 2

App Inventor 2 เป็นเว็บแอพพลิเคชันที่สร้างโดย Google ร่วมมือกับสถาบัน MIT แต่ภายหลัง Google ถอนตัว แล้วให้สถาบัน MIT เป็นผู้พัฒนาต่อเอง โดยเน้นไปในทางด้านการศึกษา ให้ผู้ที่ไม่มีความรู้ทางด้านภาษา Java สามารถเขียนแอพพลิเคชัน Android ได้ โดยการเขียนจะอยู่ในรูปแบบ Block ทำให้เข้าใจได้ง่าย

การใช้งานให้เข้าไปที่เว็บไซต์ http://ai2.appinventor.mit.edu/ จะขึ้นหน้าต่างการ Login ขึ้นมา หากท่านมี Account ของ Gmail อยู่แล้วสามารถทำการ Login ได้เลย ให้กดยอมรับข้อตกลงต่างๆ ให้เรียบร้อย เสร็จแล้วจะเข้ามาที่หน้าต่างดังรูปที่ 28 กดที่ปุ่ม Start new project และตั้งชื่อ project ที่เราต้องการ

จากรูปที่ 29 ผู้เขียนได้ออกแบบหน้าตาของแอพพลิเคชันไว้ให้มีปุ่มการตั้งเวลา period ทั้ง 3 และปุ่มเปิด-ปิดแบบแมนวลสำหรับเปิดและปิดเอาต์พุตของเรา สิ่งสำคัญที่เราจะต้องแก้ไข คือ ตำแหน่ง Host และ Token ที่ใช้สำหรับเข้าถึง Firebase ของเรา ให้กดไปที่ FirebaseDB1 จะเห็นว่าทางขวามือด้านบนของหน้าจอจะขึ้นเมนู Properties ขึ้นมาให้มองหาช่อง FirebaseToken และ FirebaseURL ให้ใส่ตำแหน่ง Host และ API (ดังรูปที่ 31) จากเว็บ Firebase เสร็จแล้วก็สามารถกดที่ Build แล้วเลือก App QR code หรือจัดเก็บบนคอมพิวเตอร์ แล้วแต่ความสะดวกของผู้ใช้ เมื่อติดตั้งลงโทรศัพท์แล้ว จะได้แอพพลิเคชันใช้งานดังแสดงใรรูปที่ 32

 

รูปที่ 31 ค่า API ที่ได้จากเว็บ Firebase

รูปที่ 32 แอพพลิเคชันที่ติดตั้งบนโทรศัพท์

รูปที่ 33 TimePicker สำหรับตั้งเวลา

รูปที่ 34 กำหนดระยะเวลาการทำงานในแต่ละครั้ง

รูปที่ 35 ค่าตัวแปร ControlManual ที่มีการเปลี่ยนแปลงหลังจากกดปุ่ม เปิด-ปิด บนแอพพลิเคชัน


 

รายการอุปกรณ์

รายการอุปกรณ์

ตัวต้านทาน

R1, R2 –        330                 2                   ตัว

ตัวเก็บประจุ

C1 –       100uF 16V อิเล็กทรอไลต์         1                 ตัว

อุปกรณ์สารกึ่งตัวนำ

Q1 –       2N4401                    1                 ตัว

D1 –       1N4001                    1                 ตัว

LED1 –         แอลอีดีสีแดง 3 มม.              1                 ตัว

อื่นๆ

CON1- CON2 –       เทอร์มินอลบล็อก 2 ขา             2                        ตัว

CON3 –        คอนเน็กเตอร์ 3 ขา                 1                        ตัว

ESP1 –        ESP8266 NodeMCU          1                        ตัว

TO1 –        หม้อแปลงสวิตชิ่ง 5V 3W          1                        ตัว

DISPLAY1 –     OLED 128×64              1                        ตัว

หมายเหตุ  ซอร์สโค้ดและไฟล์ที่ใช้ร่วมกับโครงงานทั้งหมดสามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download


การทดสอบ

เมื่อลองกดปุ่มตั้งเวลาโดยกดปุ่ม TimePicker บนโทรศัพท์เพื่อตั้งเวลาให้เครื่องทำงานตาม Period ที่ 1-3 ขณะนั้นที่แอพพลิเคชันบนมือถือจะแสดงเวลาปัจจุบัน ดังรูปที่ 33 ให้ท่านเลื่อนเวลาชั่วโมงและนาทีตามเวลาที่ต้องการ เสร็จแล้วให้ตั้งระยะเวลาทำงานในแต่ละครั้ง ซึ่งหน่วยจะเป็นวินาที ดังแสดงดังรูปที่ 34 เมื่อตั้งเวลาเสร็จแล้วให้กดปุ่ม “อัพเดท” เพื่อเปลี่ยนแปลงเวลา หลังจากที่กดปุ่มนี้แล้ว บนเว็บ Firebase จะเปลี่ยนแปลงเป็นเวลาที่กำหนดไว้ ขณะนั้นตัวแปร UpdateCheck บนเว็บ Firebase จะมีค่าเป็น 1 เพื่อบอกให้ ESP8266 ดึงค่าที่อัพเดทไปใช้งาน ถ้าหากโครงงานเราดึงค่าไปใช้งานเสร็จแล้ว ESP8266 จะกำหนดให้ตัวแปร UpdateCheck เป็น 0

ปุ่มกดในส่วน “ควบคุมแบบแมนวล” จะเป็นการส่งงานเอาต์พุตแบบแมนวล คือ สั่งกดเปิด-ปิด ทันทีโดยไม่ต้องรอเวลาที่กำหนดไว้ ท่านสามารถส่งเกตการทำงานได้จากตัวแปร ControlManual บนเว็บ Firebase (ดังรูปที่ 35) หากกดปุ่ม “เปิด” ค่าตัวแปรนี้จ้เป็น “1” แต่ถ้ากดปุ่ม “ปิด” ตัวแปรจะเป็น 0 ซึ่งค่านี้ ESP8266 จะดึงไปใช้งาน

 

รูปที่ 36 หน้าจอ OLED ขณะเปิดเครื่อง

รูปที่ 37 LOGO บริษัท ซีเอ็ดยูเคชั่น จำกัด (มหาชน)

รูปที่ 38 LOGO รูปปลา

รูปที่ 39 หน้าจอการทำงานหลัก

                หลังจากเปิดเครื่องขึ้นมา ESP8266 จะทำการเชื่อมต่อกับ WiFi ที่กำหนดไว้ หลังจากที่เชื่อมต่อสำเร็จ ESP8266 จะดึงเวลาจาก NTP และ Firebase หากถูกต้องหน้าจอจะแสดงดังรูปที่ 36 และจะเข้าหน้าต่อไป ซึ่งผู้เขียนได้ใส่ LOGO ต้นสังกัดของผู้เขียนไว้ คือ บริษัท ซีเอ็ดยูเคชั่น จำกัด (มหาชน) และ LOGO ปลาตามลำดับ ซึ่งส่วนนี้ผู้อ่านสามารถดัดแปลงแก้ไขให้เป็นรูปแบบตามที่ท่านต้องการได้

               หลังจากนั้นระบบจะเข้าสู่โหมดการทำงานหลักดังรูปที่ 39 จะเห็นว่าด้านซ้ายของจอภาพจะแสดงปริมาณของอาหารปลาที่อยู่ในถึงเก็บ ตรงกลางจะเป็นรูปปลา ซึ่งปลานี้จะเปลี่ยนทุกๆ 10 วินาที โดยจะเหมือนกันการว่ายไปว่ายกลับตลอดการทำงาน ด้านล่างของจอจะแสดงเวลาปัจจุบัน ซึ่งดึงมาจาก NTP จากนั้นให้ทดสอบตั้งเวลาให้เครื่องทำงาน และกดเปิด-ปิดแบบแมนวลดูว่าเครื่องสามารถทำงานได้ถูกต้องหรือไม่

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

 

 

 

Leave a Comment