Мазмуну:
- 1 -кадам: Wat Heb Je Nodig?
- 2 -кадам: Кодду иштетүү
- 3 -кадам: Arduino коду
- 4 -кадам: орокчу
- 5 -кадам: Behuizing
- 6 -кадам: Электроника
- 7 -кадам: Медиа кабарчылар
Video: Ретро контролер: 7 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Студенттердин көбү Мультимедиа жана коммуникативдик технологиялар (Multec) жана Брюсселде Эразмушогесектепте окушат.
Samen hebben биз музыкалык контролерду иштете/токтото аларыбызды, ошондой эле канчалаган верфогендерди, кандай тергепполендер жок экенин билебиз.
Бул кассетанын эң башкы кассетасы, ал эми контролеру бул кассетада болчу.
1 -кадам: Wat Heb Je Nodig?
Componenten
- 2 баскычтар;
- 2 потенцио метр;
- 2 weerstanden (1K багыш);
- Arduino uno/nano
- Draadjes (zie elektronisch схемасы)
- Soldeerplaat
- MDF платы
Куралдар
- Ласеркуттер
- Кипт
- Striptang
- Soldeerbout (калай менен жолугушту)
Программанын
- Иллюстратор/дизайн (Текенпрограмма)
- Орокчу
- Иштетүү
- Ардуино
2 -кадам: Кодду иштетүү
/**
* Ардуинодон сериялык билдирүүлөрдү алуу үчүн негизги эскиз * жана аларды орокчу үчүн OSC-билдирүүлөргө которот * * КОЛДОНУЧТУН ПАРАМЕТРЛЕРИН * ыңгайлаштырышыңыз керек жана китепкананы орнотушуңуз керек: oscP5 * * werkcollege AV&IT * үчүн жасалган annoo bob eddi * октябрь 2017 * *////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////
/ Arduino эскизинин акыркы int baudRate = 115200дө ошол эле ылдамдыкты колдонгонуңузду текшериңиз;
// Барып, OSCти колдонууда Reaperден IP дарегин издеңиз // Бул Processing жөнөтүүчү жана Reaper угуучу дарек. // Бул жипти алыскы IPге коюңуз, бул жерде.
// акыркы String remoteIP = "192.168.1.43"; // мис. "127.0.0.1";
final String remoteIP = "оруп -жыйноодо гевонден vul hier ip";
// sendPortко көңүл буруңуз жана муну Reaperге толтуруңуз. // Бул порт иштетүү жөнөтөт жана орокчу угат.
final int listenPort = 11000, sendPort = 12000;
// Бул жерде listenPort активдүү түрдө мүчүлүштүктөрдү оңдоо болуп саналат.
// порт аттары мүчүлүштүктөрдү оңдоо үчүн бул жерде.
final String portName = "Ардуинодогу порт аталыштары";
// акыркы String portName = "COM6"; // "/dev/ttyUSB0";
////////////////////// КОЛДОНУЧТУН ПАРАМЕТРЛЕРИНИН АЯГЫ ///////////////////////// ////
импортту иштетүү.сериал.*; java.util импорттоо.*;
oscP5 импорттоо.*; netP5 импорттоо.*;
OscP5 oscP5; NetAddress myRemoteLocation;
Serial commsPort; // Сериялык порт логикалык messageArrived = false;
String incoming = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final 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 ("Exception Message:" + ex); printArray (resVec); чыгуу (); }}
// Билдирүүлөрүбүздү чыпкалоо үчүн/ * Биз * киргизүү билдирүүсү (Сериялык) өзгөргөндө OSC-билдирүүсүнүн гана бар экенине ынанабыз * Башкача айтканда: эгер биз баскычты буруп/бассак, ал маанини өзгөртөт. * Ошентип, биз иш жүзүндө өзгөрүп жаткан кирүүчү баалуулуктарды чыпкалайбыз * эскертүү: биз мисалы, акселерометрлерден же аралык сенсорлорунан келген секириктен качпайбыз *, буларды өзүңүз Arduino */ void filterParams () {toSendParams = new ичинде жылмакай кылышыңыз керек болот. HashMap (); үчүн (String key: newParams.keySet ()) {// эгерде ачкыч мурунтан эле бар болсо (oldParams.containsKey (key)) {// ачкычы бирдей эмес болсо, анда (! oldParams.get (key)).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ачкычы эски параметрлерде жок, андыктан! toSendParams.put (key, newParams.get (key)); } oldParams.put (key, newParams.get (key)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (key)); / * билдирүү жөнөтүү */ oscP5.send (myMessage, myRemoteLocation); }}
жараксыз translateMessage () {processIncoming (); filterParams (); makeOSC (); } // HashMap текстинде белгиленгендей, келген билдирүүнү көрүү үчүн void ShowIncoming () {// терезесине басып чыгаргысы келгенде ("Ардуинодон келгендер", 20, 20); int y = 20; for (String key: newParams.keySet ()) {y = y+20; текст (ачкыч, 20, у); текст (newParams.get (key), 300, y); }}
void showOsc () {текст (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {size (1000, 800); // Этаптын көлөмүн толтуруу (255); background (0); oldParams = жаңы HashMap (); newParams = жаңы HashMap (); // printArray (Serial.list ()); commsPort = жаңы серия (бул, portName, baudRate);
/ * баштоо oscP5, келген билдирүүлөрдү угуу */ oscP5 = жаңы OscP5 (бул, 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 сураңыз ("баштап…"); тыныгуу; case startChar: incoming = ""; тыныгуу; case endChar: messageArrived = true; // println ("msg аягы"); тыныгуу; демейки: кирген += inChar; тыныгуу; }}
/* келген Оск кабар oscEvent ыкмасына жөнөтүлөт. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // 1 -Оскар аргументин алыңыз
IncomingOSCMessage + = "\ n" + String.format ("### Оскар билдирүүсүн алды:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", мааниси); println (IncomingOSCMessage); }
3 -кадам: Arduino коду
/* Бул код сериялык аркылуу иштетүү менен байланышуу үчүн негизги эскиз.
Бул өз баскычтарыңызга, потенциометрлерге же сенсорлорго көрсөтүлгөн өз кодуңузду коюуга мүмкүн болгон план.
Байланышта экенибизди жана биз кандай форматта сүйлөшүп жаткандыгыбызды текшерүү үчүн кол алышуу бар
Кабарды ушундай жол менен куруу маанилүү, ошону менен Процесс аны кантип конструкциясын бузууну жана биздин DAWке туура OSC-билдирүүлөрдү жөнөтүүнү билет.
werkcollege AV&IT октябрь 2017 үчүн жасалган
код smooothing 22 -апрель 2007 -жылы Дэвид А. Меллис тарабынан түзүлгөн, 9 -апрель 2012 -жылы Том Игоо тарабынан өзгөртүлгөн
*/
/ baud rate const long baudRate = 115200;
// сурамжылоолордун ортосунда мн күтүүнүн убактысы pin pint const int loopPauseTime = 200; // миллий секунд
// Serial const String startString = "*", endString = "#" боюнча жөнөтүлгөн кабар үчүн баштоо жана аяктоо мааниси;
const char contactCharacter = '|';
// пин 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; float sensorValue2 = 0; float sensorValue3 = 0;
// Int окууларын текшилөө [numReadings]; // int readIndex3 = 0 аналогдук киришинен окуулар; // учурдагы окуу индекси int total3 = 0; // иштеп жаткан жалпы калкыма орточо3 = 0; // орточо
// Иштетүү эскизи менен байланыш түзүү үчүн бул функцияга муктажбыз // Бул жерде аны жокко чыгарба // тамга жөнөтүү жана жоопту күтүү… кечигүү (loopPauseTime); } Serial.read (); }
void setup () {// бардык pinMode үчүн pinModes орнотуу (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 ++) {readings [thisReading] = 0; }
// кол кармашууну күткүлө installContact (); }
void loop () {// бардык төөнөгүчтөрдү сурамжылоо жана окууну тиешелүү диапазонго карта кылууState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// келген баалуулуктарды керектүү баалуулуктарга картага коюу sensorValue1 = карта (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = карта (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = карта (sensorValue3, 0, 700, 50, 100);
// тегиздөөчү сенсор: total3 = total3 - окуу [readIndex3]; // сенсордон окуу: окуу [readIndex3] = sensorValue3; // окуусун жалпыга кошуу: total3 = total3 + readings [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 -стап: Жөндөөлөр> Prefrences
2 -стап: Control/OSC/веб -сайттарды кошуу боюнча префенцияларда
3 -стап: OSCтин ачык режимин башкаруу
4 -стап: Vul je device name in, vink Recieve on port aan en vul in wat er боловсруулах in bij Sendport staat
5 -тиркеме: Колдонуучу IP иштетүү бөлүмүндө иштейт
6 -стап: Druk op ok en de controller is no verbonden met Reaper
5 -кадам: Behuizing
Туурасы: 170 мм
Узундугу: 90 мм
Гугт 30 мм
Knoppen: 16 мм (диаметри
Потенцио метр: 3 мм (диаметри)
Сенсор: Breedte 2.9 мм
Узундугу 0,8 мм
Материалдык: MDF (3мм)
6 -кадам: Электроника
1 -степ:
Verbind de ground en 5 volt van Arduino nontboard
2 -степ:
Verbind пин A0 потенцио 1 менен жолугушту
Verbind пин A1 потенцио 2 менен жолугушту
Verbind пин A3 инфраструктура сенсоруна жолукту.
Verbind пин A2 де niet жабышчаак баскычы менен жолугушту.
V5 тилкеси A5 жабышчаак баскыч менен жолугушту.
7 -кадам: Медиа кабарчылар
- Майес Эл Баба
- Арно Гориссен
- Michiel De Wandelaer
Сунушталууда:
Ретро Аркада - (Толук көлөмү Raspberry Pi тарабынан иштелип чыккан): 8 кадам
Ретро Аркада - (Толук Өлчөмү Raspberry Pi тарабынан иштелип чыккан): Биринчиден, мен бул Ретро Аркада тутумунун курулушу боюнча көрсөтмөнү карап чыкканың үчүн рахмат айткым келди. Мен эски аркада кутусун алып, аны 24 дюймдук кең экран менен өзүнчө шкафка салып жатам. Бул колдонмодогу өлчөөлөр сизге кыйын
Ретро "Rayotron" Night Light (1 -бөлүк): 16 кадам
Ретро "Райотрон" түнкү жарык (1-бөлүк): Киришүү 1956-жылы декабрда Атом лабораториялары Райотронду илим мугалимдери жана хоббисттери үчүн " Биринчи арзан электростатикалык генератор жана бөлүкчө ылдамдаткычы & amprdquo деп жарыялаган. Rayotron супер өлчөмдүү, резина кур менен толтурулган
Ретро CP/M Stand Alone Emulator: 8 кадам
Ретро CP/M Stand Alone Emulator: Бул проект VGA32 ESP v1.4 модулун колдонот же RunCPM жана FabGLди иштетүү үчүн CP/M 2.2ге эквиваленттүү системаны иштетүүчү компьютерди камсыз кылат. 1980 -жылдары чакан компьютерлер үчүн операциялык система катары популярдуу болгон. Сиз кайра кире аласыз
Micro Center тарабынан 2-оюнчу Stand-Up ретро Аркада: 20 кадам
Micro Center тарабынан 2-оюнчу Stand-Up ретро аркадасы: Сиздин жергиликтүү микро борборуңуз азыр Raspberry Pi негизиндеги Retro Arcade кабинетин жасоо үчүн керектүү нерселердин бардыгын камтыйт. Топтомдор толугу менен ыңгайлаштырылган, анын ичинде шкаф, Raspberry Pi, баскычтар, джойстиктер, аудио жана видео аксессуарлар жана башкалар бар. Бул
Raspberry Pi ретро оюн машинасын орнотуу: 5 кадам
Raspberry Pi Retro Gaming Machine Setup: Эсептөөнүн алгачкы күндөрүнөн баштап ретро-аркада оюндарын кайталоо үчүн, Rasberry Pi жана Retropie системасын коштоочу, сиз каалагандай эски оюндарда же хобби катары үй шартында орнотуу үчүн эң сонун. Pi үйрөнүү. Бул система болгон