Оглавление:
- Шаг 1: Wat Heb Je Nodig?
- Шаг 2: обработка кода
- Шаг 3: код Arduino
- Шаг 4: Жнец
- Шаг 5: Behuizing
- Шаг 6: Elektronica
- Шаг 7: Medewerkers
Видео: Ретро-контроллер: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) в Erasmushogeschool Brussel.
Samen hebben we een muziek controller gemaakt dat muziek kan start / stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.
На кассете Kwam Van Van Een был сделан контроллер, созданный для открытой кассеты.
Шаг 1: Wat Heb Je Nodig?
Componenten
- 2 кнопки;
- 2 потенциометра;
- 2 верстандена (1 тыс. Лосей);
- Arduino uno / nano
- Draadjes (zie elektronisch schema)
- Soldeerplaat
- подушка из МДФ
Инструменты
- лазерный резак
- Книптанг
- Стриптанг
- Soldeerbout (металлическая жесть)
Programma's
- Иллюстратор / indesign (Текенпрограмма)
- Жнец
- Обработка
- Ардуино
Шаг 2: обработка кода
/**
* Базовый скетч для получения последовательных сообщений от Arduino * и преобразования их в сообщения OSC для Reaper * * Вам нужно будет адаптировать ПАРАМЕТРЫ ПОЛЬЗОВАТЕЛЯ * и вам нужно будет установить библиотеку: oscP5 * * для werkcollege AV&IT * от annoo bob eddi * октябрь 2017 * * / ///////////////////// ПАРАМЕТРЫ ПОЛЬЗОВАТЕЛЯ ////////////////////// ////////
/ убедитесь, что вы используете ту же скорость передачи в финальном скетче Arduino int baudRate = 115200;
// Идем и ищем IP-адрес в Reaper при использовании OSC // Это адрес, который Processing отправляет и который слушает Reaper. // Поместите эту строку в remoteIP, здесь.
// последняя строка remoteIP = "192.168.1.43"; //например. «127.0.0.1»;
final String remoteIP = "vul hier ip in gevonden in reaper";
// Обратите внимание на sendPort и заполните его в Reaper. // Это порт, который обрабатывает и слушает Reaper.
финальный int listenPort = 11000, sendPort = 12000;
// Здесь listenPort для активной отладки.
// имена портов также используются для отладки.
final String portName = "другое имя порта в gevonden в Arduino";
// последняя строка portName = "COM6"; // "/ dev / ttyUSB0";
///////////////////// КОНЕЦ ПАРАМЕТРОВ ПОЛЬЗОВАТЕЛЯ ///////////////////////// ////
import processing.serial. *; import java.util. *;
импортировать oscP5. *; импорт netP5. *;
OscP5 oscP5; NetAddress myRemoteLocation;
Последовательный порт commsPort; // Логическое значение последовательного порта messageArhibited = false;
String incoming = "", IncomingOSCMessage = "";
финальный символ startChar = '*', endChar = '#'; последний символ 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 , value); }} // если возникла ошибка, поймем ее отображение и выйдем. catch (Exception ex) {println ("Сообщение об исключении:" + ex); printArray (resVec); выход(); }}
// Для фильтрации наших сообщений. * Таким образом, мы отфильтровываем входящие значения, которые на самом деле меняются. HashMap (); for (String key: newParams.keySet ()) {// если ключ уже присутствует if (oldParams.containsKey (key)) {// ключ присутствует и значение не совпадает, затем обновить if (! oldParams.get (key).equals (newParams.get (ключ))) {toSendParams.put (ключ, newParams.get (ключ)); }} else {// ключ отсутствует в старых параметрах, так что вставьте его! toSendParams.put (ключ, newParams.get (ключ)); } oldParams.put (ключ, newParams.get (ключ)); }}
void makeOSC () {для (Строковый ключ: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/" + ключ); myMessage.add (toSendParams.get (ключ)); / * отправляем сообщение * / oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Когда мы хотим напечатать в окне void ShowIncoming () {// чтобы увидеть входящее сообщение, как установлено в тексте HashMap ("Incoming from Arduino", 20, 20); int y = 20; for (Строковый ключ: newParams.keySet ()) {y = y + 20; текст (ключ, 20, y); текст (newParams.get (ключ), 300, y); }}
void showOsc () {текст (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {size (1000, 800); // Размер сцены fill (255); фон (0); oldParams = новая HashMap (); newParams = новая HashMap (); // printArray (Serial.list ()); commsPort = новый последовательный порт (this, portName, baudRate);
/ * запускаем oscP5, ожидая входящих сообщений * / oscP5 = new OscP5 (this, listenPort);
/ * myRemoteLocation - это сетевой адрес. NetAddress принимает 2 параметра, * IP-адрес и номер порта. myRemoteLocation используется как параметр в * oscP5.send () при отправке пакетов osc на другой компьютер, устройство, * приложение. использование см. ниже. для целей тестирования порт прослушивания * и порт адреса удаленного местоположения совпадают, поэтому вы * будете отправлять сообщения обратно в этот скетч. * / myRemoteLocation = новый NetAddress (remoteIP, sendPort); }
void draw () {если (messageArhibited) {фон (0); translateMessage (); ShowIncoming (); messageArved = false; } showOsc (); }
void serialEvent (Serial commsPort) {// считываем байт из последовательного порта: char inChar = commsPort.readChar (); переключатель (inChar) {case contactCharacter: commsPort.write (contactCharacter); // запросить больше println ("начало…"); перерыв; case startChar: incoming = ""; перерыв; case endChar: messageArhibited = true; // println ("конец сообщения"); перерыв; по умолчанию: входящий + = inChar; перерыв; }}
/ * входящее сообщение osc пересылается методу oscEvent. * / void oscEvent (OscMessage theOscMessage) {значение с плавающей запятой = theOscMessage.get (0).floatValue (); // получаем первый аргумент osc
IncomingOSCMessage + = "\ n" + String.format ("### получил сообщение осключения:" + "addrpattern:" + theOscMessage.addrPattern () + ":% f", value); println (Входящее сообщениеOSCMessage); }
Шаг 3: код Arduino
/ * Этот код представляет собой базовый скетч для связи с обработкой через последовательный порт.
Это план, в который вы можете поместить свой собственный код, указанный для ваших собственных кнопок, потенциометров или датчиков.
У него есть рукопожатие, чтобы убедиться, что у нас есть контакт, и формат, в котором мы общаемся, определен
Важно создать сообщение таким же образом, чтобы Processing знала, как его деконструировать и отправлять правильные сообщения OSC в нашу DAW.
сделано для werkcollege AV&IT октябрь 2017 г.
code smooothing создано 22 апреля 2007 г. Дэвидом А. Меллисом, изменено 9 апреля 2012 г. Томом Иго
*/
/ скорость передачи const long baudRate = 115200;
// время ожидания в мс между опросами контактов const int loopPauseTime = 200; // миллисекунды
// начальное и конечное значения для сообщения, отправленного на Serial const String startString = "*", endString = "#";
const char contactCharacter = '|';
// идентификатор контакта 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; // переменная для чтения состояния кнопки float sensorValue1 = 0; датчик поплавкаValue2 = 0; датчик поплавкаValue3 = 0;
// сглаживание показаний int [numReadings]; // показания с аналогового входа int readIndex3 = 0; // индекс текущего чтения int total3 = 0; // текущая сумма float average3 = 0; // среднее
// Нам нужна эта функция, чтобы установить контакт со скетчем обработки // Сохраните ее здесь void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // отправляем символ и ждем ответа… delay (loopPauseTime); } Serial.read (); }
void setup () {// устанавливаем pinModes для всех контактов pinMode (buttonPin1, INPUT); pinMode (buttonPin2, ВХОД); pinMode (pitchReading, INPUT); pinMode (скорость чтения, ВХОД); pinMode (InfraReading, INPUT);
// инициализируем последовательную связь Serial.begin (baudRate); в то время как (! серийный); // сглаживание для (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }
// ждем рукопожатия installContact (); }
void loop () {// опрашиваем все контакты и сопоставляем показания с соответствующим диапазоном buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (скорость чтения); sensorValue3 = analogRead (инфракрасное считывание);
// сопоставление входящих значений с необходимыми значениями sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0) / - 100.0; sensorValue2 = map (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = map (sensorValue3, 0, 700, 50, 100);
// датчик сглаживания: total3 = total3 - показания [readIndex3]; // считываем с датчика: показания [readIndex3] = sensorValue3; // добавляем показания к итоговому значению: total3 = total3 + readings [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 ("потенциал2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print («инфра-сенсор»); Serial.print (","); Серийный принт (в среднем 3/100); Serial.print (",");
Serial.print («кнопка 1 на 2 остроумия»); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print («кнопка2 в5 гел»); Serial.print (","); Serial.print (buttonState2);
// записываем конец сообщения Serial.print (endString);
// немного подождать..
задержка (loopPauseTime); }
Шаг 4: Жнец
Шаг 1: Ga bovenaan naar Options> Prefrences
Шаг 2: параметры настройки на Control / OSC / web en druk op Add
Шаг 3: Kies bij Режим панели управления для OSC (Open Sound Control)
Шаг 4: Vul je имя устройства в, винк Получение на порт анан уль в воде при обработке bij Sendport staat
Шаг 5: Копирование IP-адреса хоста в процессе обработки
Шаг 6: Друк op ok en de controller is nu verbonden met Reaper
Шаг 5: Behuizing
Порода: 170 мм
Длина: 90 мм.
Hoogte 30 мм
Кноппен: 16 мм (диаметр
Потенциометры: 3 мм (диаметр)
Датчик Afstand: Breedte 2,9 мм
Удлинить 0,8 мм
Материал: МДФ (3 мм)
Шаг 6: Elektronica
Шаг 1:
Заземление и 5 вольт от Arduino с макетной платой
Шаг 2:
Контакт Verbind A0 с потенциалом 1
Контакт Verbind A1 с потенциалом 2
Контакт Verbind A3 с инфракрасным датчиком.
Штифт Verbind A2 встретился с липкой кнопкой.
Штифт Verbind A5 встречался с липкой кнопкой.
Шаг 7: Medewerkers
- Майес Эль-Баба
- Арно Гориссен
- Мишель Де Ванделер
Рекомендуемые:
Ретро-аркада - (Полноразмерный на Raspberry Pi): 8 шагов
Ретро-аркада - (полноразмерная на базе Raspberry Pi): сначала я хотел поблагодарить вас за то, что вы взглянули на руководство по сборке этой ретро-аркадной системы. Я беру старую игровую приставку и помещаю ее в отдельный шкаф с 24-дюймовым широкоформатным монитором. Измерения в этом руководстве приблизительны, чтобы дать y
Стоячая ретро-аркада для 2 игроков от Micro Center: 20 шагов
Стоячая ретро-аркада для 2 игроков от Micro Center: в вашем местном микроцентре теперь есть все, что вам нужно, чтобы сделать свой собственный ретро-аркадный шкаф на базе Raspberry Pi. Наборы полностью настраиваемы, включая корпус, Raspberry Pi, кнопки, джойстики, аудио и видео аксессуары и многое другое. Это
Ретро аудио / видео к дополнительному аудиокабелю: 8 шагов (с изображениями)
Ретро аудио / видео к дополнительному аудиокабелю: я создал этот кабель для выполнения очень конкретной функции - для подключения MP3-плеера к автомобильному радиоприемнику, у которого есть аудио / видео порт, а не дополнительный аудиопорт. Этот процесс почти идентичен моему ретро-стерео патч-кабелю, с той лишь разницей, что
Ретро-футуристический USB-накопитель: 16 шагов (с изображениями)
Ретро-футуристический USB-накопитель: Некоторое время назад мне подарили USB-накопитель. Корпус накопителя выглядел красиво, но, к сожалению, через несколько месяцев использования он начинает вызывать проблемы с ненадежным подключением. Поэтому я перестал пользоваться этим приводом. Большинство людей
Коробка для ретро-идиотов: 10 шагов
Retro Idiot Box: Я нашел старый портативный телевизор Magnavox 1984 года выпуска, стоящий на полке в моем местном благотворительном магазине. Я подумал про себя: "О, ЧТО!" При дополнительном осмотре я заметил на нем ценник в 15 долларов, поэтому решил забрать его домой и приготовить что-нибудь