สารบัญ:

FaceBot: 8 ขั้นตอน
FaceBot: 8 ขั้นตอน

วีดีโอ: FaceBot: 8 ขั้นตอน

วีดีโอ: FaceBot: 8 ขั้นตอน
วีดีโอ: 8 วิธีแก้ไข Facebook ไม่มีโหมดมืออาชีพ ไม่ขึ้น เปิดสร้างรายได้ไม่ได้ (Facebook โปรไฟล์ส่วนตัว) 2024, พฤศจิกายน
Anonim
FaceBot
FaceBot

คู่มือนี้จะแสดงวิธีสร้างหุ่นยนต์ป้องกันการชนกันราคาประหยัด ($39) โดยมีใบหน้าอยู่บนแบบอักษร เราทำสิ่งนี้โดยใช้จอแสดงผล OLED ราคาประหยัดแบบใหม่ที่สว่างสดใส นักเรียนของเราชอบที่จะเพิ่มใบหน้าให้กับหุ่นยนต์ของพวกเขา พวกเขาชอบวาดหน้ายิ้มที่เปลี่ยนไปตามสิ่งที่หุ่นยนต์ทำ

มีหุ่นยนต์ราคาถูกขนาดเล็กหลายตัวที่ราคาต่ำกว่า 25 ดอลลาร์ที่ให้คุณสอนพื้นฐานวิทยาการคอมพิวเตอร์ได้ ปัญหาอย่างหนึ่งของหุ่นยนต์เหล่านี้คือพวกมันไม่ให้ความโปร่งใสในสิ่งที่เกิดขึ้นภายในหุ่นยนต์ในขณะที่คุณสร้างมันขึ้นมา ในปี 2018 ทุกสิ่งเริ่มเปลี่ยนไปด้วยความพร้อมของจอแสดงผล OLED คุณภาพสูงราคาประหยัด จอแสดงผลเหล่านี้มีประโยชน์ดังต่อไปนี้:

  • มีความสว่างมากและมีคอนทราสต์สูง แม้แต่ห้องสว่างก็อ่านง่ายจากหลายมุม
  • พวกเขามีความละเอียดที่ดี สิ่งที่ฉันใช้คือ 168x64 พิกเซล นี่เป็นเกือบ 4 เท่าของจอแสดงผลก่อนหน้าที่เราใช้
  • พวกมันใช้พลังงานต่ำและทำงานอย่างสม่ำเสมอแม้ในขณะที่หุ่นยนต์ของคุณกำลังลดต่ำลง
  • พวกเขามีราคาค่อนข้างต่ำ (ประมาณ $ 16 แต่ละอัน) และราคาก็ลดลง

ในอดีตการเขียนโปรแกรมยากและจะใช้หน่วยความจำมากเกินไปที่จะนำไปใช้กับ Arduino Nanos ราคาประหยัด นาโนมีแรมเพียง 2K หรือไดนามิกเท่านั้น คู่มือนี้จะแสดงวิธีแก้ไขปัญหาเหล่านี้และสร้างหุ่นยนต์ที่เด็กๆ ชอบเขียนโปรแกรม

ขั้นตอนที่ 1: ขั้นตอนที่ 1: สร้างหุ่นยนต์ฐานของคุณ

ขั้นตอนที่ 1: สร้างหุ่นยนต์ฐานของคุณ
ขั้นตอนที่ 1: สร้างหุ่นยนต์ฐานของคุณ

ในการสร้าง FaceBot เรามักจะเริ่มต้นด้วยหุ่นยนต์พื้นฐาน ตัวอย่างหนึ่งคือหุ่นยนต์ CoderDojo มูลค่า 25 เหรียญที่อธิบายไว้ที่นี่ หุ่นยนต์ตัวนี้ใช้ Arduino Nano ราคาประหยัดและเป็นที่นิยม ซึ่งเป็นตัวควบคุมมอเตอร์อย่างง่าย มอเตอร์ DC 2 ตัวและแบตเตอรี่ AA 4 หรือ 6 ก้อน นักเรียนส่วนใหญ่เริ่มใช้เซ็นเซอร์ ping เพื่อสร้างหุ่นยนต์ป้องกันการชน เนื่องจากมีระบบไฟ 5v จึงเหมาะสำหรับ FaceBot เพื่อให้ต้นทุนต่ำ ฉันมักจะให้นักเรียนสั่งซื้อชิ้นส่วนออนไลน์จาก e-Bay ชิ้นส่วนต่างๆ มักใช้เวลา 2-3 สัปดาห์กว่าจะมาถึง และต้องใช้การบัดกรีเล็กน้อยสำหรับมอเตอร์และสวิตช์ไฟ การเชื่อมต่อที่เหลือใช้เขียงหั่นขนม 400 เส้น นักเรียนมักติดกาวร้อนที่สายไฟเพื่อป้องกันไม่ให้หลุดออก

มีการเปลี่ยนแปลงอย่างหนึ่งที่เราทำกับการออกแบบการหลีกเลี่ยงการชนแบบมาตรฐาน เราย้ายเซ็นเซอร์ ping จากด้านบนของแชสซีไปที่ใต้แชสซี ทำให้เหลือพื้นที่สำหรับแสดงผลบนหุ่นยนต์

เมื่อคุณมีโปรแกรมหลีกเลี่ยงการชนแล้ว คุณก็จะอ่านเพื่อเพิ่มใบหน้า!

ขั้นตอนที่ 2: ขั้นตอนที่ 2: ค้นหาและสั่งซื้อจอแสดงผล OLED ของคุณ

ขั้นตอนที่ 2: ค้นหาและสั่งซื้อจอแสดงผล OLED ของคุณ
ขั้นตอนที่ 2: ค้นหาและสั่งซื้อจอแสดงผล OLED ของคุณ

เมื่อจอแสดงผล OLED ออกมา จอภาพราคาประหยัดได้รับการออกแบบสำหรับนาฬิกาหรือจอภาพฟิตเนส เป็นผลให้พวกมันมีขนาดเล็ก ปกติประมาณ 1 นิ้ว ข่าวดีก็คือพวกเขามีต้นทุนต่ำประมาณ 3 เหรียญ เราสร้างหุ่นยนต์สองสามตัวด้วยจอแสดงผลเหล่านี้ แต่เนื่องจากขนาดของจอแสดงผลมีจำกัด สิ่งที่เราสามารถทำได้บนหน้าจอ จากนั้นในปี 2018 เราเริ่มเห็นราคาหน้าจอ OLED ขนาดใหญ่ 2.42 นิ้วที่ลดลง ในเดือนมกราคม 2019 ราคาจะลดลงเหลือประมาณ 16 เหรียญ ในที่สุด เราก็ได้จอแสดงผลที่ยอดเยี่ยมสำหรับใช้กับใบหน้าหุ่นยนต์ของเรา

นี่คือข้อกำหนดของจอแสดงผลเหล่านี้:

  1. 2.42 นิ้ว (วัดแนวทแยง)
  2. ข้าม 128 พิกเซล (มิติ x)
  3. สูง 64 พิกเซล (มิติ y)
  4. พลังงานต่ำ (โดยทั่วไป 10ma)
  5. ขาวดำ (มีสีเหลือง สีเขียว สีฟ้า และสีขาว)
  6. อินเทอร์เฟซ SPI เริ่มต้น แม้ว่าคุณสามารถเปลี่ยนเป็น I2C ได้หากต้องการ
  7. ไดรเวอร์ SSD1309 (ไดรเวอร์จอแสดงผลทั่วไป)

อินเทอร์เฟซ SPI มีเจ็ดสาย ต่อไปนี้คือป้ายกำกับทั่วไปบนอินเทอร์เฟซ:

  1. CS - เลือกชิป
  2. DC - ข้อมูล/คำสั่ง
  3. RES - รีเซ็ต
  4. SDA - ข้อมูล - ควรเชื่อมต่อกับ Arduino Nano pin 11
  5. SCL - นาฬิกา - ควรเชื่อมต่อกับ Arduino Nano pin 13
  6. VCC - +5 โวลต์
  7. GND - กราวด์

คุณจะต้องมีสายไฟเพื่อเชื่อมต่อจอแสดงผลกับเขียงหั่นขนม จอภาพมักจะมาพร้อมกับส่วนหัวแบบ 7 พินที่คุณบัดกรีกับจอแสดงผล ฉันใช้ตัวเชื่อมต่อ Dupont 20mc ตัวผู้ต่อตัวผู้ 7 ตัวและบัดกรีเพื่อให้สายไฟออกมาทางด้านหลังของจอแสดงผล

ขั้นตอนที่ 3: ขั้นตอนที่ 3: เชื่อมต่อ OLED กับ Arduino Nano

ขั้นตอนที่ 3: เชื่อมต่อ OLED กับ Arduino Nano
ขั้นตอนที่ 3: เชื่อมต่อ OLED กับ Arduino Nano
ขั้นตอนที่ 3: เชื่อมต่อ OLED กับ Arduino Nano
ขั้นตอนที่ 3: เชื่อมต่อ OLED กับ Arduino Nano

ตอนนี้คุณพร้อมที่จะทดสอบ OLED ของคุณแล้ว ฉันใช้ Arduino Nano ตัวอื่นเพื่อทดสอบว่าแต่ละจอแสดงผลที่ฉันใช้งานได้ เมื่อการทดสอบทำงาน ผมก็เชื่อมต่อกับหุ่นยนต์ แผนภาพการเดินสายไฟสำหรับผู้ทดสอบแสดงในรูปด้านบน โปรดทราบว่าคุณสามารถย้ายการเชื่อมต่อ OLED ไปยังพินอื่น ๆ ที่รองรับเอาต์พุตดิจิตอล แต่ถ้าคุณแน่ใจว่า SCL (นาฬิกา) อยู่บน Arduino Nano pin 13 และ SDA (ข้อมูล) อยู่บน Arduino Nano pin 11 คุณสามารถใช้การตั้งค่าเริ่มต้นใน ซอฟต์แวร์ วิธีนี้ช่วยให้โค้ดของคุณง่ายขึ้นเล็กน้อย

ขั้นตอนที่ 4: ขั้นตอนที่ 4: ทดสอบจอแสดงผลของคุณ

ขั้นตอนที่ 4: ทดสอบจอแสดงผลของคุณ
ขั้นตอนที่ 4: ทดสอบจอแสดงผลของคุณ

เพื่อทดสอบการแสดงผลของคุณ เราจะใช้ไลบรารี u8g2 มีห้องสมุดอื่นที่คุณสามารถใช้ได้ แต่จากประสบการณ์ของฉัน ไม่มีห้องสมุดใดที่ดีเท่ากับห้องสมุด u8g2 ปัจจัยสำคัญประการหนึ่งคือจำนวน RAM ภายใน Arduino ที่จอแสดงผลใช้ u8g2 เป็นไลบรารีเดียวที่ฉันพบว่าใช้ "Page Mode" ที่จะทำงานร่วมกับ Arduino Nano

คุณสามารถเพิ่มไลบรารีนี้ใน Arduino IED ของคุณได้โดยค้นหา "u8g2" ในเมนู "จัดการไลบรารี" คุณสามารถดาวน์โหลดรหัสได้โดยตรงจาก gethub

github.com/olikraus/u8g2

รหัสทดสอบที่ฉันใช้อยู่ที่นี่:

github.com/dmccreary/coderdojo-robots/blob…

มีบางสิ่งที่ควรทราบ หมายเลขพิน SCL และ SDA ถูกใส่ความคิดเห็นเนื่องจากเป็นพินเริ่มต้นบนนาโน ตัวสร้างสำหรับ u8g2 เป็นบรรทัดสำคัญ:

// เรากำลังใช้ SSD1306, 128x64, หน้าเดียว, ไม่มีชื่อ, 4 สาย, ฮาร์ดแวร์, SPI ที่ไม่มีการหมุนซึ่งใช้หน่วยความจำไดนามิกเพียง 27%U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);

เรากำลังใช้โหมดหน้าเดียวเนื่องจากโหมดนั้นใช้ RAM น้อยที่สุด เราใช้อินเทอร์เฟซฮาร์ดแวร์แบบ 4 สายและ OLED มาพร้อมกับ SPI เป็นค่าเริ่มต้น

ขั้นตอนที่ 5: ขั้นตอนที่ 5: เพิ่ม OLED ของคุณไปยัง Robot

ขั้นตอนที่ 5: เพิ่ม OLED ของคุณไปยัง Robot
ขั้นตอนที่ 5: เพิ่ม OLED ของคุณไปยัง Robot

ตอนนี้เรามี OLED ที่ใช้งานได้ และเรารู้วิธีเริ่มต้นไลบรารี u8g2 เราก็พร้อมที่จะรวม OLED กับหุ่นยนต์พื้นฐานของเราแล้ว มีบางสิ่งที่ต้องพิจารณา ในการทดสอบ OLED เราใช้หมุดที่อยู่ติดกันเพื่อทำให้การเดินสายง่ายขึ้น น่าเสียดายที่เราต้องการพิน 9 เพื่อขับเคลื่อนหุ่นยนต์ของเราเพราะเป็นหนึ่งในพิน PWM ที่เราจำเป็นต้องส่งสัญญาณแอนะล็อกไปยังไดรเวอร์มอเตอร์ วิธีแก้ไขคือย้ายลวดที่อยู่บนพิน 9 ไปยังอีกพินว่าง จากนั้นเปลี่ยนคำสั่ง #define เป็นพินใหม่นั้น ในการติดตั้ง OLED ที่ด้านหน้าของหุ่นยนต์ ฉันตัดชิ้นสามเหลี่ยมสองชิ้นออกจากลูกแก้วและติดกาวร้อน ไปที่แชสซี ฉันมักจะชอบใช้กระดาษทรายเพื่อหยาบพื้นผิวของลูกแก้วก่อนที่ฉันจะติดกาวส่วนต่างๆ เข้าด้วยกัน เพื่อไม่ให้แตกง่ายเกินไป

ต่อไป มาดูข้อมูลบางส่วนเกี่ยวกับ OLED ของเราและวาดใบหน้าบนหุ่นยนต์กันเถอะ!

ขั้นตอนที่ 6: ขั้นตอนที่ 6: แสดงพารามิเตอร์หุ่นยนต์

ขั้นตอนที่ 6: แสดงพารามิเตอร์หุ่นยนต์
ขั้นตอนที่ 6: แสดงพารามิเตอร์หุ่นยนต์

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

ในภาพด้านบน บรรทัดแรก (Echo Time) แสดงเวลาหน่วงระหว่างเวลาที่เสียงออกจากลำโพงอัลตราโซนิกกับเวลาที่ไมโครโฟนรับ ตัวเลขนี้จะถูกแปลงเป็นเซนติเมตรในบรรทัดที่สอง (ระยะทางเป็นซม.) ตัวนับได้รับการอัปเดตการค้นหาวินาทีเพื่อแสดงว่าจอแสดงผลกำลังได้รับการอัปเดต "การเลี้ยว…" จะปรากฏขึ้นก็ต่อเมื่อระยะทางต่ำกว่าจำนวนที่กำหนดซึ่งเรียกว่าเกณฑ์การเลี้ยวเท่านั้น ล้อทั้งสองจะเคลื่อนที่ไปข้างหน้าหากระยะปิงอยู่เหนือตัวเลขนี้ หากตัวเลขอยู่ต่ำกว่าเกณฑ์การเลี้ยว เราจะกลับมอเตอร์ (สำรอง) แล้วเปลี่ยนทิศทาง

นี่คือตัวอย่างโค้ดบางส่วนที่แสดงให้คุณเห็นถึงวิธีการนำค่าจากเซ็นเซอร์ ping และแสดงค่าบนหน้าจอ OLED ของคุณ

นี่คือตัวอย่างที่ทดสอบเซ็นเซอร์ ping สามตัว (ซ้าย กลาง และขวา) และแสดงค่าบนจอแสดงผล:

github.com/dmccreary/coderdojo-robots/blob…

ขั้นตอนที่ 7: ขั้นตอนที่ 7: วาดใบหน้าบางส่วน

ขั้นตอนที่ 7: วาดใบหน้าบางส่วน!
ขั้นตอนที่ 7: วาดใบหน้าบางส่วน!

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

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

คุณสามารถใช้ฟังก์ชัน display.height() และ display.width() เพื่อรับขนาดของจอแสดงผล ในโค้ดด้านล่างเราตั้งค่าตัวแปร

half_width = display.width()/2;half_height = display.height()/2;

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

// เราทำสิ่งนี้เมื่อเริ่มต้นแต่ละลูป

display.clearDisplay(); // วาดหน้าสว่างสำหรับ backgrounddisplay.fillCircle(half_width, half_height, 31, WHITE);// right eye dark display.fillCircle(half_width - 10, display.height()/3, 4, BLACK); // ตาซ้าย darkdisplay.fillCircle(half_width + 10, display.height()/3, 4, BLACK); // วาดเส้นตรงสำหรับปาก display.drawLine(half_width - 10, display.height()/3 * 2, half_width + 10, display.height()/3 * 2, BLACK); // บรรทัดนี้ส่งหน้าใหม่ของเราไปยังจอแสดงผล OLED display.display();

ขั้นตอนที่ 8: ขั้นตอนที่ 8: ปรับแต่ง

ขั้นตอนที่ 8: ปรับแต่ง
ขั้นตอนที่ 8: ปรับแต่ง

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

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

  1. ขวาไปข้างหน้า
  2. ถอยหลังขวา
  3. ซ้ายไปข้างหน้า
  4. ถอยหลังซ้าย

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

ตัวอย่างของโปรแกรมนั้นอยู่ที่นี่

github.com/dmccreary/coderdojo-robots/blob…

มีตัวอย่างเพิ่มเติมและรายละเอียดการเขียนโปรแกรมมากมายในหน้า CoderDojo Robots GitHub FaceBot

นอกจากนี้ยังมีเวอร์ชันของหุ่นยนต์ FaceBot ที่ช่วยให้นักเรียนเปลี่ยนพารามิเตอร์การหลีกเลี่ยงการชนทั้งหมด (ความเร็วไปข้างหน้า ระยะเลี้ยว เวลาเลี้ยว ความเร็วในการเลี้ยว) ได้โดยตรงโดยใช้จอแสดงผล ไม่จำเป็นต้องใช้คอมพิวเตอร์ในการ "ตั้งโปรแกรม" หุ่นยนต์เหล่านี้! เวอร์ชันเหล่านี้เหมาะสำหรับ MakerFairs และกิจกรรมที่คุณไม่ต้องการลากคอมพิวเตอร์ไปมา

โปรดแจ้งให้เราทราบว่าคุณและนักเรียนของคุณคิดอย่างไรกับใบหน้าใหม่!

มีความสุขในการเข้ารหัส!

แนะนำ: