Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
projets:malinette:hardware:accueil [2016/06/24 23:07] resonance [Arduino Malinette Midi] |
projets:malinette:hardware:accueil [2016/12/13 16:07] (Version actuelle) resonance [Code] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Malinette Hardware ====== | ====== Malinette Hardware ====== | ||
- | ===== Boîtier | + | ===== Malinette v1 - pédagogique |
- | ==== Boîte USB ==== | + | ==== Boîtier |
- | * Fichiers de fabrication (contreplaqué de 3mm) : | + | * Voir la page [[projets:malinette-laserbox: |
+ | {{:projets:boite-malinette-laser: | ||
+ | ==== Électronique ==== | ||
+ | Arduino Roméo v2, plaque à essai et capteurs/actionneurs DfRobot | ||
- | {{: | + | ==== Code ==== |
- | {{:projets:malinette:hardware: | + | Installer Arduino et téléverser l' |
- | {{: | + | ===== Malinette v2 - USB/MIDI - Arduino ===== |
+ | Une interface physique et électronique qui communique en MIDI et permet la connection de capteurs et d' | ||
- | Export d' | ||
- | {{: | ||
- | Réglages RdWorks pour la découpe laser | + | {{: |
+ | |||
+ | ==== Boîtier ==== | ||
+ | * Fichiers de fabrication (découpe laser avec du contreplaqué de 3mm) : | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | // | ||
+ | // | ||
+ | |||
+ | Export d' | ||
+ | {{: | ||
+ | |||
+ | Réglages | ||
{{: | {{: | ||
- | ==== Boîte pédagogique v1 ==== | ||
- | * Voir la page [[projets: | ||
- | {{: | ||
- | ===== Électronique | + | ==== Électronique ==== |
- | ==== Arduino USB Shield ==== | + | * Fichiers |
- | Un shield pour utiliser des connecteur USB (comme la brutbox). | + | |
- | * Fichiers KiCad : {{: | + | |
- | {{: | + | Carte double face avec connecteurs USB. Par défaut 4 capteurs analogiques et 12 sorties sont possibles. En plaçant les jumpers vers le bas, il est possible d' |
- | {{: | + | |
- | {{: | + | {{: |
+ | {{: | ||
+ | {{: | ||
// | // | ||
// | // | ||
- | ==== Version Teensy ==== | ||
- | L' | ||
- | * [[projets: | + | ==== Code ==== |
- | + | ||
- | ===== Firmware ===== | + | |
- | + | ||
- | ==== Arduino Malinette Midi ==== | + | |
* Fichiers (Arduino et Pure Data) : {{: | * Fichiers (Arduino et Pure Data) : {{: | ||
+ | |||
+ | L' | ||
{{: | {{: | ||
- | Pour installer le firmware Midi, voir la page consacrée à [[logiciels: | ||
++++ Code Arduino Uno : malinette_midi_uno.ino | | ++++ Code Arduino Uno : malinette_midi_uno.ino | | ||
Ligne 56: | Ligne 63: | ||
* Reso-nance Numérique | * Reso-nance Numérique | ||
* 24/06/16 | * 24/06/16 | ||
+ | | ||
+ | * modif : 13/12/2016 | ||
*/ | */ | ||
Ligne 68: | Ligne 77: | ||
const int offsetAna = 20; // > ctlout 20 to control ana | const int offsetAna = 20; // > ctlout 20 to control ana | ||
- | const int offsetOut = 30; // > ctlout 30 to control | + | const int offsetOut = 30; // > ctlout 30 to control |
const long interval = 30; // sampling rate | const long interval = 30; // sampling rate | ||
// SENSORS | // SENSORS | ||
- | int anaState[anaNb]; | + | int anaState[anaNb]; |
int anaValues[anaNb]; | int anaValues[anaNb]; | ||
int anaLastValues[anaNb]; | int anaLastValues[anaNb]; | ||
Ligne 89: | Ligne 98: | ||
{ | { | ||
// Setup output pins (start from 2) | // Setup output pins (start from 2) | ||
- | for (int i = 2; i < (outNb - 2); i++) { | + | for (int i = 2; i < outNb; i++) { |
pinMode(i, OUTPUT); | pinMode(i, OUTPUT); | ||
} | } | ||
Ligne 182: | Ligne 191: | ||
* Reso-nance Numérique | * Reso-nance Numérique | ||
* 24/06/16 | * 24/06/16 | ||
+ | | ||
+ | * modif : 13/12/16 | ||
*/ | */ | ||
Ligne 211: | Ligne 222: | ||
{ | { | ||
// Setup output pins (start from 2) | // Setup output pins (start from 2) | ||
- | for (int i = 2; i < (outNb - 2); i++) { | + | for (int i = 2; i < outNb; i++) { |
pinMode(i, OUTPUT); | pinMode(i, OUTPUT); | ||
} | } | ||
Ligne 295: | Ligne 306: | ||
++++ | ++++ | ||
- | ==== Teensy | + | ===== Malinette |
- | * Fichiers (Arduino et Pure Data) : {{: | + | |
- | **Pure Data** | + | ==== Boîtier ==== |
- | {{: | + | En cours |
+ | ==== Électronique ==== | ||
+ | * Ancienne version : [[projets: | ||
- | ++++ Code Arduino : teensy_malinette.ino | | + | ==== Code ==== |
- | <code cpp> | + | * Ancienne version |
- | // TEENSY - MALINETTE | + | |
- | // Control inputs and outputs with MIDI messages | + | |
- | // 30/05/2015 - http:// | + | |
- | + | ||
- | #include < | + | |
- | + | ||
- | // Pins | + | |
- | int anaPins[] | + | |
- | int outPins[] | + | |
- | const int anaNb = 6; // number of inputs | + | |
- | const int outNb = 2; // number of outputs | + | |
- | + | ||
- | // Midi Mapping | + | |
- | int anaCtl[] | + | |
- | int outCtl[] | + | |
- | int anaStateCtl[] | + | |
- | int outStateCtl[] | + | |
- | + | ||
- | // Ana Sensors | + | |
- | int anaState[anaNb]; | + | |
- | const int channel = 1; | + | |
- | int anaValues[anaNb]; // current analog values | + | |
- | int anaLastValues[anaNb]; // previous analog values | + | |
- | + | ||
- | // Sampling rate | + | |
- | const long interval = 30; | + | |
- | unsigned long currentMillis; | + | |
- | unsigned long previousMillis = 0; | + | |
- | + | ||
- | // Output | + | |
- | Servo servo0, | + | |
- | int outState[outNb]; | + | |
- | + | ||
- | void setup() { | + | |
- | for (int i = 0; i < outNb; i++) { | + | |
- | pinMode(outPins[i], | + | |
- | } | + | |
- | usbMIDI.setHandleControlChange(OnControlChange); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | currentMillis = millis(); | + | |
- | if(currentMillis | + | |
- | previousMillis = currentMillis; | + | |
- | for (int i = 0; i < anaNb; i++) { | + | |
- | if(anaState[i] == 1) { // check first if the sensor is on | + | |
- | anaValues[i] = analogRead(anaPins[i]) | + | |
- | if (anaValues[i] != anaLastValues[i]) { | + | |
- | usbMIDI.sendControlChange(anaCtl[i], | + | |
- | anaLastValues[i] = anaValues[i]; | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | //Discard incoming MIDI messages. | + | |
- | while (usbMIDI.read()) { | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | // Receive Midi Control Change | + | |
- | void OnControlChange(byte channel, byte control, byte value) { | + | |
- | + | ||
- | // Analog sensors on/off | + | |
- | if (control == anaStateCtl[0] ) {anaState[-value+(anaNb-1)] = 0;} | + | |
- | else if (control == anaStateCtl[1] ) {anaState[-value+(anaNb-1)] = 1;} | + | |
- | + | ||
- | // Set Outputs Values | + | |
- | else if (control == outCtl[0] ) {setOutValue(0, | + | |
- | else if (control == outCtl[1] ) {setOutValue(1, | + | |
- | + | ||
- | // Set Outputs States (none, digital, pwm, servo) | + | |
- | else if (control == outStateCtl[0] ) {setOutState(0, | + | |
- | else if (control == outStateCtl[1] ) {setOutState(1, | + | |
- | } | + | |
- | + | ||
- | // Set outputs | + | |
- | void setOutValue(int outId, int value, Servo servo) { | + | |
- | | + | |
- | if( state == 1) { // digital mode | + | |
- | | + | |
- | | + | |
- | } else if( state == 2){ // pwm mode | + | |
- | analogWrite(outPins[outId], | + | |
- | } else if( state == 3){ // servo mode | + | |
- | if (servo.attached()) {servo.write(map(value, | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void setOutState(int outId, int value, Servo servo) { | + | |
- | // Check last state to turn off | + | |
- | if ( outState[outId] == 1) {digitalWrite(outPins[outId], | + | |
- | else if ( outState[outId] == 2) {analogWrite(outPins[outId], | + | |
- | + | ||
- | if (value == 3) { | + | |
- | if (!servo.attached()) {servo.attach(outPins[outId]); | + | |
- | } else { | + | |
- | if (servo.attached()) {servo.detach(); | + | |
- | } | + | |
- | + | ||
- | outState[outId] = value; | + | |
- | } | + | |
- | </ | + | |
- | ++++ | + |