Съдържание:
- Стъпка 1: Какво ще ви трябва
- Стъпка 2: Изграждане: Конзолният концентратор, Настройване на щита
- Стъпка 3: Изграждане: Конзолен концентратор, окабеляване на щита
- Стъпка 4: Изграждане на контролерите, настройка на вашите части
- Стъпка 5: По избор: Корпуси
- Стъпка 6: Програмиране: Arduino
- Стъпка 7: Програмиране: HTML
- Стъпка 8: Програмиране: P5.js и Javascript
- Стъпка 9: Изпълнение на вашата програма
- Стъпка 10: Продължете напред
Видео: Arduino контролери: 10 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Система за контролер на игри на 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: Изграждане на контролерите, настройка на вашите части
Първата стъпка към изграждането на вашия контролер е да планирате кои сензори да използвате. В моите примери имам доста стандартен контролер с джойстик и няколко бутона. Имам и контролер с два плъзгащи потенциометра.
Ако искате да повторите това, можете да видите моите изображения за поставяне.
Следващата стъпка е да запоите лентовия си кабел към перф дъската.
- Разделете и оловете лентовия кабел
- Запояйте лентовия кабел към горния център на вашата перф дъска.
Следващата стъпка е да насочите кабелите си. Започнах с първо свързване на захранването (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
Нека започнем с настройването на проста скица за тестване. Предлагам да използвате урока, създаден от 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.
Препоръчано:
Как да направите мултиплейър игра с Arduino контролери: 6 стъпки
Как да си направим мултиплейър игра с Arduino контролери: Замисляли ли сте се как разработчиците на игри създават невероятни игри, които хората от цял свят обичат да играят? Е, днес ще ви дам само малък намек за това, като направя малка мултиплейър игра, която ще се контролира от контролер на Arduino
Ремонт на контролер на ролкови контролери Philips CD-I: 5 стъпки
Ремонт на ролковия контролер на Philips CD-I: Често срещан проблем с ролковия контролер на Philips на CD-I е, че инфрачервените излъчватели ще се влошат в производителността, а топката за проследяване със спиране за проследяване. Бутоните ще работят, но тракболът няма да се движи. Това може да бъде поправено чрез премахване и подмяна на
Всички адаптивни контролери: 7 стъпки
All Adaptive Controller: 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 de software como de hardware, además se dará un breve resumen del desarrollo y la implementa
Как да използвате неподдържани контролери с IOS 9.3.5 устройство: 23 стъпки
Как да използвате неподдържани контролери с IOS 9.3.5 Устройство: Необходими материали: Контролер PlayStation 4 Кабел за зареждане на осветление Лаптоп с Windows 10 iPod Touch 5 -то поколение Лаптоп Мишка Лаптоп Съответният кабел за зареждане
Ръчна конзола с безжични контролери и сензори (Arduino MEGA & UNO): 10 стъпки (със снимки)
Ръчна конзола с безжични контролери и сензори (Arduino MEGA & UNO): Какво използвах:- Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 Сензорен екран HXD8357D- Звуков сигнал- 4Ohm 3W високоговорител- 5 мм LED светлини- принтер Ultimaker 2+ с черна PLA нишка- лазерна резачка с MDF дърво- черна спрей боя (за дърво)- 3x nRF24