Tartalomjegyzék:
- 1. lépés: Wat Heb Je Nodig?
- 2. lépés: Kódfeldolgozás
- 3. lépés: Kód Arduino
- 4. lépés: Aratógép
- 5. lépés: Behuizing
- 6. lépés: Elektronica
- 7. lépés: Medewerkers
Videó: Retro vezérlő: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) a Erasmushogeschool Brussel.
Samen hebben we een zeniek controller gemaakt dat music can starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.
Az idea kwam van van een kazetta, az ons doel volt a vezérlő és a kazetta.
1. lépés: Wat Heb Je Nodig?
Componenten
- 2 gomb;
- 2 potenciométer;
- 2 weerstanden (1K szarvas);
- Arduino uno/nano
- Draadjes (zie elektronisch schema)
- Soldeerplaat
- MDF lemez
Eszközök
- Lézervágó
- Kniptang
- Striptang
- Soldeerbout (ón)
Programok
- Illusztrátor/indesign (Tekenprogramma)
- Aratógép
- Feldolgozás
- Arduino
2. lépés: Kódfeldolgozás
/**
* Alapvető vázlat az Arduino soros üzeneteinek fogadásához *, és az OSC-üzenetekké alakítja azokat a Reaper számára eddi * 2017. október * *///////////////////// FELHASZNÁLÓI PARAMÉTEREK /////////////////// ////////
/ győződjön meg arról, hogy ugyanazt az átviteli sebességet használja az Arduino vázlat végső int baudRate = 115200;
// Menjen, és keresse meg az IP-címet a Reaper-ben, ha OSC-t használ // Ez az a cím, amelyet a Processing küld és a Reaper hallgat. // Tedd ezt a karakterláncot a remoteIP -be, ide.
// végső karakterlánc távoliIP = "192.168.1.43"; //például. "127.0.0.1";
final String remoteIP = "vul hier ip in gevonden in aratógép";
// Jegyezze fel a sendPort -ot, és töltse ki a Reaper -ben. // Ez az a port, amelyet a Processing küld és a Reaper hallgat.
végső int listenPort = 11000, sendPort = 12000;
// A listenPort itt aktív hibakeresés.
// a portNames szintén hibakeresésre szolgál.
final String portName = "vul hier de portname in gevonden in Arduino";
// végső karakterlánc portName = "COM6"; // "/dev/ttyUSB0";
////////////////////// FELHASZNÁLÓI PARAMÉTEREK VÉGE //////////////////////// ////
import feldolgozás.sorozat.*; import java.util.*;
import oscP5.*; import netP5.*;
OscP5 oscP5; NetAddress myRemoteLocation;
Soros commsPort; // A soros port logikai üzeneteArrived = false;
Karakterlánc bejövő = "", IncomingOSCMessage = "";
végső karakter startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Annak érdekében, hogy csak azokat a paramétereket (értékeket) küldjük, amelyek megváltoztatják // ezeket a globális változókat itt delkaálják, de // nem szabad itt inicializálni! HashMap oldParams, newParams, toSendParams;
// Az üzenetet fel kell osztanunk minden vesszővel void processInIncoming () {String resVec = bejövő.split (","); // név+értékpárokat kapunk // így minden névhez (+2)… próbálkozzon {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // tegye őket az új Hashtable newParams.put (resVec , érték); }} // ha hiba történik, akkor jelenítsük meg és lépjünk ki. catch (Exception ex) {println ("Kivételüzenet:" + ex); printArray (resVec); kijárat(); }}
// Üzeneteink szűrése/ * Győződünk meg arról, hogy csak akkor jelenik meg OSC-ki üzenet, amikor * a bemeneti üzenet (soros) megváltozik * Vagyis: ha elfordítjuk/megnyomjuk a gombot, és ez megváltoztatja az értéket. * Tehát kiszűrjük a ténylegesen változó bejövő értékeket * Megjegyzés: nem fogjuk elkerülni az ugró értékeket *, mint pl. Gyorsulásmérők vagy távolságérzékelők * * ezeket az Arduino programban kell simítani * HashMap (); for (String key: newParams.keySet ()) {// ha a kulcs már megvan, ha (oldParams.containsKey (key)) {// a kulcs jelen van és értéke nem ugyanaz, akkor frissítse, ha (! oldParams.get (key).equals (newParams.get (kulcs))) {toSendParams.put (kulcs, newParams.get (kulcs)); }} else {// kulcs nincs jelen a régi paraméterekben, szóval tedd meg! toSendParams.put (kulcs, newParams.get (kulcs)); } oldParams.put (kulcs, newParams.get (kulcs)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (kulcs)); / * küldje el az üzenetet */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Ha az ablakba szeretnénk nyomtatni void ShowIncoming () {// a bejövő üzenetek megtekintéséhez, a HashMap szövegben meghatározottak szerint ("Bejövő Arduino -tól", 20, 20); int y = 20; for (Karakterlánc kulcs: newParams.keySet ()) {y = y+20; szöveg (kulcs, 20, y); szöveg (newParams.get (kulcs), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {méret (1000, 800); // Színpadméret kitöltés (255); háttér (0); oldParams = új HashMap (); newParams = új HashMap (); // printArray (Serial.list ()); commsPort = új soros (ez, portName, baudRate);
/ * indítsa el az oscP5 -t, figyelje a bejövő üzeneteket */ oscP5 = új OscP5 (ez, listenPort);
/* A myRemoteLocation egy NetAddress. A NetAddress 2 paramétert tartalmaz, * egy IP -címet és egy portszámot. A myRemoteLocation paramétert használja az * oscP5.send () fájlban, amikor osc csomagokat küld egy másik számítógépre, eszközre vagy * alkalmazásba. használatát lásd alább. tesztelés céljából a figyelő port * és a távoli hely címének portja ugyanaz, ezért * vissza fog küldeni üzeneteket erre a vázlatra. */ myRemoteLocation = új NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = hamis; } showOsc (); }
void serialEvent (Serial commsPort) {// bájt olvasása a soros portról: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // kérjen további println ("kezdő…"); szünet; case startChar: bejövő = ""; szünet; eset endChar: messageArrived = true; // println ("üzenet vége"); szünet; alapértelmezett: bejövő += inChar; szünet; }}
/* a bejövő osc üzenetet továbbítja az oscEvent metódusba. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // szerezze be az 1. osc argumentumot
IncomingOSCMessage + = "\ n" + String.format ("### kapott egy osc üzenetet:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", érték); println (IncomingOSCMessage); }
3. lépés: Kód Arduino
/* Ez a kód egy alapvető vázlat a processzorral való kommunikációhoz.
Ez egy tervrajz, amelyben elhelyezheti a saját gombjaihoz, potenciométereihez vagy érzékelőihez megadott saját kódját.
Kézfogással rendelkezik, hogy megbizonyosodjon arról, hogy kapcsolatba lépünk, és a kommunikáció formátuma eldöntött
Fontos, hogy az üzenetet ugyanígy építsük fel, hogy a Processing tudja, hogyan kell dekonstruálni és helyes OSC-üzeneteket küldeni a DAW-nak
a werkcollege AV&IT okt
kódsimítás létrehozta 2007. április 22 -én David A. Mellis, módosítva 2012. április 9., Tom Igoe
*/
/ baud rate const hosszú baudRate = 115200;
// várakozási idő ms -ban a lekérdezések között a pin -ekig konst int loopPauseTime = 200; // milli másodperc
// a Serial const elküldött üzenet kezdő és befejező értéke String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id's const int gombPin1 = 2; const int gombPin2 = 5; const int numReadings = 5; // értékeld van simítás
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// egyéb globális változók int buttonState1 = 0; int gombÁllapot2 = 0; // változó a nyomógomb állapotának lebegő érzékelőjének leolvasásáhozValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;
// int olvasatok simítása [numReadings]; // az analóg bemenet leolvasása int readIndex3 = 0; // az aktuális leolvasás indexe int total3 = 0; // a futó összes úszó átlag3 = 0; // az átlagos
// Erre a funkcióra szükségünk van ahhoz, hogy kapcsolatba lépjünk a Feldolgozási vázlattal // Tartsuk itt void createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // karakter küldése és válasz várása… delay (loopPauseTime); } Serial.read (); }
void setup () {// a pinModes beállítása az összes csap pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// inicializálja a soros vesszőket Serial.begin (baudRate); while (! Sorozat); // simítás a (int thisReading = 0; thisReading <numReadings; thisReading ++) {olvasatok [thisReading] = 0; }
// várja meg a kézfogást createContact (); }
void loop () {// az összes csap lekérdezése és az olvasás leképezése a megfelelő tartományra buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// a bejövő értékek leképezése a szükséges értékekre sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = térkép (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = térkép (sensorValue3, 0, 700, 50, 100);
// simító érzékelő: összesen3 = összesen3 - leolvasások [readIndex3]; // olvasás az érzékelőből: readings [readIndex3] = sensorValue3; // add hozzá az értéket az összeshez: total3 = total3 + olvasmányok [readIndex3]; // előre lépés a tömb következő helyére: readIndex3 = readIndex3 + 1;
// ha a tömb végén vagyunk… if (readIndex3> = numReadings) {//… tekerjük az elejére: readIndex3 = 0; } // az átlag kiszámítása: átlag3 = (összesen3 / számReadings); // simító érzékelő
Serial.print (startString); // üzenetsorozat indítása // törölje az összes nevet, értékpárt vesszővel elválasztva Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("infra-szenzor"); Serial.print (","); Soros.nyomtatás (átlag3/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);
// írja az üzenet végét Serial.print (endString);
// várjon egy kicsit..
delay (loopPauseTime); }
4. lépés: Aratógép
1. lépés: Ga bovenaan naar Options> Prefrences
2. lépés: Ga prefrences naar Control/OSC/web en druk op Add
3. lépés: Kies bij Control felületmód vagy OSC (Open Sound Control)
4. lépés: Vul je device name in, vink Recieve on port aan en vul in wat er in feldolging bij Sendport staat
5. lépés: A IP -cím másolása és feldolgozása folyamatban van
6. lépés: Druk op ok en de controller ver verbonden Reaper
5. lépés: Behuizing
Fajta: 170 mm
Hossza: 90 mm
Hoogte 30 mm
Kötés: 16 mm (átmérő
Potenciométerek: 3 mm (átmérő)
Afstand érzékelő: Breedte 2,9 mm
Hossza 0,8 mm
Anyag: MDF (3 mm)
6. lépés: Elektronica
1. lépés:
Verbind de ground en 5 volt van Arduino met kenyérlap
2. lépés:
A0 igekötő és potenciál 1
Az igekötő A1 és a potenciál 2
Verbind A3 tű infravörös érzékelővel.
Verbind pin A2 met de niet sticky button.
Verbind A5 pin with sticky button.
7. lépés: Medewerkers
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Ajánlott:
A vezérlő telepítése, futtatása és csatlakoztatása az emulátorhoz: 7 lépés
Hogyan telepítsünk, futtassunk és csatlakoztassunk egy kontrollert egy emulátorhoz: Ültünk -e valaha, és emlékeztünk gyerekkorunkra, amikor fiatal játékos voltunk, és néha azt kívántuk, hogy tekintsük át a régi régi drágaköveket? Nos, van erre egy alkalmazás … pontosabban van egy játékosok közössége, akik programot készítenek
VEZÉRLŐ LED MATRIX MAX7219 ARDUINO -val: 9 lépés
VEZÉRLŐ LED MATRIX MAX7219 ARDUINO -val: Ebben az oktatóanyagban megtanuljuk, hogyan lehet egy egyszerű szöveg megjelenítésével vezérelni a MAX7219 Led mátrixot Arduino segítségével. Nézzen meg egy bemutató videót
Zoom vezérlő doboz: 5 lépés (képekkel)
Zoomvezérlő doboz: ÚJ HÍREK (2021. április): Régóta szerettem volna Bluetooth -változatot készíteni, és most megvan a technológia! Kövess engem, ha hallani akarsz róla, amikor megjelenik, remélhetőleg néhány hét múlva. Ugyanazt a dobozt és ugyanazt a feneket fogja használni
Szervo vezérlő eltávolítása: 5 lépés (képekkel)
Szervovezérlő eltávolítása: A szervomotorok nagyon szórakoztatóak, ha egy hajtóműves motort és a mikrovezérlőt egyszerűen csatlakoztatni szeretne. Néha azonban szeretne egy szép kis fogaskerekű motort, és nem akarja, hogy a vezérlő áramkörök zavarják a vezetését. Ilyenkor az
MicroBit szobafoglalás számláló és vezérlő: 4 lépés
MicroBit szobafoglalási számláló és vezérlő: Világjárvány idején a vírus terjedésének csökkentésének egyik módja az emberek közötti fizikai távolság maximalizálása. Szobákban vagy üzletekben hasznos lenne tudni, hogy egy adott időpontban hány ember tartózkodik a zárt térben. Ez a projekt egy pár