Სარჩევი:
- ნაბიჯი 1: Wat Heb Je Nodig?
- ნაბიჯი 2: კოდის დამუშავება
- ნაბიჯი 3: კოდი Arduino
- ნაბიჯი 4: რეპერი
- ნაბიჯი 5: ბეჰუიზინგი
- ნაბიჯი 6: ელექტრონიკა
- ნაბიჯი 7: მედვერი
ვიდეო: რეტრო კონტროლერი: 7 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
Wij zijn ererste jaar students uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.
Samen hebben ჩვენ გვექნება muziek controller gemaakt dat muziek kan starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.
იდეის თანახმად, ეს იყო კასეტა, ის იყო ყველა კონტროლერი, რომლითაც შესაძლებელი იყო კასეტის გამოყენება.
ნაბიჯი 1: Wat Heb Je Nodig?
კომპონენტი
- 2 ღილაკი;
- 2 პოტენციო მეტრი;
- 2 ვეგეტენი (1K elk);
- არდუინო უნო/ნანო
- Draadjes (zie elektronisch სქემა)
- Soldeerplaat
- MDF პლატა
ინსტრუმენტები
- ლაზერული საჭრელი
- კნიპტანგი
- სტრიპტანგი
- Soldeerbout (შეხვდა კალის)
პროგრამები
- ილუსტრატორი/ინდიზაინი (Tekenprogramma)
- მომკალი
- დამუშავება
- არდუინო
ნაბიჯი 2: კოდის დამუშავება
/**
* ძირითადი ესკიზი Arduino– სგან სერიული შეტყობინებების მისაღებად * და თარგმნის იმ OSC– შეტყობინებებს Reaper– ისთვის * * თქვენ დაგჭირდებათ USER PARAMETERS *-ის ადაპტირება და თქვენ დაგჭირდებათ ბიბლიოთეკის დაყენება: oscP5 * * დამზადებულია werkcollege AV&IT * მიერ annoo bob ედი * ოქტ 2017 * *///////////////////// USER PARAMETERS /////////////////// /////////
/ დარწმუნდით, რომ იყენებთ იგივე ბაუდს თქვენს Arduino ესკიზში საბოლოო int baudRate = 115200;
// წადით და მოძებნეთ IP მისამართი Reaper– ში OSC– ის გამოყენებისას // ეს არის მისამართი, რომელსაც უგზავნის დამუშავება და უსმენს Reaper. // ჩადეთ ეს სტრიქონი დისტანციურ IP– ში, აქ.
// საბოლოო სიმებიანი დისტანციური IP = "192.168.1.43"; //მაგალითად. "127.0.0.1";
საბოლოო სიმებიანი დისტანციური IP = "vul hier ip in gevonden in reaper";
// გაითვალისწინეთ sendPort და შეავსეთ ეს Reaper- ში. // ეს არის პორტი, რომელსაც უგზავნის დამუშავება და უსმენს Reaper.
საბოლოო int listenPort = 11000, sendPort = 12000;
// listenPort აქ არის აქტიურად გამართვის.
// პორტის სახელები აქაც არის გამართული.
საბოლოო სიმებიანი portName = "პორტალების სია არვუდოში";
// საბოლოო სიმებიანი portName = "COM6"; // "/dev/ttyUSB0";
////////////////////// USER PARAMETERS END /////////////////////// ////
იმპორტის დამუშავება. სერიალი.*; java.util.*;
იმპორტი oscP5.*; იმპორტი netP5.*;
OscP5 oscP5; NetAddress myRemoteLocation;
სერიული commsPort; // სერიული პორტი ლოგიკური messageArrived = false;
სიმებიანი შემომავალი = "", IncomingOSCMessage = "";
საბოლოო char startChar = '*', endChar = '#'; საბოლოო char contactCharacter = '|';
// რათა დავრწმუნდეთ, რომ ჩვენ ვგზავნით მხოლოდ იმ პარამეტრებს (მნიშვნელობებს), რომლებიც იცვლება // ეს გლობალური ვარიაციები აქ არის ნაჩვენები, მაგრამ არ უნდა იყოს // ინიციალიზებული აქ! HashMap oldParams, newParams, toSendParams;
// ჩვენ უნდა გავყოთ შეტყობინება ყოველ მძიმით void processIncoming () {String resVec = incoming.split (","); // ჩვენ ვიღებთ სახელის+მნიშვნელობის წყვილებს // ასე რომ, თითოეული სახელისთვის (+2)… სცადეთ {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // ჩადეთ ისინი ახალ Hashtable newParams.put (resVec , მნიშვნელობა); }} // თუ შეცდომა მოხდება, დავიჭიროთ მისი ჩვენება და გასვლა. დაჭერა (გამონაკლისი ex) {println ("გამონაკლისის შეტყობინება:" + ყოფილი); printArray (resVec); გასვლა (); }}
// ჩვენი შეტყობინებების გასაფილტრავად/ * ჩვენ დარწმუნებულნი ვართ, რომ არსებობს მხოლოდ OSC- შეტყობინება, როდესაც * შეყვანის შეტყობინება (სერიული) იცვლება * ეს არის: თუ ჩვენ ვტრიალებთ/ვაჭერთ ღილაკს და ის ცვლის მნიშვნელობას. * ასე რომ, ჩვენ გავფილტროთ შემომავალი მნიშვნელობები, რომლებიც რეალურად იცვლება * შენიშვნა: ჩვენ არ ავიცილებთ თავიდან მნიშვნელობების გადახტომას * როგორც მაგ. აქსელერომეტრებიდან ან დისტანციის სენსორებიდან * თქვენ უნდა გაასწოროთ ის Arduino– ში */ void filterParams () {toSendParams = new HashMap (); for (სიმებიანი გასაღები: newParams.keySet ()) {// თუ გასაღები უკვე არის თუ (oldParams.containsKey (გასაღები)) {// გასაღები არის და მნიშვნელობა არ არის იგივე, შემდეგ განაახლეთ თუ (! oldParams.get (გასაღები). ტოლია (newParams.get (გასაღები))) {toSendParams.put (გასაღები, newParams.get (გასაღები)); }} სხვა {// გასაღები არ არის ძველ პარამებში, ასე რომ ჩაწერეთ! toSendParams.put (გასაღები, newParams.get (გასაღები)); } oldParams.put (გასაღები, newParams.get (გასაღები)); }}
void makeOSC () {for (სიმებიანი გასაღები: toSendParams.keySet ()) {OscMessage myMessage = ახალი OscMessage ("/"+ გასაღები); myMessage.add (toSendParams.get (გასაღები)); / * გაგზავნეთ შეტყობინება */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // როდესაც ჩვენ გვსურს ამობეჭდოთ ფანჯარაში void ShowIncoming () {// შემომავალი შეტყობინების სანახავად, როგორც მითითებულია HashMap ტექსტში ("შემომავალი არდუინოდან", 20, 20); int y = 20; for (სიმებიანი გასაღები: newParams.keySet ()) {y = y+20; ტექსტი (გასაღები, 20, y); ტექსტი (newParams.get (გასაღები), 300, y); }}
void showOsc () {text (შემომავალი OSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {ზომა (1000, 800); // სცენის ზომის შევსება (255); ფონი (0); oldParams = ახალი HashMap (); newParams = ახალი HashMap (); // printArray (Serial.list ()); commsPort = ახალი სერიალი (ეს, portName, baudRate);
/ * დაწყება oscP5, მოსმენა შემომავალი შეტყობინებებისათვის */ oscP5 = ახალი OscP5 (ეს, listenPort);
/* myRemoteLocation არის NetAddress. NetAddress იღებს 2 პარამეტრს, * IP მისამართს და პორტის ნომერს. myRemoteLocation გამოიყენება როგორც პარამეტრი * oscP5.send () osc პაკეტების სხვა კომპიუტერზე, მოწყობილობაზე, * პროგრამაზე გაგზავნისას. გამოყენება იხილეთ ქვემოთ. სატესტო მიზნებისთვის მოსასმენი პორტი * და დისტანციური მდებარეობის მისამართის პორტი ერთი და იგივეა, შესაბამისად თქვენ * შეტყობინებებს დააბრუნებთ ამ ესკიზზე. */ myRemoteLocation = ახალი NetAddress (დისტანციური IP, sendPort); }
void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = ყალბი; } showOsc (); }
void serialEvent (Serial commsPort) {// წაიკითხეთ ბაიტი სერიული პორტიდან: char inChar = commsPort.readChar (); გადართვა (inChar) {case contactCharacter: commsPort.write (contactCharacter); // მოითხოვეთ მეტი ბეჭდვა ("იწყება …"); შესვენება; საქმე startChar: შემომავალი = ""; შესვენება; საქმე endChar: messageArrived = true; // println ("დასრულება msg"); შესვენება; ნაგულისხმევი: შემომავალი += inChar; შესვენება; }}
/* შემომავალი osc შეტყობინება გადაეგზავნება oscEvent მეთოდს. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // მიიღეთ პირველი osc არგუმენტი
IncomingOSCMessage + = "\ n" + String.format ("### მიიღო osc შეტყობინება:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", მნიშვნელობა); println (შემომავალი OSCMessage); }
ნაბიჯი 3: კოდი Arduino
/* ეს კოდი არის ძირითადი ესკიზი დამუშავებასთან სერიალის საშუალებით.
ეს არის გეგმა, რომელშიც შეგიძლიათ განათავსოთ თქვენი საკუთარი კოდი, რომელიც მითითებულია თქვენი ღილაკების, პოტენომეტრების ან სენსორებისთვის.
მას აქვს ხელის ჩამორთმევა, რათა დავრწმუნდეთ, რომ ჩვენ გვაქვს კონტაქტი და ის ფორმატი, რომელშიც ჩვენ ვსაუბრობთ, გადაწყვეტილია
მნიშვნელოვანია გზავნილის ანალოგიურად აგება, რათა დამუშავებამ იცოდეს როგორ მოახდინოს მისი დეკონსტრუქცია და სწორი OSC შეტყობინებების გაგზავნა ჩვენს DAW– ში
დამზადებულია werkcollege AV&IT ოქტ 2017 -ისთვის
კოდი smooothing შეიქმნა 2007 წლის 22 აპრილს დავით ა. მელისმა შეიცვალა 2012 წლის 9 აპრილი ტომ იგოეს მიერ
*/
/ baud rate const long baudRate = 115200;
// დრო დაველოდოთ ms– ს გამოკითხვებს შორის pin int const loopPauseTime = 200; // მილი წამი
// სერიული const String- ზე გაგზავნილი შეტყობინების საწყისი და ბოლო მნიშვნელობები startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id'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 ღილაკი სახელმწიფო 2 = 0; // ცვლადი ღილაკის სტატუსის float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;
// int კითხვის შესუსტება [numReadings]; // წაკითხვა ანალოგური შეყვანიდან int readIndex3 = 0; // მიმდინარე კითხვის ინდექსი int total3 = 0; // გაშვებული მთლიანი float average3 = 0; // საშუალო
// ჩვენ გვჭირდება ეს ფუნქცია დამუშავების ესკიზთან კონტაქტის დასამყარებლად // შეინახეთ იგი აქ void estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // გაგზავნეთ სიმბოლო და დაელოდეთ პასუხს … გადადება (loopPauseTime); } Serial.read (); }
void setup () {// დააყენეთ pinModes ყველა ქინძისთავისთვის pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// ინიციალიზაცია Serial comms Serial.begin (baudRate); ხოლო (! სერიული); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }
// დაელოდეთ ხელის ჩამორთმევას հաստատვაContact (); }
void loop () {// გამოკითხეთ ყველა ქინძისთავები და მიუთითეთ კითხვა შესაბამის დიაპაზონში buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (ღილაკი Pin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (ინფრაწკითხვა);
// შემომავალი მნიშვნელობების საჭირო მნიშვნელობებზე დადგენა sensorValue1 = რუკა (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;
// თუ მასივის ბოლოს ვართ … if (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: Kies bij Control ზედაპირის რეჟიმი voor OSC (ღია ხმის კონტროლი)
სტეპი 4: Vul je მოწყობილობის სახელი, vink მიიღეთ პორტში aan en vul in wat er დამუშავების მიზნით Sendport staat
ნაბიჯი 5: დააკოპირეთ მასპინძელი IP და დაათვალიერეთ იგი დამუშავების პროცესში
ნაბიჯი 6: მართვის მოწმობა და კონტროლერი ვერ შეხვდა Reaper- ს
ნაბიჯი 5: ბეჰუიზინგი
ჯიში: 170 მმ
სიგრძე: 90 მმ
ჯოხი 30 მმ
კნუპენი: 16 მმ (დიამეტრი
პოტენციური მეტრი: 3 მმ (დიამეტრი)
Afstand სენსორი: Breedte 2.9 მმ
სიგრძე 0.8 მმ
მასალა: MDF (3 მმ)
ნაბიჯი 6: ელექტრონიკა
ნაბიჯი 1:
Verdind de ground en 5 ვოლტი Arduino შეხვდა hetboard
ნაბიჯი 2:
Verbind pin A0 შეხვდა potentio 1
Verbind pin A1 შეხვდა potentio 2
Verbind pin A3 შეხვდა ინფრაწითელი სენსორი.
Verbind pin A2 შეხვდა ძალიან წებოვან ღილაკს.
Verbind pin A5 შეხვდა წებოვან ღილაკს.
ნაბიჯი 7: მედვერი
- მაიეს ელ ბაბა
- არნო გორისენი
- მიჩიელ დე ვანდელაერი
გირჩევთ:
რეტრო არკადული - (სრული ზომა Powered by Raspberry Pi): 8 ნაბიჯი
Retro Arcade - (სრული ზომა Powered by Raspberry Pi): პირველ რიგში მინდოდა მადლობა გადაგიხადოთ ამ რეტრო არკადული სისტემის მშენებლობის სახელმძღვანელოს გადახედვისათვის. მე ვიღებ ძველ არკადულ ყუთს და ვდებ ცალკეულ კაბინეტში 24 დიუმიანი ფართო ეკრანის მონიტორით. ამ სახელმძღვანელოზე გაზომვები უხეშია
რეტრო "რაიოტრონის" ღამის შუქი (ნაწილი 1): 16 ნაბიჯი
რეტრო "რაიოტრონის" ღამის შუქი (ნაწილი 1): შესავალი 1956 წლის დეკემბერში ატომურმა ლაბორატორიებმა გამოაცხადეს რაიოტრონი, როგორც "პირველი დაბალი ღირებულების ელექტროსტატიკური გენერატორი და ნაწილაკების ამაჩქარებელი" მეცნიერების პედაგოგებისთვის და მოყვარულთათვის [1]. რაიოტრონი იყო დიდი ზომის, რეზინის ქამრით დამუხტული
რეტრო CP/M დგას მარტო ემულატორი: 8 ნაბიჯი
Retro CP/M Stand Alone Emulator: ეს პროექტი იყენებს VGA32 ESP v1.4 მოდულს კომბინაციის გასაშვებად ან RunCPM და FabGL, რათა უზრუნველყოს ცალკე კომპიუტერი, რომელიც მუშაობს CP/M 2.2– ის ეკვივალენტურ სისტემაზე. პოპულარულია 1980 -იან წლებში, როგორც ოპერაციული სისტემა მცირე კომპიუტერებისთვის. შეგიძლია დაბრუნდე
Arduino დაფუძნებული წვრილმანი თამაშის კონტროლერი - Arduino PS2 თამაშის კონტროლერი - თამაში Tekken With DIY Arduino Gamepad: 7 ნაბიჯი
Arduino დაფუძნებული წვრილმანი თამაშის კონტროლერი | Arduino PS2 თამაშის კონტროლერი | თამაში Tekken With DIY Arduino Gamepad: გამარჯობა ბიჭებო, თამაშების თამაში ყოველთვის სახალისოა, მაგრამ საკუთარი წვრილმანი თამაშით თამაში უფრო სახალისოა. ასე რომ, ჩვენ გავაკეთებთ თამაშის კონტროლერს arduino pro micro- ს ამ ინსტრუქციებში
YABC - კიდევ ერთი ბლინკის კონტროლერი - IoT Cloud ტემპერატურისა და ტენიანობის კონტროლერი, ESP8266: 4 ნაბიჯი
YABC - კიდევ ერთი ბლინკის კონტროლერი - IoT Cloud ტემპერატურისა და ტენიანობის კონტროლერი, ESP8266: გამარჯობათ, მე ცოტა ხნის წინ დავიწყე სოკოს მოყვანა სახლში, ოსტრების სოკო, მაგრამ მე უკვე მაქვს 3 ამ კონტროლერის სახლში Fermenter ტემპერატურის კონტროლი ჩემი სახლის ხარშვის, მეუღლისთვის ის ასევე აკეთებს ამ კომბუჩას საქმეს ახლა და როგორც თერმოსტატი სითბოსთვის