Inhoudsopgave:

Portal 2 Turret - Master Turret Control - Ajarnpa
Portal 2 Turret - Master Turret Control - Ajarnpa

Video: Portal 2 Turret - Master Turret Control - Ajarnpa

Video: Portal 2 Turret - Master Turret Control - Ajarnpa
Video: [Portal 2] How to Break the Assembly Line in Turret Control Center 2024, Juli-
Anonim
Image
Image

Dit project is een uitbreiding of remix van mijn originele Portal Turret op Instructables (Portal-2-Turret-Gun). Het kan ook worden gebruikt als een goedkope controller om alles te besturen dat de nRF24L01-radiochip gebruikt. Het LCD-scherm is vooral handig bij het aanpassen.

(Het blijkt heel handig te zijn om te controleren wanneer mijn radio's verbindingen tot stand brengen en verliezen met andere nRF24L01's op het "netwerk". Ik kan rondlopen en kijken hoe het scherm de verbindingsstatus van de radio's toont! Heel handig om instellingen aan te passen en te verifiëren bereik!)

Nadat ik de Portal Turret had voltooid, zag ik een korte videoclip van de Cara Mia-operascène aan het einde van Portal 2. Ik dacht: "Hé, ik heb nu een paar torentjes gebouwd. Ik kan dat doen!" Nou, ik had de torentjes, maar om het te laten werken, moesten ze nu met elkaar of met een ander apparaat communiceren. Na er even over nagedacht te hebben en te denken dat handmatige bediening ook cool zou zijn, besloot ik uiteindelijk dat ik een Master Turret Controller of een MTC zou bouwen.

Oké, dus hoe ga je hiermee om? Nou, ik had geen zin om de torentjes te veel aan te passen, dus dat was een beperking. Ik had een aantal nRF24L01-radiochips die ik nog niet had gebruikt, en dacht dat dat zou passen bij mijn doel om goedkope componenten te gebruiken en te vertrouwen op mechanisch ontwerp en code om dit te laten werken. Ik zou een controller moeten bouwen en gaan nadenken over wat de controller zou bevatten en wat ik precies met de torentjes zou kunnen doen. Cara Mia stond al op de agenda, maar wat nog meer?

Handmatige bediening: Dus als de vleugels eenmaal open zijn, wil ik de toonhoogte en het draaipunt regelen. 2 assen = een joystick, dus joystickbesturing en wat drukknoppen. Drukknop 1 zou de toren afvuren, en misschien zou drukknop 2 een van zijn uitspraken doen zeggen. Klinkt goed! Simpel genoeg…

Chat: Ik zag onlangs de "Who's on First" - Abbott en Costello-routine opnieuw, en er ging een lampje af in mijn hoofd! Ik zou ook een sketchcomedy-routine maken met alle uitspraken en meerdere torentjes !! Ok, deze was niet helemaal uitgedacht, maar ik weet zeker dat ik het zou regelen zodra mijn build aan de gang was.

Ik wilde ook dat deze MTC draadloos zou zijn, dus ik koos voor een eenvoudige 9V batterijgevoede optie en ontwierp de controller om te worden gevoed door de mini-USB-stekker via de Nano aan de achterkant. Ook handig om te updaten.

Stap 1: Het opnemen van de radio in de torentjes

Ik heb de radio eerst laten werken met een paar kale Nano's, om er zeker van te zijn dat ik hem kon laten werken en informatie tussen meerdere apparaten kon verzenden. Toen dat eenmaal was gebeurd, was het een kwestie van de radio in de bestaande torentjes in te bouwen. Hmm, het toevoegen van de fysieke PCB in de turret was vrij eenvoudig. Ik heb zojuist de chiphouder aangepast met de nRF24L01, de Nano en de mp3-chip. OK. Een fysiek onderdeel aangepast, met wat bedrading.

De gemodificeerde chiphouder maakt nu al deel uit van de turret-geprinte delen. Ik heb zojuist de niet-radio-optie verwijderd uit de afgedrukte delen in die build. Het maakt niet uit of iemand de niet-radiovariant wil bouwen. Voeg gewoon de nRF24L01-radiochip niet toe.

Stap 2: (Her)bedrading van de torentjes

(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes
(Her)bedrading van de torentjes

Oh Oh…

Dit zag er niet goed uit. Ik moest 5 verbindingen aan de Nano toevoegen en ik had al weinig beschikbare pinnen. Na hier een tijdje naar te hebben gekeken, realiseerde ik me welke verbindingen voorrang hadden en herkende ik dat om dit te laten werken, ik de meeste van de bestaande Nano-verbindingen opnieuw zou moeten toewijzen.

Aan degenen die een "Radio Turret" willen maken en de vorige generatie al hebben gebouwd … Sorry …

Nu heb ik deze verandering een paar keer gedaan en het blijkt dat het proces niet al te slecht is. Het houdt wel in dat ik weer naar binnen moet, maar ik kon de bestaande verbindingen met de Nano ongedaan maken en vervolgens zonder al te veel verdriet opnieuw verbinding maken met de juiste pinnen. Ik heb de 7 draden voor de radiochip toegevoegd aan de nRF24L01 (5 commdraden, 3v en GND), en verbond vervolgens de andere uiteinden met de Nano.

Er zitten nu echter meer draden in, dus het is veel belangrijker om alles netjes te houden bij het routeren van de draden.

BELANGRIJK: Zorg er bij het monteren voor dat de draden niet op de Nano-resetknop op het bord drukken!! Dat overkwam me op een en gooide me voor een onnodige lus!

Dus de turret-build heeft nu 2 bedradingsschema's: de oude legacy "niet-radio" -optie en de herziene "radio-turret" -optie. Als ik vandaag een "niet-radio" torentje zou bouwen, zou ik nog steeds het radioschema en de code gebruiken. Verwijder of becommentarieer de radiogedeelten gewoon als dat de gekozen route is of niet. De toren zou nog steeds op zichzelf moeten werken zonder de radio.

Stap 3: MTC elektrische componenten

MTC elektrische componenten
MTC elektrische componenten
MTC elektrische componenten
MTC elektrische componenten
MTC elektrische componenten
MTC elektrische componenten

Nadat de torentjes waren uitgezocht, was het tijd om een MTC te maken.

De MTC gebruikt de volgende componenten, allemaal afkomstig van Amazon of Baggood of Ali Express, enz. Ik laat de Amazon-onderdeelnummers zien waarnaar ik ter referentie heb verwezen, aangezien deze items algemeen verkrijgbaar en redelijk geprijsd zijn (en ik hoefde niet naar wacht 2+ weken om te bemachtigen wat ik nodig had voordat ik aan het mechanische ontwerp kon beginnen!)

  • Arduino Nano 0,96” LCD, (SSD1306) Ik gebruikte de blauw/gele versie
  • Kleine joystick (HW-504) 5V PS-joystickmodule
  • Tuimelschakelaar (dx-004) 22mm * 13mm
  • Radio - (nRF24L01)
  • 12 mm drukknoppen (CLT1088 voor gekleurde knoppen, PBS-33B voor zwart)
  • 2 mm schroeven (M2 Zelftappende Schroeven Set, Cross Drive Pan Head assortiment)
  • 5mm LED's naar keuze voor knipperlichten. (Gebruik geen felle LED's!!)
  • Generieke 9V batterijconnector met staartjes
  • 9V-batterij (gebruik een goede, niet een van de dollarwinkelvarianten die niet altijd genoeg stroom kunnen leveren voor deze projecten!)
  • Ik gebruikte siliconen omhulde draad. Ik gebruik het graag voor deze projecten.

Ik gebruikte oorspronkelijk een aantal heldere LED's, maar vond ze te goed. Ze verblindden me! Ik heb uiteindelijk wat oude, zwakke LED's gebruikt, en dat was logischer voor deze toepassing.

Stap 4: 3D-geprinte onderdelen

3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen

Ik heb de MTC ontworpen met Fusion, vergelijkbaar met de manier waarop ik het torentje heb ontworpen.

De gedrukte montage vereist slechts 3 onderdelen:

  • Bovenpaneel (versie 1 of 2)
  • Bodembehuizing
  • LCD-riem

De nRF-chip, de Nano, de 9V-batterij, de tuimelschakelaar en de LED's zijn zonder bevestigingsmiddelen in de bovenplaat geïnstalleerd. De LED's drukken gewoon in de plaat en worden op hun plaats gehouden door lipjes. Ze moeten gewoon ingrijpen, maar overdrijf het niet. De bovenplaat is ontworpen om de Nano vast te klikken en de nRF-chip moet er voorzichtig in gaan. Voorzichtig met het kleine nRF-tabblad; het is klein en wordt naar achteren gebogen om te openen en losgelaten om de chip vast te leggen. Ook al is het reizen beperkt, wees hier voorzichtig.

De joystick en het LCD-scherm hebben schroeven van 2 mm (5 mm lang) nodig om ze op de bovenplaat te bevestigen. De joystick-PCB heeft grote gaten, dus ik vond dat ik kleine ringen nodig had om ervoor te zorgen dat de schroeven er niet doorheen kwamen.

Ik heb gemerkt dat de PCB's waarop de LCD's komen, qua afmetingen enigszins verschillen van fabrikant tot fabrikant, dus ik heb ervoor gekozen om een eenvoudige riem te gebruiken om hem op zijn plaats te houden in plaats van schoenplaatjes of haken.

Merk op dat het LCD-scherm op beide manieren fysiek in de bovenplaat kan worden geïnstalleerd, maar het display wordt slechts in één richting volledig door de opening weergegeven! Om deze reden heb ik een 2e bovenplaatoptie toegevoegd bij gebruik van het gesplitste geel/blauwe scherm. De ene versie heeft het geel aan de bovenkant en de andere toont het geel aan de onderkant, zoals weergegeven in mijn foto's.

Voor het LCD-scherm met één kleur maakt het niet uit welke wordt gebruikt, omdat u het scherm softwarematig kunt omdraaien.

Aangezien alle bedrading op de bovenplaat wordt gedaan, is de bodem in feite slechts een deksel dat met langere schroeven van 2 mm (aantal: 4) op de bovenplaat wordt vastgehouden.

In plaats van een "batterijdeur" -optie, heb ik de batterij gewoon in de bovenplaat verwerkt. Dit betekent het verwijderen van de 4 schroeven die de onderkant naar de bovenkant houden om een batterij te vervangen, maar aangezien het ook kan worden gevoed via een USB-kabel, niet het einde van de wereld. De bovenplaat is gemaakt met een 9V batterijhoudersysteem dat stevig genoeg moet zijn voor herhaald gebruik, niet al te ingewikkeld is, maar voorkomt dat de batterij beweegt.

Ik heb de bovenplaat in 2 kleuren afgedrukt zoals te zien is op de foto's. Ik gebruik een Prusa i3 Mk2 zonder de meerkleurenoptie, maar gebruik hun kleurenafdruktool (https://www.prusaprinters.org/color-print/) om halverwege het proces van kleur te veranderen. Controleer de laag waarop de tekst stopt en vast wordt, en maak dat de overgangslaag. Voila! Gekleurde tekst!

Ik heb de delen op een laaghoogte van 0,35 mm afgedrukt, omdat er geen fijnere resolutie nodig is op deze vlakke delen. Ik geef ook de voorkeur aan de manier waarop het eruit ziet bij deze resolutie. Oh, en het print ook vrij snel!

Stap 5: Elektrische montage

Elektrische montage
Elektrische montage
Elektrische montage
Elektrische montage
Elektrische montage
Elektrische montage
Elektrische montage
Elektrische montage

De elektrische componenten zijn allemaal aan de onderkant van de bovenplaat geïnstalleerd en alle bedrading wordt samen gedaan. Drukknoppen en schakelaar moeten eerst worden geïnstalleerd en de LCD, Nano, Joystick en nRF-radio kunnen allemaal worden voorbedraad voordat ze in de bovenplaat worden geïnstalleerd. Ik raad deze methode aan om de afzonderlijke componenten vooraf te bedraden en aan het einde de laatste verbindingen met de Nano te maken. Ik raad ook aan om de schets eerst naar een kale Nano te uploaden, voordat je de bedrading voltooit.

Er is niets bevredigender dan het apparaat aan te zetten en te zien hoe het tot leven komt zoals verwacht als het klaar is!

De enige voorbereiding van het elektrische onderdeel dat nodig was, was het verwijderen van de koppennen van de joystick om deze onder de bovenplaat te laten passen. Het LCD-scherm kan met of zonder geïnstalleerde pinnen worden gekocht en werkt in beide richtingen. De Nano moet worden geselecteerd zonder header-pinnen.

Stap 6: Coderen

Code voor MTC, Red turret, White Turret en Blue Turret nu beschikbaar

Nou, dit was een ervaring in coderen! Ik had de toren zelfstandig werkend, maar het inbouwen van de radio was moeilijker dan ik aanvankelijk dacht! Ik had ook wat plezier om het gedeelte 'Chat' naar wens te laten werken (daarover later meer).

De MTC-code, eenmaal volledig uitgedacht, begon de geheugenlimieten van de Nano te belasten! Ik moest aanpassingen maken en de code bezuinigen om meer geheugenefficiënt te zijn. Weer een goede leerervaring.

Ik heb de bijbehorende code "Turret w radio option" in deze build opgenomen, omdat ze samenwerken. Door de radio-optie turret te bouwen volgens de Turret-buildpagina, is deze klaar voor gebruik met de MTC of voor uw andere nRF24L01-besturingsmethode.

Het kostte ook wat tijd om de geluiden met deze code te laten werken, en aangezien de geluiden van andere openbaar toegankelijke websites zijn gehaald, heb ik alle geluiden zoals ik ze in een paar ZIP-bestanden heb gebruikt, opgenomen; één voor de reguliere toren en één voor Defecte toren. Het goede voor jou, beste lezer, is dat je de geluiden op je SD-kaarten kunt gebruiken met de codes zoals geschreven en je bent klaar om te gaan!

Stap 7: MTC-menu - navigatie

MTC-menu - Navigatie
MTC-menu - Navigatie
MTC-menu - Navigatie
MTC-menu - Navigatie
MTC-menu - Navigatie
MTC-menu - Navigatie

De MTC-code start met een aangepast Splash-scherm en controleert vervolgens de status van de torentjes. Als er geen torentjes aanwezig zijn, zal het daar gewoon blijven zitten totdat de torentjes verbinding maken!

Als er minimaal één turret is aangesloten, wordt het hoofdmenu weergegeven en gaat de LED "Ready" branden, tenzij de turrets worden onderbroken of bezig zijn "met iemand af te rekenen". Als ze bezet zijn, wordt een "Turrets are Busy-scherm" weergegeven en gaat de LED "Busy" branden.

Alle actief aangesloten turrets moeten in de "Ready Mode" staan voordat de MTC de turrets kan besturen.

Gebruik de joystick (omhoog en omlaag) om door de menukeuzes te bladeren:

  • Aria
  • Chatten
  • Handmatig

Selecteer de gewenste optie met de ‘X’-knop of door op de joystick te drukken.

Aria-modus - als u deze optie selecteert, wordt het scherm "Aria-modus" weergegeven en laten de torentjes de Aria-scène uitvoeren aan het einde van de Portal 2-game. Eenmaal voltooid, zullen de torentjes sluiten en wachten op een commando of iemand om ze wakker te maken.

Chatmodus - Als u deze optie selecteert, wordt het scherm "Chatmodus" weergegeven en wordt de chatreeks gestart. Eenmaal voltooid, zullen de torentjes sluiten en wachten op een commando of iemand om ze wakker te maken.

Handmatige modus - Als u deze optie selecteert, wordt het scherm "Handmatige modus" weergegeven, gaat de LED "Handmatige" branden en is handmatige bediening van de torentjes mogelijk. Joystickbediening van pitch en pivot. Door op de 'X'-knop te drukken, wordt de schietvolgorde geactiveerd. Door op de 'T'-knop te drukken, zullen ze "praten", waarbij de torentjes een willekeurig gezegde uit hun bibliotheek spreken.

Door op de knop '<' of terug te drukken, worden deze drie modi geannuleerd, worden de torentjes gesloten en keert u terug naar het hoofdmenu.

Als je de verbindingsstatus van je zwerm torentjes (momenteel beperkt tot 3) wilt zien, druk je in het hoofdmenu op de 'T'-knop. U wordt naar het scherm "torenstatus" geleid, waar u de verbindingsstatus van elke toren kunt zien.

In het scherm "torenstatus" ziet u de status van elke toren.

  • Klaar - klaar voor controle
  • Bezet - torentje is bezig met het "verzorgen" van iemand
  • Niet beschikbaar - MTC kan geen verbinding maken met deze toren

Druk op de knop '<' om terug te keren naar het hoofdmenu.

Stap 8: De code aanpassen

De code aanpassen
De code aanpassen

De hier getoonde schermafbeelding laat zien waar ik veel te lang naar staarde … 4 schetsen tegelijk! Wie zei dat debuggen niet leuk is!

De code biedt de hierboven getoonde controle en opties, maar hoe zit het met het aanpassen van de code?

Natuurlijk! Maar er gebeurt hier behoorlijk wat, dus hier zijn enkele richtlijnen of tips.

Tip1 - De "Chat"-volgorde wijzigen. Deze wijziging vindt plaats in de turret-code.

Ik probeerde een manier te bedenken om de code voor mij te laten werken waar ik maar kon. De chatreeks beter bewerkbaar maken (is dat een woord?) zodat ik me op het verhaal kon concentreren, kostte meer werk vooraf, maar maakt het later gemakkelijker om aan te passen.

Het wijzigen van de Chat-volgorde met behulp van de verstrekte coderingsstructuur kan op een vrij eenvoudige manier worden gedaan, op voorwaarde dat u de methode volgt die in de code wordt gebruikt. Met behulp van de meegeleverde geluidsbestanden van het Portal 2-spel hoeft u alleen de (chatSayings)-tabel te wijzigen.

Selecteer het gezegde voor de gewone toren of de defecte toren. Het gezegde is het mp3-bestand dat wordt geïdentificeerd door "00XX -", gevolgd door tekst die het gezegde beschrijft. Het is het nummer dat het belangrijkste is. Turret # 1 zou deze XX-waarde in de tabel gebruiken. Torentje # 2 zou de XX-waarde voorafgaan met een '1', en torentje # 3 zou de XX-waarde voorafgaan met een '2'. Dus als u bijvoorbeeld het gezegde "0040 - sorry"-expressie selecteert en torentje # 3 wilt zeggen, zou u "240" in de juiste volgorde in de tabel invoegen. Als torentje # 1 het zou zeggen, zou je "40" in de tabel invoegen.

Doe hetzelfde voor de volgende uitdrukking, enzovoort. Het kunnen een paar uitdrukkingen tussen de torentjes zijn, of nogal wat. (Ik ben me niet bewust van de beperkingen van deze methode, behalve het geheugen).

U hoeft de waarden van de andere tabellen niet te wijzigen, aangezien dit de tijden zijn die overeenkomen met het gezegde in de tabel. De enige andere lijn om te veranderen is rond lijn 520.

if (i >= 43) { // einde van reeks

De waarde van i hier zou moeten worden ingesteld op het aantal uitspraken in de chatSayings-tabel.

Om volledig aangepaste uitspraken te maken (waar het echte plezier begint!), moet u de uitdrukkingen in genummerde bestanden instellen en weten hoe lang het duurt om het bestand af te spelen. Sla het bestand op in de map "mp3" in de hoofdmap van de SD-kaart met behulp van de viercijferige methode ("0001", "0002", enz.). Log vervolgens de tijd in milliseconden in die nodig is om dat bestand af te spelen. Vul deze waarden in de juiste tabel in.

Dus voor een uitdrukking die is opgeslagen als "0037 - [uw uitdrukking]", die 5400 milliseconden nodig heeft om te spelen, zou u '37' in de chatSayings-tabel op de juiste locatie plaatsen (en het voorvoegsel toevoegen, afhankelijk van welk torentje zegt it), en 5400 in de NormaTimings-tabel op dezelfde locatie (zoals het 5e item in elke tabel).

Wanneer de waarde van 'i' nu wordt verhoogd, speelt de code 0037 gedurende 5400 milliseconden.

Merk op dat ik een "timeadder" -variabele heb toegevoegd die een beetje extra tijd toevoegt aan elk gezegde tijdens het spelen. Dit geeft een beetje afstand tussen uitspraken, zodat ze elkaar niet lijken te overlappen.

Het mooie van deze methode is dat de voltooide tabellen in elk torentje exact hetzelfde zijn! Het is niet nodig om deze tabellen voor elke toren aan te passen. U hoeft maar één tabel uit te zoeken en de code berekent wat elk torentje zegt op basis van dezelfde tabel.

Dit betekent dat u zich kunt concentreren op het schrijven van scripts in plaats van coderen!

Als iemand een betere manier heeft om dit te doen, hoor ik het graag!!

Stap 9: Samenvatting

Samenvatting
Samenvatting

Dit kostte dus meer tijd dan ik dacht, maar het resultaat irriteert me nogal. Sommige Chat-routines maken me nog steeds aan het lachen!

Ik zou graag andere methoden horen om de dingen te doen die ik in mijn code heb gedaan. Ik weet zeker dat er secties zijn die kunnen worden herschreven en minder geheugen gebruiken, waardoor meer functies of opties mogelijk zijn.

Ik zou ook graag zien dat andere ideeën worden verwerkt in de MTC en de besturing van de torentjes!

Ik hoop dat ik andere ontwerpers en programmeurs een platform heb geboden om te gebruiken / te stelen / van te leren. Ik kon zien dat dit werd gebruikt om mensen te helpen leren coderen. Verwijder een sectie uit de MTC en/of turret, zoals bijvoorbeeld "Handmatige modus", en laat leerlingen hun eigen manier ontwikkelen om handmatige besturing toe te passen!

Ik heb veel geleerd van deze community en het bredere web in het algemeen. Ik sta er nog steeds versteld van hoeveel mensen tijd besteden aan het uitzoeken en delen met de wereld. Ik denk dat ik moet nemen wat ik heb geleerd, het toepassen en het dan ook met jou delen!

Veel succes en plezier met het bouwen van je eigen leger van torentjes!

Aanbevolen: