Съдържание:
- Стъпка 1: Wat Heb Je Nodig?
- Стъпка 2: Обработка на код
- Стъпка 3: Код Arduino
- Стъпка 4: Жътварка
- Стъпка 5: Behuizing
- Стъпка 6: Elektronica
- Стъпка 7: Medewerkers
Видео: Ретро контролер: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.
Samen hebben we een muziek controller gemaakt dat muziek kan starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.
Ons idee kwam van van een касета, ons doel беше om een controller te maken dat lijkt op een касета.
Стъпка 1: Wat Heb Je Nodig?
Компонентен
- 2 бутона;
- 2 потенциометра;
- 2 веренстандана (1K лос);
- Arduino uno/nano
- Draadjes (zie elektronisch схема)
- Soldeerplaat
- плоча от MDF
Инструменти
- Лазерно рязане
- Книптанг
- Стриптанг
- Soldeerbout (мет калай)
Програми
- Илюстратор/дизайн (Tekenprogramma)
- Жътварка
- Обработка
- Arduino
Стъпка 2: Обработка на код
/**
* Основна скица за получаване на серийни съобщения от Arduino * и ги превежда в OSC съобщения за Reaper * * Ще трябва да адаптирате ПАРАМЕТРИТЕ НА ПОТРЕБИТЕЛЯ * и ще трябва да инсталирате библиотека: oscP5 * * направена за werkcollege AV&IT * от annoo bob eddi * oct 2017 * *////////////////////// ПОТРЕБИТЕЛСКИ ПАРАМЕТРИ ////////////////////// ////////
/ уверете се, че използвате същата скорост на предаване във вашата скица на Arduino окончателен int baudRate = 115200;
// Отидете и потърсете IP-адреса в Reaper, когато използвате OSC // Това е адресът, който Processing изпраща и Reaper слуша. // Поставете този низ в remoteIP, тук.
// краен String remoteIP = "192.168.1.43"; // напр. "127.0.0.1";
final String remoteIP = "vul hier ip in gevonden in reaper";
// Вземете под внимание sendPort и го попълнете в Reaper. // Това е портът, който Processing изпраща и Reaper слуша.
краен int listenPort = 11000, sendPort = 12000;
// ListenPort тук е за активно отстраняване на грешки.
// portNames също са тук за отстраняване на грешки.
final String portName = "vul hier de portname in gevonden in Arduino";
// краен String portName = "COM6"; // "/dev/ttyUSB0";
/////////////////////// КРАЙ НА ПАРАМЕТРИТЕ НА ПОТРЕБИТЕЛИТЕ /////////////////////////// ////
обработка на внос.serial.*; импортиране на java.util.*;
импортиране на oscP5.*; внос netP5.*;
OscP5 oscP5; NetAddress myRemoteLocation;
Serial commsPort; // Логично съобщение на серийния портArrived = false;
Низ incoming = "", IncomingOSCMessage = "";
заключителен char startChar = '*', endChar = '#'; заключителен char contactCharacter = '|';
// За да сме сигурни, че изпращаме само параметрите (стойностите), които се променят // тези глобални променливи са разделени тук, но не трябва // да се инициализират тук! HashMap oldParams, newParams, toSendParams;
// Трябва да разделим съобщението при всяка запетая void processIncoming () {String resVec = incoming.split (","); // получаваме двойки име+стойност // така че за всяко име (+2) … опитайте {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // ги поставяме в новата Hashtable newParams.put (resVec , стойност); }} // ако възникне грешка, нека я хванем за показване и изход. catch (Exception ex) {println ("Съобщение за изключение:" + ex); printArray (resVec); изход (); }}
// За да филтрираме нашите съобщения/ * Ние се уверяваме, че има само съобщение за излизане от OSC, когато * се променя входното съобщение (Serial) * Тоест: ако завъртим/натиснем бутона и той промени стойността. * Затова филтрираме входящите стойности, които действително се променят * забележка: няма да избегнем прескачане на стойности *, идващи например от акселерометри или сензори за разстояние * ще трябва сами да ги изгладите в Arduino */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// ако ключът вече присъства if (oldParams.containsKey (key)) {// ключът присъства и стойността не е същата, след това актуализирайте if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ключът не присъства в старите параметри, така че го кажете! toSendParams.put (ключ, newParams.get (ключ)); } oldParams.put (ключ, newParams.get (ключ)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = нов OscMessage ("/"+ ключ); myMessage.add (toSendParams.get (ключ)); / * изпратете съобщението */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Когато искаме да отпечатаме в прозореца void ShowIncoming () {// за да видим входящо съобщение, както е зададено в текста на HashMap ("Входящо от Arduino", 20, 20); int y = 20; for (Ключ за низ: newParams.keySet ()) {y = y+20; текст (ключ, 20, y); текст (newParams.get (key), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); ВходящOSCMessage = ""; }
void setup () {размер (1000, 800); // Запълване на размер на етапа (255); фон (0); oldParams = нов HashMap (); newParams = нов HashMap (); // printArray (Serial.list ()); commsPort = нов сериен (това, portName, baudRate);
/ * стартиране на oscP5, слушане на входящи съобщения */ oscP5 = нов OscP5 (this, listenPort);
/* myRemoteLocation е NetAddress. NetAddress приема 2 параметъра, * ip адрес и номер на порт. myRemoteLocation се използва като параметър в * oscP5.send () при изпращане на osc пакети на друг компютър, устройство, * приложение. употреба вижте по -долу. за целите на тестването портът за слушане * и портът на адреса на отдалеченото местоположение са еднакви, следователно ще * изпращате съобщения обратно към тази скица. */ myRemoteLocation = нов NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// четене на байт от серийния порт: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // искаме повече println ("стартиране …"); прекъсване; случай startChar: incoming = ""; прекъсване; случай endChar: messageArrived = true; // println ("край на съобщението"); прекъсване; по подразбиране: входящ += inChar; прекъсване; }}
/* входящото osc съобщение се препраща към метода oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // получавам първия osc аргумент
IncomingOSCMessage + = "\ n" + String.format ("### получи osc съобщение:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", стойност); println (IncomingOSCMessage); }
Стъпка 3: Код Arduino
/* Този код е основна скица за комуникация с Processing through Serial.
Това е план, в който можете да поставите свой собствен код, определен за вашите собствени бутони, потенциометри или сензори.
Той има ръкостискане, за да се увери, че имаме контакт и форматът, в който комуникираме, е решен
Важно е да се конструира съобщението по същия начин, така че Processing да знае как да го деконструира и да изпрати правилни OSC съобщения до нашия DAW
направено за werkcollege AV&IT окт 2017
изглаждащ код, създаден на 22 април 2007 г. от Дейвид А. Мелис, променен на 9 април 2012 г. от Том Иго
*/
/ скорост на предаване const long baudRate = 115200;
// време за изчакване в мс между анкети за изводите const int loopPauseTime = 200; // милисекунди
// начална и крайна стойност за съобщението, изпратено на Serial const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // оценяване на изглаждане на ван
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// други глобални променливи int buttonState1 = 0; int buttonState2 = 0; // променлива за четене на сензора за състояние на бутон на състоянието на бутонValue1 = 0; поплавъчен сензорValue2 = 0; поплавъчен сензорValue3 = 0;
// изглаждане на int показанията [numReadings]; // показанията от аналоговия вход int readIndex3 = 0; // индексът на текущото отчитане int total3 = 0; // текущата обща плаваща средна стойност3 = 0; // средното
// Нуждаем се от тази функция, за да установим контакт със скицата за обработка // Дръжте я тук void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // изпращаме знак и чакаме отговор … забавяне (loopPauseTime); } Serial.read (); }
void setup () {// задайте pinModes за всички пинове pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// инициализираме Serial comms Serial.begin (baudRate); while (! Сериен); // изглаждане за (int thisReading = 0; thisReading <numReadings; thisReading ++) {показания [thisReading] = 0; }
// изчакайте ръкостискане installContact (); }
void loop () {// анкетираме всички пинове и картографираме показанията в съответния диапазон buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// картографиране на входящите стойности към необходимите стойности sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = map (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = map (sensorValue3, 0, 700, 50, 100);
// изглаждащ сензор: total3 = total3 - показания [readIndex3]; // четене от сензора: показания [readIndex3] = sensorValue3; // добавяме показанията към общата сума: total3 = total3 + показания [readIndex3]; // напред към следващата позиция в масива: readIndex3 = readIndex3 + 1;
// ако сме в края на масива… if (readIndex3> = numReadings) {//… завъртане до началото: readIndex3 = 0; } // изчисляваме средната стойност: average3 = (total3 / numReadings); // изглаждащ сензор
Serial.print (startString); // стартиране на последователност от съобщения // wirte всички имена, стойности на двойки, разделени със запетаи Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("инфрасензор"); Serial.print (","); Serial.print (средно 3/100); Serial.print (",");
Serial.print ("knop 1 in2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);
// записваме края на съобщението Serial.print (endString);
// изчакай за малко..
забавяне (loopPauseTime); }
Стъпка 4: Жътварка
Стъпка 1: Опции за предпочитане> Предпочитания
Стъпка 2: Ga в предпочитанията на Control/OSC/web en druk op Add
Стъпка 3: Kies bij Контролен режим на повърхността за OSC (отворен контрол на звука)
Стъпка 4: Vul е име на устройството в, vink Получаване на порт aan en vul във ватер при обработката на бий Sendport staat
Стъпка 5: IP адресът на хоста на Kopieer е hier ziet en vul deze in in Processing
Стъпка 6: Druk op ok en de controller не е подробно запознат с Reaper
Стъпка 5: Behuizing
Размери: 170 мм
Дължина: 90 мм
Височина 30 мм
Knoppen: 16 мм (диаметър
Потенциометри: 3 мм (диаметър)
Сензор за стойка: Breedte 2,9 мм
Дължина 0,8 мм
Материал: MDF (3 мм)
Стъпка 6: Elektronica
Стъпка 1:
Verbind de ground и 5 -волтов ван Arduino се срещна с макет
Стъпка 2:
Гъвкав щифт A0 с потенциал 1
Гъвкав щифт A1 с потенциал 2
Verbind щифт A3 с инфрачервен сензор.
Гъвкав щифт A2 с дебел лепкав бутон.
Verbind щифт A5 с лепкав бутон.
Стъпка 7: Medewerkers
- Mayes El Baba
- Арно Горисен
- Михиел Де Ванделаер
Препоръчано:
Ретро аркада - (Пълен размер Осъществено от Raspberry Pi): 8 стъпки
Ретро Аркада - (Пълен размер Осъществено от Raspberry Pi): Първо исках да ви благодаря, че разгледахте ръководството за изграждане на тази система Retro Arcade. Взимам по-стара аркадна кутия и я поставям в самостоятелен шкаф с 24-инчов широкоекранен монитор. Измерванията в това ръководство са груби, за да ви дадат
Огромен контролер за стил на дансинг на ретро игри: 4 стъпки
Огромен контролер за стил на танцова площадка за ретро игри: За нашата сватба през март тази година искахме парти за приемане с тематична игра, тъй като ние сме просто големи деца в сърцето си и съм сигурен, че и много други хора са! Така че след малко проучване на MakeyMakey Мислех, че ще бъде страхотна идея да се прегърна
Arduino базиран DIY контролер за игри - Arduino PS2 контролер за игри - Възпроизвеждане на Tekken с DIY Arduino геймпад: 7 стъпки
Arduino базиран DIY контролер за игри | Arduino PS2 контролер за игри | Игра на Tekken с DIY Arduino геймпад: Здравейте момчета, играта на игри винаги е забавна, но играта със собствения си DIY персонализиран контролер на играта е по -забавна. Така че ще направим контролер за игра, използвайки arduino pro micro в тази инструкция
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: 4 стъпки
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: Здравейте производители, наскоро започнах да отглеждам гъби у дома, гъби стриди, но вече имам 3 пъти от тези контролери у дома за контрол на температурата на ферментатора за моята домашна напитка, съпруга също прави това нещо Комбуча сега и като термостат за топлина
Разбъркване на NES контролер (Nintendo контролер MP3, V3.0): 5 стъпки (със снимки)
Разбъркване на контролера на NES (Nintendo Controller MP3, V3.0): Напълно изтръгнах ryan97128 от неговия дизайн за Nintendo Controller MP3, версия 2.0 и чувам, че той е получил идеята от всички мъдри Morte_Moya, така че не мога да взема кредит за целия им гений. Просто исках да добавя удобство и презареждане