Sisällysluettelo:

Arduino -ohjaimet: 10 vaihetta (kuvilla)
Arduino -ohjaimet: 10 vaihetta (kuvilla)

Video: Arduino -ohjaimet: 10 vaihetta (kuvilla)

Video: Arduino -ohjaimet: 10 vaihetta (kuvilla)
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Heinäkuu
Anonim
Arduino -ohjaimet
Arduino -ohjaimet
Arduino -ohjaimet
Arduino -ohjaimet

Arduino -peliohjainjärjestelmä, joka käyttää Arduinoa ja p5.js -kirjastoa ja jonka tarkoituksena on luoda helposti toistettava ja laajennettava Arduino -projekti. Ohjainliitännät on suunniteltu hyödyntämään joukko erilaisia antureita ja tuloja, jotka voidaan vaihtaa kunkin ohjaimen mukaan.

Tämä projekti on suunniteltu myös hyödyntämään p5.js JavaScript -kirjastoa yhdessä p5.js -kirjastoa varten. Näiden kirjastojen avulla voimme ohjelmoida pelejämme helposti. P5.play -verkkosivustolla on joukko opetusohjelmia ja esimerkkejä käyttäjille pelien luomiseksi. Tämän projektin avulla käyttäjät voivat harjoitella laitteisto- ja ohjelmistokehitystaitojaan.

Vaihe 1: Mitä tarvitset

Mitä tarvitset
Mitä tarvitset

Työkalut:

  • Juotin
  • Juottaa
  • Langanpoistimet
  • Sivuleikkurit
  • Pihdit

Laitteisto:

  • Arduino -yhteensopiva levy (käytin Sparkfun Redboardia sekä Arduino Unoa ja Leonardoa)
  • Perf Board:

    • 8 cm x 6 cm vihreät perf -levyt
    • Aduino Uno -kilpi
  • Erilaisia antureita
    • Ohjaussauvat
    • Painikkeet (vastuksilla, 10k ohmia, niiden kanssa)
    • Potentiometrit
    • Flex -anturit
    • Paineanturit
    • Jne…
  • Johto:

    • Yksijohdin (käytin 26 AWG kiinteää)
    • Nauhalanka ja puristimet
  • Break Away Headers (vähintään 20 näistä)
  • Valinnainen laitteisto (voit käyttää pahvia ja kuumaliimaa/vetoketjuja):

    • Leipälevy ja hyppyjohdot prototyyppien luomiseen
    • 3D -painetut kotelot
    • Laitteiston kiinnikkeet (käytin M2.5 -ruuveja)

Ohjelmisto:

  • Arduino IDE
  • p5.js -kirjasto

    P5.pelaa myös kirjasto

  • p5.sarjanhallinta
  • Node.js

Vaihe 2: Rakentaminen: konsolikeskus, kilven asettaminen

Rakennus: konsolikeskus, kilven asettaminen
Rakennus: konsolikeskus, kilven asettaminen

Juotos otsikot Arduino Uno -kilven peruskortille.

  • Aloitin kilven otsikoilla (virta, analoginen tulo ja digitaalinen)
  • Seuraavaksi ovat 2x5 -otsatapit. Voit käyttää 2x5 ylätunnistetta tai vain 2 riviä 5 erotusotsikkoa. Rivitin ne A3: lla ja A4: llä pystysuoraan ja jätin 2 väliä niiden väliin.

Vaihe 3: Rakentaminen: konsolin napa, johdotus

Rakennus: konsolin napa, johdotus
Rakennus: konsolin napa, johdotus
Rakennus: konsolin napa, johdotus
Rakennus: konsolin napa, johdotus
Rakennus: konsolin napa, johdotus
Rakennus: konsolin napa, johdotus

Seuraavaksi haluamme reitittää johdot suojaan. Johdot on helpompi käyttää ylhäällä, mutta jos haluat puhtaamman ilmeen, voit käyttää niitä alhaalla.

Haluat kiinnittää huomiota kaavioon (Eaglen kaavio on ladattavissa), kun reitität nämä johdot. Voit myös katsoa väriopasta avuksi tässä.

Tämän suojarakenteen ajatuksena on mahdollistaa 3 analogista tuloa ja 5 digitaalituloa jokaisesta ohjaimesta. Tämä hyödyntää täysin kaikki Arduino Unon analogiset tulot sekä nauhakaapelin jäljellä olevat johdot.

Vaihe 4: Rakentaminen: ohjaimet, osien asentaminen

Rakennus: ohjaimet, osien asentaminen
Rakennus: ohjaimet, osien asentaminen
Rakennus: ohjaimet, osien asentaminen
Rakennus: ohjaimet, osien asentaminen
Rakennus: ohjaimet, osien asentaminen
Rakennus: ohjaimet, osien asentaminen

Ensimmäinen vaihe ohjaimen rakentamisessa on suunnitella käytettävät anturit. Esimerkeissäni minulla on melko vakio -ohjain, jossa on ohjaussauva ja muutama painike. Minulla on myös ohjain, jossa on kaksi liukusäätimen potentiometriä.

Jos haluat kopioida tämän, voit katsella kuvia sijoitusta varten.

Seuraava askel on juottaa nauhakaapeli perf -levylle.

  1. Kuori ja tina nauhakaapeli
  2. Juotos nauhakaapeli perf -levyn yläosaan.

Seuraava vaihe on reitittää johdot. Aloitin kytkemällä ensin virran (5V/punainen johto) ja maadoituksen (ruskea johto) antureihin. Johdotin sitten analogiset tulot. Minusta oli helppo käyttää oranssia kaapelia (analoginen A0 tai A3) vaakasuuntaiseen liikkeeseen ja keltaista kaapelia (analoginen A1 tai A4) pystysuuntaiseen liikkeeseen.

Jotta asiat pysyisivät johdonmukaisina, kytkin myös pienen painikkeen purppuranväriseksi kaikkiin ohjaimiini. Tästä on hyötyä esimerkiksi sarjaportin sulkemisessa (tarkastelen tätä myöhemmin) sekä valikoissa tai vaihtoehdoissa.

Olen ladannut nopean kaavion joystick -ohjaimestani, jos haluat katsoa tätä. Pin-out-kaaviosta näet kunkin ohjaimen liitännän mahdollisuuden (3 analogista tuloa ja 5 digitaalista).

Vaihe 5: Valinnainen: Kotelot

Valinnainen: kotelot
Valinnainen: kotelot
Valinnainen: Kotelot
Valinnainen: Kotelot
Valinnainen: kotelot
Valinnainen: kotelot

Tämä vaihe on valinnainen, mutta jos sinulla on pääsy 3D -tulostimeen, projektisi lopputulos näyttää hieman hienostuneemmalta ja valmiimmalta. Kuten voit nähdä prototyypeistäni, käytin yksinkertaista pahvia estääkseni juotosliitokset perforointilevyjen pohjalla tönäisemästä sormiasi.

Löydät 3D -mallini liitteenä tähän vaiheeseen. Olen luonut keskittimelle kotelot sekä Arduino Unolle/Leonardolle että Sparkfun RedBoardille (tämä levy on hieman leveämpi ja käyttää mini -USB: tä).

Säätimille voit kiinnittää ne M2.5 -ruuveilla. Pidin mutteria piirilevyn sivulla ja käytän aluslevyä ja ruuvia pohjassa.

Olen sisällyttänyt myös 3D -mallin käyttämiäni potentiometrejä varten.

Löydät kaikki 3D -tiedostot GitHubista.

Vaihe 6: Ohjelmointi: Arduino

Ohjelmointi: Arduino
Ohjelmointi: Arduino

Aloitetaan luomalla yksinkertainen luonnos testattavaksi. Ehdotan, että käytät NYP: n ITP: n luomaa opetusohjelmaa, joka löytyy täältä. Tämän opetusohjelman suorittamiseksi sinulla on oltava asennettuna p5.serialcontroll ja node.js. Tässä opetusohjelmassa esitellään Arduinon asettaminen lähettämään sarjatietoja, joita voidaan käyttää javascript -kirjastossamme p5.js. Voit käyttää tähän edellisissä vaiheissa luomaamme keskittintä ja ohjainta tai toistaa opetusohjelmassa esitetyt piirit. Tämä opetusohjelma käyttää Arduino Unon A0 -analogista tulotappia, joka on yhdistetty ensimmäisen ohjaimen oranssiin johtimeen.

Seuraava opetusohjelma, jota haluat seurata, löytyy täältä. Tämä opetusohjelma opastaa sinua määrittämään useita tuloja ja hyödyntämään niitä p5.js -tiedostossa. Opetusohjelmassa käytetään analogisia tuloja A0 ja A1. Nämä vastaavat järjestelmän ohjaimen 1 oranssia ja keltaista johtoa.

Kun olet käynyt läpi yllä olevat opetusohjelmat, voimme ohjelmoida Arduinon. Koodi, jota haluamme käyttää, on alla:

// ohjain 1const int dig2 = 2; // sininen const int dig3 = 3; // violetti const int dig4 = 4; // harmaa const int dig5 = 5; // valkoinen const int dig6 = 6; // musta // ohjain 2 const int dig7 = 7; // sininen const int dig8 = 8; // violetti const int dig9 = 9; // harmaa const int dig10 = 10; // valkoinen const int dig11 = 11; //musta

void setup () {

Sarja.alku (9600); while (Serial.available () <= 0) {Serial.println ("hei"); // lähetä aloitusviestin viive (300); // odota 1/3 sekuntia} 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) {// lue saapuva tavu: int inByte = Serial.read (); // lue anturi:

// ANALOG -ohjain 1

int analog0 = analoginen luku (A0); int analog1 = analogRead (A1); int analog2 = analogRead (A2); // ANALOG Controller 2 int analog3 = analogRead (A3); int analog4 = analoginen (A4); int analog5 = analoginen luku (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); // tulosta tulokset: Serial.print (analog0); // [0] Serial.print (","); Serial.print (analog1); // [1] Serial.print (","); Sarjajälki (analoginen2); // [2] Serial.print (","); // Käynnistä Controller 2 data Serial.print (analog3); // [3] Serial.print (","); Serial.print (analog4); // [4] Serial.print (","); Serial.print (analoginen5); // [5] Serial.print (","); Serial.print (digitaalinen2); // [6] Serial.print (","); Serial.print (digitaalinen3); // [7] Serial.print (","); Serial.print (digitaalinen4); // [8] Serial.print (","); Serial.print (digitaalinen5); // [9] Serial.print (","); Serial.print (digitaalinen6); // [10] Serial.print (","); // Käynnistä ohjain 2 data Serial.print (digital7); // [11] Serial.print (","); Serial.print (digitaalinen8); // [12] Serial.print (","); Serial.print (digitaalinen9); // [13] Serial.print (","); Serial.println (digital10); // [14] Serial.print (","); Serial.println (digital11); // [15]}}

Tämä koodi lähettää sarjatiedot molemmilta ohjaimiltamme 16 numeron matriisina. Ensimmäiset 6 näistä numeroista ovat analogisia tulojamme (vaihtelevat 0-1023) ja loput 10 arvoa ovat digitaalisia arvojamme (0 tai 1).

Kun koodimme on ladattu, voimme testata tämän avaamalla sarjamonitorin ja kirjoittamalla arvon sarjamonitoriin, kuten teimme ITP: n 2. opetusohjelmassa. Meidän pitäisi saada merkkijono pilkuilla erotettuna.

Vaihe 7: Ohjelmointi: HTML

Kun olemme saaneet Arduinon käyttöön ja toimimaan, voimme alkaa ohjelmoida web -juttujamme. HTML -koodi on hyvin yksinkertainen.

runko {pehmuste: 0; marginaali: 0;}

HTML -koodi yksinkertaisesti linkittää JavaScript -tiedostomme yhteen. Suurin osa koodistamme tapahtuu luonnos.js -tiedostossamme.

Vaihe 8: Ohjelmointi: P5.js ja Javascript

Kun olemme saaneet HTML -koodin käyttöön, voimme jatkaa JavaScriptin kehittämistä. Jos et ole jo tehnyt sitä, lataa nyt p5.js ja p5.play ja lisää ne verkkosivustosi hakemiston kirjastokansioon.

  • p5.js
  • s.5 pelata

Edellisessä vaiheessa asetimme HTML -tiedostomme soittamaan p5.js- ja p5.play -kirjastoihimme. Asetimme sen myös käyttämään sketch.js -tiedostoa, jossa teemme suurimman osan ohjelmoinnistamme. Alla on luurankon koodi. Löydät sen myös täältä.

// Serial Variablesvar serial; // muuttuja sarjaportin kirjaston ilmentymän säilyttämiseksi var portName = 'COM4'; // kirjoita sarjaporttisi nimi tähän // Globaalit pelimuuttujat ---------------

// Asetustoiminto ----------------------

toimintoasetukset () {createCanvas (640, 480); sarja = uusi p5. SerialPort (); // tee uusi esiintymä serialport -kirjastosta serial.on ('lista', printList); // aseta takaisinsoittotoiminto sarjaporttiluettelotapahtumalle serial.on ('connected', serverConnected); // takaisinsoitto palvelimelle yhdistämistä varten serial.on ('open', portOpen); // takaisinsoitto portin avaamiselle serial.on ('data', serialEvent); // takaisinsoitto, kun uusia tietoja saapuu serial.on ('error', serialError); // virheiden takaisinsoitto serial.on ('close', portClose); // takaisinsoitto portin sulkemiselle serial.list (); // luettelo sarjaporteista serial.open (portName); // avaa sarjaportti} // Piirrä toiminto ----------------------- toiminto draw () {background (0); // musta tausta} // Tulkitse sarjatietoja täällä ---------- toiminto serialEvent () {// lue merkkijono sarjaportista // kunnes saat rivinvaihdon ja uuden rivin: var inString = serial. readStringUntil ('\ r / n'); // tarkista, että siellä on todella asetus: if (inString.length> 0) {if (inString! == 'hello') {// jos saat tervehdyksen, jätä se huomiotta var anturit = split (inString, ', '); // jaa merkkijono pilkuiksi, jos (anturit.pituus> 16) {// jos on kuusitoista elementtiä (6 analogista, 10 digitaalista) // Käytä anturitietoja tässä:

}

} serial.write ('x'); // lähetä tavu, joka pyytää lisää sarjatietoja}} // hanki porttiluettelo: function printList (portList) {// portList on sarjaporttien nimisarja (var i = 0; i <portList.length; i ++) {// Näytä konsolin luettelo: print (i + "" + portList ); }} function serverConnected () {print ('yhdistetty palvelimeen'); } function portOpen () {print ('sarjaportti avattu.')} function serialError (err) {print ('Jotain meni pieleen sarjaportin kanssa.' + err); } function portClose () {print ('Sarjaportti suljettu.'); } toiminto closedCode () {serial.close (portin_nimi); paluu nolla; } window.onbeforeunload = closedCode;

Kun luuranko on tallennettu. Voit käyttää näitä arvoja samalla tavalla kuin ITP -opetusohjelmassa. Arduinollamme vaiheessa 6 lähettämämme merkkijono lähetetään 16 numeron matriisina. Alla jäsennämme tämän taulukon.

// Tulkitse sarjatietoja täällä ----------

function serialEvent () {// lue merkkijono sarjaportista // kunnes saat vaunun paluun ja uuden rivin: var inString = serial.readStringUntil ('\ r / n'); // tarkista, että siellä on todella asetus: if (inString.length> 0) {if (inString! == 'hello') {// jos saat tervehdyksen, jätä se huomiotta var anturit = split (inString, ', '); // jakaa merkkijonon pilkulle, jos (anturit.pituus> 16) {// jos on kuusitoista elementtiä (6 analogista, 10 digitaalista) // Käytä anturitietoja tässä:}} serial.write ('x'); // lähetä tavu, joka pyytää lisää sarjatietoja}}

Voimme nyt suorittaa ohjelmamme nähdäksemme, toimiiko se!

Vaihe 9: Ohjelman suorittaminen

Ohjelman suorittaminen
Ohjelman suorittaminen

Voimme nyt suorittaa ohjelmamme nähdäksemme, toimiiko se. Voit joko luoda oman pelisi käyttämällä skeleton.js -tiedostoa edellisessä tiedostossamme tai käyttää yksinkertaista Pipe -peliä, joka löytyy täältä.

ITP Labin tapaan suoritamme ohjelmamme noudattamalla alla olevia vaiheita.

  • Kytke Arduino laitteeseen ohjaimella, jota aiot käyttää.
  • Avaa p5.serialcontrol
  • Vaihda p5 -luonnoksen portti käyttämääsi porttiin (jos käytät luurankoa, tämä on rivillä 3)
  • Avaa HTML -tiedosto, joka linkittää p5 -luonnokseesi

Jos sinulla on ulkopuolista mediaa, kuten kuvia tai ladattuja fontteja, haluat suorittaa tämän palvelimella. Voit käyttää yksinkertaista paikallista python -palvelinta, jos haluat.

Vaihe 10: Siirry pidemmälle

Jos haluat mennä pidemmälle ja kehittää enemmän pelejä tätä varten, voit seurata erilaisia esimerkkejä, jotka löytyvät täältä. Alla on esimerkki monimutkaisemmasta pelistä, jonka olen luonut. Peli on 1 vs 1. Löydät kaikki resurssit siihen GitHubista.

Suositeltava: