ตอนเด็กๆ พี่ก็คลั่งไคล้รถไฟเลโก้เหมือนกัน สร้างเองบังคับเองด้วยระบบ Power Functions ของเขาเลย แต่พอโตขึ้นก็อยากจะบังคับด้วยวงจรที่เราออกแบบเองบ้าง เลยเริ่มทำโปรเจกต์ต้นแบบรถไฟที่ควบคุมผ่าน Bluetooth LE แบบไร้สาย แต่พอลองทดสอบจริงกลับพบว่า BLE มันไม่เสถียรพอ
หลังจากนั้นพี่ก็ได้มาเล่นกับ Arduino IoT Cloud แล้วก็คิดขึ้นมาได้ว่า "ทำไมเราไม่ใช้เจ้านี่ควบคุมรถไฟล่ะ?" พี่เลยปรับปรุงต้นแบบใหม่ให้ใช้ Arduino IoT Cloud ในการควบคุม ผลลัพธ์คือมันทำงานได้เนียนปรื้ด! แถม IoT Cloud ยังให้เราตั้งค่า LED เป็นช่องสัญญาณแบบสวิตช์เปิด-ปิดได้อีกด้วย (ต่างจาก BLE ที่ไม่มีสวิตช์แบบ boolean ให้ใช้)
หมายเหตุ:
- สำหรับเบรดบอร์ดนี้ เราต้องถอดรางกราวด์และรางไฟออกทั้งสองข้าง โดยใช้คัตเตอร์กรีดกาวด้านล่างแล้วดันออกจากส่วนกลาง (ดูรูปด้านล่าง)
- ในโปรเจกต์จริง พี่ใช้สายจัมเปอร์แบบเบรดบอร์ด (ตามรูปด้านล่าง) เพื่อให้การจัดวางกระชับ แต่ถ้าน้องใช้สายจัมเปอร์ทั่วไปก็ได้นะ
Image: www.f-alpha.net
- ถ้าสายต่อแบตเตอรี่ 9V ของน้องไม่มีหัวสำหรับเสียบเบรดบอร์ด (แบบของพี่) อาจต้องบัดกรีหัวเข็มหรือสายจัมเปอร์เพิ่มเพื่อให้ต่อได้แน่นหนา
ลำดับการประกอบ:
- วางไอซีขับมอเตอร์ L293D ที่ปลายด้านหนึ่งของเบรดบอร์ด แล้วใช้สายจัมเปอร์ต่อขา GND ทั้งสองด้านเข้าด้วยกัน (ต่อขาที่ 4 กับ 5 และขาที่ 12 กับ 13 ของ L293D เข้าด้วยกัน)
L293D motor driver
ขั้นตอนเสริม (ไม่จำเป็น): ใส่หัวเข็ม (headers) ลงบนเบรดบอร์ดเพื่อความสวยงามและต่อ LED ได้ง่ายขึ้น เพราะถ้าต่อสายตรงๆ อาจจะยุ่งยากในขั้นตอนหลัง แต่ถ้าไม่มีหัวเข็ม ก็แค่ต่อสายตรงจุดนั้นแล้วค่อยมาต่อ LED ทีหลังได้ (ดูรูปในขั้นตอนที่ 3)
วางตัวต้านทาน (Resistor) 1k ohm บนเบรดบอร์ดตรงจุดที่จะต่อสายกราวด์ของ LED (หรือหัวเข็ม)
หัวเข็มเป็นตัวเลือก! น้องจะใช้สายจัมเปอร์ต่อ LED แทนก็ได้
วางบอร์ด Nano 33 IoT ลงบนเบรดบอร์ด (จะแน่นหน่อย) ระวังให้ด้าน micro USB หันออกด้านนอก เพราะไม่งั้นจะเสียบโปรแกรมไม่ได้ (ดูรูปในขั้นตอนที่ 5)
ต่อสายจากขา GND และขาดิจิทัลหมายเลข 2, 3, 5, และ 6 (LED ต้องใช้ขา PWM เพื่อปรับความสว่าง) ไปยังแถวของเบรดบอร์ดที่วางหัวเข็มไว้ ส่วนสาย GND ให้ต่อเข้ากับตัวต้านทาน 1k ohm โดย LED แต่ละดวงจะอยู่บนช่องสัญญาณแยกกัน แต่ในโปรเจกต์นี้เราจะควบคุมทั้งหมดด้วย IoT Variable ตัวเดียวกัน
- (ในรูปเอาสายที่ต่อไปหา LED ออกเพื่อให้เห็นภาพชัดเจน น้องไม่ต้องถอดออกนะ) ต่อสายจากขาดิจิทัลหมายเลข 10, 11, และ 12 โดยขา 10 และ 11 ให้ต่อเข้ากับขาที่ 2 และ 7 ของ L293D (ด้านที่มีร่องบนตัวไอซีคือขา 1-8) ส่วนขา 12 ให้ต่อเข้ากับขาที่ 1 ของ L293D เพื่อควบคุมความเร็วมอเตอร์ จากนั้นต่อขาที่ 16 ของ L293D เข้ากับขา 3.3V ของ Nano 33 IoT และต่อขา GND ของ L293D เข้ากับขา GND อันที่สองของ Nano 33 IoT (การต่อขา GND เข้าด้วยกันตามขั้นตอนแรกจะทำให้การต่อกราวด์ง่ายขึ้น เพราะถ้ามีขา GND แยกสองจุด เวลาต่อแบตเตอรี่จะลำบาก)
สายไฟที่ต่อกับ LED ถอดออกเพื่อให้เห็นภาพชัดเจนเท่านั้นนะน้อง ขั้นตอนนี้ไม่ต้องถอดมันออกจริงๆ
- ต่อไป มาต่อขั้วแบตเตอรี่กัน วางตำแหน่งตามนี้เลย:
- ขั้วแบตเตอรี่อันแรก ต้องต่อกับขา 8 ของ L293D (สำหรับไฟเลี้ยง) และขา 3 หรือ 4 ของ L293D (สำหรับกราวด์)
- ขั้วแบตเตอรี่อีกอัน ต้องต่อกับขา VIN (Voltage In) ของบอร์ด Nano 33 IoT และขา GND ของบอร์ด Nano 33 IoT ห้ามใส่แบตเตอรี่ตอนนี้นะ! รอไว้ก่อน
- มาต่อมอเตอร์กัน! เอามอเตอร์ไปต่อกับขา 3 และ 6 บน L293D (ดูตามตำแหน่งที่คีมชี้ให้เลย)
ลงลึกเรื่องเทคนิค: Direct Track PWM Actuation (L293D/L298N)
บอกเลยว่าบอร์ด Arduino ตัวเล็กๆ แบบนี้เอาไฟไปเลี้ยงหัวรถจักรตัวเป็นๆ ไม่ไหวหรอก มันต้องใช้ไฟแรงสูงระดับอุตสาหกรรมเลย ในโปรเจคนี้เราใช้แบตเตอรี่ 9V กับมอเตอร์ไดรเวอร์เป็นตัวอย่าง แต่หลักการเดียวกันนี้สามารถขยายขึ้นไปใช้กับไฟแรงสูงกว่าได้หมด
แก่นหลักของเรื่องนี้คือ Direct Track PWM Actuation:
แหล่งจ่ายไฟ DC แรงสูง (เช่น Power Supply 12V หรือ 18V สำหรับรถไฟใหญ่ๆ) จะถูกส่งตรงเข้าไปที่มอเตอร์ไดรเวอร์อย่าง L293D หรือโมดูล L298N Motor Driver
แทนที่เอาต์พุตของไดรเวอร์จะไปต่อกับมอเตอร์หุ่นยนต์เล็กๆ เราสามารถต่อมันตรงๆ เข้ากับขั้วมอเตอร์ของรถไฟ หรือแม้แต่รางรถไฟโลหะได้เลย (ในกรณีที่ใช้ระบบไฟผ่านราง)!
Arduino Nano 33 IoT ทำหน้าที่เป็นสมอง มันจะส่งคำสั่งไปควบคุมมอเตอร์ไดรเวอร์ผ่านการสั่ง
analogWrite(enablePin, speed)ซึ่งเป็นการควบคุมแบบ PWM (Pulse Width Modulation) แบบเป๊ะๆ ด้วยคณิตศาสตร์ การปั๊มไฟแรงสูงแบบเร็วๆ เป็นจังหวะนี้แหละ ที่ทำให้เราควบคุมความเร็วให้รถไฟคืบคลานได้เนียนๆ แบบที่หม้อแปลงไฟธรรมดาๆ ทำไม่ได้!ต่อสาย USB เข้ากับ Nano 33 IoT ของคุณ แล้วไปสร้าง "Thing" ใน IoT Cloud โดยเพิ่มตัวแปร (Variables) และคลาส (Classes) ตามนี้: Class Variable
- bool direction
- CloudDimmedLight led
- int speed
- int speedControl
- bool speedReset
ตั้งค่าให้บอร์ด Nano 33 IoT เป็นบอร์ดสำหรับโปรเจคนี้ แล้วกรอกข้อมูลเครือข่าย Wi-Fi ของคุณลงในช่องด้านล่าง

เปิด Sketch ของ Thing ของคุณในแท็บ Sketch แล้วก็อปปี้โค้ดด้านล่างนี้ไปวาง (ในโค้ดมีคอมเมนต์อธิบายการทำงานไว้ให้แล้ว) จากนั้นอัพโหลดโค้ดลงไปยังบอร์ด Nano 33 IoT
ไปที่แท็บ Dashboard ใน IoT Cloud แล้วสร้าง Dashboard ขึ้นมาใหม่ หลังจากนั้นก็สร้าง Widget (คือสิ่งของต่างๆ ในภาพด้านล่างที่ใช้ควบคุมตัวแปร) แล้วลิงก์มันเข้ากับตัวแปรแต่ละตัว คุณไม่จำเป็นต้องใช้ Widget แบบเดียวกับพี่ก็ได้ แต่พี่ว่านี่เป็นรูปแบบที่ใช้ง่ายและตรงไปตรงมาที่สุดแล้ว ลองรีโหลดหน้าเว็บดู คุณควรจะสามารถควบคุมมอเตอร์และ LED ได้แล้ว ถ้ายังไม่ทำงาน ลองตรวจสอบการลิงก์ตัวแปรแต่ละตัวใหม่อีกทีนะ นี่คือรายการวิธีการลิงก์ Widget แต่ละตัว:
- INTERIOR LIGHT Widget ==> ตัวแปร
led - SPEED Widget ==> ตัวแปร
speed - SPEED CONTROL Widget ==> ตัวแปร
speedControl - STOP Widget ==> ตัวแปร
speedReset - DIRECTION Widget ==> ตัวแปร
direction
- INTERIOR LIGHT Widget ==> ตัวแปร

ข้อมูลเทคนิคเพิ่มเติม: อินเทอร์เฟซเว็บเซิร์ฟเวอร์ (ผ่าน Arduino IoT Cloud)
บอร์ด Arduino Nano 33 IoT นี้จะเชื่อมต่อกับเราเตอร์ Wi-Fi ที่บ้านคุณและสื่อสารกับ Arduino IoT Cloud
- IoT Cloud ทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ระดับเทพคอยประสานงานให้ คุณสร้างแดชบอร์ดแบบมีกราฟิกในคลาวด์ได้เลย พร้อมสไลด์บาร์, สวิตช์, ปุ่มกด
- เปิดแดชบอร์ดนี้บนอุปกรณ์ไหนก็ได้—มือถือ, แท็บเล็ต, หรือคอมพ์ ลากสไลด์หรือกดปุ่มเมื่อไหร่ คำสั่งจะวิ่งผ่านคลาวด์ไปหาบอร์ดของคุณทันที
- Nano 33 IoT ได้รับคำสั่งแล้ว ก็จะแมปค่าที่ได้ไปเป็นสัญญาณ PWM หรือดิจิตอลเอาต์พุต รถไฟก็จะตอบสนองทันที
- วิธีแบบคลาวด์นี้ให้อินเทอร์เฟซที่แข็งแรง, ปลอดภัย, และใช้ง่ายมาก โดยไม่ต้องมานั่งเขียนโค้ดเว็บเซิร์ฟเวอร์ระดับล่างเอง เหมาะสุดๆ สำหรับโปรเจคควบคุมหลายตัวแปรแบบซับซ้อนอย่างโปรเจครถไฟนี้
จัดไปวัยรุ่น! โปรเจคเสร็จแล้ว! ตอนนี้ถอดสาย USB ที่ต่อจากคอมพ์ออกได้เลย แล้วเอาถ่านใส่คลิปจับถ่านเข้าไป Nano 33 IoT ควรจะทำงานแบบไร้สายได้แล้ว โดยเชื่อมต่อกับอินเทอร์เน็ตบ้านคุณและคุยกับ IoT Cloud ได้เลย
ถ้ามีคำถาม, ปัญหา, หรืออยากแนะนำอะไร คอมเมนต์ไว้ด้านล่างได้เลย พี่จะรีบมาตอบให้เร็วที่สุด
สู้งานนะน้อง! ตัวอย่างการทำงานของโปรเจคอยู่ด้านล่างนี้