Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
projets:teensymiditouchcontroller:accueil [2015/04/01 10:16] resonance créée |
projets:teensymiditouchcontroller:accueil [2015/04/23 13:00] (Version actuelle) resonance [Touches tactiles en Midi] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== | + | ====== |
+ | |||
+ | {{: | ||
+ | |||
+ | {{tag> | ||
+ | |||
+ | ===== Description | ||
* Porteur du projet : [[user: | * Porteur du projet : [[user: | ||
* Date : 22/12/2014 | * Date : 22/12/2014 | ||
* Licence : libre ! | * Licence : libre ! | ||
* Contexte : installation utilisant le midi comme interface de commande | * Contexte : installation utilisant le midi comme interface de commande | ||
- | * Fichiers : | + | * Fichiers : {{: |
- | * Lien : | + | * Lien : [[http:// |
- | ===== Description ===== | ||
+ | {{ youtube> | ||
- | {{: | ||
- | Hommage aux pianistes anonymes qui improvisaient les bandes sons des films muets, instrument intelligent, | + | Hommage aux pianistes anonymes qui improvisaient les bandes sons des films muets, instrument intelligent, |
- | Ce piano hybride conçu par le Collectif Arbuste est augmenté d’un | + | |
- | tableau de bord aux fonctions mystérieuses. Évocation des vieux pianos bastringues des westerns et du cinéma muet, il révèle des propriétés acoustiques bizarroïdes et inouïes, déclenche des sections de dialogues et autres ambiances, influe sur l’éclairage de l’espace. | + | |
Ce “générateur d’ambiances fictionnelles” est issu d’une création pour les 1 ans de la Médiathèque de La Ciotat. Instinctif, il a été conçu pour être laissé en libre service. Il peut également servir d’instrument de base pour des performances/ | Ce “générateur d’ambiances fictionnelles” est issu d’une création pour les 1 ans de la Médiathèque de La Ciotat. Instinctif, il a été conçu pour être laissé en libre service. Il peut également servir d’instrument de base pour des performances/ | ||
- | [[http:// | ||
- | https:// | ||
===== Matériaux ===== | ===== Matériaux ===== | ||
- | - une carte Teensy 3.1\\ | + | * une carte Teensy 3.1\\ |
- | - un [[https:// | + | * un [[https:// |
- | - cable usb micro-B: [[http:// | + | * cable usb micro-B: [[http:// |
- | - OPTIONNEL (mais très fortement conseillé): | + | * //OPTIONNEL// (mais très fortement conseillé): |
- | - fil de montage\\ | + | * fil de montage\\ |
- | - pièces de cuivre, ou bandes d' | + | * pièces de cuivre, ou bandes d' |
- | - potentiomètres (10K)\\ | + | * potentiomètres (10K)\\ |
- | - interrupteurs momentanés ou switches\\ | + | * interrupteurs momentanés ou switches\\ |
- | - 12 résistances (par controleur construit) | + | * 12 résistances (par controleur construit) |
===== Tutoriel ===== | ===== Tutoriel ===== | ||
Ligne 55: | Ligne 57: | ||
- 8 entrées analogiques qui lisent des potentiomètres et envoient des Control Change (CC) MIDI\\ | - 8 entrées analogiques qui lisent des potentiomètres et envoient des Control Change (CC) MIDI\\ | ||
- 4 entrées digitales qui envoient des Control Change\\ | - 4 entrées digitales qui envoient des Control Change\\ | ||
- | |||
- | |||
**1- DESIGN D'UN PCB:** | **1- DESIGN D'UN PCB:** | ||
- | |||
en utilisant Fritzing ( [[http:// | en utilisant Fritzing ( [[http:// | ||
Ligne 67: | Ligne 66: | ||
(Le design ne respecte surement pas toutes les règles de design d'un circuit imprimé et est surement loin d' | (Le design ne respecte surement pas toutes les règles de design d'un circuit imprimé et est surement loin d' | ||
- | Le circuit vu dans Fritzing: | + | Le circuit vu dans Fritzing:\\ |
+ | {{: | ||
- | {{: | + | Le circuit une fois reçu, et monté:\\ |
- | + | {{: | |
- | Le circuit une fois reçu, et monté: | + | |
- | + | ||
- | {{: | + | |
- | + | ||
- | **2- MONTAGE DES COMPOSANTS SUR LA CARTE:** | + | |
+ | **2- MONTAGE DES COMPOSANTS SUR LA CARTE:**\\ | ||
Commencer par les résistances smd de 10K: poser un peu de soudure sur un des plots carrés qui leurs sont destinés, placer la résistance et souder un de ses cotés sur le plot en appuyant doucement dessus, lorsqu' | Commencer par les résistances smd de 10K: poser un peu de soudure sur un des plots carrés qui leurs sont destinés, placer la résistance et souder un de ses cotés sur le plot en appuyant doucement dessus, lorsqu' | ||
Ligne 82: | Ligne 78: | ||
- | Voilà la carte montée: | + | Voilà la carte montée:\\ |
sur la photo ci-dessous, les 12 entrées pour les touches tactiles sont en haut. Sur la droite se trouvent les 4 entrées digitales, et en bas les borniers vers les 8 entrées analogiques. Pour les entrées digitales et analogiques: | sur la photo ci-dessous, les 12 entrées pour les touches tactiles sont en haut. Sur la droite se trouvent les 4 entrées digitales, et en bas les borniers vers les 8 entrées analogiques. Pour les entrées digitales et analogiques: | ||
Ligne 100: | Ligne 95: | ||
**Dans le code ci dessous, les entrées touch numérotées de 1 à 12 envoient les notes 36 à 47 (vélocité 0 ou 127, soit note on et note off) (de Do à Si chromatiquement), | **Dans le code ci dessous, les entrées touch numérotées de 1 à 12 envoient les notes 36 à 47 (vélocité 0 ou 127, soit note on et note off) (de Do à Si chromatiquement), | ||
- | < | + | < |
/* some code designed for using the Teensy 3 as a USB MIDI controller | /* some code designed for using the Teensy 3 as a USB MIDI controller | ||
v1.0, December 17 2013 | v1.0, December 17 2013 | ||
by Yann Seznec www.yannseznec.com | by Yann Seznec www.yannseznec.com | ||
- | |||
modified by Matthieu Pernaud for teensy 3.1 and for different purposes: | modified by Matthieu Pernaud for teensy 3.1 and for different purposes: | ||
Ligne 121: | Ligne 114: | ||
- no system for sending touch pin as CC | - no system for sending touch pin as CC | ||
- the CC assignments are sort of random, probably should have another array for them | - the CC assignments are sort of random, probably should have another array for them | ||
- | |||
*/ | */ | ||
/* TOUCHPINS - send midi notes */ | /* TOUCHPINS - send midi notes */ | ||
- | |||
int const numTouchPins = 12; // number of pins to use as touchpins, sending note values | int const numTouchPins = 12; // number of pins to use as touchpins, sending note values | ||
int touch[numTouchPins]; | int touch[numTouchPins]; | ||
Ligne 137: | Ligne 128: | ||
/*ANALOG PINS*/ | /*ANALOG PINS*/ | ||
- | |||
int const numPins = 8; // number of analog inputs | int const numPins = 8; // number of analog inputs | ||
int currentVal[numPins]; | int currentVal[numPins]; | ||
Ligne 145: | Ligne 135: | ||
}; | }; | ||
int analogstartcc = 50; // MIDI CC number to start from. | int analogstartcc = 50; // MIDI CC number to start from. | ||
- | |||
- | |||
int const numDigPins = 0; // number of digital pins to send note values | int const numDigPins = 0; // number of digital pins to send note values | ||
Ligne 156: | Ligne 144: | ||
48, | 48, | ||
int digInput[numDigPins]; | int digInput[numDigPins]; | ||
- | |||
int const numDigPinsCC = 4; // number of digital pins to send CC | int const numDigPinsCC = 4; // number of digital pins to send CC | ||
Ligne 166: | Ligne 153: | ||
int digInputcc[numDigPinsCC]; | int digInputcc[numDigPinsCC]; | ||
- | |||
- | |||
- | |||
- | |||
// the MIDI channel number to send messages on | // the MIDI channel number to send messages on | ||
- | |||
const int channel = 1; | const int channel = 1; | ||
- | |||
- | |||
void setup() { | void setup() { | ||
- | |||
pinMode(10, INPUT_PULLUP); | pinMode(10, INPUT_PULLUP); | ||
pinMode(11, INPUT_PULLUP); | pinMode(11, INPUT_PULLUP); | ||
pinMode(12, INPUT_PULLUP); | pinMode(12, INPUT_PULLUP); | ||
pinMode(24, INPUT_PULLUP); | pinMode(24, INPUT_PULLUP); | ||
- | |||
Serial.begin(38400); | Serial.begin(38400); | ||
- | |||
} | } | ||
void loop() { | void loop() { | ||
- | | ||
- | | ||
// touch sending notes | // touch sending notes | ||
- | | ||
for (int i = 0; i < numTouchPins; | for (int i = 0; i < numTouchPins; | ||
touch[i] = touchRead(touchpin[i]); | touch[i] = touchRead(touchpin[i]); | ||
Ligne 219: | Ligne 193: | ||
} | } | ||
- | | ||
*/ | */ | ||
- | |||
- | |||
// digital pins sending notes | // digital pins sending notes | ||
// for (int i = 0; i < numDigPins; i++) { | // for (int i = 0; i < numDigPins; i++) { | ||
Ligne 236: | Ligne 207: | ||
//// digital pins sending CC | //// digital pins sending CC | ||
- | |||
for (int i = 0; i < numDigPinsCC; | for (int i = 0; i < numDigPinsCC; | ||
if (digitalRead(digitalpincc[i]) == 1 && currentDigcc[i] == 0) { | if (digitalRead(digitalpincc[i]) == 1 && currentDigcc[i] == 0) { | ||
Ligne 249: | Ligne 219: | ||
//// analog pins | //// analog pins | ||
- | |||
for (int i = 0; i < numPins; i++) { | for (int i = 0; i < numPins; i++) { | ||
- | |||
newVal[i] = analogRead(analogPins[i]); | newVal[i] = analogRead(analogPins[i]); | ||
- | | ||
if (abs(newVal[i] - currentVal[i])> | if (abs(newVal[i] - currentVal[i])> | ||
{ | { | ||
Ligne 259: | Ligne 226: | ||
currentVal[i] = newVal[i]; | currentVal[i] = newVal[i]; | ||
} | } | ||
- | | ||
- | |||
} | } | ||
| | ||
Ligne 267: | Ligne 232: | ||
delay(5); | delay(5); | ||
} | } | ||
- | |||
} | } | ||
- | |||
- | |||
</ | </ | ||
Ligne 293: | Ligne 255: | ||
voilà un patch Pure Data pour tester la carte (avec le code ci dessus uploadé): | voilà un patch Pure Data pour tester la carte (avec le code ci dessus uploadé): | ||
- | {{: | + | * {{: |
+ | ===== Photos ===== | ||
+ | {{: | ||
- | quelques photos de notre réalisation: | ||
- | |||
- | {{: | ||
- | |||
- | {{: | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Photos ===== | ||
- | {{tag> |