Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » Aruino и MIDI Drums (Ударная MIDI установка)
Aruino и MIDI Drums
alexval2007Дата: Воскресенье, 13.02.2011, 23:07 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Лазил я по просторам инета и нашёл несколько занимательных статей на тему Arduino-MIDI и это меня заинтересовало после просмотра видео на этой страничке

http://todbot.com/blog....arduino
Это ударная установка на базе ардуино в качестве датчиков пьезокерамические излучатели все это чудо гонит сигнал на миди вход которого у меня нету и в этом вся беда полазив по нету нашёл описание протокола это обычный последовательный протокол разница в том что скорость должна быть скорости 31250 бит / с.
Шлём по три байта в формате команда-даные1-даные2
Подшаманил драйвер фтдишнего преобразователя ардуины теперь есть возможность выбирать эту скорость хочу слать данные на ком порт а стой стороны забирать вот в раздумьях как мне это все довести до ума у меня моя дуинна что то не фига не шлёт в порт.

Перевёл как смог статью

Аппаратные средства

Оборудование контролер Arduino, разъем MIDI, несколько кнопок, и два пьезокерамических излучателя подключаются к нему. Всё это работает от батарейки 9V типа крона.
Схема подключения внешних цепей к контролеру:

Примечание: в зависимости от того, какой разъем MIDI вы используете (гнездо или штекер на кабеле), вам может потребоваться поменять местами провода MIDI, контакты 4 и 5. Пьезокерамический излучатель подключается через резистор 1мОм для того чтобы снизить напряжение вырабатываемое пьезокерамическим излучателем при ударе по нему. Стабилитрон на напряжение стабилизации 5,1V необходим чтобы предохранить входы контролера от большого напряжения.
Arduino код
В коде есть несколько уловок, которые надо объяснить.
Первая в том, что для создания интерфейса MIDI, все, что вам действительно нужно, так это возможность передавать по последовательному интерфейсу данные на скорости 31250 бит / с. Это легко сделать при помощи " Serial.begin(31250) ".Как только это будет сделано, полное 3-байтовое MIDI- сообщение может быть отправлено при помощи трёх команд " Serial.print(val,BYTE) ".
Следующий сложный момент в том, что переключатели на схеме, не нужно подтягивать к логическим уровням нагрузочными резисторами. Это потому, что включены внутренние подтягивающие резисторы AVR микроконтроллера с помощью функции " digitalWrite(pin,HIGH) ". Может показаться нелогичным использовать функцию digitalWrite() для этого, но это как раз очень хорошо работает для AVR. Преимущество в том, что вам больше не нужен подтягивающий резистор к +5 V. В результате меньше усилий по монтажу лишних проводов и компонентов.
Последний прием измеряет силу удара на пьезокерамическом излучателе.
Если ударить по пьезокерамическому излучателю он начинает вырабатывать напряжение которое имеет колебания похожие на те которые выдает колокол (постепенно затухающие).
Эти колебания имеют вид показанный ниже:

Измеряя время, которое требуется для того чтобы колебания пересекли установленный порог, вы можете получить представление о силе удара. В коде это представлено в виде чтения аналогового значение и контроля перехода через порог. Если значение перешло через порог, ждем пока оно снова опустится ниже порога, и подсчитаем время необходимое для этого.
Раньше я использовал для ввода операционники чтобы преобразовать аналоговый сигнал в цифровой (что делать порога в области аналоговой), а затем использовать прерывания, чтобы получить очень точные интервалы времени.
код
/*
* MIDI Drum Kit
* -------------
* Convert Arduino to a MIDI controller using various inputs and
* the serial port as a MIDI output.
*
* This sketch is set up to send General MIDI (GM) drum notes
* on MIDI channel 1, but it can be easily reconfigured for other
* notes and channels
*
* It uses switch inputs to send MIDI notes of a fixed velocity with
* note on time determined by duration of keypress and it uses
* piezo buzzer elements as inputs to send MIDI notes of a varying velocity
* & duration, depending on forced of impulse imparted to piezo sensor.
*
* To send MIDI, attach a MIDI out jack (female DIN-5) to Arduino.
* DIN-5 pinout is: _____
* pin 2 - Gnd / \
* pin 4 - 220 ohm resistor to +5V | 3 1 | MIDI jack
* pin 5 - Arduino D1 (TX) | 5 4 |
* all other pins - unconnected \__2__/
* On my midi jack, the color of the wires for the pins are:
* 3 = n/c
* 5 = black (blue)
* 2 = red (red)
* 4 = orange (yellow)
* 1 = brown
*
* Based off of Tom Igoe's work at:
* http://itp.nyu.edu/physcomp/Labs/MIDIOutput
*
* Created 25 October 2006
* copyleft 2006 Tod E. Kurt
* http://todbot.com/
*
* Updates:
* - 2 May 2009 - fixed noteOn() and noteOff()
*
*/

// what midi channel we're sending on
// ranges from 0-15
#define drumchan 1

// general midi drum notes
#define note_bassdrum 35
#define note_snaredrum 38
#define note_hihatclosed 42
#define note_hihatopen 44
#define note_crash 49

// define the pins we use
#define switchAPin 7
#define switchBPin 6
#define switchCPin 5
#define piezoAPin 0
#define piezoBPin 1
#define ledPin 13 // for midi out status

// analog threshold for piezo sensing
#define PIEZOTHRESHOLD 100

int switchAState = LOW;
int switchBState = LOW;
int switchCState = LOW;
int currentSwitchState = LOW;

int val,t;

void setup() {
pinMode(switchAPin, INPUT);
pinMode(switchBPin, INPUT);
pinMode(switchCPin, INPUT);
digitalWrite(switchAPin, HIGH); // turn on internal pullup
digitalWrite(switchBPin, HIGH); // turn on internal pullup
digitalWrite(switchCPin, HIGH); // turn on internal pullup

pinMode(ledPin, OUTPUT);
Serial.begin(31250); // set MIDI baud rate
}

void loop() {
// deal with switchA
currentSwitchState = digitalRead(switchAPin);
if( currentSwitchState == LOW && switchAState == HIGH ) // push
noteOn(drumchan, note_bassdrum, 100);
if( currentSwitchState == HIGH && switchAState == LOW ) // release
noteOff(drumchan, note_bassdrum, 0);
switchAState = currentSwitchState;

// deal with switchB
currentSwitchState = digitalRead(switchBPin);
if( currentSwitchState == LOW && switchBState == HIGH ) // push
noteOn(drumchan, note_snaredrum, 100);
if( currentSwitchState == HIGH && switchBState == LOW ) // release
noteOff(drumchan, note_snaredrum, 0);
switchBState = currentSwitchState;

// deal with switchC
currentSwitchState = digitalRead(switchCPin);
if( currentSwitchState == LOW && switchCState == HIGH ) // push
noteOn(drumchan, note_hihatclosed, 100);
if( currentSwitchState == HIGH && switchCState == LOW ) // release
noteOff(drumchan, note_hihatclosed, 0);
switchCState = currentSwitchState;

// deal with first piezo, this is kind of a hack
val = analogRead(piezoAPin);
if( val >= PIEZOTHRESHOLD ) {
t=0;
while(analogRead(piezoAPin) >= PIEZOTHRESHOLD/2) {
t++;
}
noteOn(drumchan,note_hihatopen, t*2);
delay(t);
noteOff(drumchan,note_hihatopen,0);
}

// deal with second piezos, this is kind of a hack
val = analogRead(piezoBPin);
if( val >= PIEZOTHRESHOLD ) {
t=0;
while(analogRead(piezoBPin) >= PIEZOTHRESHOLD/2) {
t++;
}
noteOn(drumchan,note_crash, t*2);
delay(t);
noteOff(drumchan,note_crash,0);
}
}

// Send a MIDI note-on message. Like pressing a piano key
// channel ranges from 0-15
void noteOn(byte channel, byte note, byte velocity) {
midiMsg( (0x90 | channel), note, velocity);
}

// Send a MIDI note-off message. Like releasing a piano key
void noteOff(byte channel, byte note, byte velocity) {
midiMsg( (0x80 | channel), note, velocity);
}

// Send a general MIDI message
void midiMsg(byte cmd, byte data1, byte data2) {
digitalWrite(ledPin,HIGH); // indicate we're sending MIDI data
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
digitalWrite(ledPin,LOW);
}
Дополнительная информация на форуме: http://rln.nnov.ru/forum/viewtopic.php?t=238

киношка

 
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » Aruino и MIDI Drums (Ударная MIDI установка)
  • Страница 1 из 1
  • 1
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008