Kazalo:

Arduino krmilniki: 10 korakov (s slikami)
Arduino krmilniki: 10 korakov (s slikami)

Video: Arduino krmilniki: 10 korakov (s slikami)

Video: Arduino krmilniki: 10 korakov (s slikami)
Video: ПЕРВАЯ СХЕМА НА АРДУИНО [Уроки Arduino #4] 2024, Julij
Anonim
Arduino krmilniki
Arduino krmilniki
Arduino krmilniki
Arduino krmilniki

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

Kaj boste potrebovali
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

Gradnja: konzolno vozlišče, nastavitev ščita
Gradnja: 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

Stavba: konzolno vozlišče, ožičenje ščita
Stavba: konzolno vozlišče, ožičenje ščita
Stavba: konzolno vozlišče, ožičenje ščita
Stavba: konzolno vozlišče, ožičenje ščita
Stavba: konzolno vozlišče, ožičenje ščita
Stavba: 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

Gradnja: krmilniki, nastavitev vaših delov
Gradnja: krmilniki, nastavitev vaših delov
Gradnja: krmilniki, nastavitev vaših delov
Gradnja: krmilniki, nastavitev vaših delov
Gradnja: krmilniki, nastavitev vaših delov
Gradnja: krmilniki, nastavitev vaših 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.

  1. Odstranite in kosite trakovni kabel
  2. 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

Izbirno: ohišja
Izbirno: ohišja
Izbirno: ohišja
Izbirno: ohišja
Izbirno: ohišja
Izbirno: 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

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

Izvajanje vašega programa
Izvajanje vašega programa

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: