โครงงานนี้มีวัตถุประสงค์เพื่อพัฒนาส่วนเพิ่มขยายให้กับชุดหุ่นยนต์เพื่อการเรียนรู้ GoGo Board (http://gogoboard.org) โดยใช้ Raspberry Pi จุดเด่นของส่วนเพิ่มขยายที่สร้างด้วย Raspberry Pi คือจะสามารถเพิ่มความสามารถที่เดิมทำได้ยากในระบบสมองกลฝังตัวทั่วไป เนื่องจาก Raspberry Pi เป็นเครื่องคอมพิวเตอร์ที่ขับเคลื่อนด้วยระบบปฏิบัติการ Linux จึงสามารถเพิ่มความสามารถใหม่ๆ ได้โดยง่ายเช่น การเชื่อมต่อเครือข่าย, การเล่นไฟล์สื่อชนิดต่างๆ, การเชื่อมต่อกับอุปกรณ์ USB เช่น กล้อง Webcam, อุปกรณ์รับพิกัด GPS, Aircard เพื่อรับส่ง SMS, การใช้บริการเครือข่ายเช่น การส่งอีเมล์, อ่านและรับค่าจากบริการ push/pull ต่างๆ เช่น Pushbullet และ IFTTT เป็นต้น
ผู้จัดทำได้เพิ่มความสามารถดังกล่าวให้กับ GoGo Board โดยสั่งงานได้ผ่านภาษา Logo ซึ่งใช้งานได้ง่ายสำหรับเยาวชน รวมไปถึงเพิ่มส่วนของการเข้าใช้งานผ่าน Web Application เรียกว่า GoGo Home Screen ที่ประกอบไปด้วย Text-to-Speech, การจัดการไฟล์ (File Manager), การแสดงกราฟของข้อมูลที่ทำการบันทึกไว้ (Live Graph), การบันทึกเสียง (Sound Recording) เพื่อนำไปใช้กับ GoGo Board, การใช้ Web UI (ส่วนประกอบของ HTML) และ Speech-to-Text (Speech Recognition) เพื่อสั่งงาน GoGo Board
วิดีโอแนะนำโครงการ
โครงสร้างของระบบ
1. GoGo Widget
GoGo Widget เป็นโปรแกรมประยุกต์ที่สามารถใช้งานได้หลาย platform พัฒนาขึ้นจากภาษา Python ทำหน้าที่ติดต่อสื่อสารกับผู้ใช้และชุดหุ่นยนต์ผ่านทาง USB HID Protocol ตัวโปรแกรมมี User Interface ที่สามารถเรียกใช้ได้ง่าย สามารถควบคุมการทำงานของชุดหุ่นยนต์, สามารถอ่าน/บันทึกค่าต่างๆ ของโมโมดูลที่ใช้ร่วมกับ GoGo Board สามารถดูค่าสถานะต่างๆ และสั่งงาน Raspberry Pi ได้ รวมถึงมีคอมไพเลอร์ภาษา Logo ในตัวซึ่งทำหน้าที่แปลงโปรแกรม Logo ให้เป็นภาษาไบนารีและโหลดลงไปไว้บนโกโกบอร์ด
2. Raspberry Pi
Gogod เป็นชุดคำสั่งที่ทำงานอยู่บน Raspberry Pi ที่ใช้ภาษา Python ในการพัฒนาคือ Gogod (หรือ GoGo daemon) เป็นตัวกลางคอยรับคำสั่งจาก GoGo Board และปฏิบัติงานตามคำสั่งที่ได้รับมา และยังคอยรายงานสถานะระบบให้กับโกโกบอร์ด เช่นสถานะเครือข่าย และสถานะของอุปกรณ์ต่อพ่วง
GoGo Home Screen เป็น Web Application ที่แสดงฟีเจอร์ที่พัฒนาขึ้นใช้ร่วมรับ Gogod โดยพัฒนาจากภาษา PHP, HTML และ JavaScript (jQuery) ใช้ Apache เป็น HTTP Webserver ใช้ OrientDB เป็นฐานข้อมูล รวมไปถึง Library และ API ที่เกี่ยวข้อง อยู่บน Raspberry Pi สามารถแสดงผลได้ดีในทุกอุปกรณ์ (Responsive)
3. GoGo Board
GoGo Board เป็น PIC ไมโครคอนโทรลเลอร์ ที่มีเฟิร์มแวรฺ์ที่พัฒนาโดยใช้ภาษา C ตัว GoGo Board ทำหน้าที่คอยรับคำสั่งจากคอมพิวเตอร์ และสื่อสารควบคุมการทำงานของ Raspberry Pi ผ่านทาง Serial RS232 นอกจากนั้นยังมี Logo Virtual Machine ที่สามารถทำงานตามโปรแกรมไบนารีที่คอมพิวเตอร์ส่งมาได้
ความสามารถของระบบ
IP Address QR Code
ใน GoGo Widget แถบ Raspberry เมื่อมีการเชื่อมต่อเครือข่ายผ่านทาง LAN หรือ Wireless LAN โปรแกรมจะทำงานโดยสร้าง QR Code ดังรูปด้านซ้าย เป็น IP Address ของ Raspberry Pi เมื่อสแกนจาก Smart Phone จะได้ URL Link ไปที่ GoGo Home Screen และใน GoGo Home Screen ก็สามารถเรียกดู QR Code ได้จากไอคอน ในกรอบสีส้มของรูปด้านขวา
Email Sender
ไปที่ GoGo Widget > Raspberry Pi > Gmail Configuration ตามกรอบสีแดงดังรูป เพื่อตั้งค่า Email สามารถตั้งค่า Email ในช่อง Email และ Password เป็น Email address และ รหัสผ่านของ Gmail
การส่ง Email โดยในกรอบดังรูป ช่อง Recipient, Subject และ Body เป็น Email address ของผู้รับ หัวข้อและเนื้อหาของ Email ตามลำดับ และส่งผ่านคำสั่งภาษา Logo ดังนี้
sendmail “recipient” “subject” “body” |
SMS Sender
เมื่อเสียบ Aircard เข้ากับพอร์ต USB ของ Raspberry Pi แล้วไปที่ GoGo Widget > Raspberry Pi > Send SMS ตามกรอบแสดงดังรูปกรอกหมายเลขโทรศัพท์และข้อความในช่อง Phone number และ Message หรือใช้คำสั่งภาษา Logo บน GoGo Board ดังด้านล่าง
sendsms “phone number” “message” |
RFID
เมื่อเสียบ RFID Reader เข้ากับพอร์ต USB ของ Raspberry Pi แล้วไปที่ GoGo Widget > Logo สามาราถใช้งาน RFID ได้โดยใช้คำสั่งภาษา Logo ดังนี้
· userfid สั่งให้ Gogod เชื่อมต่อกับ RFID Reader และทำการอ่านค่าของ RFID ไว้ในหน่วยความจำ
· rfidtagfound? คำสั่งที่ใช้ตรวจสอบดูว่ามี RFID Tag มาแตะที่เครื่อง RFID Reader หรือไม่
· rfidbeep สั่งให้เครื่อง RFID Reader นั้นส่งเสียง beep
· readrfid n คำสั่งให้อ่านค่ามาจากหน่สยความจำที่ Gogod ได้อ่านมาเป็นตัวเลขตั้งแต่ 0-255 (n) และนำไปใช้ในภาษา Logo เช่น เทียบตัวเลข หรือนำตัวเลขไปใช้ต่อไป
· writerfid n คำสั่งให้เขียนค่าลง RFID Tag ด้วยตัวเลขตั้งแต่ 0-255 (n)
Data Logging
record sensor1 “log8″ |
การบันทึกค่า โดยใช้คำสั่งภาษา Logo ดังด้านบนและดังรูป Log name เป็นตัวหนังสือที่สือถึงค่าที่ต้องการบันทึก Variable (Log Value) สามารถเป็นได้ทั้งค่าเซ็นเซอร์ตัวที่ 1-8 คือ sensor1 – sensor 8 หรือเป็นค่าตัวแปรในโค้ด
การดูค่าหรือกราฟแสดงข้อมูล เข้าไปที่ GoGo Home Screen > และ Data Logging เลือกค่าที่ต้องการ อาจจะเลือก Average sensor values และรอบของเวลา เพื่อเฉลี่ยค่าของข้อมูล กด Submit จะแสดงกราฟดังรูป สามารถเลือกช่วงเวลาที่ต้องการแสดง ส่งออกข้อมูลเป็น PNG, JPEG, SVG, PDF, csv หรือ xls(excel) และยังสามารถดูกราฟแบบ Real time ได้โดยคลิก Auto Update
Pi Display
เป็นหน้าที่สามารถแสดงรูปภาพเล่นไฟล์เสียงต่าง โดยเข้าไปที่ GoGo Home Screen > Pi Display จะแสดงดังรูปด้านบน
การใช้เล่นไฟล์เสียง หรือเสียงที่บันทึกไว้ในหัวข้อ Sound Recording โดยผ่านคำสั่งภาษา Logo ดังด้านล่างคือ playsound ตามด้วยชื่อไฟล์ เมื่อเรียกใช้งานก็จะเล่นเสียงที่หน้า Pi Display และที่ Raspberry Pi หากมีลำโพงต่ออยู่
playsound “filename.mp3“ |
การใช้ Text-to-speech ผ่านคำสั่งภาษา Logo ดังด้านล่างคือ say ตามด้วยข้อความที่ต้องการออกเสียง เมื่อะเรียกใช้งานก็จะออกเสียงตามข้อความที่หน้า Pi Display และออกเสียงที่ Raspberry Pi หากมีลำโพงต่ออยู่
say “phrase want to say” |
File Manager
เข้าไปที่ GoGo Home Screen > File Manager จะแสดงดังรูป สามารถคลิกเพื่ออัพโหลดไฟล์รูปภาพ เสียง หรือไฟล์ต่างๆ หรือจะ Drag and Drop ที่หน้าต่างให้อัพโหลดได้, สามารถสร้าง text file หรือ folder ได้, เลือกรูปแบบการแสดงผลแบบต่างๆ Filter ไฟล์ที่ต้องการให้แสดง, เรียงลำดับการแสดงไฟล์ สามารถเปลี่ยนชื่อ ลบ คัดลอก หรือดูตัวอย่างไฟล์ได้เช่นเล่นไฟล์เสียง หรือดูรูปภาพขนาดเต็มได้
Sound Recording
เข้าไปที่ GoGo Home Screen > Sound Recording กดปุ่มสี่แดงเพื่อเริ่มบันทึกเสียง ปุ่มสีฟ้าเพื่อหยุดบันทึกเสียง จากนั้นจะทำการแปลงเป็นไฟล์ mp3 เมื่อเสร็จสิ้นจะแสดงดังรูปด้านบน ระบบจะอัพโหลดไปที่โฟล์เดอร์ recordings ซึ่งสามารถเข้าไปดูได้ที่ File Manager โฟล์เดอร์ recordings สามารถนำไฟล์เสียงไปใช้ในภาษา Logo ด้วยคำสั่ง playsound ในหัวข้อ Pi Display ได้
Web UI
สามารถเขียนไฟล์ HTML ที่ส่วนประกอบเช่น button, slider, switch เป็นต้น ขึ้นมาเองได้ หรือใช้เครื่องมือสร้างได้เช่น Rapid Interface Builder ที่สามารถ Drag and Drop เพื่อสร้างไฟล HTML ขึ้นมาเข้าถึงออนไลน์ได้ที่ https://01.org/rib/online/ ดังรูปด้านบน หรือใช้เครื่องมืออื่นๆ ได้เช่นกัน เมื่อเสร็จแล้วคลิกที่ export เป็น zip เมื่อได้ zip แล้วแตกไฟล์ (Extract Files) เปลี่ยนชื่อ index.html เป็นชื่อที่ไม่ซ้ำกับไฟล์อื่น จากนั้นอัพโหลดไฟล์ทั้งหมดไปไว้ที่ File Manager โฟล์เดอร์ recordings
if key “key” = “value” [ do_something ] |
การใช้งาน Web UI โดยเขียนคำสั่งภาษา Logo ได้ดังด้านบน key “key” หากเป็น button ค่าหลักจะเป็นคำว่า “button” sliderจะเป็น “slider” เป็นต้น ส่วน “value” จะเป็น Label ของ Button โดยทั้ง key และ value เรียกว่า KeyValue Packet (รายละเอียดเพิ่มในเอกสารท้ายบทความ) และเข้าไปที่ GoGo Home Screen > Web UI จะปรากฏดังรูปด้านล่าง เลือกไฟล์ที่ออกแบบไว้
ตัวอย่างการใช้งาน Web UI เป็นการทำ Remote Control ควบคุมทิศทางของรถ โดยเขียนคำสั่งภาษา Logo เมื่อกดปุ่มต่างๆ ให้เดินหน้า ถอยหลัง เลี้ยวซ้าย-ขวา หยุด ดังรูปด้านล่างและในวิดีโอหัวข้อวิดีโอแนะนำโครงการ
Speech Recognition
if key “speech” = “value” [ do_something ] |
การใช้งาน Speech Recognition โดยเขียนคำสั่งภาษา Logo ได้ดังด้านบน key “speech” ส่วน “value” จะเป็น คำที่จำแนกมาได้ โดยทั้ง key และ value เรียกว่า KeyValue Packet มีการใช้งานภาษา Logo เช่นเดียวกับหัวข้อ Web UI และการเรียกใช้งานเข้าไปที่ GoGo Home Screen > Speech Recognition จะปรากฏดังรูปด้านล่าง หากไอคอนสีแดงกระพริบแสดงว่าทำงานอยู่ เมื่อจำแนกเสียงได้จะแสดงคำขึ้นมาและส่งไปที่ GoGo Board เพื่อทำงานตามคำสั่งที่เขียน
ตัวอย่างการใช้งาน Speech Recognition ควบคุมทิศทางของรถเช่นเดียวกับหัวข้อ Web UI แต่เป็นการสั่งงานด้วยเสียงแทน
Cloud Service (Pushbullet และ IFTTT)
เป็นการใช้งานบริการออนไลน์ต่างๆ เช่น Social Media ที่ IFTTT รองรับ ส่งต่อค่ามาให้ GoGo Board ทำงาน โดยจะต้องมี่ Account ของบริการ IFTTT (https://ifttt.com/) และ Pushbullet (https://www.pushbullet.com/) ก่อน ผูกบริการทั้งสองเข้าด้วยกัน และ Active บริการที่ต้องการใช้ (รายละเอียดและตัวอย่าง ดูได้ในเอกสารท้ายบทความและในวิดีโอหัวข้อวิดีโอแนะนำโครงการ) ตั้งค่า Pushbullet โดยนำ Acess Token ของ Pushbullet มาใส่ที่ GoGo Home Screen > ไอคอน Setting ช่อง Token ดังรูปด้านล่าง
การใช้งาน สร้างพฤติกรรมการทำงานโดยไปที่ IFTTT > My Recipes > Create a Recipe เลือก this เป็นบริการที่ต้องการใช้เช่น Twitter ดังรูปด้านล่าง
จากนั้นเลือก that เป็น Pushbullet, Choose an Action เป็น push a note จะแสดงดังรูปโดย Title จะเป็น key ส่วน Message จะเป็น value ของ KeyValue Packet ที่ส่งไปที่ Raspberry Pi และให้ GoGo Board ทำงานเช่นเดียวกับ Web UI และ Speech Recognition จากนั้นคลิก Create Action > Create Recipe
ตัวอย่างการใช้งาน สร้าง Recipe จาก Twitter เมื่อ tweet ข้อความใดๆ จะส่ง KeyValue Packet เป็น “twitter” และ “newtweet” เขียนคำสั่งภาษา Logo ดังรูปด้านล่าง คือเมื่อมีเหตุการณ์นี้เกิดขึ้นจะทำงานตามคำสั่ง
Mobile-friendly (Responsive Design)
- Setting on GoGo Home Screen
- QR Code on GoGo HomeScreen
- Speech Recognition
- Web UI | Demo
- Web UI
- Sound Recording
- Data Logging | Graph
- Data Logging
- File Manager
- GoGo Home Screen | Menu
- GoGo Home Screen
อุปกรณ์ที่ใช้
1. GoGo Board 5.0
2. Raspberry Pi
3. Sensors and outputs
4. USB Devices
- Aircard
- RFID Reader
เอกสาร
ผู้จัดทำ
นายมารุตพงค์ ไชยลังกา รหัสนักศึกษา 540610639