Indholdsfortegnelse:

Arduino -controllere: 10 trin (med billeder)
Arduino -controllere: 10 trin (med billeder)

Video: Arduino -controllere: 10 trin (med billeder)

Video: Arduino -controllere: 10 trin (med billeder)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, November
Anonim
Arduino -controllere
Arduino -controllere
Arduino -controllere
Arduino -controllere

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

Hvad du får brug for
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

Bygning: konsolnavet, opsætning af skjoldet
Bygning: konsolnavet, 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

Bygning: Konsolnavet, ledning af skjoldet
Bygning: Konsolnavet, ledning af skjoldet
Bygning: Konsolnavet, ledning af skjoldet
Bygning: Konsolnavet, ledning af skjoldet
Bygning: Konsolnavet, ledning af skjoldet
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

Bygning: controllerne, opsætning af dine dele
Bygning: controllerne, opsætning af dine dele
Bygning: controllerne, opsætning af dine dele
Bygning: controllerne, opsætning af dine dele
Bygning: controllerne, opsætning af dine dele
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.

  1. Striml og tynd båndkablet
  2. 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

Valgfrit: kabinetter
Valgfrit: kabinetter
Valgfrit: kabinetter
Valgfrit: kabinetter
Valgfrit: kabinetter
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

Programmering: Arduino
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

Kører dit program
Kører 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: