Mundarija:

Retro nazoratchi: 7 qadam
Retro nazoratchi: 7 qadam

Video: Retro nazoratchi: 7 qadam

Video: Retro nazoratchi: 7 qadam
Video: Shahzoda - To'rt qadam | Шахзода - Турт кадам 2024, Sentyabr
Anonim
Retro nazoratchi
Retro nazoratchi

Bryussel maktabi multimediya va kommunikatsiya texnologiyalari (Multec) va u erdagi talabalar bilan birgalikda o'qishni davom ettiradi.

Biz, albatta, musiqa tekshirgichini ishga tushiramiz/to'xtatamiz, bizni ovoz chiqarib yuboramiz, bu bizni qidirishimizga imkon beradi.

Bu kassetali kasetlarda, shuningdek, kasetlarda ham hamma narsani boshqaruvchi edi.

1 -qadam: Wat Heb Je Nodig?

U He He Je Nodig?
U He He Je Nodig?

Komponentlar

- 2 tugma;

- 2 ta potentsio metr;

- 2 dona (1K elk);

- Arduino uno/nano

- Draadjes (elektron sxemasi)

- Solderplaat

- MDF qoplamasi

Asboblar

- Lasercutter

- Nihoyat

- Striptang

- Soldeerbout (qalay bilan uchrashdi)

Dasturlar

- Ilustrator/indesign (Tekenprogramma)

- O'roqchi

- Qayta ishlash

- Arduino

2 -qadam: kodni qayta ishlash

Kodni qayta ishlash
Kodni qayta ishlash

/**

* Arduino-dan ketma-ket xabarlarni qabul qilishning asosiy eskizi * va uni "Reaper" uchun OSC-xabarlarga tarjima qiladi * * Siz USER PARAMETERS * ni moslashtirishingiz va kutubxonani o'rnatishingiz kerak bo'ladi: oscP5 * * werkcollege AV&IT * uchun annoo bob eddi * oktyabr 2017 * *//////////////////////////////////////// ////////

/ yakuniy int baudRate = 115200 Arduino eskizida bir xil tezlikni ishlatganingizga ishonch hosil qiling.

// OSC-dan foydalanganda Reaper-dan IP-manzilni qidirib toping // Bu ishlov berish yuboradigan va O'roqchi tinglaydigan manzil. // Bu satrni remoteIP -ga qo'ying, mana.

// final String remoteIP = "192.168.1.43"; // masalan. "127.0.0.1";

final String remoteIP = "o'rim -yig'im paytida gevonden vul hier ip";

// sendPort -ga e'tibor bering va uni Reaper -da to'ldiring. // Bu ishlov berish portiga yuboriladi va O'roqchi tinglaydi.

final int listenPort = 11000, sendPort = 12000;

// ListPort bu erda faol ravishda disk raskadrovka qilinadi.

// port nomlari bu erda disk raskadrovka uchun.

final String portName = "Arduino -da gevonden -dagi portname";

// yakuniy String portName = "COM6"; // "/dev/ttyUSB0";

///////////////////////////////// Foydalanuvchi parametrlarining oxiri ///////////////////////// ////

importni qayta ishlash.serial.*; java.util import qilish.*;

import oscP5.*; netP5 import qilish*.

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // ketma -ket portli boolean messageArrived = false;

Kiruvchi satr = "", IncomingOSCMessage = "";

final char startChar = '*', endChar = '#'; final char contactCharacter = '|';

// Biz faqat parametrlarni o'zgartiradigan parametrlarni (qiymatlarni) yuborishimizga ishonch hosil qilish uchun // bu global o'zgaruvchilar bu erda o'chiriladi, lekin // bu erda ishga tushirilmasligi kerak! HashMap oldParams, newParams, toSendParams;

// Biz xabarni har bir vergulga bo'lishimiz kerak void processIncoming () {String resVec = incoming.split (","); // biz ism+qiymat juftlarini olamiz // shuning uchun har bir nom uchun (+2)… harakat qilib ko'ring {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+) 1]); // ularni yangi Hashtable newParams.put -ga qo'ying (resVec , qiymati); }} // agar xatolik yuz bersa, keling uni ko'rsatamiz va chiqamiz. catch (Exception ex) {println ("Istisno xabari:" + ex); printArray (resVec); Chiqish(); }}

// Xabarlarimizni filtrlash uchun/ * Biz * kirish xabari (ketma-ket) o'zgarganda, faqat OSC-dan chiqib ketadigan xabar borligiga ishonch hosil qilamiz. * Shunday qilib, biz aslida o'zgaradigan kiruvchi qiymatlarni filtrlaymiz. HashMap (); for (String key: newParams.keySet ()) {// agar kalit allaqachon mavjud bo'lsa (oldParams.containsKey (key)) {// kalit mavjud bo'lsa va qiymati bir xil bo'lmasa, agar (! oldParams.get (key)). equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key))); }} else {// kaliti eski parametrlarda mavjud emas, shuning uchun! toSendParams.put (kalit, newParams.get (kalit)); } oldParams.put (kalit, newParams.get (kalit)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (kalit)); / * xabar yuborish */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // HashMap matnida ko'rsatilganidek, kiruvchi xabarni ko'rish uchun ShowIncoming () {// oynasiga bosmoqchi bo'lsak ("Arduino -dan kelganlar", 20, 20); int y = 20; for (String key: newParams.keySet ()) {y = y+20; matn (kalit, 20, y); matn (newParams.get (key), 300, y); }}

void showOsc () {matn (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

void setup () {size (1000, 800); // Bosqichlar hajmini to'ldirish (255); fon (0); oldParams = yangi HashMap (); newParams = yangi HashMap (); // printArray (Serial.list ()); commsPort = yangi Serial (bu, portName, baudRate);

/ * oscP5 -ni ishga tushiring, kiruvchi xabarlarni tinglang */ oscP5 = yangi OscP5 (bu, listenPort);

/* myRemoteLocation - bu NetAddress. NetAddress ikkita parametrni oladi: * IP -manzil va port raqami. myRemoteLocation * oscP5.send () da osc paketlarini boshqa kompyuterga, qurilmaga, * ilovaga yuborishda parametr sifatida ishlatiladi. foydalanish quyida qarang. sinov maqsadida tinglash porti * va manzil manzili bir xil, shuning uchun siz * eskizga xabar yuborasiz. */ myRemoteLocation = yangi NetAddress (remoteIP, sendPort); }

void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } ko'rsatishOsc (); }

void serialEvent (Serial commsPort) {// ketma -ket portdan bayt o'qing: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // ko'proq println so'rang ("boshlanmoqda …"); tanaffus; case startChar: kiruvchi = ""; tanaffus; case endChar: messageArrived = true; // println ("xabarning oxiri"); tanaffus; standart: kiruvchi += inChar; tanaffus; }}

/* kiruvchi osc xabari oscEvent usuliga yuboriladi. */ void oscEvent (OscMessage theOscMessage) {float qiymati = theOscMessage.get (0).floatValue (); // birinchi osc argumentini oling

IncomingOSCMessage + = "\ n" + String.format ("### osc xabarini oldi:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", qiymati); println (IncomingOSCMessage); }

3 -qadam: Arduino kodi

Arduino kodi
Arduino kodi

/* Bu kod ketma -ket ishlov berish bilan bog'lanish uchun asosiy eskizdir.

Bu o'z tugmachalari, potentsiometrlari yoki datchiklari uchun o'z kodingizni qo'yishingiz mumkin bo'lgan reja.

Bu biz bilan aloqada ekanligimizga va biz qaysi formatda muloqot qilayotganimizga ishonch hosil qilish uchun qo'l siqishdi

Xabarni xuddi shu tarzda tuzish juda muhim, shuning uchun ishlov berish uni qanday qismlarga ajratishni biladi va bizning DAWga to'g'ri OSC xabarlarini yuboradi.

werkcollege AV&IT 2017 yil oktyabr uchun tayyorlangan

kod smooothing 2007 yil 22 aprelda Devid A. Mellis tomonidan 2012 yil 9 aprelda Tom Igoe tomonidan o'zgartirilgan

*/

/ baud rate const long baudRate = 115200;

// so'rovlar oralig'ida pins kutish vaqti ms int int loopPauseTime = 200; // milli soniya

// Serial const String startString = "*", endString = "#" da yuborilgan xabarning boshlanish va tugash qiymatlari;

const char contactCharacter = '|';

// pin id ning const int tugmasiPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // yuk mashinasini tekislash

int pitchReading = A1; int speedReading = A2; int infraReading = A3;

// boshqa global o'zgaruvchilar int buttonState1 = 0; int tugmasiState2 = 0; // o'zgaruvchan tugma holatini o'qish uchun o'zgaruvchi sensoriValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// int o'qilishini yumshatish [numReadings]; // analog o'qishdan o'qishlar int readIndex3 = 0; // joriy o'qish indeksi int total3 = 0; // ishlaydigan umumiy float o'rtacha3 = 0; // o'rtacha

// Bizga ishlov berish eskizi bilan aloqa o'rnatish uchun bu funksiya kerak // Bu erda saqlang void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // belgini yuboring va javobni kuting… kechiktirish (loopPauseTime); } Serial.read (); }

void setup () {// barcha pinMode pinMode uchun pinModlarni o'rnatish (buttonPin1, INPUT); pinMode (tugmaPin2, Kirish); pinMode (pitchReading, INPUT); pinMode (tezlikni o'qish, Kirish); pinMode (infraReading, INPUT);

// Serial comms Serial.begin (baudRate) ni ishga tushirish; while (! Seriyali); // tekislash (int thisReading = 0; thisReading <numReadings; thisReading ++) {o'qishlar [thisReading] = 0; }

// qo'l siqishni kuting installContact (); }

void loop () {// barcha pimlarni so'roq qiling va o'qishni tegishli diapazonga joylashtiring buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// kiruvchi qiymatlarni kerakli qiymatlarga moslashtirish sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = xarita (sensorValue2, 0, 1023, 0,0, 100) /100,0; sensorValue3 = xarita (sensorValue3, 0, 700, 50, 100);

// silliqlash sensori: total3 = jami3 - o'qishlar [readIndex3]; // sensordan o'qish: o'qishlar [readIndex3] = sensorValue3; // o'qishni jamiga qo'shing: total3 = total3 + o'qishlar [readIndex3]; // massivdagi keyingi pozitsiyaga o'tish: readIndex3 = readIndex3 + 1;

// agar biz qatorning oxirida bo'lsak … if (readIndex3> = numReadings) {//… boshiga o'raladi: readIndex3 = 0; } // o'rtacha hisob: o'rtacha3 = (jami3 / sonO'qishlar); // silliqlash sensori

Serial.print (startString); // xabarlar ketma -ketligini boshlang // barcha nomlarni, qiymat juftlarini vergul bilan ajratib yozing Serial.print ("potentio1"); Serial.print (","); Ketma -ket chop etish (sensorValue1); Serial.print (",");

Serial.print ("potentsio2"); Serial.print (","); Ketma -ket chop etish (sensorValue2); Serial.print (",");

Serial.print ("infraqizil"); Serial.print (","); Serial.print (o'rtacha 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 (tugmaState2);

// xabarning oxirini yozing Serial.print (endString);

// biroz kuting..

kechikish (loopPauseTime); }

4 -qadam: O'roq

O'roqchi
O'roqchi

1 -qadam: Options> Prefrences

2 -birikma: "Control"/"OSC"/"Internet" bo'limida "Qo'shish" tugmachasini bosing

3 -tayanch: OSC (Ovozni boshqarishning ochiq) rejimining sirt rejimini boshqarish.

4 -birikma: Qurilmaning nomi, vinki port portida, Sendport staatini qayta ishlashda.

5 -birikma: Xost IP -ni qayta ishlash bo'limida

6 -band: O'qishni nazorat qilish vositasi Reaper bilan bir xil

5 -qadam: Behuizing

Behuizing
Behuizing

Balandligi: 170 mm

Uzunligi: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (diametri)

Potensiometrlar: 3 mm (diametri)

Datchik sensori: Breedte 2,9 mm

Uzunligi 0,8 mm

Materiallar: MDF (3 mm)

6 -qadam: Elektronika

1 -band:

Verbind de ground 5 voltli Arduino non -taxtasida

2 -band:

A0 verbind pinasi potentsio 1 bilan uchrashdi

Verbind pin A1 potentsio 2 bilan uchrashdi

Verbind pin A3 infraqizil sensori bilan uchrashdi.

A2 verbind pinasi niet yopishqoq tugma bilan uchrashdi.

A5 verb pinasi yopishqoq tugma bilan uchrashdi.

7 -qadam: O'tkazuvchilar

O'tkazuvchilar
O'tkazuvchilar

- Mayes El -Baba

- Arno Gorissen

- Michiel De Vandelaer

Tavsiya: