กลับไปหน้ารวมไฟล์
the-talking-iot-toaster-3fb0fe.md

เริ่มต้นด้วยความตั้งใจที่จะแกล้งเพื่อนให้ขำๆ แต่สุดท้ายมันสนุกจนต้องเอามาแชร์ให้ทุกคนได้ลอง!

ไอเดียของเราคือการทำ "เครื่องปิ้งขนมปังพูดได้" แบบในซีรีส์ 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 ตามด้านล่าง:

Audacity WAV Encoding settings for our SD Card Files

บันทึกไฟล์ทั้งหมดลง SD Card ถ้าไฟล์เสียงเป็นส่วนหนึ่งของบทสนทนาย่อย การตั้งชื่อแบบ "conversation_StepId.wav" จะช่วยให้จัดการในโค้ดได้ง่ายขึ้น

การเขียนโค้ด

การเขียนโค้ดให้เจ้านี่ค่อนข้างง่ายเลย เพราะมี ไลบรารีที่เข้ากับ WAV สำหรับแพลตฟอร์ม AVR อยู่แล้ว งานเราก็แค่เพิ่มลอจิกของเราเข้าไป พร้อมโค้ดสำหรับอ่านค่าจากไมโครโฟนและเซ็นเซอร์ PIR เข้าไป

ลอจิกซอฟต์แวร์และโฟลว์การโต้ตอบ

โค้ด Arduino ถูกโปรแกรมด้วยลอจิกการสนทนาแบบใช้สถานะ (State-based) แบบนี้:

ในโค้ดเราจะ:

  • เซ็ตอัพอินพุต/เอาต์พุตทั้งหมด
  • คำนวณว่าจะเริ่มบทสนทนาไหนดี
  • รอทริกเกอร์เพื่อเริ่มบทสนทนา (จาก PIR เท่านั้น)
  • ถ้ากำลังคุยกับใครอยู่ ก็จะรอการตอบกลับ (จาก MIC) ก่อนจะตอบด้วยส่วนถัดไป
  • ถ้าไม่มีใครตอบกลับหลังจากเวลาผ่านไปสักพัก — ก็ยอมแพ้ แล้วกลับไปเริ่มต้นบทสนทนาถัดไปรอคนต่อไป
  1. สถานะว่าง: ระบบรอให้เซ็นเซอร์ PIR ตรวจจับการเคลื่อนไหว
  2. เริ่มต้น: เมื่อตรวจจับได้ มันจะเล่นไฟล์เสียงแรกในลำดับบทสนทนา (เช่น "อยากได้ขนมปังปิ้งมั้ย?")
  3. ฟัง: จากนั้นมันจะเปิดใช้งานไมโครโฟนและรอเสียงดัง (เช่น การตะโกน) เป็นการตอบกลับ
  4. ตอบสนอง: ถ้าตรวจจับเสียงได้ มันจะเล่นไฟล์เสียงลำดับถัดไป ถ้าไม่พบเสียงภายในช่วงเวลาที่กำหนด มันจะยอมแพ้และรีเซ็ตกลับไปที่สถานะว่างรอการโต้ตอบครั้งใหม่

แนวทางการพัฒนาต่อ

  • เชื่อมต่อ 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 สำหรับเลเซอร์
  • รันบนเครื่องพิมพ์

ตอนนี้คุณควรได้บอร์ดที่หน้าตาประมาณนี้:

PCB after lazering before any cleaning

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

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

PCB after Paint removal and cleaning

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

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

เมื่อกัดเสร็จแล้ว ล้างบอร์ดให้สะอาด ถ้าพอใจกับผลแล้วก็เอาเศษสีที่เหลือออกโดยใช้อะซิโตน

ตอนนี้เราก็สามารถเจาะรูสำหรับตัวประกอบต่างๆ ได้แล้ว โดยใช้ดอกสว่านเล็กๆ ขนาด 1 มม. ในตัวอย่างนี้ (ระวังอย่าให้ดอกหักล่ะ!)

Drilling complete (well everywhere we had to anyway) Top view with additional corrective wires shown

หมายเหตุ - มีบางส่วนของพื้นที่ทองแดงบน PCB ที่ผมต่อไม่ครบน่ะ เลยต้องเจาะรูเพิ่มและใส่สายไฟเพื่อแก้ไข (ดูรูปที่สองด้านบน)

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

ทีนี้ก็ตัดบอร์ดให้ได้ขนาด แล้วความสนุกก็เริ่มจริงๆ จังๆ เลย!

ลงอวัยวะให้บอร์ด (Populate the Board)

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

บอร์ดพร้อมกับโมดูลทั้งหมดที่เราเพิ่มเข้าไป

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

ทีนี้เราก็บัดกรี LED ทั้งหมดเข้าด้วยกัน แล้วต่อสายไฟไปที่ LED และลำโพงของเรา จากนั้นก็บัดกรีปลายสายอีกข้างไปยังจุดต่อที่เกี่ยวข้องบนบอร์ด

ภาพรวมของโปรเจกต์ที่เสร็จสมบูรณ์ในมุมของอิเล็กทรอนิกส์

สายสีดำที่เห็นน่ะ เพราะผมบัดกรีพลาดเองน่ะสิ แต่บนบอร์ดมีลายทองแดงเตรียมไว้ให้แล้ว!

ส่วนของโค้ด (The Code)

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

อย่าลืมเปลี่ยนชื่อไฟล์ WAV หรือกำหนดขา (pin assignments) ใหม่ให้ตรงกับการลงมือทำของน้องนะ

ลองทดสอบดูตอนนี้เลย ง่ายกว่ามากที่จะแก้ไขก่อนที่จะเอาไปติดกับตัวปิ้งขนมปัง!

ส่วนประกอบทางกายภาพอื่นๆ (The Other Physical Parts)

ตอนนี้เราอยากจะติดมันเข้ากับตัวปิ้งขนมปังที่เราเลือก แล้วเพิ่มฝาครอบลำโพงที่เหมาะกับโปรเจกต์นี้ เราเลยพิมพ์ฝาครอบด้วยเครื่องพิมพ์ 3D แล้วพ่นสี (เพราะไม่มีพลาสติกสีส้มน่ะ)

กำลังพิมพ์ฝาครอบด้วย 3D.... ไฟล์ STL อยู่ท้ายบทความ พ่นสีหลายๆ ชั้นน่าจะช่วยลดการขัดแต่งได้ เพราะพิมพ์แบบเร่งด่วน...

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

จากนั้นก็ติดแม่เหล็กบางอันไว้ด้านหลัง มันจะได้ติดกับตัวปิ้งขนมปังได้ แต่ก็ถอดออกมาได้ง่ายถ้าจำเป็น

ฝาครอบที่เสร็จแล้วของเรา.... กาวตราช้างกำลังแห้งบนช่องหน้าต่างของเรา...

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

ใช้แผ่นโฟมติดอีกนิดหน่อยเพื่อติดบอร์ดเข้ากับด้านล่างของตัวปิ้งขนมปัง เท่านี้ก็ได้ตัวปิ้งขนมปังสุดเจ๋งแล้ว!

*คลิปสั้นๆ ของประโยคโปรดมัน....*

ลิงค์เด็ดๆ ที่ต้องมี

เว็บไซต์ Visual Micro

AVR WAV/PCM Audio Library for SD Playback

Audacity

ข้อมูล Frontmatter ดั้งเดิม

title: "โทสเตอร์ IoT พูดได้! งานง่ายแต่หล่อ วัยรุ่นต้องลอง"
description: "ถ้าเพื่อนๆ เคยรู้สึกว่าไม่มีใครถามว่าอยากได้ขนมปังปิ้งแบบไหน... โปรเจคนี้แหละ ตอบโจทย์! เราจะติดตั้งเซนเซอร์กับบอร์ด Arduino ให้โทสเตอร์มันพูดได้เองว่า "อยากได้ปิ้งกี่นาที?" งานตึงๆ ใช้ Interrupt จัดการการกดปุ่ม แถมมี WiFi Module ให้สั่งงานผ่านมือถือได้ด้วย มาทำให้ชีวิตวัยรุ่นมันเทพๆ กัน!"
author: "arduinocc"
category: "Audio & Sound"
tags:
  - "home automation"
  - "food and drinks"
  - "visual micro"
views: 4539
likes: 1
price: 699
difficulty: "Intermediate"
components:
  - "2x Wire, Hook Up"
  - "1x Super Glue"
  - "1x High Brightness LED, White"
  - "1x 3D Printer (generic)"
  - "1x Development Board, Class D Audio Amplifier Module"
  - "1x Audio Amplifier Board (Based on HXL1446)"
  - "1x Speaker: 0.25W, 8 ohms"
  - "1x Matt Black Spray Paint"
  - "1x Hacksaw"
  - "1x Soldering iron (generic)"
  - "1x Solder Wire, Lead Free"
  - "1x Orange 3D Printer Filament"
  - "1x SparkFun Sound Detector (with Headers)"
  - "1x Arduino Nano R3"
  - "1x PIR Motion Sensor (generic)"
  - "1x 2.5W UV Laser Module"
  - "1x Solder Flux, Soldering"
  - "1x Single Side Copper Clad Board"
tools: []
apps:
  - "1x JTech Photonics Inkscape Laser Plug-In"
  - "1x Inkscape"
  - "1x FreePCB"
  - "1x Visual Micro"
  - "1x Audacity"
  - "1x Arduino IDE"
  - "1x Visual Studio 2017"
  - "1x GerbV"
downloadableFiles: []
documentationLinks: []
passwordHash: "0fd2eca45c59c6d8e9c821644822aa8e6085b627dd1a354b3f17b8594d8587d6"
encryptedPayload: "U2FsdGVkX193gdet09TPJEWMSGR/x5cGEUam24a+SbrmO+9ME69Ly0CkRxNw05MKQE22WbnkOk+GY3Ow92cIePAebzleQp+teq2NKi1DYaB1XoT/pRyqUt214t3caEF3ZuXQW/jL6ngbJ0lfWFWKrrZ/3V08qmcGMWh/RXL9BW9z7QXQs0jdwUXnSl0+dJAX/G4jEV6xVGNjkukwewV0ATKJaxGZNKz0JQ40CJ315QEpmu1VQWVcAxTddqN958u1pTKW6Ne2QFs1KAlELrdyow=="
seoDescription: "Build a Talking IoT Toaster with Arduino. A fun project to give your kitchen appliances a voice using IoT and sensors."
videoLinks:
  - "https://www.visualmicro.com/video/TalkieToaster_WALAT.mp4"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/the-talking-iot-toaster-3fb0fe_cover.jpg"
lang: "en"