เริ่มต้นด้วยความตั้งใจที่จะแกล้งเพื่อนให้ขำๆ แต่สุดท้ายมันสนุกจนต้องเอามาแชร์ให้ทุกคนได้ลอง!
ไอเดียของเราคือการทำ "เครื่องปิ้งขนมปังพูดได้" แบบในซีรีส์ Red Dwarf ที่ชอบถามเรื่องขนมปังไม่หยุดทุกครั้งที่มีคนเดินผ่าน แถมเรายังเพิ่มฟีเจอร์ให้มันตอบโต้ได้เวลามีคนตะโกนใส่ด้วย เลยต้องเสริมอุปกรณ์เข้าไปอีกหน่อย
นี่เป็นโอกาสดีที่ได้ลองทำ PCB Etching ด้วย แต่ถ้าไม่อยากยุ่งยาก ก็ใช้ breadboard หรือ strip board ประกอบแทนได้เหมือนกัน
อนาคตเราจะเอามันไปต่อยอดกับอุปกรณ์ IoT อื่นๆ อีกแน่นอน ส่วนบทความนี้ก็เป็นจุดเริ่มต้นที่ดีแล้ว...
มุมมองของโปรเจกต์
The Talking IoT Toaster เป็นการนำเครื่องปิ้งขนมปังธรรมดามาประยุกต์ให้กลายเป็นสมาร์ทโฮมแอปพลิเคนซ์แบบขำๆ แต่ก็ทำออกมาได้อย่างแนบเนียน ด้วยการติดตั้ง Arduino และเซ็นเซอร์ต่างๆ ทำให้มันกลายเป็นเพื่อนคู่ครัวที่คอยทักทายคุณได้
วิธีทางเทคนิค: ให้เสียงแก่ขนมปัง
โปรเจกต์นี้ทำงานบนสองเลเยอร์หลัก:
- เลเยอร์เสียง: ใช้ ไลบรารี TMRpcm เพื่อเล่นไฟล์ WAV ที่บันทึกไว้ใน SD Card ทำให้เครื่องปิ้งขนมปังพูดได้ผ่านลำโพงเล็กๆ
- เลเยอร์เซ็นเซอร์: ใช้ เซ็นเซอร์ PIR ตรวจจับการเคลื่อนไหวเพื่อเริ่มบทสนทนา และ โมดูลไมโครโฟน ฟังเสียงตะโกนตอบกลับเพื่อดำเนินบทสนทนาต่อ
อุปกรณ์ฮาร์ดแวร์ทั่วไป
สำหรับโปรเจกต์นี้เราต้องใช้อุปกรณ์หลายอย่าง ถ้าชิ้นไหนมีเครื่องหมาย (*) หมายความว่าข้ามไปได้ถ้ายังไม่อยากทำแบบเต็มรูปแบบ
โครงสร้างฮาร์ดแวร์
- Arduino Nano: ตัวควบคุมหลัก รับค่าจากเซ็นเซอร์ เล่นเสียง และควบคุมไฟ LED
- เซ็นเซอร์ PIR: ตรวจจับการเคลื่อนไหวเพื่อเริ่มบทสนทนา
- โมดูลไมโครโฟน: ฟังเสียงตอบกลับจากผู้ใช้
- โมดูล SD Card: เก็บไฟล์เสียง WAV สำหรับเล่น
- เครื่องขยายเสียงและลำโพง: ส่งออกเสียงพูดของเครื่องปิ้งขนมปัง
- ไฟ LED: ให้สัญญาณแสงระหว่างการทำงาน
เรื่องของเสียง
เพราะโปรเจกต์นี้เน้นที่เสียงเป็นหลัก เราต้องแปลงไฟล์เสียงให้อยู่ในรูปแบบที่ Arduino และไลบรารีที่เราเลือกใช้ (TMRpcm) สามารถทำงานได้
การแปลงเสียงทำได้ง่ายๆ ด้วย Audacity
ถ้าไฟล์เสียงของคุณเป็นสเตอริโอ ต้องแปลงให้เป็นโมโนก่อน (เพราะเรามีลำโพงแค่หนึ่งเดียว) โดยไปที่ Tracks > Mix
จากนั้น Export ไฟล์โดยไปที่ File > Export > Export As WAV และตั้งค่า bit rate ตามด้านล่าง:

บันทึกไฟล์ทั้งหมดลง SD Card ถ้าไฟล์เสียงเป็นส่วนหนึ่งของบทสนทนาย่อย การตั้งชื่อแบบ "conversation_StepId.wav" จะช่วยให้จัดการในโค้ดได้ง่ายขึ้น
การเขียนโค้ด
การเขียนโค้ดให้เจ้านี่ค่อนข้างง่ายเลย เพราะมี ไลบรารีที่เข้ากับ WAV สำหรับแพลตฟอร์ม AVR อยู่แล้ว งานเราก็แค่เพิ่มลอจิกของเราเข้าไป พร้อมโค้ดสำหรับอ่านค่าจากไมโครโฟนและเซ็นเซอร์ PIR เข้าไป
ลอจิกซอฟต์แวร์และโฟลว์การโต้ตอบ
โค้ด Arduino ถูกโปรแกรมด้วยลอจิกการสนทนาแบบใช้สถานะ (State-based) แบบนี้:
ในโค้ดเราจะ:
- เซ็ตอัพอินพุต/เอาต์พุตทั้งหมด
- คำนวณว่าจะเริ่มบทสนทนาไหนดี
- รอทริกเกอร์เพื่อเริ่มบทสนทนา (จาก PIR เท่านั้น)
- ถ้ากำลังคุยกับใครอยู่ ก็จะรอการตอบกลับ (จาก MIC) ก่อนจะตอบด้วยส่วนถัดไป
- ถ้าไม่มีใครตอบกลับหลังจากเวลาผ่านไปสักพัก — ก็ยอมแพ้ แล้วกลับไปเริ่มต้นบทสนทนาถัดไปรอคนต่อไป
- สถานะว่าง: ระบบรอให้เซ็นเซอร์ PIR ตรวจจับการเคลื่อนไหว
- เริ่มต้น: เมื่อตรวจจับได้ มันจะเล่นไฟล์เสียงแรกในลำดับบทสนทนา (เช่น "อยากได้ขนมปังปิ้งมั้ย?")
- ฟัง: จากนั้นมันจะเปิดใช้งานไมโครโฟนและรอเสียงดัง (เช่น การตะโกน) เป็นการตอบกลับ
- ตอบสนอง: ถ้าตรวจจับเสียงได้ มันจะเล่นไฟล์เสียงลำดับถัดไป ถ้าไม่พบเสียงภายในช่วงเวลาที่กำหนด มันจะยอมแพ้และรีเซ็ตกลับไปที่สถานะว่างรอการโต้ตอบครั้งใหม่
แนวทางการพัฒนาต่อ
- เชื่อมต่อ IoT: ใช้โมดูลอย่าง ESP8266 ESP-01 เพื่อเชื่อมตู้ปิ้งขนมปังเข้ากับ WiFi ให้มันส่งทวีตหรือการแจ้งเตือนผ่านบริการอย่าง IFTTT ตอนที่ปิ้งขนมปังเสร็จ
- เซ็นเซอร์ขั้นสูง: ใช้เซ็นเซอร์วัดแสงเพื่อตรวจสอบสีของขนมปังปิ้งจริงๆ และให้คำเตือนด้วยเสียงพูด
- บุคลิกแบบกำหนดเอง: โปรแกรมชุดบทสนทนาและรูปแบบไฟ LED ที่แตกต่างกันสำหรับ "โหมด" ต่างๆ
โปรเจกต์นี้คือการสำรวจเรื่อง การปฏิสัมพันธ์ระหว่างมนุษย์กับเครื่องจักร (HMI) และการเพิ่มบุคลิกให้กับของใช้ในชีวิตประจำวันที่โคตรจะเพอร์เฟกต์
การทำแผงวงจรพิมพ์ (PCB)
เพื่อสร้างแผงวงจรที่เราใช้กันที่นี่ เราใช้เครื่องพิมพ์ 3D คู่กับเลเซอร์ UV 2.5w
- ทาสีบอร์ดแผ่นทองแดงด้วยสีดำด้านหนึ่งชั้น
- ออกแบบไฟล์ Gerber ในเครื่องมือที่ชอบ (Free PCB, Eagle, ฯลฯ)
- Export ไฟล์ Gerber เป็นขาวดำ โดยให้สีดำแทนส่วนสี/ทองแดงที่ต้องเอาออก และอย่าลืม พลิกภาพเลเยอร์ทองแดงด้านล่างในแนวตั้งหรือแนวนอนด้วย
- เปิด Inkscape แล้ว ปรับขนาดเอกสาร ให้พอดีกับฐานพิมพ์
- ตรวจสอบให้แน่ใจว่าได้ติดตั้ง JTech laser tool แล้ว
- นำเข้าไฟล์ลงใน Inkscape และปรับขนาดให้ถูกต้อง
- แปลงภาพเป็นพาธโดยใช้ Edge Tracing Tool
- ใช้ JTech Laser tool เพื่อสร้าง GCode สำหรับเลเซอร์
- รันบนเครื่องพิมพ์
ตอนนี้คุณควรได้บอร์ดที่หน้าตาประมาณนี้:

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

ทีนี้เราก็สามารถเอาแผงวงจรลงไปแช่ในเฟอร์ริกคลอไรด์เพื่อกัดทองแดงส่วนเกินออกได้ การเอาหน้าทอร์ชโฟนวางไว้ใต้ถังจะช่วยให้เห็นความคืบหน้าได้ เพราะแสงจะลอดผ่านบอร์ดตรงส่วนที่ถูกกัด
หมายเหตุ - เอาบอร์ดออกมาทุก 5-10 นาที แล้วขัดเส้นทองแดงเบาๆ อีกครั้ง วิธีนี้ช่วยให้สีที่ยังติดค้างอยู่หลุดออก เพราะกรดจะทำให้ขอบสีที่เหลืออยู่อ่อนตัวลง
เมื่อกัดเสร็จแล้ว ล้างบอร์ดให้สะอาด ถ้าพอใจกับผลแล้วก็เอาเศษสีที่เหลือออกโดยใช้อะซิโตน
ตอนนี้เราก็สามารถเจาะรูสำหรับตัวประกอบต่างๆ ได้แล้ว โดยใช้ดอกสว่านเล็กๆ ขนาด 1 มม. ในตัวอย่างนี้ (ระวังอย่าให้ดอกหักล่ะ!)

หมายเหตุ - มีบางส่วนของพื้นที่ทองแดงบน PCB ที่ผมต่อไม่ครบน่ะ เลยต้องเจาะรูเพิ่มและใส่สายไฟเพื่อแก้ไข (ดูรูปที่สองด้านบน)
โปรเจกต์นี้เราไม่ได้ใช้ซอลเดอร์มาสก์หรือน้ำยาทินเลยสักนิด พอทำเสร็จก็แค่ทาแล็กเกอร์ป้องกันสนิมให้บอร์ดพอ เพราะเป็นโปรเจกต์ทำเล่นๆ ไงล่ะ
ทีนี้ก็ตัดบอร์ดให้ได้ขนาด แล้วความสนุกก็เริ่มจริงๆ จังๆ เลย!
ลงอวัยวะให้บอร์ด (Populate the Board)
ตอนนี้เราก็ลงอุปกรณ์ทั้งหมดลงบนบอร์ด และบัดกรีให้เข้าที่ได้แล้ว เนื่องจากเราไม่มีซอลเดอร์มาสก์หรือการชุบทินบนบอร์ด เราต้องมั่นใจว่าเศษฟลักซ์หลังบัดกรีถูกกำจัดออกให้หมด (ใช้อะซิโตนหรือน้ำอุ่นล้าง) เราเลยปล่อยให้บอร์ดแห้งข้ามคืนไป....

ตอนนี้เราก็เพิ่งรู้ตัวว่าเราลืมตัวต้านทาน (Resistor) ไปตัวนึง แต่มันอยู่บนตัว Nano เองนี่หว่า เลยเพิ่มลงไปตอนนี้ระหว่างขา D2 กับ D9 ซะ ซึ่งทำให้เราควบคุมการตอบสนองของไฟ LED ได้
ทีนี้เราก็บัดกรี LED ทั้งหมดเข้าด้วยกัน แล้วต่อสายไฟไปที่ LED และลำโพงของเรา จากนั้นก็บัดกรีปลายสายอีกข้างไปยังจุดต่อที่เกี่ยวข้องบนบอร์ด

สายสีดำที่เห็นน่ะ เพราะผมบัดกรีพลาดเองน่ะสิ แต่บนบอร์ดมีลายทองแดงเตรียมไว้ให้แล้ว!
ส่วนของโค้ด (The Code)
ถึงจุดนี้เราก็แค่ต้องประกอบโค้ดเข้าด้วยกันเพื่อให้ทุกอย่างทำงานตามที่คาดหวัง ซึ่งโค้ดทั้งหมดรวมอยู่ในไฟล์ด้านล่างแล้ว
อย่าลืมเปลี่ยนชื่อไฟล์ WAV หรือกำหนดขา (pin assignments) ใหม่ให้ตรงกับการลงมือทำของน้องนะ
ลองทดสอบดูตอนนี้เลย ง่ายกว่ามากที่จะแก้ไขก่อนที่จะเอาไปติดกับตัวปิ้งขนมปัง!
ส่วนประกอบทางกายภาพอื่นๆ (The Other Physical Parts)
ตอนนี้เราอยากจะติดมันเข้ากับตัวปิ้งขนมปังที่เราเลือก แล้วเพิ่มฝาครอบลำโพงที่เหมาะกับโปรเจกต์นี้ เราเลยพิมพ์ฝาครอบด้วยเครื่องพิมพ์ 3D แล้วพ่นสี (เพราะไม่มีพลาสติกสีส้มน่ะ)

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

แล้วเราก็แค่ติดลำโพงและ LED เข้าไปด้านใน โดยใช้แผ่นโฟมสองหน้าติดที่ด้านหลังของลำโพง แล้วเอาไปติดที่กลางฝาครอบของเรา
ใช้แผ่นโฟมติดอีกนิดหน่อยเพื่อติดบอร์ดเข้ากับด้านล่างของตัวปิ้งขนมปัง เท่านี้ก็ได้ตัวปิ้งขนมปังสุดเจ๋งแล้ว!
*คลิปสั้นๆ ของประโยคโปรดมัน....*ลิงค์เด็ดๆ ที่ต้องมี
เว็บไซต์ Visual Micro
AVR WAV/PCM Audio Library for SD Playback
Audacity