תוכן עניינים:
- שלב 1: Wat Heb Je Nodig?
- שלב 2: עיבוד קוד
- שלב 3: קוד Arduino
- שלב 4: קוצץ
- שלב 5: Behuizing
- שלב 6: אלקטרוניקה
- שלב 7: עובדים
וִידֵאוֹ: בקר רטרו: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:17
אנו הם הראשון שנה סטודנטים מההשכלה מולטימדיה ותקשורת (Multec) aan de Erasmushogeschool Brussel.
אנחנו כבר יכולים לשלוט במוזיקה בכלי מוזיקה שיכולים להתחיל/לעצור, להצליח ולשנות יותר.
הרעיון שלנו הגיע לקסטה, והמטרה שלנו הייתה לבקר שנוכל ליצור קלטת על קלטת.
שלב 1: Wat Heb Je Nodig?
רכיבים
- 2 כפתורים;
- 2 מטרים פוטנציאליים;
- 2 weerstanden (1K איילים);
- Arduino uno/nano
- Draadjes (ראה סכמה אלקטרונית)
- Soldeerplaat
- לוח MDF
כלים
- חיתוך לייזר
- Kniptang
- סטריפנג
- Soldeerbout (עם פח)
תוכניות
- אילוסטרטור/אינדיזיין (תוכנת Teken)
- קוצר
- מעבד
- ארדואינו
שלב 2: עיבוד קוד
/**
* שרטוט בסיסי לקבלת הודעות סידריות מ- Arduino * ומתרגם אותן להודעות OSC עבור Reaper * * יהיה עליך להתאים את פרמטרי USER * ותצטרך להתקין ספרייה: oscP5 * * שנוצרה עבור werkcollege AV&IT * מאת annoo bob eddi * אוקטובר 2017 * */////////////////////// פרמטרים של משתמשים ////////////// ////////
/ וודא שאתה משתמש באותו קצב שידור בשיטת Arduino final int baudRate = 115200;
// לך וחפש את כתובת ה- IP ב- Reaper בעת שימוש ב- OSC // זוהי הכתובת שעיבוד שולח אליה ו Reaper מקשיב לה. // הכנס את המחרוזת הזו ל- remoteIP, כאן.
// מחרוזת סופית remoteIP = "192.168.1.43"; //לְמָשָׁל. "127.0.0.1";
final String remoteIP = "vul hier ip in found in reaper";
// שימו לב ל- sendPort ומלאו זאת ב- Reaper. // זהו היציאה שאליו העיבוד שולח ו Reaper מקשיב.
int int listenPort = 11000, sendPort = 12000;
// ה- listenPort כאן נועד לאיתור באגים באופן פעיל.
// שמות הנמל נמצאים כאן כדי לאתר באגים גם כן.
final String portName = "vul hier de portname נמצא ב- Arduino";
// final String portName = "COM6"; // "/dev/ttyUSB0";
/////////////////////// סוף של פרמטרים של משתמשים ////////////// ////
ייבוא עיבוד. סדרה.*; יבוא java.util.*;
יבוא oscP5.*; יבוא netP5.*;
OscP5 oscP5; NetAddress myRemoteLocation;
CommsPort סידורי; // היציאה הטורית boolean messageArrived = false;
String incoming = "", IncomingOSCMessage = "";
char charginal startChar = '*', endChar = '#'; הסופי char contactCharacter = '|';
// כדי לוודא שאנו שולחים רק את הפרמטרים (הערכים) המשתנים // משתנים גלובליים אלה מסומנים כאן אך אינם צריכים לאתחל כאן! HashMap oldParams, newParams, toSendParams;
// עלינו לפצל את המסר בכל תהליך פסל תהליך Incoming () {String resVec = incoming.split (","); // נקבל זוגות שם+ערך // כך שלכל שם (+2) … נסה {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // הכנס אותם ל- newParams.put החדש של Hashtable (resVec , ערך); }} // אם מתרחשת שגיאה, בואו נתפוס אותה יוצאת ונצא. catch (Exception ex) {println ("הודעת חריגה:" + ex); printArray (resVec); יְצִיאָה(); }}
// כדי לסנן את ההודעות שלנו/ * אנו מוודאים שיש רק הודעת OSC-out כאשר * הודעת הקלט (סדרתית) משתנה * כלומר: אם אנו סובבים/לוחצים על הכפתור והיא משנה ערך. * אז אנו מסננים את הערכים הנכנסים שלמעשה משתנים * שימו לב: לא נמנע מקפיצות מערכים * כפי שמקורם למשל במד תאוצה או בחיישני מרחק * תצטרכו להחליק אותם בעצמכם ב- Arduino */ void filterParams () {toSendParams = new מפת גיבוב(); עבור (מפתח מחרוזת: newParams.keySet ()) {// אם המפתח כבר קיים אם (oldParams.containsKey (מפתח)) {הנוכחי של המפתח והערך אינם זהים, עדכן אם (! oldParams.get (מפתח).equals (newParams.get (מפתח))) {toSendParams.put (מפתח, newParams.get (מפתח)); }} else {// מפתח אינו קיים במערכות ישנות, אז נגיד! toSendParams.put (key, newParams.get (key)); } oldParams.put (מפתח, newParams.get (מפתח)); }}
void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = OscMessage חדש ("/"+ מקש); myMessage.add (toSendParams.get (מפתח)); / * שלח את ההודעה */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // כאשר נרצה להדפיס לחלון חלל של ShowIncoming () {// כדי לראות הודעה נכנסת, כפי שהוגדר בטקסט HashMap ("נכנס מארדואינו", 20, 20); int y = 20; עבור (מפתח מחרוזת: newParams.keySet ()) {y = y+20; טקסט (מפתח, 20, y); טקסט (newParams.get (מפתח), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
הגדרת חלל () {גודל (1000, 800); // מילוי גודל הבמה (255); רקע (0); oldParams = HashMap חדש (); newParams = HashMap חדש (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);
/ * התחל oscP5, האזן להודעות נכנסות */ oscP5 = OscP5 חדש (זה, listenPort);
/* myRemoteLocation הוא NetAddress. a NetAddress לוקח 2 פרמטרים, * כתובת ip ומספר יציאה. myRemoteLocation משמש כפרמטר ב- * oscP5.send () בעת שליחת מנות osc למחשב, התקן, * יישום אחר. שימוש ראה להלן. למטרות בדיקה יציאת ההאזנה * והיציאה של כתובת המיקום המרוחק זהה, ומכאן שתשלח * הודעות בחזרה למערכון זה. */ myRemoteLocation = NetAddress חדש (remoteIP, sendPort); }
void draw () {if (messageArived) {רקע (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// קרא בתים מהיציאה הטורית: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // לבקש עוד println ("מתחיל …"); לשבור; case startChar: incoming = ""; לשבור; case endChar: messageArrived = true; // println ("סוף הודעה"); לשבור; ברירת מחדל: נכנסת += inChar; לשבור; }}
/* הודעת osc נכנסת מועברת לשיטת oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // קבל את טיעון האוסק הראשון
IncomingOSCMessage + = "\ n" + String.format ("### קיבל הודעת osc:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", value); println (IncomingOSCMessage); }
שלב 3: קוד Arduino
/* קוד זה הוא סקיצה בסיסית לתקשורת עם עיבוד באמצעות סדרה.
זהו שרטוט שבו אתה יכול לשים קוד משלך שצוין לכפתורים, פוטנציומטרים או חיישנים משלך.
יש לו לחיצת יד כדי לוודא שיש לנו קשר והפורמט בו אנו מתקשרים נקבע
חשוב לבנות את המסר באותה הדרך, כך שעיבוד ידע כיצד לפרק אותו ולשלוח הודעות OSC נכונות ל- DAW שלנו
עשה עבור werkcollege AV&IT אוקטובר 2017
קוד smooothing נוצר 22 באפריל 2007 על ידי David A. Mellis שונה 9 באפריל 2012 על ידי טום איגו
*/
/ קצב שידור const baudRate = 115200;
// זמן המתנה במסרים בין סקרים לפינים const int loopPauseTime = 200; // מילי שניות
// ערכי התחלה וסיום עבור ההודעה שנשלחה ב- Serial const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin int's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // החלקת טנדר תעריפים
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// משתנים גלובליים אחרים int buttonState1 = 0; int buttonState2 = 0; // משתנה לקריאת חיישן המצוף של מצב לחיצה על הכפתור Value1 = 0; float sensorValue2 = 0; sensor floatValue3 = 0;
// החלקת קריאות int [numReadings]; // הקריאות מהקלט האנלוגי int readIndex3 = 0; // אינדקס הקריאה הנוכחית int total3 = 0; // ממוצע הציפה הכולל של ריצה 3 = 0; // הממוצע
// אנו זקוקים לפונקציה זו כדי ליצור קשר עם סקיצת העיבוד // שמור אותה כאן void etablContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // שלח צ'ארה והמתן לתגובה … עיכוב (loopPauseTime); } Serial.read (); }
הגדרת void () {// הגדר את pinModes לכל הסיכות pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// לאתחל פקודות סדרתיות Serial.begin (baudRate); בעוד (! סדרתי); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }
// המתן ללחיצת יד etablContact (); }
לולאת void () {// סקר את כל הסיכות ומפה את הקריאה לכפתור הטווח המתאיםState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// מיפוי הערכים הנכנסים לערכים הדרושים sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = מפה (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = מפה (sensorValue3, 0, 700, 50, 100);
// חיישן החלקה: total3 = total3 - קריאות [readIndex3]; // לקרוא מהחיישן: קריאות [readIndex3] = sensorValue3; // הוסיפו את הקריאה לסך: total3 = total3 + קריאות [readIndex3]; // להתקדם למיקום הבא במערך: readIndex3 = readIndex3 + 1;
// אם אנחנו בסוף המערך … אם (readIndex3> = numReadings) {// … עוטף את ההתחלה: readIndex3 = 0; } // לחשב את הממוצע: average3 = (total3 / numReadings); // חיישן החלקה
Serial.print (startString); // התחל רצף הודעות // הסר את כל השם, זוגות הערכים, מופרדים בפסיקים Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("אינפרא-חיישן"); Serial.print (","); Serial.print (ממוצע 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);
// כתוב את סוף ההודעה Serial.print (endString);
// חכה רגע..
עיכוב (loopPauseTime); }
שלב 4: קוצץ
שלב 1: הגעה לאפשרויות> העדפות
שלב 2: קדימה להעדפות שליטה/OSC/אינטרנט והדפסה על הוספה
שלב 3: בחירת מצב משטח הבקרה עבור OSC (בקרת סאונד פתוחה)
שלב 4: שם המכשיר שלך מלא, נקב לקבל על הפורום ואנוכל אותו בעבודות של משלוח המדינה
שלב 5: העתק של IP מארח
שלב 6: Druk op ok en de controller is no verbonden with Reaper
שלב 5: Behuizing
Breedte: 170 מ מ
אורך: 90 מ מ
Hoogte 30 מ מ
קופץ: 16 מ מ (קוטר
מטרי פוטנציאל: 3 מ מ (קוטר)
חיישן Afstand: Breedte 2.9 מ מ
אורך 0.8 מ מ
חומר: MDF (3 מ מ)
שלב 6: אלקטרוניקה
שלב 1:
חיבורים לקרקע ואן ארדואינו בעל 5 וולט עם קרש לחם
שלב 2:
חיבור סיכה A0 עם פוטנציאל 1
חיבור סיכה A1 עם פוטנציאל 2
חיישן סיכה A3 עם חיישן אינפרא אדום.
חיבור סיכה A2 עם כפתור דביק לא.
חיבור סיכה A5 עם כפתור דביק.
שלב 7: עובדים
- מייס אל באבא
- ארנו גוריסן
- Michiel De Wandelaer
מוּמלָץ:
בקר - בקר Vivarium: 6 שלבים
Freya - בקר Vivarium: Freya הוא קוד בקרה, מערכת בקרת vivarium מבוססת Raspberry Pi. במדריך זה אנו הולכים לעבור את השלבים של הכנת הבקר
בקר בסגנון ריקודי ענק של משחקי רטרו: 4 שלבים
בקר משחקי רטרו ענק בסגנון דאנספלור: לחתונה שלנו במרץ השנה רצינו מסיבת קבלת פנים בנושא משחק רטרו, מכיוון שאנחנו רק ילדים גדולים בלב ואני בטוחה שגם הרבה אנשים אחרים! אז אחרי קצת מחקר על MakeyMakey חשבתי שזה יהיה רעיון מדהים לחבק
בקר משחק DIY מבוסס Arduino - בקר משחקים Arduino PS2 - משחק Tekken עם לוח המשחקים Arduino DIY: 7 שלבים
בקר משחק DIY מבוסס Arduino | בקר משחקים Arduino PS2 | משחק Tekken עם DIY Arduino Gamepad: שלום חבר'ה, משחקים זה תמיד כיף, אבל משחק עם בקר DIY מותאם אישית משלך הוא יותר כיף. אז נכין בקר משחק באמצעות arduino pro micro במדריך זה
בקר בקר זלדה פנטזיה: 31 שלבים (עם תמונות)
בקר בקר זלדה פנטזיה: " היי, למישהו יש בקר שאני יכול לשנות? אין שום אחריות שאני לא אהרוס אותו. &Quot; אני אוהב להתעסק עם דברים, אז כשראיתי את תחרות המשחקים המחשבה הראשונה שלי הייתה לעשות מוד מגניב לבקר. לאחר התחננות, ניכסתי פצוע קל
YABC - עוד בקר Blynk - בקר טמפרטורה ולחות IoT בענן, ESP8266: 4 שלבים
YABC - עוד בקר Blynk - בקר טמפרטורה ולחות IoT בענן, ESP8266: היי מייקרים, לאחרונה התחלתי לגדל פטריות בבית, פטריות צדפות, אבל יש לי כבר 3x מהבקרים האלה בבית לבקרת טמפרטורה של תסיסה לבישול הביתי שלי, רעייתי הוא גם עושה את הדבר הזה בקומבוצ'ה עכשיו, וכתרמוסטט לחום