เกี่ยวกับโปรเจกต์นี้
บอร์ด Arduino เป็นตัวเลือกยอดฮิตสำหรับโปรเจกต์ DIY เนื่องจากมีเอกสารครบ ชุมชนใหญ่ และใช้งานได้หลากหลาย บอร์ดพวกนี้เอาไปควบคุมอุปกรณ์สารพัดชนิด และสื่อสารกับอุปกรณ์อื่นๆ ได้ ทำให้เหมาะมากสำหรับการสร้างโปรเจกต์มัลติมีเดียที่ตอบสนองกับสิ่งรอบตัวได้
โดยรวมแล้ว บอร์ด Arduino ให้ความเป็นไปได้กว้างขวางสำหรับโปรเจกต์มัลติมีเดียโอเพ่นซอร์ส ด้วยการสนับสนุนโปรโตคอลสื่อสารต่างๆ และต้องขอบคุณ Edge Impulse กับ Tiny ML ทำให้เราสร้างโปรเจกต์ AIoT ได้สบายๆ
หนึ่งในฟีเจอร์เด็ดของบอร์ด Arduino คือการสนับสนุนโปรโตคอลสื่อสารหลายแบบ โดยเฉพาะ Wi-Fi ที่เปิดโลกให้สร้างโปรเจกต์เชื่อมต่อได้หลากหลาย อีกเครื่องมือเทพๆ คือ Arduino Cloud นี่คือแพลตฟอร์มที่ให้เราต่อโปรเจกต์ Arduino ของเราได้ง่ายๆ และเข้าถึงบริการกับเครื่องมือมากมาย ด้วย Arduino Cloud เราสามารถควบคุมอุปกรณ์จากระยะไกลได้เลย
นอกจากนี้ Tiny ML เป็นเทคโนโลยีที่ใช้กับบอร์ด Arduino เพื่อเพิ่มความสามารถ AI ให้กับโปรเจกต์ Tiny ML ให้เรารันโมเดลแมชชีนเลิร์นนิงบนบอร์ด Arduino ได้โดยตรง นี่เปิดโอกาสใหม่ๆ ในการสร้างโปรเจกต์อัจฉริยะที่ตอบสนองต่อการเคลื่อนไหวต่างๆ ได้แบบเรียลไทม์
โปรเจกต์นี้คือ Masterclass ใน Cognitive Computing และ Multimedia Interactivity ตัวจริงเสียงจริง The TinyML Interactive Space คือ Artificial Intelligence Workstation ประสิทธิภาพสูง ออกแบบมาเพื่อเชื่อมโยงการเคลื่อนไหวของมนุษย์กับศิลปะดิจิทัล ด้วยการประยุกต์ใช้ Edge Impulse Neural Networks และ **Nicla Sense ME’s 9-Axis AI Engine** โปรเจกต์นี้จะพาน้องไปสร้าง "Cognitive Room" อันล้ำสมัย ที่จัดการการตรวจจับท่าทางแบบเรียลไทม์และการประสานงาน MQTT-AV แบบโกลบอลด้วยความเร็วระดับอุตสาหกรรม

ภาพรวมโครงสร้างพื้นฐานและสถาปัตยกรรม AI
Performative AI Framework ทำงานผ่านวงจรชีวิตพิเศษแบบ Sample-Train-Deploy ระบบนี้สร้างขึ้นบน Deep Learning Model ที่มีความน่าเชื่อถือสูง:
- Nicla Sense ME Inertial Shunt: หรือ "Perceptual Node" บอร์ดนี้จับข้อมูล High-Frequency Accelerometer และ Gyroscope ข้อมูลเทเลเมทรีดิบนี้จะถูกประมวลผลผ่าน Bosch BHI260AB AI-Hub บนบอร์ด ทำให้สามารถวิเคราะห์การเคลื่อนไหวได้ในระดับมิลลิวินาทีด้วยพลังงานต่ำมาก
- Edge Impulse Neural Matrix: หรือแกนกลางลอจิก ด้วยสถาปัตยกรรม CNN (Convolutional Neural Network) ที่ฝึกด้วยชุดข้อมูลท่าทาง (กระโดด, วิ่ง, เคลื่อนไปด้านข้าง) ระบบสามารถระบุรูปแบบการเคลื่อนไหวที่ซับซ้อนด้วยความแม่นยำกว่า 90% และส่งออกน้ำหนักความรู้เป็นไลบรารี C++ ดั้งเดิม
- MQTT Dispatcher HUD: ผ่าน Mosquitto Broker เฉพาะทาง ท่าทางต่างๆ จะถูกกระจายเป็นอีเวนต์ดิจิทัล อุปกรณ์ใดๆ ที่เชื่อมต่อ—ตั้งแต่ชุด Oplà ไปจนถึงเครื่องฉาย VLC—จะรับทริกเกอร์เหล่านี้ ทำให้ได้การซิงโครไนซ์ AV แบบ "Zero-Latency" ระดับมืออาชีพ
สร้างด้วย
ด้วยความรักมากมาย 💖 แรงจูงใจที่จะช่วยเหลือคนอื่น 💪🏼 Arduino Edge Impulse และ Python 🐍 โดยใช้:
ฮาร์ดแวร์และเลเยอร์การออกแบบ
- Nicla Sense ME (สมองประสาทสัมผัส): ไมโครคอนโทรลเลอร์ AI ระดับสูงที่เราเลือกมา มันทำหน้าที่เป็น สะพานเชื่อมจากเซ็นเซอร์ไปสู่การอนุมาน (Inertial-to-Inference Bridge) โดยคำนวณเครือข่ายประสาทเทียมแบบ floating-point ซับซ้อนบนตัวอุปกรณ์ได้เลย ไม่ต้องพึ่งเมฆ (cloud) ในรอบการอนุมาน
- Arduino Nano RP2040 Connect: ตัว "ศูนย์รวมสัญญาณ (Sync Hub)" เราเลือกเจ้านี้มาเพราะมันมี WiFiNINA ในตัว มันรับแพ็กเก็ตท่าทางจาก MQTT แล้วไปสั่งงานแอคชูเอเตอร์จริงๆ เช่น หุ่นยนต์เลโก้หรือประติมากรรมจลนศาสตร์สุดพิเศษ
- Arduino Oplà IoT Kit: ตัว "HUD อินเทอร์แอคทีฟ" มันให้ การตอบสนองทั้งภาพและเสียง ผ่าน OLED วงกลมและเซ็นเซอร์สัมผัสแบบ capacitive ที่ติดมาในตัว ทำหน้าที่เป็นโหนดควบคุมหลักสำหรับผู้ใช้งาน
- Linux Multimedia Matrix: ผู้กำกับกลาง ตัวนี้รันเอนจินที่ใช้ Python ดูแล Spotify Web API สำหรับเสียง และ ไลบรารี VLC-Python สำหรับการฉายภาพแมปปิ้งความละเอียดสูง 2K/4K ที่ถูกกระตุ้นโดยเหตุการณ์จาก AI
สิ่งที่ต้องเตรียมก่อนเริ่มงาน
ก่อนจะได้โค้ดมาลงเครื่องและรันโปรเจกต์ได้ น้องต้องทำตามขั้นตอนง่ายๆ เหล่านี้ก่อน:
นี่คือลิสต์ของสิ่งที่ต้องใช้และวิธีติดตั้ง เริ่มแรกเราจะตั้งค่าสำหรับเครื่อง Linux ของเราก่อน
การตั้งค่า Linux เพื่อรันโค้ด:
เราต้องใช้ Linux หรือดิสโทรอื่นๆ เช่น Debian สำหรับ MQTT Broker ก่อนติดตั้งไลบรารีในเครื่อง Linux ให้รันโค้ดต่อไปนี้ในเทอร์มินัลก่อน:
sudo apt update
sudo apt upgrade
หลังจากอัปเดตและอัปเกรดแล้ว เราจะเขียนคำสั่งต่อไปนี้เพื่อติดตั้ง VLC player สำหรับรันอนิเมชั่นของเราในโปรแกรมเล่นวิดีโอผ่าน Python:
sudo pip3 install python-vlc
เพื่อติดตั้ง Mosquitto Broker ให้พิมพ์คำสั่งต่อไปนี้:
sudo apt install -y mosquitto mosquitto-clients
จากนั้นพิมพ์คำสั่งต่อไปนี้ เราต้องไปแก้ไขไฟล์ที่ถูกติดตั้งมาเพื่อให้ MQTT Broker ทำงานเป็น broker สาธารณะในเครือข่าย WiFi ภายในบ้านเราได้:
sudo nano /etc/mosquitto/mosquitto.conf
ทีนี้เพิ่มบรรทัดต่อไปนี้ลงไปท้ายไฟล์ โดยไม่ต้องไปยุ่งกับส่วนอื่น (กด Ctrl+x เพื่อบันทึกการเปลี่ยนแปลง):
listener 1883
allow_anonymous true
หลังจากบันทึกไฟล์แล้ว น้องต้องรีสตาร์ท Mosquitto Broker โดยรันคำสั่งต่อไปนี้ แล้วรีสตาร์ทเครื่อง Linux ของน้อง:
sudo systemctl restart mosquitto.service
อีกอย่าง เพื่อตั้งค่าให้ Broker เริ่มทำงานอัตโนมัติตอนเปิดเครื่อง Linux น้องต้องรันคำสั่งนี้ในเทอร์มินัล:
sudo systemctl enable mosquitto.service
เพื่อหา IP Address ที่เราจะใช้เป็นที่อยู่ของ broker ของเรา ให้รันคำสั่งนี้ในเทอร์มินัล:
hostname -I
สุดท้าย ตรวจสอบว่า Mosquitto broker กำลังทำงานและพร้อมใช้งานหรือไม่ โดยรันคำสั่งนี้ในเทอร์มินัล:
mosquitto -v
ตอนนี้เราจบการตั้งค่า MQTT แล้ว ต่อไปเราต้องติดตั้งไลบรารี Paho-MQTT สำหรับ Python เพื่อควบคุมและเชื่อมต่อกับ Broker ให้รันคำสั่งต่อไปนี้:
sudo pip install paho-mqtt
น้องยังต้องติดตั้งไลบรารี Bluepy เพื่อให้สื่อสารกับ Arduino Nicla Sense ME ผ่าน Bluetooth ได้:
sudo pip3 install bluepy
เพื่อควบคุมหุ่นยนต์เลโก้ น้องต้องติดตั้งไลบรารี LegoPi สำหรับ Linux:
sudo pip3 install buildhat
จำเป็นต้องติดตั้งไลบรารี Python สำหรับ Spotify จากนั้นน้องจะควบคุมเพลงได้ตามใจชอบด้วยโค้ด:
sudo pip3 install spotipy --upgrade
และสิ่งสุดท้ายแต่ไม่ท้ายสุด เราต้องไปดาวน์โหลดไฟล์มีเดียที่เตรียมไว้สำหรับโปรเจกต์นี้มา (ลิงก์อยู่ในเอกสารต้นฉบับ) ให้ดาวน์โหลดลงในเครื่อง Linux ของน้องที่ไหนก็ได้ แต่ต้องจำไดเรกทอรีที่เก็บไว้ให้ดี เพราะเราต้องคัดลอกพาธนั้นไปใส่ในโค้ดตอนรัน
สำหรับการเซ็ตอัพเครื่อง Linux ก็จบแค่นี้ก่อนนะน้อง
มาเซ็ตอัพใน Windows กันดีกว่า:
ได้เวลาจัดการทุกอย่างบน Windows (ที่พี่ใช้) เพื่อเทรนโมเดลและอัปโหลดโค้ดลงบอร์ดที่เราจะใช้กันแล้ว:
อย่างแรก เราต้องเซ็ตอัพ Arduino IDE สำหรับบอร์ด 3 ตัวที่ใช้ในโปรเจคนี้ หลังจากติดตั้ง Arduino IDE ในคอมแล้ว ต้องเข้าไปติดตั้ง "core" ที่จำเป็นสำหรับแต่ละบอร์ดใน Board Manager ด้วย นี่คือลิงก์ไปยังเอกสารของ Arduino ที่เป็นไกด์เริ่มต้นเร็วๆ สำหรับแต่ละบอร์ด
สำหรับบอร์ด Nicla จำเป็นต้องติดตั้งไลบรารี **Arduino_BHY2** โดย Arduino ใน Library Manager ของ IDE ด้วยนะ ไลบรารีนี้ใช้สำหรับควบคุมเซนเซอร์ทั้งหมดในบอร์ด
สำหรับบอร์ด Nicla จำเป็นต้องติดตั้งไลบรารี **ArduinoBLE** โดย Arduino ใน Library Manager ของ IDE ด้วย ไลบรารีนี้ใช้สำหรับการเชื่อมต่อบลูทูธของบอร์ด
สำหรับบอร์ด RP2040 และ Oplá IoT Kit จำเป็นต้องติดตั้งไลบรารี **WiFiNINA** โดย Arduino ใน Library Manager ของ IDE ตัวนี้ใช้สำหรับการเชื่อมต่อ WIFI
สำหรับบอร์ด Oplá IoT Kit จำเป็นต้องติดตั้งไลบรารี **Arduino_MKRIoTCarrier** โดย Arduino ใน Library Manager ของ IDE ตัวนี้ใช้สำหรับควบคุม Carrier เรื่องไฟและเสียงจากบัซเซอร์
มาเอาไลบรารี MQTT สำหรับบอร์ด Arduino กัน:
เพื่อให้ Arduino Nano และ Oplá คุยกับ broker บน Linux ได้ น้องต้องติดตั้งไลบรารี **PubSubClient** ไลบรารีนี้เป็นไคลเอนต์สำหรับทำ publish/subscribe กับเซิร์ฟเวอร์ที่รองรับ MQTT (พูดง่ายๆ คือให้ Arduino ของเราคุยกับ MQTT Broker ได้นั่นแหละ)
- ดาวน์โหลดไลบรารี PubSubClient น้องควรได้โฟลเดอร์ .zip มาอยู่ในโฟลเดอร์ Downloads
- แตกไฟล์ .zip ออก น้องจะได้โฟลเดอร์ชื่อ pubsubclient-master
- เปลี่ยนชื่อโฟลเดอร์จาก pubsubclient-master เป็น pubsubclient
- ย้ายโฟลเดอร์ pubsubclient ไปไว้ในโฟลเดอร์ libraries ของการติดตั้ง Arduino IDE
- จากนั้น เปิด Arduino IDE ใหม่
สุดท้าย เราก็เซ็ตทุกอย่างใน Arduino IDE เสร็จแล้ว และเริ่มใช้บอร์ดได้ แต่ก่อนทำนั้น เราต้องเซ็ตทุกอย่างในเครื่อง Windows เพื่อเทรนโมเดลของเราบนแพลตฟอร์ม Edge Impulse ก่อน
ตั้งค่า Edge Impulse CLI ใน Windows:
น้องต้องมีบัญชีใน Edge Impulse ก่อน วิธีการติดตั้ง Edge Impulse CLI บน Windows ให้ทำตามเอกสารการติดตั้งอย่างละเอียดจาก Edge Impulse
ตอนนี้เราพร้อมแล้วที่จะเริ่มเทรนโมเดลของเรา ในกรณีที่น้องอยากได้โมเดลที่ตรวจจับการเคลื่อนไหวต่างจากของพี่ แต่พี่จะแสดงให้ดูว่าพี่เทรนโมเดลของพี่ยังไง
ตั้งค่า Spotify ใน Linux:
อย่างแรกเราต้องสร้างหรือล็อกอินเข้าแพลตฟอร์ม developer ของ Spotify สิ่งแรกที่เราจะทำคือสร้างแอป ซึ่งง่ายมาก หลังจากนี้เราจะเห็นแอปของเราใน Dashboard แล้วเราต้องคลิกเข้าไป จากนั้นเราจะถูกนำไปที่หน้าตัวแอป และเราต้องเลือก edit settings เพื่อเพิ่ม URL บางตัว:
http://localhost:8888/callback
http://localhost:8080
เอา URL นี้ไปใส่ในช่อง Redirect URIs กันเลย:

หลังจากเพิ่มแล้ว เรากลับไปที่หน้า Overview ของ Nicla App ในแดชบอร์ด Developer กันต่อ จะเจอ Client ID กับ Client Secret ที่ต้องใช้ในโค้ด อย่าลืมก๊อปปี้ค่าทั้งสองเก็บไว้ให้ดีนะน้อง
ทีนี้ ถึงขั้นตอนสำคัญคือการหา Device ID ซึ่งเป็นตัวควบคุมว่าดนตรีจะดังออกมาจากไหน ง่ายสุดคือให้เปิดเพลงเล่นในอุปกรณ์ที่เราต้องการก่อนเลย ไม่ว่าจะเป็นมือถือ คอมพิวเตอร์ หรือลำโพงอัจฉริยะ ขณะที่เปิดเพลงอยู่นั้น เราจะใช้มันเพื่อตรวจจับและควบคุมผ่านโค้ด Python ของเรา
อีกวิธีคือเข้าไปที่ลิงก์สำหรับดูอุปกรณ์ที่พร้อมใช้งานใน Developer Console (ลิงก์นี้พี่เอาไว้ให้น้องลองเล่นเองในแดชบอร์ดนะ) จากนั้นให้คลิกที่ปุ่ม Get Token อย่าลืมติ๊กถูกที่ช่อง user-read-playback-state แล้วค่อยกด request token

จากนั้นกด TRY IT แล้วดูในส่วนที่พี่วงสีแดงไว้ในรูปด้านล่าง จะมีค่า "id": โผล่มา นั่นแหละ Device ID ที่ต้องก๊อปปี้ (พี่ไม่โชว์ให้ดูนะ เพราะมันเป็นข้อมูลสำคัญ) ตรวจสอบให้ดีว่า name ตรงกับอุปกรณ์ที่เราใช้อยู่

เตรียมทุกอย่างในแดชบอร์ด Developer เสร็จแล้ว กลับมาที่เครื่อง Linux ของเรา เปิด Editor ขึ้นมาเลย (พี่ใช้ Thonny) แต่ก่อนจะรันโค้ดหลัก เราต้องรันโค้ดทดสอบก่อนสักหน่อย เพื่อให้ Spotipy ล็อกอินเข้าบัญชี Spotify ของเราให้เรียบร้อย พอทำขั้นตอนนี้แล้ว โค้ดหลักจะไม่ถามหา credentials อีก
อีกอย่างนึง ถ้าน้องอยากเล่นเพลงเฉพาะเจาะจง ให้เข้าไปที่ Spotify แล้วกด "Share" -> "Copy Song Link" จะได้ลิงก์ประมาณนี้:
https://open.spotify.com/track/ 3h3XIdPa1W8NtxEw0TOQHb ?si=cc4dd6b0ea0f41f6
ส่วนที่พี่ทำตัวหนาไว้คือ Track ID ที่ต้องเอาไปแทนที่ในโค้ดบรรทัดนี้: uris=['spotify:track:3h3XIdPa1W8NtxEw0TOQHb']) คราวนี้จะสั่งเล่นเพลงอะไรใน Python ก็ได้แล้ววว! ไปก๊อปปี้ ลองรันโค้ดตัวอย่างนี้กัน:
import spotipy
from spotipy.oauth2 import SpotifyOAuth
from pprint import pprint
device_id = "" #Put the values from your account