Kazalo:
- Korak: Kaj boste potrebovali
- 2. korak: Izdelava: konzolno vozlišče, nastavitev ščita
- 3. korak: Gradnja: konzolno vozlišče, ožičenje ščita
- 4. korak: Gradnja: krmilniki, nastavitev delov
- 5. korak: Neobvezno: ohišja
- 6. korak: Programiranje: Arduino
- 7. korak: Programiranje: HTML
- 8. korak: Programiranje: P5.js in Javascript
- 9. korak: Zaženite program
- 10. korak: Pojdite dlje
Video: Arduino krmilniki: 10 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Sistem za krmiljenje iger Arduino, ki uporablja Arduino in knjižnico p5.js. Zamisel tega je ustvariti Arduino projekt, ki ga je mogoče enostavno podvojiti in razširiti. Priključki krmilnika so zasnovani tako, da uporabljajo kup različnih senzorjev in vhodov, ki jih je mogoče zamenjati, odvisno od vsakega krmilnika.
Ta projekt je zasnovan tudi za uporabo knjižnice JavaScript p5.js skupaj s knjižnico p5.play, namenjeno p5.js. Te knjižnice nam omogočajo enostavno programiranje iger. Spletno mesto p5.play ima kup vadnic in primerov, ki jih uporabniki lahko ustvarijo zanj. Ta projekt uporabnikom omogoča vadbo veščin razvoja strojne in programske opreme.
Korak: Kaj boste potrebovali
Orodja:
- Spajkalnik
- Spajkanje
- Odstranjevalci žice
- Stranski rezalniki
- Klešče
Strojna oprema:
- Arduino združljiva plošča (uporabljal sem Sparkfun Redboard ter Arduino Uno in Leonardo)
-
Perf tabla:
- 8cm x 6cm zelene perf deske
- Aduino Uno ščit perf plošča
-
Različni senzorji
- Igralne palice
- Gumbi (z upori, 10 k ohmov, z njimi)
- Potenciometri
- Fleksibilni senzorji
- Senzorji tlaka
- Itd…
-
Žica:
- Enojna žica (uporabil sem 26 AWG Solid)
- Tračna žica in stiskalnice
- Odlomljene glave (vsaj 20 od teh)
-
Izbirna strojna oprema (namesto tega lahko uporabite karton in kravate z lepljenjem/zadrgo):
- Ohišje in mostični kabli za izdelavo prototipov
- Ohišja s 3D tiskanjem
- Pritrdilni elementi strojne opreme (uporabil sem vijake M2.5)
Programska oprema:
- Arduino IDE
-
knjižnica p5.js
P5.play knjižnico tudi
- p5.serialcontrol
- Node.js
2. korak: Izdelava: konzolno vozlišče, nastavitev ščita
Spojite glave na ploščo za zaščito Arduino Uno štita.
- Začel sem z glavami ščita (napajanje, analogni vhod in digitalno)
- Naslednji so zatiči za glavo 2x5. Uporabite lahko 2x5 glav ali samo 2 vrstici po 5 odlomljenih glav. Te sem poravnal z A3 in A4 navpično in med njima pustil 2 presledka.
3. korak: Gradnja: konzolno vozlišče, ožičenje ščita
Nato želimo svoje žice usmeriti na ščit. Lažje je napeljati žice na vrhu, če pa želite čistejši videz, jih lahko speljete na dnu.
Pri usmerjanju teh žic želite biti pozorni na shemo (shema Eagle je na voljo za prenos). Pri tem si lahko ogledate tudi barvni vodnik.
Ideja te zasnove ščita je omogočiti 3 analogne vhode in 5 digitalnih vhodov iz vsakega krmilnika. To v celoti izkorišča vse analogne vhode na Arduino Uno, pa tudi preostale žice na našem trakovnem kablu.
4. korak: Gradnja: krmilniki, nastavitev delov
Prvi korak pri izdelavi krmilnika je načrtovanje senzorjev, ki jih želite uporabiti. V mojih primerih imam precej standardni krmilnik z igralno palico in nekaj gumbi. Imam tudi krmilnik z dvema drsnima potenciometroma.
Če želite to ponoviti, si lahko ogledate moje slike za umestitev.
Naslednji korak je, da svoj trak spajkate na ploščo perf.
- Odstranite in kosite trakovni kabel
- Spojite tračni kabel na zgornjo sredino vaše plošče perf.
Naslednji korak je usmerjanje žic. Začel sem tako, da sem najprej priključil napajanje (5V/rdeča žica) in ozemljitev (rjava žica) na senzorje. Nato sem povezal analogne vhode. Z lahkoto sem uporabil oranžni kabel (Analog A0 ali A3) za vodoravno premikanje in rumeni kabel (Analog A1 ali A4) za navpično gibanje.
Da bi bile stvari dosledne, sem na vse krmilnike povezal tudi majhen gumb, ki je bil vijoličen. To je uporabno za stvari, kot je zapiranje serijskih vrat (o tem bom govoril kasneje), pa tudi za menije ali možnosti.
Naložil sem hitro shemo krmilnika krmilne palice, če želite to pogledati. Iz našega diagrama izklopa lahko vidite možnost povezave vsakega krmilnika (3 analogni vhodi in 5 digitalnih).
5. korak: Neobvezno: ohišja
Ta korak ni obvezen, če pa imate dostop do 3D tiskalnika, bo rezultat vašega projekta videti nekoliko bolj izpopolnjen in končan. Kot lahko vidite v mojih prototipih, sem uporabil preprost kos kartona, da preprečim, da bi spajkalni spoji na dnu perf plošč pobokali prste.
Temu koraku so priloženi moji 3D modeli. Za vozlišče sem ustvaril ohišja za Arduino Uno/Leonardo in Sparkfun RedBoard (ta plošča je nekoliko širša in uporablja mini USB).
Za krmilnike jih lahko pritrdite z vijaki M2.5. Držal sem matico na strani tiskanega vezja in uporabljam podložko in vijak na dnu.
Vključil sem tudi 3D model za drsnike gumbov za potenciometre, ki sem jih uporabil.
Vse datoteke 3D lahko najdete na GitHubu.
6. korak: Programiranje: Arduino
Začnimo z nastavitvijo preproste skice za testiranje. Predlagam, da uporabite vadnico, ki jo je na NYU ustvaril ITP. Če želite narediti to vadnico, morate imeti nameščen p5.serialcontroll in node.js. V tej vadnici se boste seznanili z nastavitvijo Arduina za pošiljanje serijskih podatkov, ki jih lahko uporablja naša knjižnica javascript, p5.js. Za to lahko uporabite zvezdišče in krmilnik, ki smo jih ustvarili v prejšnjih korakih, ali pa ponovite vezja, prikazana v vadnici. Ta vadnica uporablja analogni vhodni pin A0 na Arduino Uno, ki je preslikan v oranžno žico vašega prvega krmilnika.
Naslednjo vadnico, ki ji boste želeli slediti, najdete tukaj. Ta vadnica vas bo vodila skozi nastavitev več vhodov in njihovo uporabo v p5.js. V vadnici se uporabljajo analogni vhodi A0 in A1. Ti bodo ustrezali oranžni in rumeni žici na krmilniku 1 našega sistema.
Ko boste prebrali zgornje vaje, lahko programiramo Arduino. Koda, ki jo želimo uporabiti, je spodaj:
// krmilnik 1const int dig2 = 2; // modri const int dig3 = 3; // vijolična const int dig4 = 4; // siva const int dig5 = 5; // bela const int dig6 = 6; // črno // krmilnik 2 const int dig7 = 7; // modra const int dig8 = 8; // vijolična const int dig9 = 9; // siva const int dig10 = 10; // bela const int dig11 = 11; //Črna
void setup () {
Serial.begin (9600); while (Serial.available () <= 0) {Serial.println ("zdravo"); // pošiljanje zakasnitve začetnega sporočila (300); // počakajte 1/3 sekunde} 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 () {
if (Serial.available ()> 0) {// preberite dohodni bajt: int inByte = Serial.read (); // preberite senzor:
// ANALOG krmilnik 1
int analog0 = analogRead (A0); int analog1 = analogRead (A1); int analog2 = analogRead (A2); // ANALOG krmilnik 2 int analog3 = analogRead (A3); int analog4 = analogRead (A4); int analog5 = analogRead (A5); // DIGITALNI krmilnik 1 int digital2 = digitalRead (dig2); int digital3 = digitalno branje (dig3); int digital4 = digitalRead (dig4);
int digital5 = digitalno branje (dig5);
int digital6 = digitalRead (dig6); // DIGITALNI krmilnik 2 int digital7 = digitalRead (dig7); int digital8 = digitalno branje (dig8); int digital9 = digitalRead (dig9); int digital10 = digitalRead (dig10); int digital11 = digitalRead (dig11); // natisnemo rezultate: Serial.print (analog0); // [0] Serial.print (","); Serial.print (analogni1); // [1] Serial.print (","); Serial.print (analog2); // [2] Serial.print (","); // Zagon podatkov krmilnika 2 Serial.print (analog3); // [3] Serial.print (","); Serial.print (analogni4); // [4] Serial.print (","); Serial.print (analogni5); // [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 (","); // Zaženite podatke krmilnika 2 Serial.print (digital7); // [11] Serial.print (","); Serial.print (digital8); // [12] Serial.print (","); Serial.print (digital9); // [13] Serial.print (","); Serial.println (digitalno10); // [14] Serial.print (","); Serial.println (digital11); // [15]}}
Ta koda pošilja serijske podatke obeh naših krmilnikov v nizu s 16 številkami. Prvih 6 od teh številk so naši analogni vhodi (od 0-1023), preostalih 10 vrednosti pa so naše digitalne vrednosti (0 ali 1).
Ko je naša koda naložena, lahko to preizkusimo tako, da odpremo serijski monitor in vnesemo vrednost v naš serijski monitor, kot smo to storili v 2. vadnici ITP. Morali bi dobiti niz svojih vrednosti, ločenih z vejicami.
7. korak: Programiranje: HTML
Ko nastavimo in delujemo na Arduinu, lahko začnemo s programiranjem naših spletnih vsebin. Koda HTML je zelo preprosta.
telo {oblazinjenje: 0; rob: 0;}
Koda html preprosto poveže naše datoteke javascript. Večina naše kode se bo dejansko zgodila v naši datoteki sketch.js.
8. korak: Programiranje: P5.js in Javascript
Ko nastavimo HTML, lahko delamo na svojem JavaScript. Če tega še niste storili, morate zdaj prenesti p5.js in p5.play ter jih dodati v mapo knjižnic v imeniku za vaše spletno mesto.
- p5.js
- p5.play
V prejšnjem koraku smo datoteko HTML nastavili za klic knjižnic p5.js in p5.play. Nastavili smo ga tudi za uporabo naše datoteke sketch.js, kjer bomo izvajali večino svojega programiranja. Spodaj je koda za naše okostje. Najdete ga tudi tukaj.
// Serijske spremenljivkevar serijski; // spremenljivka za shranjevanje primerka knjižnice serijskega porta var portName = 'COM4'; // tukaj vnesite ime serijskega vhoda // Globalne spremenljivke iger ---------------
// Nastavitvena funkcija ----------------------
funkcija setup () {createCanvas (640, 480); serijski = nov p5. SerialPort (); // naredimo nov primerek knjižnice serialport serial.on ('list', printList); // nastavimo funkcijo povratnega klica za dogodek seznama serijskih vrat serial.on ('connected', serverConnected); // povratni klic za povezavo s strežnikom serial.on ('open', portOpen); // povratni klic za odpiranje vrat serial.on ('data', serialEvent); // povratni klic, ko pridejo novi podatki serial.on ('error', serialError); // povratni klic za napake serial.on ('close', portClose); // povratni klic za zapiranje vrat serial.list (); // seznam serijskih vrat serial.open (portName); // odpremo serijska vrata} // Funkcija risanja ----------------------- funkcija draw () {ozadje (0); // črno ozadje} // tukaj razlagamo serijske podatke ---------- funkcija serialEvent () {// bere niz z zaporednih vrat // dokler ne dobite vrnitve nosilca in nove vrstice: var inString = serial. readStringUntil ('\ r / n'); // preverite, ali tam dejansko obstaja niz: if (inString.length> 0) {if (inString! == 'hello') {// če vas pozdravi, ga prezrite var sensors = split (inString, ', '); // razdelite niz na vejice if (sensors.length> 16) {// če je šestnajst elementov (6 analognih, 10 digitalnih) // Tukaj uporabite podatke senzorja:
}
} serial.write ('x'); // pošljite bajt, ki zahteva več serijskih podatkov}} // dobite seznam vrat: funkcija printList (portList) {// portList je niz imen zaporednih vrat za (var i = 0; i <portList.length; i ++) {// Prikaz seznama konzole: print (i + "" + portList ); }} function serverConnected () {print ('povezan s strežnikom.'); } function portOpen () {print ('serijska vrata odprta.')} function serialError (err) {print ('Nekaj je šlo narobe s serijskimi vrati.' + err); } function portClose () {print ('Zaporedna vrata zaprta.'); } funkcija closedCode () {serial.close (portName); return null; } window.onbeforeunload = zapiranje kode;
Ko shranite okostje. Te vrednosti lahko uporabite podobno, kot je bilo izvedeno v vadnici ITP. Niz vrednosti, ki smo jih v 6. koraku poslali iz našega Arduina, se pošilja kot niz 16 številk. Spodaj je razčlenitev tega niza.
// Tukaj razlagajte serijske podatke ----------
function serialEvent () {// branje niza iz serijskih vrat // dokler ne dobite vrnitve nosilca in nove vrstice: var inString = serial.readStringUntil ('\ r / n'); // preverite, ali tam dejansko obstaja niz: if (inString.length> 0) {if (inString! == 'hello') {// če vas pozdravi, ga prezrite var sensors = split (inString, ', '); // razdelite niz na vejice if (sensors.length> 16) {// če je šestnajst elementov (6 analognih, 10 digitalnih) // Tukaj uporabite podatke senzorja:}} serial.write ('x'); // pošljite bajt, ki zahteva več serijskih podatkov}}
Zdaj lahko zaženemo naš program, da vidimo, ali deluje!
9. korak: Zaženite program
Zdaj lahko zaženemo naš program, da vidimo, ali deluje. Lahko ustvarite svojo igro z uporabo datoteke skeleton.js v naši prejšnji datoteki ali pa uporabite preprosto igro Pipe, ki jo najdete tukaj.
Podobno kot laboratorij ITP bomo za izvajanje našega programa upoštevali spodnje korake.
- Priključite Arduino s krmilniki, ki jih nameravate uporabljati.
- Odprite p5.serialcontrol
- Spremenite vrata skice p5 na vrata, ki jih uporabljate (če uporabljate okostje, je to v vrstici 3)
- Odprite datoteko HTML, ki povezuje vašo skico p5
Če imate zunanje medije, kot so slike ali prenesene pisave, boste to želeli zagnati na strežniku. Če želite, lahko zaženete preprost lokalni strežnik python.
10. korak: Pojdite dlje
Če želite nadaljevati in razviti več iger za to, lahko sledite različnim primerom iz p5.play, ki jih najdete tukaj. Spodaj je primer bolj zapletene igre, ki sem jo ustvaril. Gre za strelsko igro 1 proti 1. Vse vire zanj najdete na GitHubu.
Priporočena:
Kako narediti igro za več igralcev s krmilniki Arduino: 6 korakov
Kako narediti igro za več igralcev s krmilniki Arduino: Ste se kdaj vprašali, kako razvijalci iger ustvarjajo neverjetne igre, ki jih ljudje po vsem svetu radi igrajo? No, danes vam bom o tem dal le majhen namig, tako da naredim majhno igro za več igralcev, ki jo bo nadziral bodisi Arduino kontroler
Kako: Namestitev Raspberry PI 4 Headless (VNC) z Rpi-sliko in slikami: 7 korakov (s slikami)
Kako: Namestitev Raspberry PI 4 Headless (VNC) z Rpi-imagerjem in slikami: Ta Rapberry PI nameravam uporabiti v kopici zabavnih projektov v svojem blogu. Vabljeni, da to preverite. Želel sem se vrniti v uporabo Raspberry PI, vendar na novi lokaciji nisem imel tipkovnice ali miške. Nekaj časa je minilo, odkar sem nastavil malino
Kako razstaviti računalnik z enostavnimi koraki in slikami: 13 korakov (s slikami)
Kako z enostavnimi koraki in slikami razstaviti računalnik: To navodilo za razstavljanje računalnika. Večina osnovnih komponent je modularnih in jih je enostavno odstraniti. Vendar je pomembno, da ste glede tega organizirani. To vam bo pomagalo preprečiti izgubo delov in tudi pri ponovni montaži
Najcenejši Arduino -- Najmanjši Arduino -- Arduino Pro Mini -- Programiranje -- Arduino Neno: 6 korakov (s slikami)
Najcenejši Arduino || Najmanjši Arduino || Arduino Pro Mini || Programiranje || Arduino Neno: …………………………. PRIJAVITE SE na moj YouTube kanal za več videov ……. .Ta projekt govori o tem, kako povezati najmanjši in najcenejši arduino doslej. Najmanjši in najcenejši arduino je arduino pro mini. Podobno je arduinu
Ročna konzola z brezžičnimi krmilniki in senzorji (Arduino MEGA & UNO): 10 korakov (s slikami)
Ročna konzola z brezžičnimi krmilniki in senzorji (Arduino MEGA & UNO): Kaj sem uporabil:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 Zaslon na dotik HXD8357D- brenčalo- 4Ohm 3W zvočnik- 5 mm LED luči- tiskalnik Ultimaker 2+ s črno PLA nitko- laserski rezalnik z MDF lesom- črna barva v razpršilu (za les)- 3x nRF24