İçindekiler:

Retro Kontrolör: 7 Adım
Retro Kontrolör: 7 Adım

Video: Retro Kontrolör: 7 Adım

Video: Retro Kontrolör: 7 Adım
Video: 27 Yıl Önce 100.000 TL'ye Satılan Sistem Nasıl? Intel İşlemcilerin Atası Pentium PRO (Nostalji) 2024, Kasım
Anonim
Retro Denetleyici
Retro Denetleyici

Erasmushogeschool Brussel'de Multimedya ve Communicatietechnologie (Multec) için öğrenci kullanımı.

Samen hebben biz en müzik kontrol cihazı gemaakt dat muziek kan start/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.

Ons idee kwam van van een kaseti, ons doel kasetin açılmasını sağlayan denetleyicinin başındaydı.

Adım 1: Ne Heb Je Nodig?

Ne Heb Je Nodig?
Ne Heb Je Nodig?

bileşen

- 2 Düğme;

- 2 Potansiyometre;

- 2 ayakta (1K geyik);

- Arduino uno/nano

- Draadjes (zie elektronisch şeması)

- Lehimleme Meydanı

- MDF plaka

Aletler

- Lazer Kesici

- Kniptang

- Striptiz

- Soldeerbout (metin kalay)

Programma'nın

- Illustrator/indesign (Tekenprogramma)

- Orakçı

- İşleme

-Arduino

2. Adım: Kod İşleme

Kod İşleme
Kod İşleme

/**

* Arduino'dan Seri mesajları almak için temel taslak * ve bunları Reaper için OSC mesajlarına çevirir * * KULLANICI PARAMETRELERİNİ * uyarlamanız gerekecek ve bir Kitaplık kurmanız gerekecek: oscP5 * * werkcollege AV&IT için * yapılmış * annoo bob eddi * ekim 2017 * */ /////////////////// KULLANICI PARAMETRELERİ ////////////////// ////////

/ Arduino çiziminizde aynı baud hızını kullandığınızdan emin olun final int baudRate = 115200;

// OSC kullanırken Reaper'a gidin ve IP adresini arayın // Bu, Processing'in gönderdiği ve Reaper'ın dinlediği adrestir. // Bu dizeyi burada remoteIP'ye koyun.

//son Dize remoteIP = "192.168.1.43"; //Örneğin. "127.0.0.1";

final String remoteIP = "gevonden in reaper'da vul hier ip";

// sendPort'u not edin ve bunu Reaper'da doldurun. // Bu, İşleme'nin gönderdiği ve Reaper'ın dinlediği bağlantı noktasıdır.

final int listenPort = 11000, sendPort = 12000;

// Buradaki listenPort aktif olarak hata ayıklamak içindir.

// portAdları da hata ayıklamak için burada.

final String portName = "Arduino'da gevonden içindeki portname vul hier de portname";

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

//////////////////// KULLANICI PARAMETRELERİNİN SONU /////////////////////// ////

işleme.serisini içe aktar.*; java.util.* dosyasını içe aktarın;

oscP5.* içe aktar; netP5.* içe aktar;

OscP5 oscP5; NetAddress myRemoteLocation;

Seri comsPort; // Seri bağlantı noktası boolean messageArrived = false;

String gelen = "", GelenOSCMessage = "";

son karakter startChar = '*', endChar = '#'; son karakter contactCharacter = '|';

// Yalnızca değişen parametreleri (değerleri) gönderdiğimizden emin olmak için // bu global değişkenler burada belirtilir, ancak burada başlatılmamalıdır // başlatılmamalıdır! HashMap oldParams, newParams, toSendParams;

// Mesajı her virgül boşluğunda bölmemiz gerekiyor processIncoming () { String resVec = incoming.split(", "); // isim + değer çiftleri alıyoruz // yani her isim için (+2)… try{ for (int i = 0; i< resVec.length; i+=2) { float değer = Float.parseFloat(resVec[i+ 1]); // onları yeni Hashtable'a koy newParams.put(resVec, value); } } // bir hata oluşursa onu yakalayalım ve çıkalım. catch(ex.ex){ println("İstisna Mesajı: " + ex); printArray(resVec); çıkış(); } }

// Mesajlarımızı filtrelemek için /* Giriş mesajı (Seri) değiştiğinde sadece OSC-out mesajı olduğundan emin oluruz * Yani: butonu çevirir/basarsak ve değeri değişirse. * Bu nedenle, gerçekte değişen gelen değerleri filtreleriz * not: örneğin ivmeölçerlerden veya mesafe sensörlerinden gelen atlama değerlerinden kaçınmayacağız * bunları Arduino'da kendiniz düzeltmeniz gerekecek */ void filterParams () { toSendParams = new HashMap(); for (String key: newParams.keySet()) { // anahtar zaten mevcutsa if (oldParams.containsKey(key)) { // anahtar mevcut ve değer aynı değilse, if (!oldParams.get(key) güncelleyin).equals(newParams.get(key))) { toSendParams.put(key, newParams.get(key)); } } else{ // eski paramlarda anahtar yok, o yüzden koy! toSendParams.put(anahtar, newParams.get(anahtar)); } oldParams.put(anahtar, newParams.get(anahtar)); } }

void makeOSC() { for (String key: toSendParams.keySet()) { OscMessage myMessage = new OscMessage("/"+ key); myMessage.add(toSendParams.get(anahtar)); /* mesajı gönder */ oscP5.send(myMessage, myRemoteLocation); } }

void translateMessage() { processIncoming(); filtreParams(); makeOSC(); } // Pencereye yazdırmak istediğimizde void ShowIncoming() { // gelen mesajı görmek için HashMap metninde belirtildiği gibi("Incoming from Arduino", 20, 20); int y = 20; for (String key: newParams.keySet()) { y = y+20; metin(anahtar, 20, y); text(newParams.get(key), 300, y); } }

void showOsc() { metin(GelenOSCMessage, 300, 200); GelenOSCMessage =""; }

geçersiz kurulum() { boyut(1000, 800); // Sahne alanı doldurma(255); arkaplan(0); oldParams = new HashMap(); newParams = new HashMap(); //printArray(Serial.list()); commsPort = new Serial(bu, portName, baudRate);

/* oscP5'i başlat, gelen mesajları dinle */ oscP5 = new OscP5(bu, listenPort);

/* myRemoteLocation bir NetAddress'dir. bir NetAddress 2 parametre alır, * bir ip adresi ve bir port numarası. myRemoteLocation, osc paketlerini başka bir bilgisayara, cihaza, * uygulamaya gönderirken * oscP5.send() içinde parametre olarak kullanılır. kullanım aşağıya bakın. test amacıyla, dinleme bağlantı noktası * ve uzak konum adresinin bağlantı noktası aynıdır, dolayısıyla bu çizime * mesajlar göndereceksiniz. */ myRemoteLocation = new NetAddress(remoteIP, sendPort); }

void draw() { if (messageArrived) { background(0); çevirMesaj(); Geleni Göster(); mesajArrived=yanlış; } showOsc(); }

void serialEvent(Serial commsPort) { // seri porttan bir bayt oku: char inChar = commsPort.readChar(); switch (inChar) { case contactCharacter: commsPort.write(contactCharacter); // daha fazlasını iste println("başlıyor…"); kırmak; case startChar: gelen = ""; kırmak; case endChar: messageArrived = true; //println("mesajın sonu"); kırmak; varsayılan: gelen += inChar; kırmak; } }

/* gelen osc mesajı oscEvent yöntemine iletilir. */ void oscEvent(OscMessage theOscMessage) { float değeri = theOscMessage.get(0).floatValue(); // 1. osc argümanını al

IncomingOSCMessage += "\n" + String.format("### bir osc mesajı aldı: " + " addrpattern: " + theOscMessage.addrPattern() + ": %f", değer); println(GelenOSCMessage); }

Adım 3: Arduino'yu Kodlayın

Arduino Kodu
Arduino Kodu

/* Bu kod, Seri üzerinden İşleme ile iletişim kurmak için temel bir çizimdir.

Kendi düğmeleriniz, potansiyometreleriniz veya sensörleriniz için belirtilen kendi kodunuzu koyabileceğiniz bir plandır.

İletişim kurduğumuzdan emin olmak için bir el sıkışma var ve iletişim kuracağımız formata karar verildi

Mesajı aynı şekilde oluşturmak önemlidir, böylece Processing onu nasıl çözeceğini ve DAW'ımıza doğru OSC mesajlarını nasıl göndereceğini bilir.

werkcollege AV&IT için üretildi ekim 2017

kod yumuşatma, 22 Nisan 2007'de David A. Mellis tarafından oluşturuldu, 9 Nisan 2012'de Tom Igoe tarafından değiştirildi

*/

/ baud hızı sabiti uzun baudRate = 115200;

// pinlere yapılan anketler arasında ms cinsinden bekleme süresi const int loopPauseTime = 200; // mili saniye

// Serial const String'de gönderilen mesajın başlangıç ve bitiş değerleri startString = "*", endString = "#";

const char contactCharacter = '|';

// pin kimliğinin const int buttonPin1 = 2; const int buttonPin2 = 5; const int numOkumalar = 5; //van yumuşatma oranı

int pitchReading = A1; int speedReading = A2; int alt Okuma = A3;

// diğer global değişkenler int buttonState1 = 0; int buttonState2 = 0; // buton durumunu okumak için değişken şamandıra sensorValue1 = 0; şamandıra sensörüDeğer2 = 0; şamandıra sensörüDeğer3 = 0;

// int okumaları yumuşatma[numReadings]; // analog girişten okumalar int readIndex3 = 0; // mevcut okumanın indeksi int total3 = 0; // çalışan toplam kayan nokta ortalaması3 = 0; // ortalama

// Processing taslağı ile temas kurmak için bu fonksiyona ihtiyacımız var // Onu burada tut void createContact() { while (Serial.available() <= 0) { Serial.print(contactCharacter); // bir karakter gönder ve yanıt bekle… delay(loopPauseTime); } Seri.read(); }

void setup() { // tüm pinler için pinMode'larını ayarlayın pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); pinMode(pitchReading, INPUT); pinMode(hız Okuma, GİRİŞ); pinMode(infraReading, INPUT);

// Seri iletişimleri başlat Serial.begin(baudRate); while (!Seri); // için yumuşatma (int thisReading = 0; thisReading < numReadings; thisReading++) { okumalar[thisReading] = 0; }

// tokalaşma için beklekurumContact(); }

void loop() { // tüm pinleri yokla ve okumayı uygun aralığa eşleyin buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (hızlı Okuma); sensorValue3 = analogRead (infraReading);

//gelen değerleri gerekli değerlerle eşleştirme sensorValue1 = map(sensorValue1, 0, 1023, 0, 100.0/-100.0; sensorValue2 = harita(sensorValue2, 0, 1023, 0.0, 100)/100.0; sensorValue3 = map(sensorValue3, 0, 700, 50, 100);

// sensörü yumuşatma: toplam3 = toplam3 - okumalar[readIndex3]; // sensörden oku: okumalar[readIndex3] = sensorValue3; // okumayı toplama ekleyin: toplam3 = toplam3 + okumalar[readIndex3]; // dizideki bir sonraki konuma ilerleyin: readIndex3 = readIndex3 + 1;

// dizinin sonundaysak… if (readIndex3 >= numReadings) { // …başa sar: readIndex3 = 0; } // ortalamayı hesapla: ortalama3 = (toplam3 / numOkumalar); // yumuşatma sensörü

Serial.print(startString); // bir mesaj dizisi başlat // tüm adı, değer çiftlerini virgülle ayırarak yaz Serial.print("potentio1"); Seri.print(", "); Serial.print(sensorValue1); Seri.print(", ");

Serial.print("potansiyel2"); Seri.print(", "); Serial.print(sensorValue2); Seri.print(", ");

Serial.print("alt-sensör"); Seri.print(", "); Seri.baskı(ortalama3/100); Seri.print(", ");

Serial.print("knop 1'de 2 zekâ"); Seri.print(", "); Serial.print(buttonState1); Seri.print(", "); Serial.print("knop2 in5 geel"); Seri.print(", "); Serial.print(buttonState2);

// Serial.print(endString) mesajının sonunu yaz;

// biraz bekle..

gecikme (loopPauseTime); }

4. Adım: Orakçı

orakçı
orakçı

Adım 1: Ga bovenaan naar Seçenekler>Tercihler

Adım 2: Control/OSC/web ve druk op'da tercihlerde Ga

Adım 3: Kies bij Control yüzey modu voor OSC (Açık Ses Kontrolü)

Adım 4: Vul je cihaz adı girişi, vink Bij Sendport staat işlenirken port aan en vul in water'da alma

Adım 5: İşleme sırasında Ana Bilgisayar IP'sinin Kopieer'i

Adım 6: Druk op tamam ve denetleyici, Reaper ile bir araya geldi.

Adım 5: Behuizing

Behuizing
Behuizing

Irk: 170 mm

uzunluk: 90 mm

30 mm

Knoppen: 16 mm (çap

Potansiyometre: 3 mm (çap)

Arka sensör: Breedte 2,9 mm

Uzunluk 0,8 mm

Malzeme: MDF (3mm)

6. Adım: Elektronik

1. Adım:

Verbind de topraklama ve 5 voltluk minibüs Arduino, breadboard ile buluştu

2. Adım:

Verbind pimi A0 potansiyo 1 ile buluştu

Verbind pimi A1 potansiyo 2 ile buluştu

Verbind pimi A3, kızılötesi sensörle buluştu.

Verbind pimi A2, yapışkan düğmeyle bir araya geldi.

Verbind pimi A5, yapışkan düğmeyle buluştu.

Adım 7: Medewerker'lar

Medwerkerler
Medwerkerler

- Mayes El Baba

- Arno Gorissen

-Michiel De Wandelaer

Önerilen: