Съдържание:

Arduino контролери: 10 стъпки (със снимки)
Arduino контролери: 10 стъпки (със снимки)

Видео: Arduino контролери: 10 стъпки (със снимки)

Видео: Arduino контролери: 10 стъпки (със снимки)
Видео: Как Сделать Робота на Arduino UNO / How to Make a Robot on Arduino UNO 2024, Ноември
Anonim
Arduino контролери
Arduino контролери
Arduino контролери
Arduino контролери

Система за контролер на игри на Arduino, използваща Arduino и библиотеката p5.js. Идеята на това е да се създаде проект на Arduino, който лесно да се копира и разширява. Връзките на контролера са проектирани да използват куп различни сензори и входове, които могат да се разменят в зависимост от всеки контролер.

Този проект също е предназначен да използва JavaScript библиотеката p5.js заедно с библиотеката p5.play, предназначена за p5.js. Тези библиотеки ни позволяват да програмираме нашите игри с лекота. Уебсайтът p5.play има куп уроци и примери за потребителите да създават игри за него. Този проект позволява на потребителите да упражняват своите умения за разработване на хардуер и софтуер.

Стъпка 1: Какво ще ви трябва

Какво ще ви трябва
Какво ще ви трябва

Инструменти:

  • Поялник
  • Припой
  • Машини за сваляне на тел
  • Странични фрези
  • Клещи

Хардуер:

  • Съвместима с Arduino платка (използвах Sparkfun Redboard, както и Arduino Uno и Leonardo)
  • Perf Board:

    • 8см х 6см зелени перф дъски
    • Aduino Uno щит перф дъска
  • Различни сензори

    • Джойстици
    • Бутони (с резистори, 10k ома, с тях)
    • Потенциометри
    • Гъвкави сензори
    • Сензори за налягане
    • И т.н.…
  • Тел:

    • Единичен проводник (използвах 26 AWG Solid)
    • Лентова тел и кримпване
  • Заглавки за прекъсване (поне 20 от тях)
  • Допълнителен хардуер (вместо това можете да използвате картон и hotglue/цип връзки):

    • Кабелни платки и джъмпер кабели за прототипиране
    • 3D отпечатани кутии
    • Хардуерни крепежни елементи (използвах винтове M2.5)

Софтуер:

  • Arduino IDE
  • p5.js библиотека

    P5.play библиотека също

  • p5.serialcontrol
  • Node.js

Стъпка 2: Изграждане: Конзолният концентратор, Настройване на щита

Сграда: Конзолният център, Настройване на щита
Сграда: Конзолният център, Настройване на щита

Запоявайте заглавките към перф дъската на Arduino Uno shield.

  • Започнах с заглавията на щита (захранване, аналогов вход и цифров)
  • Следват щифтовете за заглавие 2x5. Можете да използвате 2x5 заглавки или само 2 реда от 5 откъснати заглавки. Подредих ги с A3 и A4 вертикално и оставих 2 интервала между тях.

Стъпка 3: Изграждане: Конзолен концентратор, окабеляване на щита

Сграда: Конзолният център, окабеляване на щита
Сграда: Конзолният център, окабеляване на щита
Сграда: Конзолният център, окабеляване на щита
Сграда: Конзолният център, окабеляване на щита
Сграда: конзолен хъб, окабеляване на щита
Сграда: конзолен хъб, окабеляване на щита

След това искаме да насочим нашите проводници към щита. По -лесно е да прокарате проводниците отгоре, но ако искате по -чист вид, можете да ги прокарате отдолу.

Искате да обърнете внимание на схемата (схемата на Eagle е достъпна за изтегляне), когато насочвате тези проводници. Можете също да погледнете ръководството за цветове, което да ви помогне в това.

Идеята на този дизайн на щита е да позволи 3 аналогови входа и 5 цифрови входа от всеки контролер. Това напълно се възползва от всички аналогови входове на Arduino Uno, както и от останалите проводници на нашия лентов кабел.

Стъпка 4: Изграждане на контролерите, настройка на вашите части

Изграждане: контролерите, настройка на вашите части
Изграждане: контролерите, настройка на вашите части
Изграждане: контролерите, настройка на вашите части
Изграждане: контролерите, настройка на вашите части
Изграждане: контролерите, настройка на вашите части
Изграждане: контролерите, настройка на вашите части

Първата стъпка към изграждането на вашия контролер е да планирате кои сензори да използвате. В моите примери имам доста стандартен контролер с джойстик и няколко бутона. Имам и контролер с два плъзгащи потенциометра.

Ако искате да повторите това, можете да видите моите изображения за поставяне.

Следващата стъпка е да запоите лентовия си кабел към перф дъската.

  1. Разделете и оловете лентовия кабел
  2. Запояйте лентовия кабел към горния център на вашата перф дъска.

Следващата стъпка е да насочите кабелите си. Започнах с първо свързване на захранването (5V/червен проводник) и земята (кафяв проводник) към сензорите. След това свързах аналоговите входове. Лесно ми беше да използвам оранжевия кабел (Analog A0 или A3) за хоризонтално движение и жълтия кабел (Analog A1 или A4) за вертикално движение.

За да поддържам нещата последователни, аз също свързах малък бутон към лилаво на всичките си контролери. Това е полезно за неща като затваряне на серийния порт (ще разгледам това по -късно), както и за менюта или опции.

Качих бърза схема на моя джойстик контролер, ако искате да разгледате това. От нашата схема на извеждане можете да видите възможността за всяко свързване на контролер (3 аналогови входа и 5 цифрови).

Стъпка 5: По избор: Корпуси

По избор: Корпуси
По избор: Корпуси
По избор: Корпуси
По избор: Корпуси
По избор: Корпуси
По избор: Корпуси

Тази стъпка не е задължителна, но ако имате достъп до 3D принтер, резултатът от вашия проект ще изглежда малко по -изискан и завършен. Както можете да видите в моите прототипи, използвах обикновен картон, за да предотвратя споенето на споените фуги на дъното на перфорационните дъски с пръсти.

Можете да намерите моите 3D модели, приложени към тази стъпка. Създадох кутии за хъба както за Arduino Uno/Leonardo, така и за Sparkfun RedBoard (тази платка е малко по -широка и използва мини USB).

За контролерите можете да ги прикрепите с винтове M2.5. Запазих гайката отстрани на печатната платка и използвам шайба и винта отдолу.

Включих и 3D модела за плъзгачите на копчетата за използваните от мен потенциометри.

Можете да намерите всички 3D файлове на GitHub.

Стъпка 6: Програмиране: Arduino

Програмиране: Arduino
Програмиране: Arduino

Нека започнем с настройването на проста скица за тестване. Предлагам да използвате урока, създаден от ITP в Нюйоркския университет, намерен тук. За да направите този урок, ще трябва да имате инсталирани p5.serialcontroll и node.js. В този урок ще се запознаете с настройването на Arduino за изпращане на серийни данни, които могат да се използват от нашата javascript библиотека, p5.js. Можете да използвате хъба и контролера, които създадохме в предишните стъпки, за да направите това, или можете да репликирате схемите, демонстрирани в урока. Този урок използва аналоговия входен щифт A0 на Arduino Uno, който е съпоставен с оранжевия проводник на първия ви контролер.

Следващият урок, който искате да следвате, можете да намерите тук. Този урок ще ви води през настройването на множество входове и използването им в p5.js. В урока се използват аналоговите входове A0 и A1. Те ще съответстват на оранжевите и жълтите проводници на контролер 1 на нашата система.

След като преминете през уроците по -горе, можем да програмираме Arduino. Кодът, който искаме да използваме, е по -долу:

// контролер 1const int dig2 = 2; // син const int dig3 = 3; // лилаво const int dig4 = 4; // сив const int dig5 = 5; // бял const int dig6 = 6; // черно // контролер 2 const int dig7 = 7; // син const int dig8 = 8; // лилаво const int dig9 = 9; // сив const int dig10 = 10; // бял const int dig11 = 11; // черно

void setup () {

Serial.begin (9600); while (Serial.available () <= 0) {Serial.println ("здравей"); // изпращане на закъснение при стартиране на съобщението (300); // изчакайте 1/3 секунда} 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) {// прочетете входящия байт: int inByte = Serial.read (); // прочетете сензора:

// ANALOG контролер 1

int analog0 = analogRead (A0); int analog1 = analogRead (A1); int analog2 = analogRead (A2); // ANALOG контролер 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); // отпечатаме резултатите: Serial.print (analog0); // [0] Serial.print (","); Serial.print (analog1); // [1] Serial.print (","); Serial.print (analog2); // [2] Serial.print (","); // Стартиране на данни от контролер 2 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 (","); // Стартиране на контролер 2 данни 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] } }

Този код изпраща серийните данни от двата ни контролера като масив от 16 числа. Първите 6 от тези числа са нашите аналогови входове (вариращи от 0-1023), а останалите 10 стойности са нашите цифрови стойности (0 или 1).

След като кодът ни бъде качен, можем да тестваме това, като отворим серийния монитор и въведем стойност в нашия сериен монитор, както направихме във втория урок от ITP. Трябва да получим низ от нашите стойности, разделени със запетаи.

Стъпка 7: Програмиране: HTML

След като настроим и заработим нашия Arduino, можем да започнем да програмираме нашите уеб неща. HTML кодът е много прост.

тяло {подложка: 0; марж: 0;}

Html кодът просто свързва нашите javascript файлове заедно. По -голямата част от нашия код всъщност ще се случи в нашия sketch.js файл.

Стъпка 8: Програмиране: P5.js и Javascript

След като настроим HTML, можем да работим върху нашия JavaScript. Ако още не сте го направили, сега трябва да изтеглите p5.js, както и p5.play и да ги добавите в папката на вашите библиотеки в директорията за вашия уебсайт.

  • p5.js
  • p5.play

В предишната си стъпка, ние настроихме нашия HTML файл да извиква нашите библиотеки p5.js и p5.play. Също така го настроихме да използва нашия файл sketch.js, където ще правим по -голямата част от нашето програмиране. По -долу е кодът за нашия скелет. Можете също да го намерите тук.

// Serial Variablesvar сериен; // променлива за съхраняване на екземпляр от библиотеката на серийния порт var portName = 'COM4'; // попълнете името на вашия сериен порт тук // Глобални променливи на играта ---------------

// Функция за настройка ----------------------

функция setup () {createCanvas (640, 480); сериен = нов p5. SerialPort (); // правим нов екземпляр на библиотеката на serialport serial.on ('list', printList); // задаваме функция за обратно повикване за събитието от списъка на серийния порт serial.on ('connected', serverConnected); // обратно повикване за свързване към сървъра serial.on ('open', portOpen); // обратно повикване за отваряне на порта serial.on ('data', serialEvent); // обратно извикване, когато пристигнат нови данни serial.on ('error', serialError); // обратно извикване за грешки serial.on ('close', portClose); // обратно извикване за затваряне на порта serial.list (); // изброява серийните портове serial.open (portName); // отваря сериен порт} // Функция Draw ----------------------- функция draw () {background (0); // черен фон} // Интерпретира серийни данни тук ---------- функция serialEvent () {// чете низ от серийния порт // докато не получите връщане на каретка и нов ред: var inString = serial. readStringUntil ('\ r / n'); // проверете дали всъщност има ssetring там: if (inString.length> 0) {if (inString! == 'hello') {// ако получите hello, игнорирайте го var sensors = split (inString, ', '); // разделяме низа върху запетаите if (sensors.length> 16) {// ако има шестнадесет елемента (6 аналогови, 10 цифрови) // Използвайте сензорни данни тук:

}

} serial.write ('x'); // изпращаме байт, изискващ повече серийни данни}} // получаваме списъка с портове: функция printList (portList) {// portList е масив от имена на серийни портове за (var i = 0; i <portList.length; i ++) {// Показва списъка на конзолата: print (i + "" + portList ); }} function serverConnected () {print ('свързан със сървъра.'); } function portOpen () {print ('серийният порт е отворен.')} function serialError (err) {print ('Нещо се обърка със серийния порт.' + err); } функция portClose () {print ('Серийният порт е затворен.'); } функция closeCode () {serial.close (portName); return null; } window.onbeforeunload = closedCode;

След като скелетът бъде запазен. Можете да използвате тези стойности подобно на това как е направено в урока по ITP. Низът от стойности, които изпратихме от нашия Arduino в стъпка 6, се изпраща като масив от 16 числа. По -долу е мястото, където анализираме този масив.

// Тълкувайте серийните данни тук ----------

функция serialEvent () {// чете низ от серийния порт // докато не получите връщане на каретка и нов ред: var inString = serial.readStringUntil ('\ r / n'); // проверяваме дали всъщност има ssetring там: if (inString.length> 0) {if (inString! == 'hello') {// ако получите hello, игнорирайте го var sensors = split (inString, ', '); // разделяме низа на запетаите if (sensors.length> 16) {// ако има шестнадесет елемента (6 аналогови, 10 цифрови) // Използвайте сензорни данни тук:}} serial.write ('x'); // изпращане на байт с искане за повече серийни данни}}

Вече можем да стартираме нашата програма, за да видим дали работи!

Стъпка 9: Изпълнение на вашата програма

Изпълнение на вашата програма
Изпълнение на вашата програма

Вече можем да стартираме нашата програма, за да видим дали работи. Можете или да създадете своя собствена игра, като използвате файла skeleton.js в предишния ни файл, или да използвате простата игра Pipe, намерена тук.

Подобно на ITP Lab, за да стартираме нашата програма, ще следваме стъпките по -долу.

  • Включете Arduino с контролера (ите), който планирате да използвате.
  • Отворете p5.serialcontrol
  • Променете порта на скицата на p5 на този, който използвате (ако използвате скелета, това е на ред 3)
  • Отворете HTML файла, който се свързва с вашата скица на p5

Ако имате външни носители, като изображения или изтеглени шрифтове, ще искате да стартирате това на сървър. Можете да стартирате прост локален сървър на python, ако искате.

Стъпка 10: Продължете напред

За да отидете по -далеч и да разработите повече игри за това, можете да следвате различни примери от p5.play, намерени тук. По -долу е даден пример за по -сложна игра, която създадох. Това е игра срещу стрелба с танкове 1 срещу 1. Можете да намерите всички ресурси за него в GitHub.

Препоръчано: