TWANG — 1D Dungeon Crawler
Το TWANG αποτελεί ένα από τα πιο αναγνωρίσιμα και διαδραστικά hardware projects που έχουμε φιλοξενήσει και κατασκευάσει στο gizmo_lab, βασισμένο στην ανοιχτή κοινότητα και τη φιλοσοφία του DIY gaming.
Εισαγωγή & Ιστορικό
Section titled “Εισαγωγή & Ιστορικό”Το TWANG είναι ένας ανοιχτού κώδικα κλώνος (clone) του πασίγνωστου indie παιχνιδιού Line Wobbler του Robin Baumgarten. Η ιδέα γεννήθηκε από την ανάγκη να φέρουμε μια high-end conceptual ψηφιακή εγκατάσταση στα μέτρα μας, χρησιμοποιώντας προσβάσιμα υλικά χαμηλού κόστους (όπως standard διευθυνσιοδοτούμενες LED ταινίες και αισθητήρες κίνησης).
Πρόκειται για ένα μονοδιάστατο (1D) Dungeon Crawler όπου ολόκληρος ο κόσμος του παιχνιδιού, ο παίκτης, οι εχθροί και τα εμπόδια, απεικονίζονται πάνω σε μια φωτεινή γραμμή από μερικές δεκάδες ή εκατοντάδες LED.
Πώς Λειτουργεί το Παιχνίδι (Gameplay)
Section titled “Πώς Λειτουργεί το Παιχνίδι (Gameplay)”Ο χειρισμός του παιχνιδιού είναι απόλυτα φυσικός και βασίζεται στη μηχανική αλληλεπίδραση:
- Κίνηση (Tilt): Ο παίκτης ελέγχει ένα φωτεινό pixel (π.χ. πράσινο) γέρνοντας ένα ελατήριο-joystick αριστερά ή δεξιά.
- Επίθεση (Twang/Wobble): Λυγίζοντας και αφήνοντας απότομα το ελατήριο, προκαλείται μια δόνηση (“twang”) η οποία μεταφράζεται σε επίθεση shockwave για την εξόντωση των εχθρών.
- Εμπόδια & Μηχανισμοί:
- Εχθροί: Κινούμενα pixels (κόκκινα) που προσπαθούν να χτυπήσουν τον παίκτη.
- Lava (Λάβα): Ζώνες που αναβοσβήνουν περιοδικά και σκοτώνουν τον παίκτη αν βρεθεί εκεί τη λάθος στιγμή.
- Conveyor Belts / Water (Νερό): Περιοχές με ροή που σπρώχνουν ή καθυστερούν τον παίκτη.
- Boss Fights: Στο τέλος των επιπέδων, ένας μεγάλος εχθρός που γεννά μικρότερους μέχρι να δεχτεί συγκεκριμένα πλήγματα.
Απαιτούμενα Υλικά (BOM)
Section titled “Απαιτούμενα Υλικά (BOM)”| Εξάρτημα | Περιγραφές / Προδιαγραφές | Χρησιμότητα |
|---|---|---|
| Microcontroller | Arduino Mega 2560 (ή συμβατός κλώνος) | Η “καρδιά” του συστήματος |
| LED Strip | APA102 / SK9822 (ή WS2812B / Neopixel) | Η “οθόνη” του παιχνιδιού — προτιμώνται οι APA102 λόγω υψηλού refresh rate |
| Αισθητήρας Κίνησης | MPU-6050 (Γυροσκόπιο & Επιταχυνσιόμετρο) | Ανίχνευση κίνησης και δόνησης στην κορυφή του ελατηρίου |
| Μηχανικό Ελατήριο | Κλασικό ελατήριο πόρτας (Door Spring) | Το σώμα του custom joystick |
| Audio | Μικρό ηχείο (8Ω) ή Buzzer | Retro 8-bit ηχητικά εφέ |
| Ενδείξεις Ζωής | 3x LEDs (5mm) | Εναπομένουσες προσπάθειες παίκτη |
| Τροφοδοτικό | 5V DC (2A–5A ανάλογα με μήκος LED strip) | Παροχή ρεύματος |
| Enclosures | 3D Printed (βάση, καπάκι controller, κορυφή ελατηρίου) | Στέγαση ηλεκτρονικών και σταθεροποίηση αισθητήρα |
Σχηματική Διάταξη & Συνδεσμολογία
Section titled “Σχηματική Διάταξη & Συνδεσμολογία” +-------------------+ | Arduino Mega | | | [MPU-6050] ---> | SDA (20) / SCL(21)| (I2C Interface) [LED Strip] <---| Pin 51 (MOSI/Data)| (SPI / FastLED Control) | Pin 52 (SCK/Clock)| [Speaker] <--- | Pin 3 | (PWM Audio Output) [Life LEDs] <---| Pins 5, 6, 7 | (Status Indicators) +-------------------+Διαδικασία Κατασκευής
Section titled “Διαδικασία Κατασκευής”-
Προετοιμασία Joystick Ελατηρίου — Περνάμε 4 λεπτά καλώδια (VCC, GND, SDA, SCL) μέσα από το κέντρο του ελατηρίου. Στην κορυφή κολλάμε τον αισθητήρα MPU-6050.
-
3D Printing & Συναρμολόγηση Κορυφής — Τυπώνουμε το enclosure κορυφής. Τοποθετούμε τον MPU-6050 απόλυτα παράλληλο με το έδαφος για σωστή ανάγνωση αξόνων.
-
Κεντρική Βάση (Controller Console) — Τυπώνουμε βάση + καπάκι. Στερεώνουμε το ελατήριο με pins 90°, τοποθετούμε ηχείο/buzzer στις γρίλιες, εγκαθιστούμε τα 3 LEDs ζωής στην πρόσοψη.
-
Καλωδίωση & Θύρες — Συνδέουμε τα πάντα στο Arduino Mega. Αφήνουμε προσβάσιμη τη USB θύρα. Χρησιμοποιούμε αδιάβροχο 4-pin σύνδεσμο στην έξοδο LED strip.
Κώδικας & Παραμετροποίηση (Software)
Section titled “Κώδικας & Παραμετροποίηση (Software)”Το software βασίζεται στη βιβλιοθήκη FastLED για τη διαχείριση χρωμάτων και εφέ σε πραγματικό χρόνο.
Βασικές Παράμετροι
Section titled “Βασικές Παράμετροι”NUM_LEDS: Συνολικό μήκος πίστας (π.χ. 144 ή 300 LEDs)LED_TYPE: Chipset ταινίας (APA102ήWS2812B)ATTACK_THRESHOLD: Ευαισθησία αισθητήρα για αναγνώριση επίθεσης
Screensaver Mode
Section titled “Screensaver Mode”Αν δεν ανιχνευτεί κίνηση για 30 δευτερόλεπτα, το παιχνίδι περνάει σε screensaver (κυκλικά εφέ φωτισμού). Μόλις ο παίκτης αγγίξει ξανά το ελατήριο, επιστρέφει στο Level 1.
Αποθετήρια & Πηγές
Section titled “Αποθετήρια & Πηγές”- GitHub Repository (gizmo_lab): g1zmolab/TWANG — Πηγαίος κώδικας, τροποποιήσεις και οδηγίες παραμετροποίησης.

