Inhoudsopgave:

In-Line LED-display Arduino Games - Ajarnpa
In-Line LED-display Arduino Games - Ajarnpa

Video: In-Line LED-display Arduino Games - Ajarnpa

Video: In-Line LED-display Arduino Games - Ajarnpa
Video: Arduino LED Strip Racing Game WS2812b 2024, Juli-
Anonim
Image
Image
Belangrijke componenten
Belangrijke componenten

ook bekend als LED Ladder Display Game-systeem.

Een Attiny-85 uitgerust met hardware en software om actievolle "video" -games te spelen, op een in-line LED-display.

Het heeft een multiplex 12 LED ladderdisplay en ondersteunt tot 6 knopingangen en een optionele audio-uitgang.

Het zit boordevol 4 behendigheidsspellen, met meerdere moeilijkheidsgraden en enkele variaties (bijgewerkt tot 16 spellen, bij gebruik met een ATMega MCU).

[Video]

Stap 1: Belangrijke componenten

Ik heb mijn project modulair opgebouwd (twee afzonderlijke assemblages). Een hoofddisplay-subassemblage; die op zichzelf kan worden gebruikt. En een subeenheid voor knopinvoer. Op die manier kan ik de knop of het beeldscherm weer gebruiken in een ander project. Dit zorgt ook voor flexibele montagemogelijkheden.

Ik bracht ook de besturingslijn naar een pin-header voor de LED-ladderconstructie, zodat ik een Arduino Nano (of een Uno) kon gebruiken om er software voor te ontwikkelen en deze ook in andere projecten te gebruiken. Een Digispark zal niet werken vanwege de andere componenten op de printplaat.

Ik heb ervoor gekozen om dezelfde pintoewijzingen voor de LED-ladder te gebruiken als in eerdere instructies om het voor degenen die al een dergelijke hardware-implementatie hebben gemakkelijk te maken om de software in deze instructable te gebruiken, ook al vond ik de opdrachten niet voor de duidelijkste logica in de software.

De twee lijnen tussen de modules zijn PB4 en aarde. Aangezien alles op de multi-knop assemblage weerstanden en schakelaars zijn, is het dus niet polariteitsafhankelijk, en het omkeren van de verbinding doet er niet toe.

Met de ondersteuning van meer knoppen kan een grotere verscheidenheid aan games (of applicaties) worden geïmplementeerd. Twee van de spellen in deze instructable kunnen het beste met twee knoppen worden gespeeld. De vier hoofdknoppen kunnen worden gebruikt om direct toegang te krijgen tot een bijbehorend spel. Binnenkort zal ik een spel implementeren dat afhankelijk is van het gebruik van alle vier de hoofdknoppen.

Dit project gebruikt maximaal zes knoppen. Vier belangrijkste BTN 1-4, deze knoppen kunnen afzonderlijk worden gedetecteerd, zelfs wanneer twee ervan tegelijkertijd worden ingedrukt. De andere twee zijn speciale knoppen, eerst is er het equivalent van de enkele knop in eerdere projecten die een harde verbinding maakt tussen de PB4-ingang naar aarde, ik noem dit BTN0 of ESC omdat deze schakelaar altijd kan worden gedetecteerd en detectie blokkeert van een van de anderen. De andere speciale toets is de functietoets, indien ingedrukt wanneer BTN 0-4 wordt ingedrukt, kan deze worden gedetecteerd en gebruikt om de functionaliteit te wijzigen.

In deze schets van het behendigheidsspel gebruik ik:

  • FncKey+Btn1 terug naar menumodus
  • FncKey+Btn2 geavanceerde moeilijkheidsgraad (indien op hoogste ga terug naar laagste)
  • FncKey+Btn4 onmiddellijke pauze (druk op een willekeurige toets om de pauze op te heffen)
  • FncKey + Btn 0 of 3 zijn niet gedefinieerd.

Stap 2: Onderdelenlijst

Onderdelen lijst
Onderdelen lijst

Benodigde onderdelen

  • LED's, rood, geel, groen en blauw zoals deze
  • PCB-boards vergelijkbare items, misschien moet u een groter bord kopen en het op de gewenste maat knippen.
  • pin dip socket soortgelijke items
  • Attiny-85-chip
  • weerstanden
  • Gebruikte knopschakelaars: 12x12x8mm en 6x6x6mm PCB Momentary tactiele drukknoppen

aanbevolen:

  • zoemer 5v, actief type
  • een ijslollystokje
  • 2,54 mm pin-headerstrip
  • 30 ga draad en wire-wrap tool https://www.ebay.com/itm/351798901037de bovenstaande link is naar draad die meer op 36 ga lijkt. Ik wou dat ik wist van zo'n deal voor echte 30 ga. draad

Stap 3: Hoogtepunten van de bouw

Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw
Hoogtepunten van de bouw

Op het moederbord heb ik elektrisch hetzelfde als andere eerdere LED-ladderprojecten, die je misschien wilt raadplegen voor verdere basisconstructie-instructies

Ik gebruik echter geen externe pull-up weerstand op de analoge ingang A2 (PB4), ook gebruik ik rode, gele, groene en blauwe LED's, in plaats van allemaal één kleur, wat wenselijk is voor sommige van de games die ik voor deze hardware heb gemaakt.

Hier zijn de I/O-toewijzingen zoals verwacht door de bijgevoegde softwareschetsen:

Project MCU AT-85 Uno/Nano

Namen naam pin# brd naam --------- ---- ---- --------- Rood L1-3 PB3 2 D-11 Geel L4-6 PB0 5 D-8 Groen L7-9 PB1 6 D-9 Blauw L10-11 PB2 7 D-10 Ain PB4/A2 3 A-2 Audio PB5 1 D-3

Het enige significante verschil is dat ik twee knoppen heb aangesloten op PB4. De eerste gaat rechtstreeks van PB4 naar aarde, maar zonder externe pull-upweerstand (ik noem dit BTN0). Ik heb ook een knopschakelaar (die ik BTN noem) verbonden met een 75Kohm in serie naar aarde. Dit moederbord kan gebruikt worden zonder het "Button" montagebord, maar met enige beperkte functionaliteit.

De stroombeperkende weerstanden die naar de LED-sets gaan, moeten worden gekozen op basis van de helderheid van de verschillende kleuren-LED's die u gebruikt en hoe helder u ze wilt. Ik eindigde met 91 Ohm voor de rode set, 75 geel, 430 groen en 150 Ohm voor blauw. Deze waarden lijken misschien laag, maar onthoud dat de leds gemultiplext zijn (over het algemeen veel < 100% van de tijd)

Ik heb leds van 3 mm gebruikt en ze een beetje uit elkaar geplaatst. Ik had de benen van de LED straddle een ijslollystok. Op deze manier stonden ze allemaal hetzelfde bedrag en boven alle andere componenten op. Ik ben van plan om de unit op een gegeven moment te monteren met alleen de LED's die door een frame steken.

Ik heb ervoor gekozen om de led-interconnecties te wire-wrappen. Zonder een speciale printplaat is dit makkelijker te doen dan op krappe plekken met veel onderlinge verbindingen te solderen; heeft niet de neiging om kortsluiting te produceren en is gemakkelijker opnieuw te bedraden in het geval van een fout. Met alle stromen in en rond de microcontroller in de milliampère is 30 ga draad ruim voldoende.

Knoppen en gerelateerde weerstanden:

Ik bedacht een unieke configuratie (een soort dubbele Y) van weerstanden en knoppen, zodat de software individuele en dubbele druk op de knop kon onderscheiden (theoretisch kan elke combinatie van deze vier knoppen worden geïdentificeerd). Ik heb verschillende configuraties geprobeerd met een groot aantal weerstandswaarden in een spreadsheet op zoek naar de beste configuratie, en deze vervolgens in software gesimuleerd, waarbij ik alle mogelijke weerstandscombinaties probeerde om de set (die ik gebruik) te vinden die het maximale of minimale verschil zou opleveren van analoge metingen tussen elke en alle enkele en dubbele druk op de knop. Ik heb ze zo gerangschikt dat vooral Btn1, Btn4 en Btn1+4 duidelijk van elkaar te onderscheiden waren.

Raadpleeg het diagram van het knoppennetwerk hierboven.

U moet alle bedrading die met PB4 is verbonden (en mogelijk contacten en weerstanden verwisselen) afdekken met elektrische tape, hete lijm of iets anders dat helemaal niet geleidt, aangezien een loutere mega-ohm-weerstand het vermogen om te bepalen welke schakelaar(s) worden ingedrukt; en elk dergelijk contact dat u maakt terwijl u een vergadering vasthoudt, zou dat doen.

Later bijbehorende Instructables:

4-Button-Games-Met-One-Analoge-Input/

Dual-Power-for-Your-Portable-Micro-Controller-Proj/

3D-geprinte-behuizing-voor-inline-LED-display-console-en/

Stap 4: Verdere opties en opmerkingen

Verdere opties en opmerkingen
Verdere opties en opmerkingen

Optionele audio-uitgang

De optionele audio-uitgang maakt gebruik van PB5. Ik heb een 5v-zoemer aangesloten, in serie met een weerstand van 150 Ohm om de anders luide vervelende output te beperken. Ik raad je aan om 50-200 Ohm te gebruiken. Je kunt de zoemer parallel zetten met een dop (2-10uf) om het minder raspend te maken, of een 10 mm driver van 32 Ohm gebruiken die uit een set goedkope stereo-oordopjes is gebroken, in plaats van de weerstand en zoemer. Ik vind het leuk, voor spelgeluiden, beter als ik het heb.

Standaard gebruikt de Attiny-85 PB5 als reset, effectief betekent dat de audio zou werken, maar het zal geen nadelig effect hebben op andere bewerkingen. Bij gebruik van een Nano of Uno zal de audio werken (komt uit de D3). Om audio met de Attiny te krijgen, moet je de interne pinconfiguratie wijzigen, zodat de software PB5 als uitgang kan gebruiken. Dit heeft aanzienlijke gevolgen; verwijzen wij u naar deze:

forum.arduino.cc/index.php?topic=178971.0

www.instructables.com/id/Simple-and-cheap-F…

en

Over het algemeen zal tijdens het spelen van een spel een fout of mislukking een chirp of een kort frambozengeluid oproepen. Er wordt een felicitatiemelodie gespeeld als je een level voltooit of wint, zoals bij pingpong. Ik merk dat het hebben van begeleidende audio de speelvreugde echt vergroot.

Alternatieve knoppen van het type gamecontroller

Voor mijn kleinkinderen, die ruw omgaan met apparatuur, heb ik duurzame aparte knoppen, Btn1 en Btn4, gemaakt aan het uiteinde van lange geleidingsdraden. Zie foto. Ik monteerde de knoppen in geïmproviseerde handgrepen; met een 75Kohm inline met Btn1 en een ~37Kohm inline met Btn4. In serie met Btn4 heb ik eigenlijk een 36K, een 33K of zelfs eventueel een 39K gebruikt. Met externe plunjerknoppen in gedachten, zou het een goed idee zijn om een aparte set koppennen te hebben, voor het aansluiten van externe handbediende knoppen die worden gezien als Btn1 en Btn4.

Kwaliteitsvoeding nodig

Voor een stroombron kun je de USB 5v uitgang van een pc, tablet, wandlader, powerbank of 3.7 Li batterij direct gebruiken.

Ik ontdekte dat ik bij het voeden van het apparaat via sommige USB-opladers en verschillende USB-powerbanks flikkeringen en af en toe misselijk gedrag en zelfs resets opmerkte. Als u dit ervaart, zoek dan een stroombron met betere regeling, anders kan het helpen om een grote (100-1000uf) condensator over +V naar aarde toe te voegen.

Testen

Ik heb ook een testprogramma toegevoegd om uw hardware te valideren en te debuggen. De code is een work-in-progress en moet dringend worden opgeschoond. Ik hoop dat te bereiken, maar ondertussen zou het aan uw behoeften moeten voldoen. Ik heb het onlangs alleen gebruikt met een Nano die het beeldscherm en het toetsenbord aanstuurt. U kunt vrijwel elke knop gebruiken om items uit de menumodus te selecteren. Om een demo/test opnieuw af te sluiten, drukt u op bijna elke knop. Om de knoptest (#4) te verlaten, drukt u op FncKey+Btn1 of houdt u de EscKey ingedrukt (aarding PB4), of recyclet u de stroom.

Vanwege verschillen in MCU interne weerstanden en weerstandstoleranties moet u mogelijk enkele aanpassingen doen zodat alle enkele en dubbele knopdrukken correct worden gedetecteerd. Gebruik hiervoor test-4 (zie hiervoor de beschrijving van de menubediening hieronder) van het testprogramma. Merk op dat ik geen externe pull-up-resist heb gebruikt, omdat ik verder gebruik heb gemaakt voor de PB4-ingang die niet compatibel is met elke pull-up.

Stap 5: Software-overzicht

De schets LadderGames.ino implementeert vier spellen, waaronder enkele alternatieve versies.

De schets kan worden gedownload en uitgevoerd vanaf een ATtiny-85, Nano, Uno enz. Om het in een Attiny-chip te programmeren, zie: https://www.instructables.com/id/Program-an-ATtiny… en/of om te programmeren uw ATtiny-85-chip:

Verander de interne klok van de ATtiny85 naar 8MHz, aangezien de prestaties gewenst zijn voor het spelen van het spel. Verwijzen:

forum.arduino.cc/index.php?topic=276606.0

Deze schets zou achterwaarts compatibel moeten zijn met de meeste eerdere ATtiny-85 led-ladderprojecten, zonder verandering, maar zal een beperkte functionaliteit hebben.

Menubediening

Bij het opstarten is er een gezondheidscontrole in de vorm van een zwaai over de LED's en een reeks pieptonen. Daarna gaat het naar de hoofdmenumodus. Elke set LED's van één kleur brandt een paar seconden achter elkaar. Een spel wordt geselecteerd door op een knop te drukken terwijl een bijbehorende set brandt, spel 1: Rood, spel 2: Geel, spel 3: Groen, spel 4: Blauw. In de menumodus kunnen Btn2, Btn3, Btn4 worden ingedrukt om rechtstreeks naar respectievelijk games 2, 3, 4 te gaan. Nadat een spel is geselecteerd, moet u de gewenste variant aangeven. Voor elke beschikbare variatie knippert een set gekleurde leds. Druk gewoon op een knop op degene die je wilt. De variaties, "versies", voor elk spel worden hieronder verder beschreven.

Versie één van alle vier de spellen kan met een enkele knop worden gespeeld. Ofwel een bedraad tussen PB4 en aarde (Btn-0) zoals in eerdere LED-ladder-instructables, of met een schakelaar die een 75k-belasting verbindt met aarde (Btn-1). Elk van deze zal het doen in games wanneer de instructies spreken van een niet-specifieke druk op de knop.

Om een spel af te sluiten, kunt u FncKey+Btn1 gebruiken, EscKey (ook bekend als: Btn0) 1-2 seconden ingedrukt houden of de stroom uitzetten.

Stap 6: Gameplay

Spel 1: Push-It

Dit is een aanpassing van mijn 'Push-It'-spel van een van mijn eerdere instructables

www.instructables.com/id/Play-a-Game-with-a…

Het doel van het spel is om het aantal knipperingen en het aantal brandende LED's naar zoveel mogelijk te duwen. Push-It begint met een aantal flitsen, die zich dan herhalen. Als u op de knop drukt na de laatste flits in de reeks en wanneer er mogelijk een extra flits zou bestaan, gaat de volgende LED branden en wordt het aantal flitsen met één verhoogd. Maar als u voor of na de tijdsperiode van een eventuele extra flits 'drukt', wordt het aantal flitsen in de set verminderd.

Elke keer dat het je lukt om het aantal flitsen te verhogen, wordt de moeilijkheidsgraad verhoogd naarmate de timing iets versnelt, waardoor het steeds moeilijker wordt om een hoger aantal flitsen te krijgen.

Het huidige telnummer wordt opgeslagen in het EEPROM-geheugen om later op hetzelfde niveau opnieuw te starten.

Spel 2: Pingpong

Geweldig (hoewel het enige) competitieve spel voor twee spelers hierin; waarbij de bal (enkele lichtflits) van de ene naar de andere kant gaat, sneller en sneller, elke keer dat hij terug wordt 'geslagen'.

Ik heb dit spel met enkele rij lichten voor het eerst geïmplementeerd op de knoplampjes op het voorpaneel van een super-minicomputer in de ruimtevaart in de jaren zeventig.

Om de bal heen en weer te slaan, moet de betreffende peddel hem raken (knop ingedrukt) wanneer deze zich in de eindpositie bevindt (laatste LED). De eerste kant die mist, verliest en de lampjes aan de winnende kant knipperen.

Er zijn twee varianten, waarvan er één slechts één knop nodig heeft (Btn 0 of 1), die de bal aan beide uiteinden zal raken; en een tweede versie, is voor twee personen tegen elkaar, waarvoor twee knoppen nodig zijn; knop 1 aan de linkerkant en knop 4 of 0 aan de andere kant. Het gebruik van Knop 1 & 4 heeft de voorkeur, omdat ze elkaar niet hinderen; elk kan worden geraakt om de bal van het einde terug te sturen, ongeacht de status van de andere knop.

De winnaar van een rally is altijd de serveerder voor de volgende.

Spel 3: Schietgalerij

Schiet op alle doelen (lichten) om een level te voltooien. In elk hoger niveau is de actie sneller.

Er zijn twee versies; een waar de locatie vast is en de doelen bewegen en een andere waar de locatie beweegt en de doelen stil zijn. In elk geval schakelt een treffer een doellicht uit; en een misser zorgt ervoor dat een doelwit opduikt. Wanneer een doel in zicht is, licht het vizier feller op, anders is het zwak.

In versie één begint het vizier links (onder) en scant het naar rechts. In versie 2 is het vizier in het midden gefixeerd terwijl het doelwit van rechts naar links beweegt. Door naar de code te kijken zijn er spookachtige versies 3&4 die kunnen worden geactiveerd, maar u zet uw eigen welzijn op eigen risico.

Spel 4: JumpMan

Het idee is dat je door een spelniveau rent waar objecten langskomen waar je overheen moet springen, naarmate je verder komt, komen ze sneller. In een andere spelversie zijn er ook objecten boven het hoofd waar je onderdoor moet duiken.

In versie één zijn er alleen objecten om over te springen. Om te springen moet je op de knop drukken wanneer het object de laatste cel aan de linkerkant bereikt; die oplicht wanneer dit gebeurt. Om 2 of meer opeenvolgende objecten te springen, moet je op de eerste springen (indrukken) en de knop ingedrukt houden voor de rest.

In versie 2 zijn bovengrondse (knipperende) objecten toegevoegd. Die worden gesprongen door 'tijdens de cel ervoor te springen en los te laten terwijl deze zich in de eindcel bevindt'. Slechts één overhead kan tegelijk flitsen, dus als er een voorbij is, ziet u mogelijk een andere (niet eerder flitsend) op u af. Er zullen nooit opeenvolgende overheadkosten zijn, maar ze kunnen grenzen aan een of meer sprongobjecten (type rotsblok).

In spelversie 3 moet je een aparte knop gebruiken voor de bovenliggende objecten (Btn-2, 4 of 0 naar keuze); sprongen vereisen dan Btn-1.

Als je eenmaal meer dan vier object(en) hebt gepasseerd dan je hebt gefaald, ga je verder in niveau; er is een audio- en visuele felicitatie, daarna een hervatting met een hogere snelheid. Het passeren van een reeks opeenvolgende objecten telt hetzelfde als één individueel object.

Ik raad je aan om de spelregels over games uit te printen en opnieuw te lezen voordat je een game speelt die je niet recentelijk hebt gespeeld. Anders kun je jezelf frustreren; denken dat de game niet goed werkt, terwijl dat wel zo is, maar jij en de game hebben verschillende manieren en verwachtingen. Ik ben er zelf meer dan een paar keer in gevallen.

Stap 7: Updates, meer games

Image
Image

Ik heb een 3D-geprinte consolebehuizing gemaakt om het In-Line LED-ladderdisplay en de knoppen te huisvesten.

Ik heb meer games bedacht die deze hardware gebruiken. Bekijk ze en veel plezier:

Nieuwe games van 'Whack a Mole' tot 'Tug of War'

Dec. 2016. Nu, aan het einde van de bovenstaande link, is er een uniforme versie van de code, inclusief alle 12 spellen.

17 februari 2017: Hier is de nieuwste gameset voor dit project, nu met 16 games (schets hieronder). Dit werkt op elke MCU-implementatie met 32 KByte flash-programmageheugen. Maar een tot 3 of 4 van de 16 spellen kan in een ATtiny worden gestopt. Ik raad aan om de Nano 3 arduino's te gebruiken. De laatste 4 games die zijn toegevoegd zijn 'Le Mans' racen, 'Spray' head-to-head spraypainting wedstrijd., 'PIG' basketbalring schieten, 'BiFunc' een binaire operatie quiz game.

Met meer en diverser spelen van deze spellen, is hun speelvermogen verbeterd en is plezier voor spelers van elk niveau mogelijk. Ik denk dat er veel ruimte is voor verbetering in Le Mans-races via het ontwerp van de baanlay-out en de timing van de games.

Ik heb, schreef ik, nog ongeveer 10 activiteiten/games/functies, waarvan ik sommige rond de herfst van 2017 beschikbaar hoop te maken.

Ook kunnen deze eenregelige spellen worden aangepast voor een 2 regel 2x16 LCD-scherm, met een regel spelobjecten en een andere voor wat tekst. Ik heb dit een beetje gedaan, maar aangezien ik, voor zover ik kan zien, wordt ondersteund met projecten, weet ik niet wanneer en of ik er aan toe zal komen. Dus als iemand gemotiveerd is om deze spellen te adopteren en te optimaliseren voor een 2x16 LCD, deel het dan met mij en anderen.

Naast de 4 nieuwe games hier in Menu_16Games.ino, heb ik mijn project bijgevoegd en gerelateerde instructables gemaakt: Inline LED-gameconsole Behuizing en voeding voor uw draagbare MCU-project

Ik hoop dat velen de tijd nemen en… GENIET van deze spellen.

Groepsspel: 1– Rood 2- Geel 3 – Groen 4 – Blauw

1 rode PushIt PingPong ShootEmUp JumpMan 2 Yel QuickDraw Tug_a_War Chicken Hot_Hands 3 Grn Le_Mans Spray PIG BiFunc 4 Blu SimonSays Whack_Mole Sea_Hunt Flip_d

2 sep. 2017: Verbeterde werkbaarheid met oude vuile, luidruchtige externe joystickknoppen, in head-head-game (groep 2).

13 dec. 2017: Verbeterde afhandeling van knopbounce en meetafwikkeling, kleine problemen opgelost. Ik had geprobeerd een condensator op de analoge ingangslijn van de knop te gebruiken, maar om effectief te zijn, resulteerde dit in langzame meetafwikkeling die valse niveau-identificaties produceerde of dat de software zo lang wachtte dat snelle spelactie in het gedrang kwam.

Apr 2018: Ik heb ontdekt dat 5/8" compressiekoppelingen geweldige lichamen zijn voor externe plunjerachtige knoppen. Omdat mijn kinderen graag een paar hiervan gebruiken, heb ik header-pinnen toegevoegd om er gemakkelijk twee te kunnen verbinden (zoals Btn1 & Btn4).

Merk op dat ik afgelopen oktober een ander project heb gemaakt dat is gebouwd op de hardware van deze instructable. Het is in de geest van Halloween en kan heel leuk zijn, vooral voor de kinderen. Instructable: door spookachtige psyche beïnvloede apparaten

Aanbevolen: