กลับไปหน้ารวมไฟล์
squid-games-doll-build-using-arduino-uno-a873b2.md

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

ดูวิดีโอแล้วบอกพี่หน่อยว่าน้องคิดยังไง

วิดีโอการประกอบ

พี่ใช้พินทุกขาของ Arduino UNO เลยนะตัวนี้! ซึ่งพี่ไม่เคยทำมาก่อน เลยถือเป็นความสำเร็จเล็กๆ ของตัวเอง โปรเจกต์นี้ใช้เวลาสร้าง 3 สัปดาห์ โดย 1 สัปดาห์ทุ่มให้กับการปริ้นท์อย่างเดียว! พิมพ์ตุ๊กตาตัวนี้ใช้เวลา 6 วันเต็ม อีก 1 สัปดาห์สำหรับการประกอบ และอีกสัปดาห์นึงตัดต่อวิดีโอ

ELEGOO ส่งชุด UNO มาให้ฟรีถ้าพี่ทำวิดีโอรีวิวให้ เลยเป็นที่มาของเจ้าตุ๊กตาตัวนี้ ตอนนั้นเลือกระหว่างทำตุ๊กตานี่กับสร้างเกมหนีห้อง พี่ดีใจที่เขาเลือกโปรเจกต์นี้ หวังว่าทุกคนจะชอบนะ เพราะมันสนุกมากตอนทำ และออกมาดูดี แถมยังทำคนที่มาเห็นขนลุกได้ด้วย แต่ที่สำคัญกว่านั้น... มันใช้งานได้จริง!

ภาพรวมโปรเจกต์

"Squid-Bot" คือการนำ วิทยาการหุ่นยนต์เชิงธีม และ การซิงโครไนซ์ลอจิกจากหลายเซ็นเซอร์ มาทำให้เห็นจริง ได้แรงบันดาลใจจากเกม "เอา-หยุด" ที่ดังไปทั่วโลก โปรเจกต์นี้ดัน Arduino Uno ถึงขีดจำกัดของพิน I/O โดยใช้เซอร์โวหมุนหัว, เซ็นเซอร์ตรวจจับการเคลื่อนไหว (PIR) และการวัดระยะด้วยอัลตราโซนิก สร้างสภาพแวดล้อมเกมแบบอินเทอร์แอคทีฟที่สมจริงมาก โปรเจกต์นี้แสดงให้เห็นวิธีจัดการ การมัลติเพล็กซ์เชิงเวลา สำหรับการแสดงผล LED พร้อมๆ กับจัดการเสียงและเซ็นเซอร์แบบอะซิงโครนัส

นี่คือชิ้นส่วนทั้งหมดที่พี่ใช้ในโปรเจกต์นี้

ลงลึกเรื่องเทคนิค

  • กลไกการหมุนหัวด้วยเซอร์โว:
    • หลบการใช้ Timer1: เพื่อให้สามารถรีเฟรชการแสดงผล 4 หลักได้ โดยไม่ใช้ไลบรารี Servo.h มาตรฐาน (ซึ่งขัดแย้งกับ Timer1) โปรเจกต์นี้ใช้วิธี สร้างสัญญาณ PWM ด้วยมือเอง โดยการจับเวลาให้แม่นยำระหว่างที่พินส่งสัญญาณ HIGH $(\text{0.5ms ถึง 2.5ms})$ ทำให้หัวหมุนได้ $180^\circ$ อย่างเสถียรและมีแรงบิดสูง ช่วยให้ช่วง "กวาดสายตา" ของตุ๊กตาพร้อมกับเสียงในเกมพอดีเป๊ะ
    • โครงสร้างแบบผสม: ตัวเรือนตุ๊กตาถูกออกแบบและพิมพ์ 3 มิติเอง เพื่อให้เหมาะกับการติดตั้งระบบแมคคาทรอนิกส์ การออกแบบ "แผ่นหน้าอก" ช่วยให้ติดตั้งโมดูล HC-SR04 และเซอร์โว SG90 ได้อย่างมิดชิด ป้องกันจุดต่อวงจรสำคัญจากความเครียดเชิงกลตอนหัวหมุนเร็ว
  • การตรวจจับและตัดสินใจ:
    • เซ็นเซอร์ตรวจจับความร้อน (PIR): เซ็นเซอร์ PIR ต้องการ ช่วงเวลาวอร์มอัพ (ประมาณ 60 วินาที) เพื่อปรับตัวให้เข้ากับอุณหภูมิแวดล้อม ซอฟต์แวร์จึงมี "ดีเลย์สำหรับปรับเสถียร" เพื่อป้องกันการตรวจจับผิดพลาด
    • การวัดระยะด้วยอัลตราโซนิก: HC-SR04 ส่งพัลส์ที่ความถี่ $40\text{kHz}$ และคำนวณระยะทางผู้เล่นด้วยหลัก Time-of-Flight (ToF) ในช่วง "ไฟเขียว" ระบบจะตัดสินว่า "ชนะ" เมื่อระยะทางน้อยกว่า $50\text{cm}$ แสดงให้เห็นถึงความแม่นยำในการรับรู้พื้นที่รอบตัว

วิศวกรรมและการลงมือทำ

  • บัสขยายขา I/O:
    • การวินิจฉัยแบบมัลติเพล็กซ์ด้วย 74HC595: เพื่อขับไฟแสดงผล 4 หลักโดยยังคงขาของ Uno ไว้ใช้กับเซ็นเซอร์ เราก็ใช้ชิฟต์เรจิสเตอร์แบบอนุกรมเข้า/ขนานออก (serial-in/parallel-out shift register) นี่แหละ หลักการตรวจสอบคือใช้รอบรีเฟรช $2\text{ms}$ เพื่อป้องกันการกระพริบ ซึ่งพิสูจน์ให้เห็นว่าเราหลอกการมองเห็นต่อเนื่อง (persistence-of-vision) ของมนุษย์มาใช้สร้าง HMI ที่ดูเทพๆ ได้
    • ตรรกะปุ่มแบบบันไดอนาล็อก: ปุ่มกดหลายปุ่มถูกรวมเข้าสู่ขาอนาล็อกเพียงขาเดียวด้วยวงจรแบ่งแรงดันแบบบันไดตัวต้านทาน $(1\text{k}, 2\text{k}, 5\text{k }\Omega)$ วิธีตรวจสอบแบบนี้ช่วยให้เราสร้างเมนูที่กดปุ่มได้หลายแบบโดยไม่ต้องใช้ขา GPIO ดิจิตอลของ Uno จนหมดเกลี้ยง
  • การจัดการส่งข้อมูลด้วยเสียง (Acoustic Telemetry):
    • การจับมือสื่อสารแบบอนุกรมกับ DFPlayer: โมดูลเสียงนี้เชื่อมต่อผ่านบัส UART เฉพาะ ตัวต้านทาน 1k Ohm นี่สำคัญมากเพื่อป้องกันการแย่งชิงสัญญาณตอนอัปโหลดเฟิร์มแวร์ รับประกันว่าขา "Busy-State" จะหยุดการทำงานของลอจิกได้แม่นยำ จนกว่าเพลง "Mugunghwa" จะจบลงอย่างสมบูรณ์

ขั้นตอนการประกอบ

  1. เริ่มปริ้นท์กันเลย การปริ้นท์นี่ใช้เวลานานอยู่นะ ตัวพี่เองใช้เวลาถึง 6 วันเต็มๆ ในการปริ้นท์ตุ๊กตาทั้งตัวออกมา พี่ใช้เส้นฟิลาเมนต์หลายสีด้วย จะได้ลดงานทาสีลงบ้าง

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

  1. ใครๆ ก็ไม่อยากทาสี ถึงเวลาทาสีแล้วจ้า พี่ใช้สีสเปรย์ทั่วไปทาเลย พี่ทาด้านในของหัวตุ๊กตา (โดยปิดตาไว้) เพื่อที่แสงจาก LED ตาจะไม่ทำให้หน้าทั้งใบเรืองแสง แม้ว่าอาจจะเป็นเอฟเฟกต์ที่บางคนต้องการก็ตาม แต่พี่อยากให้แค่ตาเรืองแสงพอ
  1. แม่เหล็กดูดได้ แต่กาวติดแน่นกว่า วิธีหนึ่งในการติดแขนขาของตุ๊กตาคือการหลอมแม่เหล็กเข้าไปในพลาสติก นี่คือวิธีถ้าน้องอยากถอดประกอบได้ แต่ถ้าพี่ทำโปรเจคนี้ใหม่ พี่ว่าพี่จะกาวแขนขาทุกชิ้นติดไปเลยซะมากกว่า จากที่เห็นตอนนี้ การใช้แม่เหล็กมีข้อดีน้อยมาก นอกจากว่าน้องอยากให้เธอเก็บใส่กล่องเล็กๆ ได้เท่านั้น สิ่งเดียวที่ห้ามติดตอนนี้คือหัวนะ
การใช้แม่เหล็ก
  1. เริ่มจากส่วนที่ง่ายที่สุด: ดวงตา เริ่มจากขั้นตอนที่ง่ายที่สุดก่อนเลย ดวงตา พี่ใช้ LED สามสี (tri-color LEDs) สำหรับดวงตา อย่างที่รู้กัน เราสามารถผสมสี RGB เพื่อให้ได้สีพื้นฐานที่ต้องการได้ พี่ใช้แค่สีหลักและสีรองเลย ไม่ต้องไปยุ่งกับ PWM ให้วุ่นวาย (แต่จะทำก็ได้ถ้าน้องอยากได้สีแบบนั้น)

ขาที่ยาวที่สุดคือกราวด์ (ground) นั่นคือขาที่ 2

ต่อ LED ตามภาพ โดยใช้ตัวต้านทาน 220 โอห์มสำหรับแต่ละขา ยกเว้นขากราวด์

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

  1. เมนู LCD ชิ้นส่วนถัดไปที่ง่ายสุดๆ ก็คือหน้าจอ LCD ขนาด 16x2 นะน้อง ควรใช้แบบที่มีอะแดปเตอร์ I2C ต่อด้วย จะช่วยให้ชีวิตง่ายขึ้นมาก ลดจำนวนขา I/O จาก 6 เหลือแค่ 2 ขาเอง พอต่อเสร็จ หน้าจอควรจะขึ้นข้อความ "Welcome to the squid games!" ให้เห็นเลย

สำหรับการติดตั้ง พี่พิมพ์วงกลมหนา 1mm ออกมา ทำให้บางแบบนี้จะได้ใช้ฮีตกันดัดโค้งตามหลังตุ๊กตาได้ง่าย ซึ่งมันง่ายกว่ามานั่งคำนวณความโค้งเว้าของหลังเธอ (อย่างน้อยสำหรับพี่นะ) พี่ติดตั้ง threaded inserts สำหรับจอ แล้วใช้น็อตขันด้านหลังเพื่อยึดทั้งจอและตัวยึดจอให้แน่นกับตัวตุ๊กตา

  1. หัวนกฮูกหมุนได้ 180 องศาเท่านั้น เซอร์โวตัวนี้มีจุดยากอยู่จุดนึง เพราะพี่ไม่ได้ใช้ไลบรารี่เซอร์โว รู้ว่าแปลกๆ แต่มันเป็นอย่างนั้นจริงๆ เพราะพี่ต้องใช้ timer1 ในการอัปเดตจอแสดงผล 4 หลัก และไลบรารี่เซอร์โวก็ใช้ตัวนี้เหมือนกัน โชคดีที่เซอร์โวของเรามีแค่ 0 องศากับ 180 องศา ไม่มีค่ากลาง ทำให้ชีวิตง่ายขึ้นเยอะ

ตั้งค่า Timer1 ให้ทำงานทุกๆ 0.5ms หรือ 2000Hz คาบเวลาของเซอร์โวคือ 20ms ที่มุม 0 องศา ขา output ต้องเป็น HIGH แค่ 2 คาบ และเป็น LOW ตลอดช่วงที่เหลือ ส่วนที่มุม 180 องศา ขาต้องเป็น HIGH 4 คาบ และ LOW ที่เหลือ

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

  1. ส่งเสียงเหมือนค้างคาว ต่อไปเราจะติดตั้งโมดูลวัดระยะอัลตราโซนิค พี่ตั้งให้มันอัปเดตค่าทุก 250ms มันมีจุดติดตั้งที่เหมาะเจาะอยู่บนแผ่นหน้าอกแล้วด้วย โมดูลนี้ใช้แค่ 2 สายไฟเอง

พี่ใช้ epoxy ติดโมดูลอัลตราโซนิคเข้ากับแผ่นหน้าอก

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

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

  1. ถึงเวลา...ของเวลา ต่อไปเราจะมาตั้งค่าจอแสดงผลตัวจับเวลา งานนี้ค่อนข้างเยอะสำหรับจอ 4 หลัก พี่จะใส่ไดอะแกรมการต่อจาก ELEGOO ไว้ให้ เกมของเราตั้งเวลาได้สูงสุดแค่ 5 นาที พี่เลยตัดการใช้งานหลักที่สำคัญที่สุด (หลักหมื่น) ออกไป แต่ถ้าน้องมีขา I/O เหลือ ก็เก็บไว้ก็ได้นะ การอัปเดตจอนี่ต้องสลับเปิดปิด LED เร็วมากๆ เพราะในหนึ่งเวลาจะเปิดได้แค่หนึ่งหลัก นี่แหละที่ทำให้เวลาถ่ายด้วยกล้องแล้วมันดูเหมือนกระพริบ พี่ใช้อัตรารีเฟรช 2ms ซึ่งเร็วพอที่ตามนุษย์จะมองไม่เห็นการกระพริบแล้ว ถ้าใช้ 5ms พี่เริ่มเห็นมันกระพริบเวลาเหลือบมองจอได้แล้ว นอกจากนี้ น้องจะต้องใช้ shift register 74HC595 ด้วย อย่าลืมนะ! สู้งานนะน้อง!

การติดตั้งจอแสดงผลนี่มันไม่สนุกเลยนะเว้ย 555 เลยตัดสินใจเอามันไปฝังไว้ที่เข็มขัดของตุ๊กตาดีกว่า แน่นอนว่าตุ๊กตาต้นแบบใน Squid Games มันไม่มีเข็มขัดหรอก แต่บางทีเราก็ต้องยอมเสียสละเพื่อให้ได้จอมาแบบนี้แหละน้อง ถ้าน้องเลือกทำแบบพี่ด้วยล่ะก็ ให้ใช้เทปกาวปิดเป็นสี่เหลี่ยมขนาดเท่าจอ แล้วค่อยใช้ Dremel เจาะออกมา จากนั้นพี่ใช้ epoxy putty มาปั้นให้มันลาดเอียงลงไปหาแผงจอ แบบนี้มันไม่จำเป็นต้องทำก็ได้นะ แต่พี่ว่ามันดูดีกว่า อิอิ

ส่วนเจ้า 74HC595 นี่พี่ติดมันไว้บน prototype shield เลย จะได้ไม่ต้องมีสายระโยงระยางเต็มไปหมด อีกวิธีนึงคือใช้จอนับเวลาอันอื่นที่สื่อสารสะดวกกว่า ใช้ขาน้อยกว่า ก็ได้เหมือนกัน

  1. ฉันเห็นเธอขยับตัวแล้วนะ! เซ็นเซอร์ตรวจจับการเคลื่อนไหว (Motion Detector) เนี่ยเป็นตัวประหลาดตัวนึงเลย มันใช้อินฟราเรดในการตรวจจับ สิ่งนึงที่พี่เรียนรู้คือเจ้าตัวนี้มันต้องวอร์มอัพนะจ๊ะ พอเปิดเครื่องมันต้องใช้เวลาราว 1 นาทีถึงจะพร้อมทำงาน นั่นแหละคือสาเหตุที่ตุ๊กตาต้องรอสักพักก่อนเริ่มเกม อีกเรื่องน่ารำคาญคือมันตรวจจับการเคลื่อนไหวใหม่ได้เร็วสุดก็ประมาณ 5 วินาที และสุดท้ายคือความอ่อนไหวของมันเนี่ย แม้จะปรับ Sensitivity ลงต่ำสุดแล้ว มันยังจับการขยับนิดหน่อยได้อยู่ดี บางทีขยับอะไรไม่รู้มันก็ตรวจจับซะแล้ว (หลอนไปอีก) เพื่อป้องกัน "การแจ้งเตือนผิดพลาด" แบบนี้ พี่เลยเอาเซ็นเซอร์ไปใส่ไว้ในกล่อง Horse Blinder กล่องนี้เจาะรูเล็กๆ (7mm) ให้เซ็นเซอร์มองออกไปได้ พอดีว่าแบบนี้ก็ไม่ต้องเอาตัวเซ็นเซอร์ใหญ่ๆ ไปติดด้านนอกตุ๊กตาด้วย สะดวกไปอีกแบบ เซ็นเซอร์ตัวนี้มีเอาต์พุตเป็นสัญญาณดิจิตอลแบบ binary อย่างเดียวเลยนะ ขยับหรือไม่ขยับ จบ!

วิธีติดตั้งก็คือ พี่พิมพ์กล่อง Horse Blinder ออกมาแล้วเอากาวติดไว้ข้างในตัวตุ๊กตา จากนั้นก็เจาะรูผ่านตัวตุ๊กตาไปที่กล่อง พี่ใช้ threaded insert ในกล่องเพื่อยึดเซ็นเซอร์ให้แน่นหนา

  1. อย่ามากดปุ่มกู! ในที่สุดเราก็มาถึงส่วนของปุ่มกดแล้ว เตรียมตัวให้พร้อม

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

apps:
  - "1x Arduino IDE"
author: "codemakesitgo"
category: "Gadgets, Games & Toys"
components:
  - "1x DFPlayer - A Mini MP3 Player"
  - "1x Shift Register- Parallel to Serial"
  - "1x Pushbutton Switch, Momentary"
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "1x SparkFun 7-Segment Serial Display - Red"
  - "1x Arduino UNO"
  - "2x RGB Diffused Common Cathode"
  - "1x SG90 Micro-servo motor"
  - "1x IR receiver (generic)"
  - "1x 3D Printer (generic)"
  - "1x Alphanumeric LCD, 16 x 2"
  - "1x PIR Motion Sensor (generic)"
description: "มาปั้นตุ๊กตา Squid Games เวอร์ชันไม่ดุให้เล่น Red Light, Green Light กับเราได้จริงๆ ใช้เซนเซอร์วัดระยะกับมอเตอร์ ควบคุมด้วย Arduino UNO งานนี้ตึงๆ จัดไป!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://github.com/CodeMakesItGo/SquidGamesDoll"
  - "https://github.com/CodeMakesItGo/SquidGamesDoll"
  - "https://projects.arduinocontent.cc/231310fb-7a96-4152-9cdb-b5a1096a966f.ino"
encryptedPayload: "U2FsdGVkX1+POhV2gxrVIJe8iVyU2GN055dl+YoK8WEIr+DtQ/si4ZImycFN3+03SenHFyTbm6TLfvA/MMeilBlKiPXgXAMpv+sXrG1bYxY="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/squid-games-doll-build-using-arduino-uno-a873b2_cover.jpg"
lang: "en"
likes: 13
passwordHash: "076081d072c1acde8e240bb09e581710cd628476381e6b28a27086e20fd7bd00"
price: 1499
seoDescription: "Build a functional Squid Games Doll using Arduino UNO. Create a red-light-green-light game with this step-by-step DIY guide."
tags:
  - "audio"
  - "squid games"
  - "uno"
title: "มาสร้างตุ๊กตา Squid Games ควบคุมด้วย Arduino UNO กัน! งานง่ายแต่หล่อ วัยรุ่นต้องลอง"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/jd_4a4x3uCw"
  - "https://www.youtube.com/embed/jd_4a4x3uCw"
views: 11052