กลับไปหน้ารวมไฟล์
u-i-o-the-ultrasonic-interactive-owl-619b7f.md

สวัสดีน้องๆ ทุกคน!

เจ้า UIO ตัวนี้ ย่อมาจาก Ultrasonic Interactive Owl นะฮะ ชื่อเท่ๆ แบบนี้พี่ไปปรึกษากับลูกชายวัย 9 ขวบของพี่มาแล้ว (ฮา)

video.

โปรเจกต์นี้คือ (หรือพยายามจะเป็น) หุ่นยนต์โต้ตอบได้ แบบมีอารมณ์นิดๆ ขำๆ และมีประโยชน์นิดหน่อย ที่พี่เริ่มคิดขึ้นมาเพื่อเล่นสนุกกับของเล่น [Arduino](https://s.shopee.co.th/7fUgFAWSki) นี่แหละ เนื้อหาต่อจากนี้จะเล่าถึงกระบวนการสร้างที่พี่คิดว่ามันน่าสนใจและชวนให้คิดมากพอสมควร เพื่อให้กำลังใจคนที่คิดว่ามันยากเกินไปจะทำ และก็ให้คนที่มีประสบการณ์แล้วมองเห็นช่องทางที่จะพัฒนามันต่อได้อีก

พี่เริ่มต้นด้วยการหาดูและคิดถึงโปรเจกต์อื่นๆ ที่จะสร้างด้วย Ultrasonic [Sensor](https://s.shopee.co.th/7VBG2rX65j) (HC-SR04)

พี่ยังเริ่มศึกษาด้วยว่า RTC (Real Time Clock) module กับ [Oled](https://s.shopee.co.th/5fjbrJWyFb) Display มันทำงานยังไง มันดูง่ายจัง... พี่หมายถึง... พี่เป็นแค่ "Maker" คนนึงที่แค่อยากต่อสิ่งของเข้าด้วยกันแล้วเขียนโค้ดง่ายๆ โดยมีความรู้ด้านอิเล็กทรอนิกส์และโปรแกรมมิ่งน้อยนิด พี่แค่อ่านและรวบรวมโค้ดบล็อกของโมดูลกับเซนเซอร์พวกนั้น แล้วพยายามปรับให้เข้ากับความต้องการของพี่เอง

และสำหรับเรื่องนี้ พี่ขอขอบคุณทุกคนที่แชร์ผลงานและคำอธิบายของพวกคุณมากๆ เลยนะ!!!

แล้วไอเดียก็มา: อุปกรณ์เล็กๆ ที่ตอบสนองต่อค่าที่อ่านได้จาก Ultrasonic แล้วแปลผลไปแสดงบน [Oled](https://s.shopee.co.th/5fjbrJWyFb) display

รูปลักษณ์ "เหมือนตา" ตลกๆ ของ Ultrasonic [sensor](https://s.shopee.co.th/7VBG2rX65j) ถูกนำมาใช้ในโปรเจกต์ [Arduino](https://s.shopee.co.th/7fUgFAWSki) กันเยอะมาก และมันดึงดูดสายตาได้ทันทีบนหุ่นยนต์ตัวเล็กๆ

[Oled](https://s.shopee.co.th/5fjbrJWyFb) display ก็เป็นตัวดึงดูดความสนใจเหมือนกัน มีหุ่นยนต์หลายตัวใช้มันเป็น "ตา"

ตอนแรกพี่ตั้งใจจะทำ "นกแก้วโจรสลัด" แต่นกแก้วมีตาอยู่ข้างหัว งั้น... ลองคิดถึง "นกฮูกโจรสลัด" ที่มีตาอยู่ด้านหน้ากันดีกว่า [Oled](https://s.shopee.co.th/5fjbrJWyFb) display จะถูกวางไว้ด้านหน้าอกของมัน การอ่านค่าจาก Ultrasonic จะถูกแปลเป็นจังหวะการเต้นของหัวใจ และ (ส่วนที่มีประโยชน์) การแสดงวันที่/เวลา/อุณหภูมิ

การทำตัวโครงจากกระดาษแข็งก็ผุดขึ้นมาในหัว พอพี่คิดเรื่องโค้ดไปเรื่อยๆ ก็ไปเจอกระปุกออมสินกระดาษแข็งอันเล็กๆ ที่เหมาะเจาะเลย

มันเป็นท่อกระดาษแข็งเส้นผ่านศูนย์กลาง 60mm (2” 3/8 นิ้ว) สูง 15cm(6”) มีฝาปิดพลาสติกที่ถอดได้ พี่สามารถสอด Breadboard 170 จุดพร้อมกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki) Nano ที่ติดอยู่แล้วเข้าไปได้พอดี และเจาะรูให้เหมาะสำหรับติด Ultrasonic กับ [Oled](https://s.shopee.co.th/5fjbrJWyFb) display

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

ตอนนี้เจ้านกฮูกตัวนี้จะมี [Buzzer](https://s.shopee.co.th/6pvZFdZdRf) เพื่อสร้างเสียงที่ปลอมตัวเป็นจะงอยปากนกฮูก, [Servo](https://s.shopee.co.th/7fUgFAWSki) motor ตัวนึงเพื่อให้มันสั่นไหวได้, และ Servo อีกตัวเพื่อขยับหัวนกฮูก

พี่ก็สงสัยนะว่ามันจะทะเยอทะยานเกินไปไหม ถ้าให้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) Nano จัดการของทั้งหมดนี้ ขีดจำกัดของหน่วยความจำ... ขนาดของโค้ด ฯลฯ แต่ผลการทดสอบก็ดึงพี่ให้เดินหน้าต่อไปเรื่อยๆ

ฟีเจอร์เด็ดๆ:

1 – คอที่ขยับได้ 180 องศา (น้อยกว่าจริงๆ ของนกฮูกแต่ก็โอเค) การเคลื่อนไหวนี้จะสุ่มทั้งเวลาและมุม เพื่อจำลองการมองไปรอบๆ ของนกฮูก

2 – [Servo](https://s.shopee.co.th/7fUgFAWSki) motor ตัวที่ฐานเพื่อหมุนและเอียงลำตัวนิดหน่อย แล้วกลับมาอยู่ในตำแหน่งตั้งตรงปกติ

3 – เมื่อมีวัตถุอยู่ในระยะที่กำหนด นกฮูกจะตอบสนองด้วยเสียงบี๊บ, การเต้นของหัวใจ, การแสดงผล RTC, การสั่นของลำตัว (และพฤติกรรมเฉพาะตัวอื่นๆ ที่เหลือให้จินตนาการของน้องๆ กันเลย!)

4 – ระบบจ่ายไฟ: ใช้สายเล็กๆ ต่อกับแหล่งจ่ายไฟภายนอก (อะแดปเตอร์ 100/240V to 5V) เพื่อเลี้ยง [Servo](https://s.shopee.co.th/7fUgFAWSki) และจ่ายไฟให้ [Arduino](https://s.shopee.co.th/7fUgFAWSki) Nano ส่วนเซนเซอร์และโมดูลต่างๆ จะใช้ไฟจากพอร์ต 5V ของ Arduino เนื่องจากมันไม่เดินได้ ก็เลยวางไว้ในที่เจ๋งๆ แล้วเปิดไฟทิ้งไว้ได้นานๆ

5 – ไม่ต้องบัดกรีเลยแม้แต่น้อย! ใช้แค่การเสียบสายหรือขันสกรูเท่านั้น แน่นอนว่าการทำ PCB เฉพาะและใช้การเชื่อมต่อที่ปลอดภัยกว่าก็แนะนำให้ทำนะ งานนี้เหมาะกับการประกอบเล่นสุดๆ

6 – ใช้เทปกาวสองหน้า 3M, เทปพันสายไฟ และกาวขาวสำหรับส่วนตกแต่ง

ความท้าทาย:

Final assembly - Notice the bluetooth module not used.

สำหรับสายตาที่เฉียบคม รูปด้านบนแสดงโมดูลบลูทูธที่ติดไว้

พี่ยังทำให้มันทำงานไม่ได้และไม่รู้ว่าทำไม... มันขัดแย้งกับไลบรารีหลายตัวรึเปล่า? พี่ยังคงศึกษาอยู่นะ เพราะมันจะน่าสนใจมากถ้ามีวิธีทดสอบการทำงานของ UIO และส่งพารามิเตอร์การจดจำระยะทางใหม่ๆ ผ่านการเชื่อมต่อบลูทูธกับมือถือ Android

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

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

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

เพื่อป้องกันไม่ให้มันน่ารำคาญ พี่เขียนตัวแปร boolean บางตัวเพื่อหยุดการอ่านค่าซ้ำๆ ในช่วงเวลาสั้นๆ และบังคับให้ UIO ต้องมีเหตุการณ์อื่นเกิดขึ้นเพื่อเปลี่ยนสถานะของตัวแปรเหล่านั้น แล้วจึงอนุญาตให้มันทำบาง ELSE IF ซ้ำได้

ส่วนที่สนุกอีกอย่างคือการออกแบบ "หน้าจอ" ที่จะแสดงผล ไม่ซับซ้อนมาก ใช้ MS Paintbrush สร้างภาพขนาด 128x64 พิกเซลแล้วเริ่มวาด

พอภาพโอเคแล้ว ก็เอาไปแปลงเป็น HEX ด้วยตัวแปลงออนไลน์ เพื่อให้ได้โค้ดที่นำเข้าไปใน [Arduino](https://s.shopee.co.th/7fUgFAWSki) IDE ได้

[Buzzer](https://s.shopee.co.th/6pvZFdZdRf):

สำหรับ "เพลงเซอร์ไพรส์" และเสียงบี๊บอื่นๆ ที่ UIO ร้องออกมา พี่ไปค้นคว้าตารางความถี่เพื่อหาและทดสอบเสียงมาประกอบกัน นี่เป็นอีกส่วนที่เจ๋งของกระบวนการและมีความเป็นไปได้ไม่จำกัด [Buzzer](https://s.shopee.co.th/6pvZFdZdRf) นี่ราคาไม่แพง แต่พี่ก็เริ่มคิดจะอัพเกรดไปใช้โมดูลเสียง mp3 แล้ว...

Delay x Millis

พี่ไปเจอฟังก์ชันเจ๋งๆ ในอินเทอร์เน็ตที่ใช้ millis() แทน delay() เพื่อพยายามให้การอ่านค่าระยะทางทำงานต่อเนื่องโดยไม่หยุด พี่ยินดีรับฟังคอมเมนต์เกี่ยวกับเรื่องนี้นะ

พี่หวังว่าน้องๆ จะชอบมันนะ

รายละเอียดทางเทคนิคเพิ่มเติม

ปฏิสัมพันธ์หุ่นยนต์เหมือนมีชีวิต

UIO (Ultrasonic Interactive Owl) เป็นหุ่นยนต์แอนิมาทรอนิกส์ที่ตอบสนองต่อการมีอยู่ของมนุษย์ด้วยการเคลื่อนไหวของหัวที่ลื่นไหลเหมือนนก

  • แอนิเมชันที่ถูกกระตุ้นด้วยการมีอยู่: ใช้ HC-SR04 ultrasonic sensor ติดตั้งที่จะงอยปากหรือหน้าอกของนกฮูก Arduino จะติดตามระยะห่างของผู้มาเยือน ถ้ามีใครเข้ามาใน "โซนปฏิสัมพันธ์" (เช่น ภายใน 50 ซม.) นกฮูกจะ "ตื่นขึ้น" และเริ่มชุดการเคลื่อนไหว
  • การประสานงาน Servo หลายตัว: จัดการ SG90 micro servo สองตัว — ตัวหนึ่งสำหรับการหมุนในแนวนอน (pan) และอีกตัวสำหรับการเอียงในแนวตั้ง (tilt) เฟิร์มแวร์ใช้อัลกอริธึม "Smoothing" เพื่อป้องกันการเคลื่อนไหวแบบหุ่นยนต์กระตุกที่มักเห็นในเซอร์โวราคาถูก

การออกแบบด้านสุนทรียภาพ

  • ตาที่โต้ตอบได้: มี LED สว่างสูงสองดวงสำหรับดวงตาของนกฮูก ความสว่างจะประสานกับการเคลื่อนไหวของเซอร์โวผ่าน PWM สร้างเอฟเฟกต์ "กะพริบ" หรือ "ประกายตา" เมื่อนกฮูกมองตรงมาที่ผู้มาเยือน

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

title: "U I O - The Ultrasonic Interactive Owl"
description: "DIY, Arduino Nano based, Open Source, funny study of RTC, OLED, Buzzer and Servo motors! An emotional little companion robot!"
author: "NerdFatherRJ"
category: "Gadgets, Games & Toys"
tags:
  - "animals"
  - "toys"
  - "kids"
  - "robots"
  - "companion bot"
views: 10306
likes: 15
price: 699
difficulty: "Intermediate"
components:
  - "1x Breadboard 170p"
  - "1x OLED Screen 128x64 i2c"
  - "1x 110V-240V to 5V 2,5A power supply"
  - "1x P4 male adapter"
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "2x SG90 Micro-servo motor"
  - "1x Jumper wires (generic)"
  - "1x DS3231 RTC Module - Real Time Clock and Temperatura sensor."
  - "1x Arduino Nano R3"
  - "1x Buzzer"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "98a1a622f5b562415b082fbc4eb45c3a1a7d41226a541310d9eab2292fe09845"
encryptedPayload: "U2FsdGVkX1/j3s16jvgiX0yxDElqwnomjkfYg/9CYLc1ViVGocgwLLNoeIdBx8I8E2bYLkuGnpn+wezy6MJ7iYqJA6rZ8jCOs+rduQsIBmU="
seoDescription: "Build U I O, an interactive DIY owl robot using Arduino Nano. Learn RTC, OLED, Buzzer, and Servo motors with this open source project."
videoLinks:
  - "https://www.youtube.com/embed/K3qKJsyxzAk"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/u-i-o-the-ultrasonic-interactive-owl-619b7f_cover.jpg"
lang: "th"