Mündəricat:

Retro nəzarətçi: 7 addım
Retro nəzarətçi: 7 addım

Video: Retro nəzarətçi: 7 addım

Video: Retro nəzarətçi: 7 addım
Video: Учим цвета Разноцветные яйца на ферме Miroshka Tv 2024, Noyabr
Anonim
Retro nəzarətçi
Retro nəzarətçi

Bir çox tələbə, Multimedia və Kommunikasiya Texnologiyaları (Multec) və Brüssel məktəblərində təhsil alır.

Səbəbi ilə biz, nə qədər işlədiyini və nə vaxt açıldığını, nə də bir neçə dəfə açıldığını yoxlaya bilərik.

Onlardan biri də kasetdə, həm də bir kassetdə ən böyük nəzarətçi idi.

Addım 1: Wat Heb Je Nodig?

Heb Je Nodig nədir?
Heb Je Nodig nədir?

Komponentlər

- 2 düymə;

- 2 ədəd potensial metr;

- 2 ədəd dayaq (1K geyik);

- Arduino uno/nano

- Draadjes (elektron elektron sxem)

- Soldeerplaat

- MDF örtük

Alətlər

- Lasercutter

- Şəkil

- Striptang

- Soldeerbout (qalay ilə görüşdü)

Proqramın

- İlustrator/indesign (Tekenprogramma)

- biçən

- İşlənir

- Arduino

Addım 2: Kod İşlənməsi

Kod İşlənməsi
Kod İşlənməsi

/**

* Arduino-dan Serial mesajları almaq üçün * eskiz * və bunları Reaper üçün OSC mesajlarına çevirir * * İSTİFADƏÇİ PARAMETRƏLƏRİNİ uyğunlaşdırmalısınız * və Kitabxana quraşdırmalısınız: oscP5 * * werkcollege AV&IT * üçün hazırlanmış annoo bob eddi * oktyabr 2017 * *//////////////////////////////////////////////////////////////////////////////////////// ////////

/ inte baudRate = 115200 Arduino eskizinizin finalında eyni ötürmə sürətindən istifadə etdiyinizə əmin olun.

// Gedin və OSC-dən istifadə edərkən Reaper-də IP ünvanını axtarın // İşlənmənin göndərdiyi və biçənin dinlədiyi ünvandır. // Bu simli burada remoteIP -ə qoyun.

// final String remoteIP = "192.168.1.43"; // məsələn. "127.0.0.1";

final String remoteIP = "biçmə maşınında gevonden vul hier ip";

// sendPort -a diqqət yetirin və bunu Reaper -də doldurun. // Bu, İşlənmənin göndərdiyi və Oraqlının dinlədiyi portdur.

final int listenPort = 11000, sendPort = 12000;

// Buradakı listenPort aktiv olaraq debug etmək üçündür.

// portNames də debug etmək üçün buradadır.

final String portName = "Arduino -da gevonden -də çoxlu bağlantı adı";

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

//////////////////////////////////////////////////////////////////////////////////////////////////// ////

idxal emalı.serial.*; java.util idxal edin.*;

idxal oscP5.*; netP5 idxal edin.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // Serial port boolean messageArrived = false;

Gələn sətir = "", IncomingOSCMessage = "";

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

// Yalnız dəyişən parametrləri (dəyərləri) göndərdiyimizdən əmin olmaq üçün // bu qlobal dəyişənlər burada silinir, lakin // burada başlanmamalıdır! HashMap oldParams, newParams, toSendParams;

// Mesajı hər virgüllə boş yerə bölməliyik void processIncoming () {String resVec = incoming.split (","); // ad+dəyər cütləri alırıq // hər ad üçün (+2)… cəhd edin {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+) 1]); // onları yeni Hashtable newParams.put'a qoyun (resVec , dəyər); }} // bir səhv olarsa, onu göstərək və çıxaq. catch (Exception ex) {println ("İstisna Mesajı:" + ex); printArray (resVec); çıxış (); }}

// Mesajlarımızı süzmək üçün/ * Giriş mesajı (Serial) dəyişəndə * Yalnız OSC-dən çıxan bir mesaj olduğuna əminik * Yəni: düyməni çevirsək/bassaq və dəyəri dəyişərsə. * Beləliklə, əslində dəyişən daxil olan dəyərləri süzgəcdən keçiririk * qeyd: məsələn, sürətləndiricilərdən və ya məsafə sensorlarından gəldiyimiz kimi dəyərlərin atlanmasından qaçmayacağıq * bunları Arduino -da özünüz düzəltməlisiniz */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// əgər açar artıq mövcuddursa (oldParams.containsKey (key)) {// açar mövcuddursa və dəyəri eyni deyilsə, (! oldParams.get (key)). bərabərdir (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} başqa {// açar köhnə parametrlərdə yoxdur, belə deyək! toSendParams.put (açar, newParams.get (açar)); } oldParams.put (açar, newParams.get (açar)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (açar)); / * mesaj göndər */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // HashMap mətnində göstərildiyi kimi daxil olan mesajı görmək üçün void ShowIncoming () {// pəncərəsinə çap etmək istədiyimiz zaman ("Arduinodan Gələnlər", 20, 20); int y = 20; for (String düyməsi: newParams.keySet ()) {y = y+20; mətn (açar, 20, y); mətn (newParams.get (key), 300, y); }}

void showOsc () {text (IncomingOSCMessage, 300, 200); GələnOSCMessage = ""; }

void setup () {size (1000, 800); // Mərhələ ölçüsünün doldurulması (255); fon (0); oldParams = yeni HashMap (); newParams = yeni HashMap (); // printArray (Serial.list ()); commsPort = yeni Serial (bu, portName, baudRate);

/ * başlamaq oscP5, gələn mesajları dinləmək */ oscP5 = yeni OscP5 (bu, listenPort);

/* myRemoteLocation bir NetAddressdir. bir NetAddress 2 parametr alır, * bir ip ünvanı və bir port nömrəsi. myRemoteLocation, osc paketlərini başqa bir kompüterə, cihaza, * tətbiqə göndərərkən * oscP5.send () də parametr kimi istifadə olunur. istifadəsi aşağıya baxın. test məqsədləri üçün dinləmə limanı * və uzaq yer ünvanı portu eynidir, buna görə də * bu eskizə mesaj göndərəcəksiniz. */ myRemoteLocation = yeni NetAddress (remoteIP, sendPort); }

void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = yalan; } showOsc (); }

void serialEvent (Serial commsPort) {// seriyalı portdan bir baytı oxuyun: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // daha çox println istəyin ("başlayır…"); fasilə; case startChar: gələn = ""; fasilə; case endChar: messageArrived = true; // println ("msg -nin sonu"); fasilə; standart: daxil olan += inChar; fasilə; }}

/* gələn osc mesajı oscEvent metoduna göndərilir. */ void oscEvent (OscMessage theOscMessage) {float dəyəri = theOscMessage.get (0).floatValue (); // birinci oscar arqumentini əldə edin

IncomingOSCMessage + = "\ n" + String.format ("### bir osc mesajı aldı:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", dəyər); println (IncomingOSCMessage); }

Addım 3: Arduino kodlayın

Kod Arduino
Kod Arduino

/* Bu kod, Seri ilə İşləmə ilə əlaqə qurmaq üçün əsas bir eskizdir.

Öz düymələriniz, potensiometrlər və ya sensorlar üçün öz kodunuzu qoya biləcəyiniz bir plandır.

Əlaqə qurduğumuzdan və ünsiyyət qurduğumuz formata qərar verdiyimizdən əmin olmaq üçün bir əl sıxışması var

Mesajın eyni şəkildə qurulması vacibdir, belə ki, Qenerasiya onu sökməyi və DAW-a düzgün OSC mesajlarını göndərməyi bilir.

werkcollege AV&IT oktyabr 2017 üçün hazırlanmışdır

kod smooothing, 22 aprel 2007 -ci ildə David A. Mellis tərəfindən Tom Igoe tərəfindən 9 Aprel 2012 tarixində yaradılmışdır

*/

/ baud rate const uzun baudRate = 115200;

// sorğular arasında sancaqlar arasında ms gözləmək vaxtı const int loopPauseTime = 200; // milli saniyə

// Serial const String -də göndərilən mesajın başlanğıc və bitiş dəyərləri startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id -nin const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // hamarlaşdırma dərəcəsi

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

// digər qlobal dəyişənlər int buttonState1 = 0; int düyməsiState2 = 0; // düymənin vəziyyəti float sensorunu oxumaq üçün dəyişənValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// int oxunuşlarını hamarlaşdırmaq [numReadings]; // analoq girişdən oxunmalar int readIndex3 = 0; // cari oxu indeksi int total3 = 0; // işləyən ümumi float orta3 = 0; // orta

// İşləmə eskizi ilə əlaqə qurmaq üçün bu funksiyaya ehtiyacımız var // Burda saxlayın void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // simvol göndər və cavab gözlə… gecikmə (loopPauseTime); } Serial.read (); }

void setup () {// bütün pin pinMode üçün pinModları təyin edin (buttonPin1, INPUT); pinMode (düyməPin2, GİRİŞ); pinMode (pitchReading, INPUT); pinMode (sürət oxu, GİRİŞ); pinMode (infraReading, INPUT);

// Serial komutlarını işə salın Serial.begin (baudRate); while (! Serial); // hamarlaşdırma (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// əl sıxmağı gözləyin installContact (); }

void loop () {// bütün sancaqlar arasında sorğu keçirin və oxunuşu müvafiq aralığa uyğunlaşdırın buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// daxil olan dəyərlərin lazımi dəyərlərə uyğunlaşdırılması sensorValue1 = xəritə (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = xəritə (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = xəritə (sensorValue3, 0, 700, 50, 100);

// hamarlaşdırıcı sensor: total3 = total3 - oxunuşlar [readIndex3]; // sensordan oxumaq: oxunuşlar [readIndex3] = sensorValue3; // oxunuşu cəminə əlavə edin: total3 = total3 + oxunuş [readIndex3]; // serialdakı növbəti mövqeyə keçin: readIndex3 = readIndex3 + 1;

// dizinin sonundayıqsa… if (readIndex3> = numReadings) {//… əvvəldən bükün: readIndex3 = 0; } // ortalamanı hesabla: orta3 = (cəmi3 / sayıOxumlar); // hamarlaşdırıcı sensor

Serial.print (startString); // bir mesaj ardıcıllığına başlayın // bütün adları, dəyər cütlərini virgüllə ayırın Serial.print ("potentio1"); Serial.print (","); Serial. çap (sensorValue1); Serial.print (",");

Serial.print ("potentio2"); Serial.print (","); Serial. çap (sensorValue2); Serial.print (",");

Serial.print ("infra-sensor"); Serial.print (","); Serial. çap (orta hesabla 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);

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

// biraz gözlə..

gecikmə (loopPauseTime); }

Addım 4: biçici

Biçən
Biçən

Zımba 1: Seçimlər> Prefrences

Zımba 2: Control/OSC/veb səhifələrində Əlavə et

Stap 3: Kies bij OSC (Açıq Səs Nəzarəti) üçün səthi rejimi idarə edin

Zımba 4: Vul je cihazın adı, vink Alıcı portu işlənərkən Sendport staatında

5 -ci hissə: İşəgötürən IP -ni yükləyin

Zımba 6: Nəzarətçi Reaper ilə tanışdır

Addım 5: Davranış

Behuizing
Behuizing

Çəkisi: 170 mm

Uzunluq: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (çap

Potansiyometrlər: 3 mm (diametr)

Dəstək sensoru: Breedte 2.9 mm

Uzunluğu 0,8 mm

Material: MDF (3 mm)

Addım 6: Elektronika

Zımba 1:

Verbind de ground en 5 volt van Arduino het breadboard ilə tanış oldu

Zımba 2:

A0 verbind pin A potentio 1 ilə tanış oldu

Verbind pin A1 potentio 2 ilə tanış oldu

Verbind pin A3, infraqırmızı sensorla görüşdü.

Verbind pin A2 de niet yapışqan düymə ilə tanış oldu.

Yapışqan düymə A5 ilə Verbind pin.

Addım 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Tövsiyə: