Turinys:
- 1 žingsnis: ko jums reikės
- 2 žingsnis: Statymas: konsolės stebulė, skydo nustatymas
- 3 žingsnis: Statymas: konsolės stebulė, skydo laidai
- 4 žingsnis: kūrimas: valdikliai, dalių nustatymas
- 5 žingsnis: neprivaloma: gaubtai
- 6 žingsnis: programavimas: „Arduino“
- 7 žingsnis: programavimas: HTML
- 8 veiksmas: programavimas: „P5.js“ir „Javascript“
- 9 veiksmas: paleiskite programą
- 10 žingsnis: Eikite toliau
Video: „Arduino“valdikliai: 10 žingsnių (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
„Arduino“žaidimų valdiklio sistema, naudojant „Arduino“ir „p5.js“biblioteką. To idėja yra sukurti „Arduino“projektą, kurį būtų lengva atkartoti ir išplėsti. Valdiklio jungtys yra suprojektuotos taip, kad būtų galima naudoti daugybę įvairių jutiklių ir įėjimų, kurie gali būti keičiami priklausomai nuo kiekvieno valdiklio.
Šis projektas taip pat skirtas naudoti p5.js JavaScript biblioteką kartu su p5.play biblioteka, skirta p5.js. Šios bibliotekos leidžia lengvai programuoti žaidimus. „P5.play“svetainėje yra daugybė vadovėlių ir pavyzdžių, kad vartotojai galėtų kurti žaidimus. Šis projektas leidžia vartotojams praktikuoti savo techninės ir programinės įrangos kūrimo įgūdžius.
1 žingsnis: ko jums reikės
Įrankiai:
- Lituoklis
- Lituoklis
- Vielos nuėmikliai
- Šoniniai pjaustytuvai
- Replės
Techninė įranga:
- Su „Arduino“suderinama lenta (naudojau „Sparkfun Redboard“, taip pat „Arduino Uno“ir „Leonardo“)
-
„Perf Board“:
- 8 cm x 6 cm žalios spalvos lentos
- „Aduino Uno“skydo plokštė
-
Įvairūs jutikliai
- Vairasvirtės
- Mygtukai (su rezistoriais, 10k omų, su jais eiti)
- Potenciometrai
- Lankstūs jutikliai
- Slėgio jutikliai
- Ir tt…
-
Viela:
- Viena viela (naudojau 26 AWG kietą)
- Juostelės viela ir gofruotės
- Atskiriamos antraštės (bent 20 iš jų)
-
Neprivaloma aparatinė įranga (vietoj to galite naudoti kartoną ir karšto klijavimo/užtrauktukus):
- Duonos lentos ir jungiamieji kabeliai prototipams kurti
- 3D spausdinti korpusai
- Aparatinės tvirtinimo detalės (naudojau M2.5 varžtus)
Programinė įranga:
- „Arduino IDE“
- p5.js biblioteka
P5 žaisti biblioteką
- p5.serijos valdymas
- Node.js
2 žingsnis: Statymas: konsolės stebulė, skydo nustatymas
Lituokite antraštes prie „Arduino Uno“skydo plokštės.
- Pradėjau nuo skydo antraščių (maitinimo, analoginio ir skaitmeninio)
- Kitas yra 2x5 antraštės kaiščiai. Galite naudoti 2x5 antraštes arba tik 2 eilutes po 5 atskirtas antraštes. Vertikaliai išdėstiau juos A3 ir A4 formatais ir tarp jų palikau 2 tarpus.
3 žingsnis: Statymas: konsolės stebulė, skydo laidai
Toliau norime nukreipti laidus ant skydo. Lengviau paleisti laidus viršuje, bet jei norite švaresnės išvaizdos, galite juos paleisti apačioje.
Nukreipdami šiuos laidus norite atkreipti dėmesį į schemą (Eagle schemą galima atsisiųsti). Taip pat galite pažvelgti į spalvų vadovą, kuris jums padės.
Šio skydo dizaino idėja yra leisti 3 analoginius įėjimus ir 5 skaitmeninius įėjimus iš kiekvieno valdiklio. Tai visiškai išnaudoja visas analogines „Arduino Uno“įvestis ir likusius laidus mūsų juostiniame kabelyje.
4 žingsnis: kūrimas: valdikliai, dalių nustatymas
Pirmasis žingsnis kuriant valdiklį yra suplanuoti, kuriuos jutiklius naudoti. Mano pavyzdžiuose turiu gana standartinį valdiklį su vairasvirte ir keliais mygtukais. Taip pat turiu valdiklį su dviem slankiojančiais potenciometrais.
Jei norite tai pakartoti, galite peržiūrėti mano vaizdus, kad juos būtų galima įdėti.
Kitas žingsnis yra lituoti juostinį kabelį prie perforavimo plokštės.
- Juostos kabelį nuimkite ir išardykite
- Lituokite juostos kabelį prie viršutinės jūsų lentos centro.
Kitas žingsnis - nukreipti laidus. Pirmiausia pradėjau prijungti maitinimą (5 V/raudona viela) ir įžeminimą (ruda viela) prie jutiklių. Tada prijungiau analoginius įėjimus. Man pasirodė lengva naudoti oranžinį kabelį (analoginis A0 arba A3) horizontaliam judėjimui, o geltoną kabelį (analoginis A1 arba A4) vertikaliam judėjimui.
Kad viskas būtų nuoseklu, aš taip pat prijungiau mažą mygtuką prie violetinės spalvos visuose valdikliuose. Tai naudinga tokiems dalykams kaip serijinio prievado uždarymas (apie tai kalbėsiu vėliau), taip pat meniu ar parinktys.
Įkėliau greitą savo vairasvirtės valdiklio schemą, jei norėtumėte tai pažvelgti. Iš mūsų kontaktų schemos matote kiekvieno valdiklio prijungimo galimybę (3 analoginiai įėjimai ir 5 skaitmeniniai).
5 žingsnis: neprivaloma: gaubtai
Šis žingsnis yra neprivalomas, tačiau jei turite prieigą prie 3D spausdintuvo, jūsų projekto rezultatas atrodys šiek tiek patobulintas ir baigtas. Kaip matote mano prototipuose, aš panaudojau paprastą kartono gabalą, kad perforuotų plokščių apačioje esančios lydmetalio jungtys nesudurtų pirštų.
Prie šio veiksmo galite rasti mano 3D modelius. Aš sukūriau korpuso korpusus „Arduino Uno/Leonardo“ir „Sparkfun RedBoard“(ši plokštė yra šiek tiek platesnė ir naudoja mini USB).
Valdikliams galite juos pritvirtinti M2.5 varžtais. Aš laikiau veržlę PCB šone ir naudoju poveržlę bei varžtą apačioje.
Taip pat įtraukiau naudojamų potenciometrų rankenėlių slankiklių 3D modelį.
Visus 3D failus galite rasti „GitHub“.
6 žingsnis: programavimas: „Arduino“
Pradėkime nuo paprasto eskizo testavimo. Siūlau naudoti čia esančią ITP NYU sukurtą pamoką. Norėdami tai padaryti, turite įdiegti „p5.serialcontroll“ir „node.js“. Šioje pamokoje būsite supažindinti su „Arduino“nustatymu, kad būtų siunčiami serijiniai duomenys, kuriuos gali naudoti mūsų „JavaScript“biblioteka p5.js. Norėdami tai padaryti, galite naudoti koncentratorių ir valdiklį, kurį sukūrėme atlikdami ankstesnius veiksmus, arba galite atkartoti mokymo programoje parodytas grandines. Šioje pamokoje naudojamas A0 analoginis įvesties kaištis „Arduino Uno“, kuris yra susietas su oranžine pirmojo valdiklio viela.
Kitą pamoką, kurią norėsite sekti, rasite čia. Ši pamoka padės jums nustatyti kelis įvestis ir juos naudoti p5.js. Pamokoje naudojami analoginiai įėjimai A0 ir A1. Tai atitiks oranžinės ir geltonos spalvos laidus mūsų sistemos 1 valdiklyje.
Kai peržiūrėsite aukščiau pateiktas pamokas, galime užprogramuoti „Arduino“. Toliau pateikiamas kodas, kurį norime naudoti:
// valdiklis 1const int dig2 = 2; // mėlyna konst int int dig3 = 3; // violetinė const int dig4 = 4; // pilka konst int int dig5 = 5; // balta const int dig6 = 6; // juoda // valdiklis 2 const int dig7 = 7; // mėlyna konst int int dig8 = 8; // violetinė const int dig9 = 9; // pilka konst int int dig10 = 10; // balta const int dig11 = 11; // juoda
void setup () {
Serial.begin (9600); while (Serial.available () <= 0) {Serial.println ("labas"); // siųsti pradžios pranešimo uždelsimą (300); // laukti 1/3 sekundės} 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) {// skaityti gaunamą baitą: int inByte = Serial.read (); // skaityti jutiklį:
// ANALOG 1 valdiklis
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); // Skaitmeninis valdiklis 1 int digital2 = digitalRead (dig2); int digital3 = digitalRead (dig3); int digital4 = digitalRead (dig4);
int digital5 = digitalRead (dig5);
int digital6 = digitalRead (dig6); // Skaitmeninis valdiklis 2 int digital7 = digitalRead (dig7); int digital8 = digitalRead (dig8); int digital9 = digitalRead (dig9); int digital10 = digitalRead (dig10); int digital11 = digitalRead (dig11); // spausdinti rezultatus: Serial.print (analog0); // [0] Serial.print (","); Serial.print (analog1); // [1] Serial.print (","); Serial.print (analoginis2); // [2] Serial.print (","); // Start Controller 2 data Serial.print (analog3); // [3] Serial.print (","); Serial.print (analog4); // [4] Serial.print (","); Serial.print (analoginis5); // [5] Serial.print (","); Serial.print (skaitmeninis2); // [6] Serial.print (","); Serial.print (digital3); // [7] Serial.print (","); Serial.print (digital4); // [8] Serial.print (","); Serial.print (skaitmeninis5); // [9] Serial.print (","); Serial.print (skaitmeninis6); // [10] Serial.print (","); // Pradėti 2 valdiklio duomenis Serial.print (digital7); // [11] Serial.print (","); Serial.print (skaitmeninis8); // [12] Serial.print (","); Serial.print (skaitmeninis9); // [13] Serial.print (","); Serial.println (digital10); // [14] Serial.print (","); Serial.println (digital11); // [15]}}
Šis kodas siunčia serijinius duomenis iš abiejų mūsų valdiklių kaip 16 skaičių masyvas. Pirmieji 6 iš šių skaičių yra mūsų analoginiai įėjimai (nuo 0 iki 1023), o likusios 10-skaitmeninės vertės (0 arba 1).
Įkėlę kodą, mes galime tai patikrinti, atidarydami nuoseklųjį monitorių ir įvesdami vertę į savo serijinį monitorių, kaip tai darėme antroje ITP pamokoje. Turėtume gauti savo vertybių eilutę, atskirtą kableliais.
7 žingsnis: programavimas: HTML
Nustatę ir dirbdami „Arduino“, galime pradėti programuoti žiniatinklio turinį. HTML kodas yra labai paprastas.
korpusas {paminkštinimas: 0; paraštė: 0;}
HTML kodas tiesiog susieja mūsų „JavaScript“failus. Dauguma mūsų kodo iš tikrųjų bus mūsų eskizo.js faile.
8 veiksmas: programavimas: „P5.js“ir „Javascript“
Nustatę HTML, galime dirbti su „JavaScript“. Jei to dar nepadarėte, dabar atsisiųskite „p5.js“ir „p5.play“ir pridėkite juos prie savo bibliotekos aplanko savo svetainės kataloge.
- p5.js
- p5.žaidimas
Ankstesniame žingsnyje mes nustatėme savo HTML failą, kad galėtume skambinti mūsų p5.js ir p5.play bibliotekoms. Mes taip pat nustatėme, kad būtų naudojamas mūsų failas „sketch.js“, kuriame ir atliksime didžiąją dalį programavimo. Žemiau yra mūsų skeleto kodas. Taip pat galite rasti čia.
// Serial Variablesvar serial; // kintamasis, skirtas serijinio prievado bibliotekos egzemplioriui laikyti var portName = 'COM4'; // čia įveskite serijinio prievado pavadinimą // Pasauliniai žaidimų kintamieji ---------------
// Sąrankos funkcija ----------------------
funkcijos nustatymas () {createCanvas (640, 480); serijinis = naujas p5. SerialPort (); // padaryti naują serijinio prievado bibliotekos egzempliorių serial.on ('list', printList); // nustatyti atšaukimo funkciją serialport sąrašo įvykiui serial.on ('prijungtas', serverConnected); // atšaukimas prisijungimui prie serverio serial.on ('open', portOpen); // atšaukimas uosto atidarymui serial.on ('duomenys', serialEvent); // atšaukimas, kai atkeliauja nauji duomenys serial.on ('error', serialError); // atšaukimas dėl klaidų serial.on ('close', portClose); // atšaukimas prievado uždarymo serial.list (); // išvardykite nuoseklius prievadus serial.open (portName); // atidaryti nuoseklųjį prievadą} // Piešimo funkcija ----------------------- funkcija draw () {fonas (0); // juodas fonas} // Čia interpretuokite serijos duomenis ---------- funkcija serialEvent () {// skaitykite eilutę iš nuoseklaus prievado // kol gausite vežimo grąžą ir naują eilutę: var inString = serial. readStringUntil ('\ r / n'); // patikrinkite, ar ten tikrai yra nustatymas: if (inString.length> 0) {if (inString! == 'hello') {// jei gausite sveiki, ignoruokite jį var sensors = split (inString, ', '); // padalinkite eilutę ant kablelio, jei (sensor.length> 16) {// jei yra šešiolika elementų (6 analoginiai, 10 skaitmeninių) // Naudokite jutiklio duomenis čia:
}
} serial.write ('x'); // atsiųsti baitą, prašydamas daugiau serijinių duomenų}} // gauti prievadų sąrašą: function printList (portList) {// portList yra serijinių prievadų pavadinimų masyvas (var i = 0; i <portList.length; i ++) {// Rodyti konsolės sąrašą: print (i + "" + portList ); }} function serverConnected () {print ('prijungtas prie serverio'); } function portOpen () {print ('atidarytas nuoseklusis prievadas.')} function serialError (err) {print ('Kažkas nepavyko su nuosekliu prievadu.' + klaida); } function portClose () {print ('Serijinis prievadas uždarytas.'); } funkcija closCode () {serial.close (portName); return null; } window.onbeforeunload = uždarymoKodas;
Kai skeletas bus išsaugotas. Šias vertes galite naudoti panašiai, kaip tai buvo padaryta ITP vadovėlyje. Reikšmių eilutė, kurią 6 veiksme išsiuntėme iš „Arduino“, siunčiama kaip 16 skaičių masyvas. Žemiau mes analizuojame šį masyvą.
// Interpretuoti serijos duomenis čia ----------
function serialEvent () {// skaitykite eilutę iš nuoseklaus prievado //, kol gausite vežimo grąžą ir naują eilutę: var inString = serial.readStringUntil ('\ r / n'); // patikrinkite, ar ten tikrai yra nustatymas: if (inString.length> 0) {if (inString! == 'hello') {// jei gausite labas, ignoruokite jį var sensors = split (inString, ', '); // padalinkite eilutę ant kablelių, jei (sensor.length> 16) {// jei yra šešiolika elementų (6 analoginiai, 10 skaitmeninių) // Čia naudokite jutiklio duomenis:}} serial.write ('x'); // atsiųsti baitą, prašant daugiau serijinių duomenų}}
Dabar galime paleisti savo programą, kad pamatytume, ar ji veikia!
9 veiksmas: paleiskite programą
Dabar galime paleisti savo programą, kad pamatytume, ar ji veikia. Galite sukurti savo žaidimą naudodami ankstesnio failo skeleton.js failą arba naudoti paprastą žaidimą „Pipe“, kurį rasite čia.
Panašiai kaip ITP laboratorijoje, norėdami vykdyti mūsų programą, atliksime toliau nurodytus veiksmus.
- Prijunkite „Arduino“prie valdiklio, kurį planuojate naudoti.
- Atidarykite p5.serialcontrol
- Pakeiskite savo p5 eskizo prievadą į tą, kurį naudojate (jei naudojate skeletą, tai yra 3 eilutėje)
- Atidarykite HTML failą, susietą su jūsų p5 eskizu
Jei turite išorinę laikmeną, pvz., Vaizdus ar atsisiųstus šriftus, norėsite tai paleisti serveryje. Jei norite, galite paleisti paprastą vietinį „python“serverį.
10 žingsnis: Eikite toliau
Jei norite eiti toliau ir kurti daugiau žaidimų, galite sekti įvairius p5.play pavyzdžius, kuriuos rasite čia. Žemiau pateikiamas sudėtingesnio mano sukurto žaidimo pavyzdys. Tai 1 prieš 1 tanko šaulys žaidimas. Visus išteklius galite rasti „GitHub“.
Rekomenduojamas:
Visi prisitaikantys valdikliai: 7 žingsniai
Visi prisitaikantys valdikliai: Desarrollo e Implementación En este apartado se realizará un análisis de los elementos necesarios para la creación del prototipo propuesto en este trabajo, tanto of software como de hardware, además se dará un breve resumen del desarrollo y la implement
„Redbear BLE Nano V2“pasirinktiniai valdikliai su „PfodApp“- nereikia koduoti: 6 žingsniai
„Redbear BLE Nano V2“pasirinktiniai valdikliai su „PfodApp“- kodavimo nereikia: Atnaujinimas: 2017 m. Rugsėjo 15 d. - Ši instrukcija buvo atnaujinta, kad būtų naudojama naujausia „RedBear BLE Nano, V2“versija. Ankstesnę šios instrukcijos versiją, skirtą „RedBear BLE Nano V1.5“, rasite čia. Atnaujinti lapkričio 15 d. - Taigi 2017 m
„Adafruit Feather NRF52“pasirinktiniai valdikliai, kodavimo nereikia: 8 žingsniai (su paveikslėliais)
„Adafruit Feather NRF52“pasirinktiniai valdikliai, kodavimo nereikia: Atnaujinti 2019 m. Balandžio 23 d. - Datos ir laiko grafikus, naudojančius tik „Arduino millis“(), žr. „Arduino“datos/laiko grafikas/registravimas naudojant „Millis“() ir „PfodApp“Naujausias nemokamas „pfodDesigner V3.0.3610+“užpildykite „Arduino“eskizus, kad suplanuotumėte duomenis pagal datą/laiką
„Arduino“pagrindu veikiantys „Nextion Touch“valdikliai: 4 žingsniai
„Arduino“pagrįsti „Nextion“jutikliniai valdikliai: draugas ieškojo puikaus sprendimo, kaip valdyti savo automobilio ŠVOK (šildymą, vėdinimą, oro kondicionavimą) per jutiklinį ekraną ir „Arduino“. Idėją įkvėpė senesnis mano projektas apie ištempto limuzino vidinį valdymą, tačiau jis turėjo
4 žingsnių skaitmeninis sekos sekiklis: 19 žingsnių (su nuotraukomis)
4 žingsnių skaitmeninis sequencer: CPE 133, Cal Poly San Luis Obispo Projekto kūrėjai: Jayson Johnston ir Bjorn NelsonŠių dienų muzikos industrijoje, viena iš dažniausiai naudojamų “ instrumentų “ yra skaitmeninis sintezatorius. Kiekvienas muzikos žanras, nuo hip-hopo iki pop ir vakaro