Indholdsfortegnelse:
- Trin 1: Hvad du får brug for
- Trin 2: Bygning: Console Hub, opsætning af skjoldet
- Trin 3: Bygning: Konsolnavet, ledning af skjoldet
- Trin 4: Bygning: controllerne, opsætning af dine dele
- Trin 5: Valgfrit: kabinetter
- Trin 6: Programmering: Arduino
- Trin 7: Programmering: HTML
- Trin 8: Programmering: P5.js og Javascript
- Trin 9: Kør dit program
- Trin 10: Gå videre
Video: Arduino -controllere: 10 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Et Arduino -spilcontrollersystem ved hjælp af Arduino og p5.js -biblioteket. Ideen med dette er at oprette et Arduino -projekt, der let kan replikeres og udvides. Controllerforbindelserne er designet til at udnytte en masse forskellige sensorer og input, der kan udskiftes afhængigt af hver controller.
Dette projekt er også designet til at bruge p5.js JavaScript -biblioteket sammen med p5.play -biblioteket designet til p5.js. Disse biblioteker giver os mulighed for let at programmere vores spil. Webstedet p5.play har en masse tutorials og eksempler, som brugerne kan oprette spil til. Dette projekt giver brugerne mulighed for at øve deres hardware- og softwareudviklingsevner.
Trin 1: Hvad du får brug for
Værktøjer:
- Loddekolbe
- Lodde
- Wire Strippers
- Sidekuttere
- Tang
Hardware:
- Arduino -kompatibelt bord (jeg brugte et Sparkfun Redboard samt en Arduino Uno og Leonardo)
-
Perf Board:
- 8 cm x 6 cm grønne perf boards
- Aduino Uno shield perf board
-
Forskellige sensorer
- Joysticks
- Knapper (med modstande, 10k ohm, til at gå med dem)
- Potentiometre
- Flex sensorer
- Trykfølere
- Etc…
-
Tråd:
- Single Wire (jeg brugte 26 AWG Solid)
- Båndtråd og krymper
- Break Away Headers (mindst 20 af disse)
-
Valgfri hardware (du kan bruge pap og hotlim/lynlåse i stedet):
- Brødbræt og jumperkabler til prototyper
- 3D -trykte kabinetter
- Hardware fastgørelseselementer (jeg brugte M2.5 skruer)
Software:
- Arduino IDE
-
p5.js bibliotek
P5.play bibliotek også
- p5.seriel kontrol
- Node.js
Trin 2: Bygning: Console Hub, opsætning af skjoldet
Lod lodderne til Arduino Uno shield perf board.
- Jeg startede med skjoldhovederne (strøm, analog ind og digital)
- Næste er 2x5 header pins. Du kan bruge 2x5 headers eller bare 2 rækker med 5 break away headers. Jeg lagde disse op med A3 og A4 lodret, og efterlod 2 mellemrum imellem dem.
Trin 3: Bygning: Konsolnavet, ledning af skjoldet
Dernæst vil vi føre vores ledninger på skjoldet. Det er lettere at føre ledningerne på toppen, men hvis du vil have et renere udseende, kan du køre dem på bunden.
Du vil være opmærksom på skematikken (Eagle -skematikken kan downloades), når du leder disse ledninger. Du kan også se på farveguiden for at hjælpe dig med dette.
Ideen med dette skjolddesign er at tillade 3 analoge indgange og 5 digitale indgange fra hver controller. Dette udnytter fuldt ud alle de analoge indgange på en Arduino Uno samt de resterende ledninger på vores båndkabel.
Trin 4: Bygning: controllerne, opsætning af dine dele
Det første trin til at bygge din controller er at planlægge, hvilke sensorer der skal bruges. I mine eksempler har jeg en temmelig standard controller med et joystick og et par knapper. Jeg har også en controller med to skyderpotentiometre.
Hvis du vil gentage dette, kan du se mine billeder til placering.
Det næste trin er at lodde dit båndkabel til perf bordet.
- Striml og tynd båndkablet
- Lod lod båndkablet til toppen af midten af dit perf bord.
Det næste trin er at føre dine ledninger. Jeg startede med først at koble strømmen (5V/rød ledning) og jorden (brun ledning) til sensorerne først. Jeg tilsluttede derefter de analoge indgange. Jeg fandt det let at bruge det orange kabel (Analog A0 eller A3) til vandret bevægelse og det gule kabel (Analog A1 eller A4) til lodret bevægelse.
For at holde tingene konsekvente, har jeg også tilsluttet en lille trykknap til lilla på alle mine controllere. Dette er nyttigt til ting som f.eks. Lukning af den serielle port (jeg vil gå over dette senere) samt menuer eller muligheder.
Jeg har uploadet en hurtig skematisk oversigt over min joystick -controller, hvis du gerne vil kigge på dette. Fra vores pin-out diagram kan du se muligheden for hver controllerforbindelse (3 analoge indgange og 5 digitale).
Trin 5: Valgfrit: kabinetter
Dette trin er valgfrit, men hvis du har adgang til en 3D -printer, vil resultatet af dit projekt se lidt mere raffineret og færdigt ud. Som du kan se i mine prototyper, brugte jeg et enkelt stykke karton til at forhindre loddemetalleddene på bunden af perfbrædderne i at stikke fingre.
Du kan finde mine 3D -modeller knyttet til dette trin. Jeg har oprettet kabinetter til hub'en til både Arduino Uno/Leonardo og Sparkfun RedBoard (dette kort er lidt bredere og bruger mini USB).
For controllerne kan du fastgøre disse med M2.5 -skruer. Jeg beholdt møtrikken på siden af printkortet og bruger en skive og skruen i bunden.
Jeg har også inkluderet 3D -modellen til knapskyderne til de potentiometre, jeg brugte.
Du kan finde alle 3D -filer på GitHub.
Trin 6: Programmering: Arduino
Lad os starte med at oprette en simpel skitse til test. Jeg foreslår, at du bruger den tutorial, der er oprettet af ITP på NYU, der findes her. For at lave denne vejledning skal du have p5.serialcontroll og node.js installeret. I denne vejledning bliver du introduceret til at oprette en Arduino til at sende serielle data, der kan bruges af vores javascript -bibliotek, p5.js. Du kan bruge den hub og controller, vi har oprettet i de foregående trin, til at gøre dette, eller du kan replikere kredsløbene, der er demonstreret i selvstudiet. Denne vejledning bruger den analoge A0 -indgangsstift A0 på Arduino Uno, som er knyttet til den orange ledning på din første controller.
Den næste vejledning, du vil følge, kan findes her. Denne vejledning guider dig gennem opsætning af flere input og brug af dem i p5.js. I selvstudiet bruges de analoge indgange A0 og A1. Disse svarer til de orange og gule ledninger på controller 1 i vores system.
Når du har gennemgået selvstudierne ovenfor, kan vi programmere Arduino. Koden, vi vil bruge, er herunder:
// controller 1const int dig2 = 2; // blå const int dig3 = 3; // lilla const int dig4 = 4; // grå const int dig5 = 5; // hvid const int dig6 = 6; // sort // controller 2 const int dig7 = 7; // blå const int dig8 = 8; // lilla const int dig9 = 9; // grå const int dig10 = 10; // hvid const int dig11 = 11; //sort
ugyldig opsætning () {
Serial.begin (9600); mens (Serial.available () <= 0) {Serial.println ("hej"); // sende en startbeskedforsinkelse (300); // vent 1/3 sekund} pinMode (dig2, INPUT); pinMode (dig3, INPUT); pinMode (dig4, INPUT); pinMode (dig5, INPUT); pinMode (dig6, INPUT); pinMode (dig7, INPUT); pinMode (dig8, INPUT); pinMode (dig9, INPUT); pinMode (dig10, INPUT); pinMode (dig11, INPUT); }
void loop () {
hvis (Serial.available ()> 0) {// læs den indgående byte: int inByte = Serial.read (); // læs sensoren:
// ANALOG Controller 1
int analog0 = analogRead (A0); int analog1 = analogRead (A1); int analog2 = analogRead (A2); // ANALOG Controller 2 int analog3 = analogRead (A3); int analog4 = analogRead (A4); int analog5 = analogRead (A5); // DIGITAL Controller 1 int digital2 = digitalRead (dig2); int digital3 = digitalRead (dig3); int digital4 = digitalRead (dig4);
int digital5 = digitalRead (dig5);
int digital6 = digitalRead (dig6); // DIGITAL Controller 2 int digital7 = digitalRead (dig7); int digital8 = digitalRead (dig8); int digital9 = digitalRead (dig9); int digital10 = digitalRead (dig10); int digital11 = digitalRead (dig11); // udskriv resultaterne: Serial.print (analog0); // [0] Serial.print (","); Serial.print (analog1); // [1] Serial.print (","); Serial.print (analog2); // [2] Serial.print (","); // Start Controller 2 data Serial.print (analog3); // [3] Serial.print (","); Serial.print (analog4); // [4] Serial.print (","); Serial.print (analog5); // [5] Serial.print (","); Serial.print (digital2); // [6] Serial.print (","); Serial.print (digital3); // [7] Serial.print (","); Serial.print (digital4); // [8] Serial.print (","); Serial.print (digital5); // [9] Serial.print (","); Serial.print (digital6); // [10] Serial.print (","); // Start controller 2 data Serial.print (digital7); // [11] Serial.print (","); Serial.print (digital8); // [12] Serial.print (","); Serial.print (digital9); // [13] Serial.print (","); Serial.println (digital10); // [14] Serial.print (","); Serial.println (digital11); // [15]}}
Denne kode sender de serielle data fra begge vores controllere som en matrix med 16 tal. De første 6 af disse tal er vores analoge indgange (fra 0-1023), og de resterende 10 værdier er vores digitale værdier (0 eller 1).
Når vores kode er uploadet, kan vi teste dette ved at åbne den serielle skærm og indtaste en værdi i vores serielle skærm, som vi gjorde i 2. vejledning fra ITP. Vi bør få en streng af vores værdier adskilt af kommaer.
Trin 7: Programmering: HTML
Når vi har sat vores Arduino op og fungerer, kan vi begynde at programmere vores web -ting. HTML -koden er meget enkel.
krop {polstring: 0; margen: 0;}
HTML -koden forbinder simpelthen vores javascript -filer sammen. Det meste af vores kode vil faktisk ske i vores sketch.js -fil.
Trin 8: Programmering: P5.js og Javascript
Når vi har konfigureret vores HTML, kan vi arbejde på vores JavaScript. Hvis du ikke allerede har gjort det, skal du nu downloade p5.js samt p5.play og tilføje disse til din biblioteksmappe i biblioteket til dit websted.
- p5.js
- s5.spil
I vores tidligere trin konfigurerede vi vores HTML -fil til at kalde vores p5.js- og p5.play -biblioteker. Vi konfigurerede den også til at bruge vores sketch.js -fil, hvor vi vil lave det meste af vores programmering. Nedenfor er koden til vores skelet. Du kan også finde den her.
// Serielle variablervar serielle; // variabel til at holde en forekomst af serialport -biblioteket var portName = 'COM4'; // udfyld dit serielle portnavn // Globale spilvariabler ---------------
// Opsætningsfunktion ----------------------
opsætning af funktioner () {createCanvas (640, 480); seriel = ny p5. SerialPort (); // lav en ny forekomst af serialport -biblioteket serial.on ('list', printList); // indstil en tilbagekaldsfunktion til serielportlistehændelsen serial.on ('tilsluttet', serverforbundet); // tilbagekald til forbindelse til serveren serial.on ('open', portOpen); // tilbagekald til portåbningen serial.on ('data', serialEvent); // tilbagekald til, når der kommer nye data serial.on ('fejl', seriel fejl); // tilbagekald for fejl serial.on ('close', portClose); // tilbagekald til portlukkende serial.list (); // liste de serielle porte serial.open (portnavn); // åbn en seriel port} // Tegnefunktion ----------------------- funktionstegn () {baggrund (0); // sort baggrund} // Fortolk serielle data her ---------- funktion serialEvent () {// læs en streng fra den serielle port // indtil du får vognretur og newline: var inString = serial. readStringUntil ('\ r / n'); // tjek for at se, at der faktisk er en ssetring der: hvis (inString.length> 0) {if (inString! == 'hej') {// hvis du får hej, ignorer det var sensorer = split (inString, ', '); // del strengen på kommaerne hvis (sensorer.længde> 16) {// hvis der er seksten elementer (6 analoge, 10 digitale) // Brug sensordata her:
}
} serial.write ('x'); // send en byte, der anmoder om flere serielle data}} // hent listen over porte: function printList (portList) {// portList er en række serielle portnavne for (var i = 0; i <portList.length; i ++) {// Vis listen konsollen: print (i + "" + portList ); }} funktion serverConnected () {print ('forbundet til server.'); } funktionsportOpen () {print ('den serielle port åbnet.')} funktion serialError (err) {print ('Noget gik galt med den serielle port.' + fejl); } funktionsportLuk () {print ('Den serielle port lukket.'); } funktion closCode () {serial.close (portName); return null; } vindue.onbeforeunload = lukningskode;
Når du har skelettet gemt. Du kan bruge disse værdier på samme måde som det blev gjort i ITP -selvstudiet. Den række værdier, vi sendte fra vores Arduino i trin 6, sendes ind som en matrix med 16 tal. Nedenfor er, hvor vi analyserer dette array.
// Fortolk serielle data her ----------
function serialEvent () {// læs en streng fra den serielle port // indtil du får vognretur og newline: var inString = serial.readStringUntil ('\ r / n'); // tjek for at se, at der faktisk er en ssetring der: hvis (inString.length> 0) {if (inString! == 'hej') {// hvis du får hej, ignorer det var sensorer = split (inString, ', '); // del strengen på kommaerne hvis (sensorer.længde> 16) {// hvis der er seksten elementer (6 analoge, 10 digitale) // Brug sensordata her:}} serial.write ('x'); // Send en byte, der anmoder om flere serielle data}}
Vi kan nu køre vores program for at se, om det virker!
Trin 9: Kør dit program
Vi kan nu køre vores program for at se, om det virker. Du kan enten oprette dit eget spil ved hjælp af skeleton.js -filen i vores tidligere fil, eller du kan bruge det enkle Pipe -spil, der findes her.
Ligesom ITP Lab, for at køre vores program, vil vi følge trinene herunder.
- Tilslut Arduino med den eller de controllere, du planlægger at bruge.
- Åbn p5.serialcontrol
- Skift din p5 -skitses port til den, du bruger (hvis du bruger skelettet, er dette på linje 3)
- Åbn HTML -filen, der linker til din p5 -skitse
Hvis du har eksterne medier som f.eks. Billeder eller downloadede skrifttyper, vil du gerne køre dette på en server. Du kan køre en simpel lokal pythonserver, hvis du vil.
Trin 10: Gå videre
For at gå videre og udvikle flere spil til dette kan du følge forskellige eksempler fra p5.play fundet her. Nedenfor er et eksempel på et mere kompliceret spil, som jeg har oprettet. Det er et 1 vs 1 tank shooter spil. Du kan finde alle ressourcerne til det på GitHub.
Anbefalede:
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: 7 trin (med billeder)
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: Jeg planlægger at bruge denne Rapsberry PI i en masse sjove projekter tilbage i min blog. Tjek det gerne ud. Jeg ville tilbage til at bruge min Raspberry PI, men jeg havde ikke et tastatur eller en mus på min nye placering. Det var et stykke tid siden jeg konfigurerede en hindbær
Arduino Halloween Edition - Pop -out -skærm med zombier (trin med billeder): 6 trin
Arduino Halloween Edition - Zombies Pop -out -skærm (trin med billeder): Vil du skræmme dine venner og lave skrigende støj i Halloween? Eller vil du bare lave en god sjov? Denne pop-out-skærm fra Zombies kan gøre det! I denne Instructable vil jeg lære dig, hvordan du nemt laver jump-out zombier ved hjælp af Arduino. HC-SR0
Shadow Light Box - Styring med IR -fjernbetjening med Arduino: 8 trin (med billeder)
Shadow Light Box - Styring med IR -fjernbetjening med Arduino: Denne instruktion vil guide dig til, hvordan du laver skygge -lysboks til næste jul. Du kan lave det selv til at dekorere dit værelse eller gøre det til din ven som en gave. Denne skyggeæske kan lave forskellige slags farver ved at blande farve med rød, blå, grøn farve
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores