İçindekiler:
- Adım 1: Ne Heb Je Nodig?
- 2. Adım: Kod İşleme
- Adım 3: Arduino'yu Kodlayın
- 4. Adım: Orakçı
- Adım 5: Behuizing
- 6. Adım: Elektronik
- Adım 7: Medewerker'lar
Video: Retro Kontrolör: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
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?
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
/**
* 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
/* 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çı
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
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
- Mayes El Baba
- Arno Gorissen
-Michiel De Wandelaer
Önerilen:
Wled RGB Kontrolör Nasıl Kullanılır: 5 Adım
Wled RGB Kontrol Cihazı Nasıl Kullanılır: Herkese merhaba, devam eden Pandemide herkesin kesinlikle iyi ve güvenli olduğunu umarız Work & Henüz yapılmamış projeler ve birçok düzenleme Bu videoda size basit bir RGB Piksel denetleyicisi olan Wled'i göstereceğim
Lune - Arduino'lu MIDI Kontrolör (DJ veya Müzisyen için): 5 Adım (Resimlerle)
Lune - Arduino'lu MIDI Kontrolör (DJ veya Müzisyen için): Bu benim ilk arduino (mikrodenetleyici) projem Lune. Kullanışlı ve büyük bir proje ile arduino öğrenmek istedim, bu yüzden miksaj yapmak için gereken tüm fonksiyonlara sahip bir midi DJ controller yapmaya karar verdim.Her türlü sensör (potansiyel
RGB Led Kontrolör: 4 Adım
RGB Led Denetleyici: Merhaba Arkadaşlar, renkleri kablosuz olarak ayarlayabileceğiniz led rgb için oldukça kolay bir kılavuz. Tuvalet dışında herhangi bir iç mekana monte edilebilir: PVideo size devrenin nasıl yapıldığını öğretecektir.Videonun keyfini çıkarın!Malzemeler Güç Kaynağı RF
Mikro-kontrolör Tabanlı Metronom: 5 Adım
Mikro-kontrolör Tabanlı Metronom: Bir metronom, müzisyenler tarafından şarkılardaki vuruşları takip etmek ve yeni bir enstrüman öğrenen yeni başlayanlar arasında bir zamanlama duygusu geliştirmek için kullanılan bir zamanlama cihazıdır. Müzikte çok önemli olan ritim duygusunun korunmasına yardımcı olur. Bu metronom
3 Kanal Dijital LED Şerit WS2812 Kontrolör: 9 Adım (Resimlerle)
3 Kanallı Dijital LED Şerit WS2812 Denetleyici: Her zaman birden fazla dijital led şeridi kontrol etmenin ucuz bir yolunu istemişimdir. Bu talimat, bu projeyi tasarlarken ve inşa ederken attığım tüm adımları gösterir