Satura rādītājs:

Arduino kontrolieri: 10 soļi (ar attēliem)
Arduino kontrolieri: 10 soļi (ar attēliem)

Video: Arduino kontrolieri: 10 soļi (ar attēliem)

Video: Arduino kontrolieri: 10 soļi (ar attēliem)
Video: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, Novembris
Anonim
Arduino kontrolieri
Arduino kontrolieri
Arduino kontrolieri
Arduino kontrolieri

Arduino spēļu kontrolieru sistēma, izmantojot Arduino un p5.js bibliotēku. Tā ideja ir izveidot Arduino projektu, kas ir viegli atkārtojams un paplašināms. Kontrollera savienojumi ir izstrādāti, lai izmantotu virkni dažādu sensoru un ieeju, kuras var nomainīt atkarībā no katra kontroliera.

Šis projekts ir paredzēts arī, lai izmantotu p5.js JavaScript bibliotēku kopā ar p5.play bibliotēku, kas paredzēta p5.js. Šīs bibliotēkas ļauj mums viegli ieprogrammēt spēles. Vietnē p5.play ir daudz pamācību un piemēru, lai lietotāji varētu izveidot spēles. Šis projekts ļauj lietotājiem praktizēt savas aparatūras un programmatūras izstrādes prasmes.

1. darbība. Kas jums būs nepieciešams

Kas jums būs nepieciešams
Kas jums būs nepieciešams

Rīki:

  • Lodāmurs
  • Lodēt
  • Stiepļu noņēmēji
  • Sānu griezēji
  • Knaibles

Aparatūra:

  • Ar Arduino saderīga tāfele (es izmantoju Sparkfun Redboard, kā arī Arduino Uno un Leonardo)
  • Perf padome:

    • 8 cm x 6 cm zaļi perf dēļi
    • Aduino Uno vairogs
  • Dažādi sensori

    • Kursorsviras
    • Pogas (ar rezistoriem, 10k omi, lai iet kopā ar tām)
    • Potenciometri
    • Flex sensori
    • Spiediena sensori
    • Utt…
  • Vads:

    • Viens vads (es izmantoju 26 AWG cietu)
    • Lentes stieple un gofri
  • Atdalīšanas galvenes (vismaz 20 no tām)
  • Papildu aparatūra (tā vietā varat izmantot kartonu un karstās līmes/rāvējslēdzējus):

    • Maizes dēļa un džemperu kabeļi prototipēšanai
    • 3D drukāti korpusi
    • Aparatūras stiprinājumi (es izmantoju M2.5 skrūves)

Programmatūra:

  • Arduino IDE
  • p5.js bibliotēka

    P5.spēlē arī bibliotēku

  • p5.sērijas vadība
  • Node.js

2. darbība. Būvēšana: konsoles centrmezgls, vairoga uzstādīšana

Ēka: konsoles centrmezgls, vairoga uzstādīšana
Ēka: konsoles centrmezgls, vairoga uzstādīšana

Lodējiet galvenes pie Arduino Uno vairoga perf paneļa.

  • Es sāku ar vairoga galvenēm (jauda, analogā un digitālā)
  • Tālāk ir 2x5 galvenes tapas. Varat izmantot 2x5 galvenes vai tikai 2 rindas pa 5 atdalāmām galvenēm. Es tos rindoju ar A3 un A4 vertikāli un atstāju 2 atstarpes starp tām.

3. darbība. Būvēšana: konsoles centrmezgls, vairoga vadu savienošana

Ēka: konsoles centrmezgls, vairoga vadi
Ēka: konsoles centrmezgls, vairoga vadi
Ēka: konsoles centrmezgls, vairoga vadi
Ēka: konsoles centrmezgls, vairoga vadi
Ēka: konsoles centrmezgls, vairoga vadi
Ēka: konsoles centrmezgls, vairoga vadi

Tālāk mēs vēlamies novietot savus vadus uz vairoga. Ir vieglāk vadīt vadus augšpusē, bet, ja vēlaties tīrāku izskatu, varat tos vadīt apakšā.

Maršrutējot šos vadus, vēlaties pievērst uzmanību shēmai (Eagle shēma ir pieejama lejupielādei). Varat arī apskatīt krāsu ceļvedi, lai jums palīdzētu.

Šī vairoga dizaina ideja ir atļaut 3 analogās ieejas un 5 digitālās ieejas no katra kontroliera. Tas pilnībā izmanto visas Arduino Uno analogās ieejas, kā arī mūsu lentes kabeļa atlikušos vadus.

4. solis: ēka: kontrolieri, detaļu uzstādīšana

Ēka: kontrolieri, jūsu detaļu uzstādīšana
Ēka: kontrolieri, jūsu detaļu uzstādīšana
Ēka: kontrolieri, jūsu detaļu uzstādīšana
Ēka: kontrolieri, jūsu detaļu uzstādīšana
Ēka: kontrolieri, jūsu detaļu uzstādīšana
Ēka: kontrolieri, jūsu detaļu uzstādīšana

Pirmais solis kontroliera izveidē ir plānot izmantojamos sensorus. Manos piemēros man ir diezgan standarta kontrolieris ar kursorsviru un dažām pogām. Man ir arī kontrolieris ar diviem slīdņa potenciometriem.

Ja vēlaties to atkārtot, varat apskatīt manus attēlus izvietošanai.

Nākamais solis ir pielodēt lentes kabeli pie pārnesumkartona.

  1. Noņemiet un tiniet lentes kabeli
  2. Lodējiet lentes kabeli līdz jūsu perf dēļa augšējam centram.

Nākamais solis ir vadīt vadus. Es sāku, vispirms pieslēdzot sensoriem barošanu (5V/sarkans vads) un zemi (brūns vads). Pēc tam es pievienoju analogās ieejas. Es atklāju, ka ir viegli izmantot oranžo kabeli (analogs A0 vai A3) horizontālai kustībai un dzeltenu kabeli (A1 vai A4 analogs) vertikālai kustībai.

Lai viss būtu konsekventi, es arī pieslēdzu nelielu spiedpogu purpursarkanā krāsā uz visiem saviem kontrolieriem. Tas ir noderīgi tādām lietām kā seriālā porta slēgšana (es to apskatīšu vēlāk), kā arī izvēlnēm vai opcijām.

Ja vēlaties to apskatīt, esmu augšupielādējis ātru sava kursorsviras kontroliera shēmu. No mūsu pin-out diagrammas jūs varat redzēt katra kontroliera savienojuma iespēju (3 analogās ieejas un 5 digitālās).

5. darbība: pēc izvēles: korpusi

Pēc izvēles: korpusi
Pēc izvēles: korpusi
Pēc izvēles: korpusi
Pēc izvēles: korpusi
Pēc izvēles: korpusi
Pēc izvēles: korpusi

Šis solis nav obligāts, taču, ja jums ir piekļuve 3D printerim, jūsu projekta rezultāts izskatīsies nedaudz izsmalcinātāks un pabeigts. Kā redzat manos prototipos, es izmantoju vienkāršu kartona gabalu, lai novērstu lodēšanas savienojumus, kas atrodas perforēto dēļu apakšā, pirkstus.

Mani 3D modeļi ir pievienoti šim solim. Esmu izveidojis centrmezgla korpusus gan Arduino Uno/Leonardo, gan Sparkfun RedBoard (šī tāfele ir nedaudz plašāka un izmanto mini USB).

Kontrolieriem tos var piestiprināt ar M2.5 skrūvēm. Es turēju uzgriezni PCB pusē un izmantoju paplāksni un skrūvi apakšā.

Esmu iekļāvis arī 3D modeli, ko izmantoja potenciometru pogas slīdņiem.

Visus 3D failus varat atrast vietnē GitHub.

6. darbība: programmēšana: Arduino

Programmēšana: Arduino
Programmēšana: Arduino

Sāksim ar vienkāršas skices iestatīšanu testēšanai. Es iesaku izmantot šeit atrodamo NYP ITP izveidoto apmācību. Lai veiktu šo apmācību, jums ir jāinstalē p5.serialcontroll un node.js. Šajā apmācībā jūs iepazīstināsit ar Arduino iestatīšanu sērijveida datu nosūtīšanai, ko var izmantot mūsu javascript bibliotēka p5.js. Lai to izdarītu, varat izmantot centrmezglu un kontrolieri, ko izveidojām iepriekšējās darbībās, vai arī atkārtot apmācībā parādītās shēmas. Šajā apmācībā tiek izmantota A0 analogās ievades tapa uz Arduino Uno, kas ir kartēta ar jūsu pirmā kontrollera oranžo vadu.

Nākamo pamācību, kuru vēlaties ievērot, varat atrast šeit. Šī apmācība palīdzēs jums iestatīt vairākas ievades un izmantot tās p5.js. Apmācībā tiek izmantotas analogās ieejas A0 un A1. Tie atbilst oranžiem un dzelteniem vadiem uz mūsu sistēmas 1. kontrollera.

Kad esat izgājis iepriekš minētās apmācības, mēs varam ieprogrammēt Arduino. Kods, kuru mēs vēlamies izmantot, ir norādīts zemāk:

// kontrolieris 1const int dig2 = 2; // zils const int dig3 = 3; // violeta const int dig4 = 4; // pelēkā konst int int dig5 = 5; // balta konst int int dig6 = 6; // melns // kontrolieris 2 const int dig7 = 7; // zils const int dig8 = 8; // violeta const int dig9 = 9; // pelēkā konst int int dig10 = 10; // balta konst int int dig11 = 11; // melns

void setup () {

Sērijas sākums (9600); while (Serial.available () <= 0) {Serial.println ("sveiki"); // sūtīt sākuma ziņas aizkavi (300); // pagaidiet 1/3 sekundes} 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) {// lasīt ienākošo baitu: int inByte = Serial.read (); // lasīt sensoru:

// ANALOG kontrolieris 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); // izdrukājiet rezultātus: 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 (","); // Sākt 2. kontrollera datus 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]}}

Šis kods nosūta sērijas datus no abiem mūsu kontrolieriem kā 16 ciparu masīvu. Pirmie 6 no šiem skaitļiem ir mūsu analogās ieejas (svārstās no 0-1023), bet atlikušās 10 vērtības ir mūsu digitālās vērtības (0 vai 1).

Kad mūsu kods ir augšupielādēts, mēs varam to pārbaudīt, atverot seriālo monitoru un ierakstot vērtību sērijas monitorā, kā mēs to darījām ITP 2. apmācībā. Mums vajadzētu iegūt virkni mūsu vērtību, atdalot tās ar komatiem.

7. darbība: programmēšana: HTML

Kad esam izveidojuši un strādājuši mūsu Arduino, mēs varam sākt programmēt savas tīmekļa lietas. HTML kods ir ļoti vienkāršs.

virsbūve {polsterējums: 0; rezerve: 0;}

HTML kods vienkārši sasaista mūsu javascript failus. Lielākā daļa mūsu koda faktiski notiks mūsu skices.js failā.

8. darbība: programmēšana: P5.js un Javascript

Kad HTML ir iestatīts, mēs varam strādāt pie sava JavaScript. Ja vēl neesat to izdarījis, tagad lejupielādējiet p5.js, kā arī p5.play un pievienojiet tos savai bibliotēkas mapei savas vietnes direktorijā.

  • p5.js
  • 5. spēle

Iepriekšējā solī mēs izveidojām savu HTML failu, lai izsauktu mūsu bibliotēkas p5.js un p5.play. Mēs arī iestatījām to, lai izmantotu mūsu sketch.js failu, kurā mēs veiksim lielāko daļu mūsu programmēšanas. Zemāk ir mūsu skeleta kods. To var atrast arī šeit.

// Serial Variablesvar serial; // mainīgais, lai turētu seriālporta bibliotēkas instanci var portName = 'COM4'; // šeit ievadiet seriālā porta nosaukumu // Globālie spēļu mainīgie ---------------

// Iestatīšanas funkcija ----------------------

funkciju iestatīšana () {createCanvas (640, 480); serial = new p5. SerialPort (); // izveidot jaunu seriālā portāla bibliotēkas instanci serial.on ('list', printList); // iestatiet atzvanīšanas funkciju seriālā porta saraksta notikumam serial.on ('savienots', serverConnected); // atzvanīšana savienojumam ar serveri serial.on ('open', portOpen); // atzvanīšana ostas atvēršanai serial.on ('data', serialEvent); // atzvanīšana, kad pienāk jauni dati serial.on ('error', serialError); // atzvanīšana par kļūdām serial.on ('close', portClose); // atzvanīšana ostas slēgšanai serial.list (); // uzskaitīt seriālos portus serial.open (portName); // atvērt seriālo portu} // Zīmēšanas funkcija ----------------------- funkcija draw () {background (0); // melns fons} // Interpretējiet sērijas datus šeit ---------- funkcija serialEvent () {// lasiet virkni no seriālā porta //, līdz tiek parādīta vagonu atgriešanās un jauna rinda: var inString = serial. readStringUntil ('\ r / n'); // pārbaudiet, vai tur tiešām ir iestatījums: if (inString.length> 0) {if (inString! == 'hello') {// ja saņemat sveicienu, ignorējiet to var sensors = split (inString, ', '); // sadaliet virkni uz komatiem, ja (sensors.length> 16) {// ja ir sešpadsmit elementi (6 analogie, 10 digitālie) // Šeit izmantojiet sensoru datus:

}

} serial.write ('x'); // nosūtīt baitu, pieprasot papildu sērijas datus}} // iegūt portu sarakstu: function printList (portList) {// portList ir sērijas portu nosaukumu masīvs (var i = 0; i <portList.length; i ++) {// Parādīt sarakstu konsole: print (i + "" + portList ); }} function serverConnected () {print ('pieslēgts serverim.'); } function portOpen () {print ('seriālais ports atvērts.')} function serialError (err) {print ('Sērijas portam radās problēma.' + err); } function portClose () {print ('Sērijas ports aizvērts.'); } function closCode () {serial.close (portName); return null; } window.onbeforeunload = closCode;

Kad esat saglabājis skeletu. Šīs vērtības varat izmantot līdzīgi kā tas tika darīts ITP apmācībā. Vērtību virkne, ko 6. darbībā nosūtījām no mūsu Arduino, tiek nosūtīta kā 16 skaitļu masīvs. Zemāk mēs analizējam šo masīvu.

// Sērijas datu interpretācija šeit ----------

function serialEvent () {// lasīt virkni no seriālā porta //, līdz tiek parādīta vagonu atgriešanās un jauna rindiņa: var inString = serial.readStringUntil ('\ r / n'); // pārbaudiet, vai tur tiešām ir iestatījums: if (inString.length> 0) {if (inString! == 'hello') {// ja saņemat sveicienu, ignorējiet to var sensors = split (inString, ', '); // sadaliet virkni uz komatiem, ja (sensors.length> 16) {// ja ir sešpadsmit elementi (6 analogie, 10 digitālie) // Šeit izmantojiet sensoru datus:}} serial.write ('x'); // nosūtīt baitu, pieprasot vairāk sērijas datu}}

Tagad mēs varam palaist savu programmu, lai redzētu, vai tā darbojas!

9. darbība. Programmas palaišana

Programmas palaišana
Programmas palaišana

Tagad mēs varam palaist savu programmu, lai redzētu, vai tā darbojas. Jūs varat izveidot savu spēli, izmantojot mūsu iepriekšējā failā esošo skeleton.js failu, vai arī izmantot vienkāršu šeit atrodamo spēli Pipe.

Līdzīgi kā ITP laboratorijā, lai palaistu mūsu programmu, mēs veiksim tālāk norādītās darbības.

  • Pievienojiet Arduino ar kontrolieri, kuru plānojat izmantot.
  • Atveriet p5.serialcontrol
  • Mainiet p5 skices portu uz to, kuru izmantojat (ja izmantojat skeletu, tas ir 3. rindā)
  • Atveriet HTML failu, kas ir saistīts ar jūsu p5 skici

Ja jums ir ārējs datu nesējs, piemēram, attēli vai lejupielādēti fonti, vēlaties to palaist serverī. Ja vēlaties, varat palaist vienkāršu vietējo python serveri.

10. solis: iet tālāk

Lai dotos tālāk un izstrādātu vairāk spēļu šim nolūkam, varat sekot dažādiem piemēriem, kas atrodami šeit. Tālāk ir sniegts sarežģītākas spēles piemērs, kuru es izveidoju. Tā ir 1 pret 1 tanku šāvēja spēle. Visus resursus tam varat atrast vietnē GitHub.

Ieteicams: