กู้จอ VFD เก่ามาเล่น Space Invaders ด้วย Arduino Uno

GLOBALBYTE / ARDUINO UNO / VFD / RETRO GAMING

Space Invaders บนจอ VFD เก่า: Arduino Uno คุมเกมอย่างไร

จอเรืองแสงจากอุปกรณ์เก่าที่ปกติเอาไว้แสดงตัวเลขหรือข้อความ จะนำมาเล่นเกมยิงเอเลี่ยนได้จริงไหม? José Luis Monteiro และคุณพ่อทดลองนำ Vacuum Fluorescent Display (VFD) ที่ถอดจากอุปกรณ์เดิมมาควบคุมด้วย Arduino Uno จนเล่นเกมแนว Space Invaders ได้ โดยมีทั้งโค้ดเกมและตัวอย่างการขับจอให้ศึกษา

ข่าวต้นฉบับ: Hackaday โดย Tom Nardi · 8 พฤศจิกายน 2026 | โค้ดและคู่มือ: emsyscode / GitHub | เรียบเรียงโดย GlobalByte

ภาพประกอบเชิงแนวคิดสร้างด้วย CSS เพื่ออธิบายจอ VFD เรืองแสง ไม่ใช่ภาพถ่าย Screenshot หรือผลการทดสอบจากผู้สร้าง ดูภาพเกมจริงได้ในบทความ Hackaday ที่ลิงก์ด้านล่าง
Key Takeaways
  • โครงการใช้ Arduino Uno ควบคุม VFD แบบ 2 แถว × 20 Character Cells แต่ละ Cell มี Dot Matrix 5 × 7
  • ไดรเวอร์ HV5812/UCN5812 จำนวน 4 ตัวทำงานเป็น Grid Chain และ Dot Chain อย่างละ 2 ตัว
  • เกมใช้ Logical Canvas ขนาด 100 × 14 พร้อม Joystick, ปุ่มยิง และ Active Buzzer
  • มีโค้ด RawGrid, TextDisplay, JoystickReadout และ VfdInvaders ที่ตรวจสอบได้ใน GitHub
  • VFD ต้องใช้วงจรไฟเลี้ยงแยก ไม่สามารถนำไฟแรงดันสูงจาก Driver ไปต่อเข้าขา Arduino ได้

ทำไมถึงเอาจอ VFD เก่ามาเล่น Space Invaders?

หลายคนคุ้นกับแสงสีฟ้าอมเขียวของ VFD จากเครื่องเล่นเสียง นาฬิกา และอุปกรณ์อิเล็กทรอนิกส์รุ่นเก่า จอชนิดนี้มีเอกลักษณ์ที่เรืองแสงในตัวเอง แม้จะไม่ได้มีความละเอียดมากแบบจอสมัยใหม่ก็ตาม

Hackaday รายงานการทดลองของ José Luis Monteiro และคุณพ่อที่นำจอ VFD เก่ามาใช้ใหม่ แทนที่จะสั่งให้แสดงข้อความธรรมดา ทั้งคู่พัฒนาเกมแนว Space Invaders ที่ต้องมีตัวละคร ศัตรู การยิง และการอัปเดตภาพอย่างต่อเนื่อง จึงเป็นการทดสอบการขับจอที่ท้าทายกว่าการแสดงตัวอักษรคงที่

ที่สำคัญนี่เป็นเกมแนว Space Invaders ซึ่งพัฒนาขึ้นสำหรับจอ VFD เครื่องนี้ ไม่ใช่การยืนยันว่าได้ Emulate ฮาร์ดแวร์เกม Arcade ต้นฉบับของปี 1978

VFD คืออะไร และต่างจาก OLED หรือ LCD อย่างไร?

VFD (Vacuum Fluorescent Display) เป็นจอที่ใช้หลอดแก้วสุญญากาศและสารเรืองแสง Phosphor เมื่ออิเล็กตรอนถูกควบคุมให้ไปชนบริเวณ Anode ที่เคลือบสารเรืองแสงก็เกิดแสงที่มองเห็นได้ ต่างจาก LCD ที่อาศัยการปรับการผ่านของแสง และต่างจาก OLED ที่ใช้สาร Organic Emissive Layer

จอในโครงการนี้แบ่งพื้นที่แสดงผลเป็น 2 แถว × 20 ตัวอักษร แต่ละตำแหน่งประกอบด้วยจุด 5 × 7 จึงเหมาะกับการวาดอักขระและ Sprite ขนาดเล็ก มากกว่าภาพกราฟิกละเอียดสูงแบบจอ TFT

อย่าสับสนคำย่อ VFD ในบทความนี้ VFD หมายถึง Vacuum Fluorescent Display ไม่ใช่ Variable Frequency Drive สำหรับควบคุมมอเตอร์ไฟฟ้า

Hardware ที่ใช้สร้างเกมบน VFD

อุปกรณ์ บทบาทในโปรเจกต์
Arduino Uno ควบคุม Display Scanning, Game Logic และ Input
VFD 2 × 20 Characters จอเรืองแสงแบบ Character Dot Matrix 5 × 7
HV5812 / UCN5812 × 4 High-voltage Serial Drivers แยก Grid Chain และ Dot Chain
Joystick แบบ Analog ควบคุมทิศทางซ้ายและขวา
Fire Button สั่งยิงและเริ่มเกม
Active Buzzer + Transistor Driver แสดง Sound Effect ตามการออกแบบ
แหล่งจ่าย VFD และ Filament จ่ายไฟตามพิกัดของจอและไดรเวอร์ แยกจาก Logic ของ Arduino

GitHub ไม่ได้ระบุเลขรุ่นผู้ผลิตและ Part Number ของตัวแก้ว VFD แบบที่นำไปซื้อมาใช้แทนกันได้โดยตรง ดังนั้นไม่ควรเลือกจอ 2 × 20 ใด ๆ แล้วสรุปว่าต่อกับวงจรเดียวกันได้ทันที

HV5812 / UCN5812 คือหัวใจของการขับจอ

ไดรเวอร์ HV5812 แต่ละตัวมี 20-bit Shift Register พร้อม Output Latch และขาเอาต์พุตแรงดันสูง 20 ช่อง เมื่อต่อไดรเวอร์สองตัวเป็น Daisy Chain จะส่งข้อมูลได้ 40 บิตต่อสาย ทั้งโครงการใช้สองสายแยกกัน ได้แก่สายเลือก Grid และสาย Dot Data

ตัวอย่างลำดับการทำงานจาก README: ส่ง Grid Word 40 บิตและ Dot Word 40 บิต แล้ว Pulse สัญญาณ STROBE เพื่ออัปเดต Output จากนั้นหน่วงการแสดงของ Cell ชั่วครู่ ก่อนเคลียร์การเลือก Grid และเลื่อนไปตำแหน่งถัดไป

Arduino Uno ใช้ขาอะไรส่งสัญญาณ?

ตารางนี้ยกจาก README ของบอร์ดต้นแบบ เป็นขา Logic ของ Arduino ไม่ใช่ IC Pin Numbers ต้องตรวจวงจร Driver และ Pinout ของ Panel จริงก่อนนำไปต่อ

Arduino Uno Signal คำอธิบาย
D4 Dot DATA IN ข้อมูลของ Dot Chain
D5 Dot CLOCK Clock สำหรับ Dot Chain
D7 Grid DATA IN ข้อมูลของ Grid Chain
D8 Grid CLOCK Clock สำหรับ Grid Chain
D9 Shared STROBE อัปเดตข้อมูลจาก Shift Register ไป Output Latch
D10 Shared BLANK ควบคุมการอนุญาตให้ Output ทำงาน
GND Logic / Driver Ground อ้างอิง Ground ตามวงจรของโครงการ
คำเตือนเรื่องไฟเลี้ยง VFD

เอกสาร HV5812 ระบุ Logic VDD 4.5–5.5V และ VPP ของไดรเวอร์ 20–80V แต่ตัวเลขนี้ ไม่ใช่แรงดันจ่ายสำหรับ VFD ทุกรุ่น วงจรต้นแบบใช้แหล่งจ่าย VFD และ Filament แยกต่างหาก ห้ามนำ VPP ต่อเข้า Arduino GPIO หรือใช้แรงดันกับหลอดที่ยังไม่ทราบพิกัดจริง

Multiplexing ทำให้ 40 Character Cells แสดงภาพได้อย่างไร?

ถ้าต้องขับแต่ละจุดแยกตลอดเวลา จะใช้ขาและวงจรจำนวนมาก แต่ระบบนี้ใช้การสแกนทีละ Cell อย่างรวดเร็ว เรียกว่า Multiplexing โดยสลับ Grid ที่เปิดพร้อมส่ง Dot Pattern ของตำแหน่งนั้น ๆ ให้เกิดภาพรวมจากการมองเห็นอย่างต่อเนื่อง

README ระบุ Hold Time ค่าเริ่มต้น 150 µs ต่อ Grid และเรียก refresh() บ่อย ๆ เพื่อสแกนต่อเนื่อง หากโค้ดมีการหน่วงแบบ Blocking นานเกินไป อาจเห็นอาการกวาดภาพหรือกระพริบ ทั้งนี้ Source ไม่ได้ระบุค่า FPS ที่รับรองได้สำหรับเกมบน Panel นี้

ทำไมไม่ใช่จอ 100 × 14 แบบ Pixel ต่อเนื่อง?

พื้นที่เกมแบ่งตามโครงสร้างจริง 20 × 2 Cells โดยแต่ละ Cell มี 5 × 7 Dots รวมเป็น Logical Canvas ขนาด 100 × 14 แต่ระหว่าง Character Cells มีช่องว่างทางกายภาพอยู่ Sprite จึงต้องถูกออกแบบให้ดูดีภายใต้ข้อจำกัดนี้

Space Invaders บน VFD มีอะไรที่น่าสนใจ?

โค้ดเกมอยู่ใน VfdInvaders.ino และแยกไฟล์สำหรับสถานะเกมกับ Sprite โดยใช้ข้อมูลขนาดเล็กในการเก็บรูปแบบ Pixel แทนการโหลดภาพ Bitmap ขนาดใหญ่

จากคู่มือเกม ผู้สร้างกำหนดรูปแบบตัวละคร Compact Sprite เพื่อประหยัดความสูงบนจอซึ่งมีเพียง 14 Dot Rows และมีตัวเลือกขนาดใหญ่สำหรับผู้ที่ต้องการทดลองความต่างด้านการแสดงผล

ระบบยังมีคะแนน จำนวนชีวิต Wave ใหม่ การเปลี่ยนทิศทางศัตรู และ Boss Encounter โดยคู่มือระบุว่า Boss ปรากฏหลังผ่านทุกสาม Formation ที่เคลียร์สำเร็จ จุดเหล่านี้เป็นฟีเจอร์ของ Firmware ที่ตรวจพบ ไม่ใช่การรับประกัน Frame Rate ของเครื่อง

ควบคุมเกมด้วย Joystick ปุ่มยิง และ Serial Monitor

Input Arduino Pin / Command หน้าที่
Joystick แนวนอน A0 เลื่อนตัวละครซ้าย/ขวา
Fire Button D12, INPUT_PULLUP เริ่มเกมและยิง
Active Buzzer D11 ผ่าน Transistor Driver Sound Effect
Serial Monitor 115200 baud ปรับค่าและส่งคำสั่งทดสอบ

ผู้สร้างระบุให้ปล่อย Joystick อยู่ตำแหน่งกลางขณะเริ่มระบบประมาณหนึ่งวินาที เพื่อให้การ Calibrate ศูนย์ทำงานอย่างถูกต้อง จากนั้นกด Fire เพื่อเริ่มเล่น หรือส่งคำสั่งผ่าน Serial Monitor ได้

คำสั่งที่ยืนยันจากเอกสาร เช่น menu เปิดเมนู, reversex กลับทิศการบังคับ, center Calibrate ใหม่, p Pause, demo เล่นอัตโนมัติ และ boss test ทดสอบ Boss Encounter

เริ่มศึกษาโครงการจากไหน? ลำดับทดสอบที่ผู้สร้างเตรียมไว้

Repository แยก Sketch สำหรับการทดสอบทีละระบบ ทำให้ศึกษา Display Interface ก่อนเพิ่ม Logic ของเกมได้ โดยควรเริ่มจากการอ่านวงจรและตรวจไฟเลี้ยงของจอจริงกับผู้มีประสบการณ์

  1. RawGrid: ทดสอบสแกนตำแหน่งเดียวและแสดงตัวอักษรพื้นฐาน
  2. TextDisplay: แสดงข้อความสองแถวและรับคำสั่งจาก Serial Monitor
  3. JoystickReadout: ตรวจ Analog Input และปุ่มยิงแยกจากวงจรจอ
  4. VfdInvaders: เพิ่มเกม, Sprite, Input, Sound และเมนู
ไม่จำเป็นต้องหา Library แยกเพิ่ม README ระบุว่า Header ที่จำเป็นรวมอยู่ในโปรเจกต์แล้ว เปิดไฟล์ .ino ของแต่ละตัวอย่างใน Arduino IDE เลือก Arduino Uno และอัปโหลดตามแนวทางของผู้พัฒนา โดยต้องตรวจเรื่อง Header และโครงสร้างไฟล์ให้ตรงกับ Source ที่ดาวน์โหลด

Code Snippet ที่ตรวจจาก GitHub จริง

ตัวอย่างด้านล่างเป็นเพียงส่วนหนึ่งของ Source Code ของผู้พัฒนา ไม่ใช่ Wiring Tutorial สำหรับแรงดันสูง และไม่ใช่โปรแกรมเดี่ยวที่ Compile ได้โดยไม่มีไฟล์อื่นใน Repository

VfdInvaders.ino — Game Input Definitions
constexpr uint8_t XPin = A0, FirePin = 12, BuzzerPin = 11;
// Increasing X voltage moves left; reversex changes this direction.
bool reverseX = false;
README — เริ่มต้นแสดงข้อความบน VFD
display.begin();
display.enable(true);
display.write(0, 0, "HELLO VFD");
README — คำสั่ง TextDisplay ใน Serial Monitor
row1 HELLO VFD
row2 Arduino text
hold 150
scan active
clear
?

ภาพเกมจริงและวิดีโอสาธิตอยู่ที่ไหน?

บทความ Hackaday แสดงภาพข่าวชื่อไฟล์ vfdinvade_feat.jpg และระบุวิดีโอสาธิตชื่อ I Hacked This Old Display to Play Space Invaders แต่การตรวจแหล่งข้อมูลรอบนี้ยังไม่ได้ Direct Image URL หรือ Video ID ที่ยืนยันได้ จึงไม่ฝัง URL คาดเดาหรือใส่คลิปที่เป็นคนละโปรเจกต์แทน

หากจะนำภาพจาก Hackaday หรือวิดีโอของผู้สร้างมาฝังบนเว็บไซต์เชิงพาณิชย์ ควรตรวจทั้ง Direct URL และสิทธิ์การใช้งานก่อน เพื่อหลีกเลี่ยงภาพเสียหรือการใช้สื่อเกินขอบเขตสิทธิ์ที่ได้รับ

ข้อจำกัดทางเทคนิคและความปลอดภัย

VFD มีวงจรไฟเลี้ยงต่างจากจอ LCD/OLED ทั่วไป
  • ห้ามนำ VPP ของไดรเวอร์แรงดันสูงต่อเข้าขา Arduino Uno โดยตรง
  • ตรวจแรงดันและกระแสของ Filament, Grid และ Anode ของหลอด VFD จริงก่อนใช้แหล่งจ่าย
  • ขอบเขตแรงดัน 20–80V เป็นสเปกของ Driver ไม่ใช่คำแนะนำให้จ่ายแรงดันระดับนั้นกับจอทุกตัว
  • หากใช้ UCN5812 แทน HV5812 ต้องตรวจ Datasheet และ Pinout รุ่นย่อย ไม่ควรถือว่าเสียบแทนกันได้ทันที
  • จอที่ถอดจากเครื่องอื่นอาจมี Grid Mapping, Dot Mapping และ Timing แตกต่างจากตัวอย่าง GitHub

README ของผู้สร้างยังเน้นให้ควบคุม BLANK ให้อยู่ในสถานะปลอดภัยขณะ Reset และกำหนดลำดับ Power-up/Power-down อย่างถูกต้อง บทความนี้จึงเน้นอธิบายหลักการ ไม่ใช้เป็นคู่มือประกอบวงจรแรงดันสูงแบบพร้อมต่อทันที

Source Code, Arduino Sketch, Datasheet และไฟล์ดาวน์โหลด

จากแหล่งข้อมูลที่ตรวจสอบ ไม่พบไฟล์ Gerber, STL หรือ PDF คู่มือประกอบแยกสำหรับโครงการนี้ นอกเหนือจาก Datasheet ที่ผู้สร้างอ้างอิง และยังไม่สามารถยืนยัน Video ID สำหรับ Embed โดยตรงได้

FAQ: คำถามที่พบบ่อยเกี่ยวกับ Space Invaders บน VFD

1. เกมนี้ใช้ Arduino รุ่นใด?

ผู้สร้างระบุ Arduino Uno ใน Repository หลัก

2. VFD ย่อมาจากอะไร?

Vacuum Fluorescent Display หรือจอสุญญากาศเรืองแสง

3. VFD เครื่องนี้แสดงได้กี่ตัวอักษร?

2 แถว × 20 ตัวอักษร โดยแต่ละตำแหน่งมี 5 × 7 Dots

4. ใช้ไดรเวอร์กี่ตัว?

สี่ตัว แบ่ง Grid Chain สองตัวและ Dot Chain สองตัว

5. Logical Canvas 100 × 14 หมายถึงอะไร?

พื้นที่ Logic ที่รวม Dot Matrix ของ Character Cells สำหรับเกม โดยยังมีช่องว่างทางกายภาพระหว่าง Cell

6. เกมมีปุ่มอะไรบ้าง?

ใช้ Joystick แนวนอนที่ A0 และ Fire Button ที่ D12 ส่วน D11 ขับ Active Buzzer ผ่าน Transistor

7. มีเมนูตั้งค่าความยากไหม?

มี เลือกความยาก ขนาด Sprite, Wave และ Boss Encounter ได้ตาม Game README

8. มีโหมดให้เกมเล่นเองไหม?

มีคำสั่ง demo สำหรับ Automatic Play

9. สามารถส่งคำสั่งจากคอมพิวเตอร์ได้ไหม?

ได้ผ่าน Serial Monitor ที่ 115200 Baud และคำสั่งตามที่ README ระบุ

10. ต้องติดตั้ง Arduino Library เพิ่มหรือไม่?

README ระบุว่า Header ที่จำเป็นอยู่ใน Repository แล้ว ไม่ต้องติดตั้ง Library แยกสำหรับตัวอย่างเหล่านี้

11. จ่ายไฟ VFD จาก Arduino 5V อย่างเดียวได้หรือไม่?

ไม่ได้ตามโครงการนี้ ต้องมีไฟเลี้ยงแยกสำหรับ Driver และ Filament ตามพิกัดจริงของจอ

12. ใช้จอ VFD รุ่นอื่นได้ทันทีไหม?

Source ไม่ได้รับรอง ต้องตรวจ Grid Mapping, Dot Mapping, Driver และแรงดันไฟฟ้าของจอใหม่

13. มีไฟล์เกมให้ดาวน์โหลดหรือไม่?

มีทั้ง VfdInvaders.ino, README เกม และ ZIP รวมโครงการ

14. มีวิดีโอสาธิตไหม?

Hackaday ระบุวิดีโอสาธิตของผู้สร้าง แต่ยังไม่สามารถยืนยัน Direct Video URL ได้ ให้เปิดดูผ่านหน้าข่าวต้นฉบับ

สรุป: จอเก่าก็สร้างโปรเจกต์เกมที่น่าสนใจได้

จุดเด่นของ Space Invaders บน VFD คือการใช้ Hardware เก่าที่มีข้อจำกัดมาทดลองเรื่อง Shift Register, Multiplexing, Sprite Design และ Input Handling ในโปรเจกต์เดียว แทนที่จะซื้อจอกราฟิกใหม่แล้วเริ่มจาก Library สำเร็จรูป

สำหรับ Maker ที่อยากเข้าใจการขับ Display ระดับล่าง ลองอ่าน README แล้วเริ่มศึกษาตัวอย่าง RawGrid, TextDisplay และ JoystickReadout ก่อน Game Firmware โดยต้องตรวจระบบไฟเลี้ยง VFD อย่างปลอดภัย และใช้ Source ต้นฉบับประกอบเสมอ

References / แหล่งข้อมูลต้นฉบับ

  1. Hackaday — Space Invaders On A VFD (8 Nov 2026)
  2. emsyscode — HV5812 / UCN5812 VFD with Arduino
  3. emsyscode — VfdInvaders Game Documentation
  4. emsyscode — VfdInvaders Arduino Source
  5. Microchip — HV5812 Datasheet PDF
  6. Hackaday — Vacuum Fluorescent Displays Explained

ต่อยอด Arduino และ Retro Electronics กับ GlobalByte

สนใจเรียนรู้ Arduino, Display Driver, Joystick หรือชิ้นส่วน Electronics สำหรับโปรเจกต์ Maker? สามารถสอบถามทีม GlobalByte เพื่อเลือกบอร์ดและอุปกรณ์ที่เหมาะกับงาน โดยต้องตรวจความเข้ากันได้และความปลอดภัยของวงจรไฟเลี้ยงก่อนใช้งานจริง

 

แท็ก


Blog posts