|
|
Ligne 12 : |
Ligne 12 : |
| = INTERFACE M.I.D.I POUR OBJETS ÉLECTRONIQUES DÉTOURNÉS = | | = INTERFACE M.I.D.I POUR OBJETS ÉLECTRONIQUES DÉTOURNÉS = |
| | | |
− | ==Note d'intention :== | + | ==NOTE D'INTENTION== |
− | Le but est de pouvoir contrôler n'importe quel machine électronique fonctionnant sur faible voltage (12V maximum) et que l'on peut trouver à bas coût dans les vides greniers, emmaus … en MIDI dans un premier temps.
| + | ==CONSTRUIRE UNE RITOURNELLE== |
− | Afin de pouvoir créer des instruments de musique électronique à partir de n'importe quel rebut électronique de préférence sonores.
| + | ===MATÉRIEL NÉCESSAIRE== |
− | | + | ===PARTIE LOGICIELLE=== |
− | De cette façon on peut modifier un jouet, changer la hauteur de note de ses sonorités par exemple, puis l'intégrer à son ''set'' d'instruments électroniques grâce à la possibilité d'y intégrer ce module MIDI.
| + | ====ARDUINO==== |
− | | + | ====G.E.D.A==== |
− | Par ailleurs, je cherche à réaliser rapidement, à l'aide des machines CNC, des circuits électroniques simples pour intégrer des effets audio aux jouets modifiés (fuzz, filtre ...)
| + | ===PARTIE MATÉRIELLE=== |
− | | + | ====ATMEL ATMEGA328==== |
− | ==Quels modes de synchronisation possibles ?==
| + | ====M.I.D.I==== |
− | | + | ====4051==== |
− | MIDI
| + | ====4066==== |
− | | + | ===RESSOURCES=== |
− | Sync
| + | ====LITTLE SCALE==== |
− | | + | ====CASPER ELECTRONICS==== |
− | CV/Gate
| + | ====HIGHLY LIQUID==== |
− | | |
− | OSC
| |
− | | |
− | ==Plusieurs pistes existantes pour contrôler des machines 12V== | |
− | | |
− | ===Casper Electronics version :===
| |
− | | |
− | [[File:Casper version.png|border|640px|méthode proposée par Casper Electronics]]
| |
− | | |
− | ===HighLy Liquid version :=== | |
− | | |
− | [http://store.highlyliquid.com/collections/midi-controllers/ Le site de Highy liquid ]
| |
− | | |
− | Matériel et composants utilisés :
| |
− |
| |
− | transistors NPN :
| |
− | | |
− | Relais :
| |
− | | |
− | multiplexer 4066 :
| |
− | | |
− | multiplexer 4051 :
| |
− | | |
− | ===Little Scale versions :=== | |
− | | |
− | == Version 4066 ==
| |
− | | |
− | http://little-scale.blogspot.fr/search/label/circuit%20bending?updated-max=2013-05-22T17:45:00%2B09:30&max-results=20&start=6&by-date=false
| |
− | | |
− | Utilisation d'un multiplexeur quad analog switch quad(4066) pour émuler la pression de boutons avec un microcontrolleur du type d'Arduino, le contrôle d'un oscillateur etc.<br />
| |
− | Chaque bouton sur un jouet met en contact deux parties du circuit du jouet. Il s'agit dans un premier temps de trouver ces 2 parties et de trouver un endroit ou il est possible de les connecter afin de les relier plus tard à mon multiplexeur.
| |
− | | |
− | ==== Partie hardware ==== | |
− | | |
− | <gallery widths=320px heights=240px>
| |
− | File:20130517_150800.jpg|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:20130517_150803-with-labs.jpg|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:4066.jpg
| |
− | </gallery>
| |
− | | |
− |
| |
− | Connecter le point A au point 1 équivaux à presser le bouton correspondant.
| |
− | | |
− | Il s'agit maintenant de connecter ses points là de façon électrique en utilisant Arduino.
| |
− | | |
− | Arduino ne peut pas connecter à lui seul 2 boutons, il faut utiliser une puce 4066 (4066 Quad Bi-Lateral Switch CMOS IC).
| |
− | | |
− | Cette puce coûte à peu près 50 centimes.
| |
− | Le 4066 est une puce switch qui combine 4 interrupteurs électriques.
| |
− | | |
− | Par exemple le pin 13 contrôle le mécanisme pour fermer et ouvrir les pin 1 & 2 et ainsi contrôler l'ouverture et la fermeture du bouton de façon électrique.
| |
− | | |
− | Si on envoi 5V sur le pin13 le pin 1 & 2 sont connectés, sinon ils sont déconnectés. Ce signal de 5V peut être généré par Arduino.
| |
− | | |
− | NB : la résistance entre 1 & 2 se nomme RON, on trouve cette valeur dans le datasheet de la puce. Sa valeur est de 470 Ohm à 25°C pour la HCF4066. Cette valeur est peut être la raison pour laquelle le 4066 ne marche pas pour l'instant sur tous les jouets -> Après tests le problème ne vient pas de là.
| |
− | | |
− | Voici comment connecter le 4066 avec Arduino et le jouet :
| |
− | | |
− | [[File:4066_diagram.jpg|border|640px|méthode proposée par Casper Electronics]]
| |
− | | |
− | [[File:Working_arduino.jpg|border|800px|méthode proposée par Casper Electronics]]
| |
− | | |
− | ==== Partie software ==== | |
− | | |
− | Voici un code simple pour tester le trigger dans Arduino :
| |
− | | |
− | <code code lang='c'>
| |
− | void setup() {
| |
− | pinMode(0, OUTPUT);
| |
− | }
| |
− | | |
− | void loop() {
| |
− | digitalWrite(0, HIGH);
| |
− | delay(500);
| |
− | digitalWrite(0, LOW);
| |
− | delay(500);
| |
− | }
| |
− | </code>
| |
− | | |
− | Le code utilisé pour MIDI TOY version 4066
| |
− | | |
− | <code code lang='c'>
| |
− | int incomingByte = 0; // for incoming serial data
| |
− | | |
− | const int nb = 12;
| |
− | int toy [nb];
| |
− | char input [nb] = {
| |
− | 'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'Q', 'S'};
| |
− | | |
− | | |
− | void setup() {
| |
− | Serial.begin(9600);
| |
− | | |
− | for(int i=0; i<nb; i++){
| |
− | toy[i] = i;
| |
− | pinMode(toy[i]+2, OUTPUT);
| |
− | }
| |
− | }
| |
− | | |
− | void loop(){
| |
− | if(Serial.available() > 0){
| |
− | | |
− | incomingByte = Serial.read();
| |
− | | |
− | for(int i=0; i<nb; i++){
| |
− | if(incomingByte == input[i])
| |
− | digitalWrite(toy[i]+2, HIGH);
| |
− | }
| |
− | }
| |
− | | |
− | // cette partie est importante car elle permet de réguler la vitesse de commutation des touches du jouet
| |
− | // on peut la changer en fonction du jouet (10ms pour un jouet de bonne qualité permettra de créer des
| |
− | // rythmes rapides sans coupures de son)
| |
− | delay(70);
| |
− | | |
− | for(int i=0; i<nb; i++){
| |
− | digitalWrite(toy[i]+2, LOW);
| |
− | }
| |
− | }
| |
− | </code>
| |
− | | |
− | == Version multiplexer 4051 == | |
− | | |
− | Utilisation d'une puce 4051 analog multiplexer.
| |
− | | |
− | ==== Partie hardware ==== | |
− | | |
− | Illustration du fonctionnement du multiplexer CD4051.
| |
− | | |
− | <gallery widths=320px heights=240px>
| |
− | File:Screen Shot 2013-05-21 at 6.00.07 PM.png|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:Screen_Shot_2013-05-22_at_3.43.06_PM.png|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:Screen_Shot_2013-05-22_at_3.50.09_PM.png|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:Screen_Shot_2013-05-22_at_3.50.09_PM.png|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:Screen Shot 2013-05-22 at 3.50.09 PM.png|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | File:ExampleCD4051.jpg|emprunt au site de [http://little-scale.blogspot.fr/search/label/circuit%20bending little scape]
| |
− | </gallery>
| |
− | | |
− | Maintenant que vous avez compris parfaitement le fonctionnement d'un multiplexer. Voyons voir comment ça se soude sur notre Arduino :
| |
− | | |
− | [[File:Working_2_4.jpg|border|320px|méthode proposée par Casper Electronics]]
| |
− | | |
− | ==== Partie software ==== | |
− | | |
− | Le code utilisé pour MIDI TOY version 4051
| |
− | | |
− | Pour l'instant pas commenté, mais il faut noter qu'il est nécessaire d'utiliser le point inhibit de la puce pour éviter un effet boucle sur le déclenchement des sons.
| |
− | | |
− | [[File:Index4051.png|border|320px|méthode proposée par Casper Electronics]]
| |
− | | |
− | <code code lang='c'>
| |
− | int incomingByte = 0; // for incoming serial data
| |
− | | |
− | const int nb = 12;
| |
− | int inhibit = 7;
| |
− | int out1 = 8;
| |
− | int out2 = 9;
| |
− | int out3 = 10;
| |
− | char input [nb] = {
| |
− | 'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'Q', 'S'};
| |
− | | |
− | | |
− | void setup() {
| |
− | Serial.begin(9600);
| |
− | pinMode(out1,OUTPUT);
| |
− | pinMode(out2,OUTPUT);
| |
− | pinMode(out3,OUTPUT);
| |
− | pinMode(inhibit, OUTPUT);
| |
− | }
| |
− | | |
− | void loop() {
| |
− | if(Serial.available() > 0){
| |
− | | |
− | incomingByte = Serial.read();
| |
− | | |
− | for(int i=0; i<nb; i++){
| |
− | if(incomingByte == input[i]){
| |
− | switch(incomingByte){
| |
− | case 'A':
| |
− | /* Select Input 1 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, LOW);
| |
− | digitalWrite(out2, LOW);
| |
− | digitalWrite(out3, LOW);
| |
− | delay(70);
| |
− | break;
| |
− | case 'Z':
| |
− | /* Select Input 2 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, LOW);
| |
− | digitalWrite(out2, LOW);
| |
− | digitalWrite(out3, HIGH);
| |
− | delay(70);
| |
− | break;
| |
− | case 'E':
| |
− | /* Select Input 3 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, LOW);
| |
− | digitalWrite(out2, HIGH);
| |
− | digitalWrite(out3, LOW);
| |
− | delay(70);
| |
− | break;
| |
− | case 'R':
| |
− | /* Select Input 4 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, LOW);
| |
− | digitalWrite(out2, HIGH);
| |
− | digitalWrite(out3, HIGH);
| |
− | delay(70);
| |
− | break;
| |
− | case 'T':
| |
− | /* Select Input 5 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, HIGH);
| |
− | digitalWrite(out2, LOW);
| |
− | digitalWrite(out3, LOW);
| |
− | delay(70);
| |
− | break;
| |
− | case 'Y':
| |
− | /* Select Input 6 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, HIGH);
| |
− | digitalWrite(out2, LOW);
| |
− | digitalWrite(out3, HIGH);
| |
− | delay(70);
| |
− | break;
| |
− | case 'U':
| |
− | /* Select Input 7 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, HIGH);
| |
− | digitalWrite(out2, HIGH);
| |
− | digitalWrite(out3, LOW);
| |
− | delay(70);
| |
− | break;
| |
− | case 'I':
| |
− | /* Select Input 8 */
| |
− | digitalWrite(inhibit, LOW);
| |
− | digitalWrite(out1, HIGH);
| |
− | digitalWrite(out2, HIGH);
| |
− | digitalWrite(out3, HIGH);
| |
− | delay(70);
| |
− | break;
| |
− | | |
− | default:
| |
− | digitalWrite(inhibit, HIGH);
| |
− | delay(70);
| |
− | }
| |
− | }
| |
− | }
| |
− | }
| |
− | else{
| |
− | | |
− | digitalWrite(inhibit, HIGH);
| |
− | delay(70);
| |
− | }
| |
− | }
| |
− | </code>
| |
− | | |
− | == Programmer la puce ATMEL ATTINY avec Arduino == | |
− | | |
− | Dans un premier temps essai avec le tutoriel suivant [http://www.semageek.com/tuto-programmation-des-attiny45-avec-un-arduino/ semageek].<br/>
| |
− | Ce tutoriel est très bien fait [http://www.kobakant.at/DIY/?p=3742 kobakant]
| |
− | | |
− | Il faut dans un premier temps installer [http://arduino.cc/en/Tutorial/ArduinoISP Arduino ISP] sur l'Arduino, c a d installer le sketch ARDUINO ISP (que l'on trouve dans les exemples) sur notre board. <br />
| |
− | ''This tutorial explains how to use an Arduino board as an AVR ISP (in-system programmer).'' <br/>
| |
− | | |
− | ATTENTION : il faut d'abord uploader le programme et ensuite mettre le condensateur entre le reset et la masse. <br/>
| |
− | Il faut également copier les librairie attiny-master que l'on trouve sur le github su monsieur dans le /usr/share/arduino/hardware.
| |
− | | |
− | En RÉSUMÉ :<br/>
| |
− | * Réaliser le montage tel que présenté dans le tuto semageek.
| |
− | * Télécharger la librairie ''ATTINY'' [http://playground.arduino.cc/Main/ArduinoOnOtherAtmelChips à partir de ce lien]
| |
− | * Vérifier quelles sont bien installées dans Arduino.
| |
− | * Téléverser le programme ''ArduinoISP'' sur votre Arduino.
| |
− | * Formater la puce Attiny à programmer :
| |
− | ** sélectionner “ATtiny45 (8 MHz)” dans le menu “Tools > Board”
| |
− | ** sélectionner “Arduino as ISP“ dans le menu “Tools > Programmer” ->
| |
− | ** sélectionner “Burn Bootloader” dans le menu “Tools”.
| |
− | * Téléverser le programme pour l'attiny dans l'attiny :
| |
− | ** sélectionner Attiny45 dans le menu “Tools > Board”
| |
− | ** sélectionner “Arduino as ISP“ dans le menu “Tools > Programmer”.
| |
− | ce message doit apparaître, mais ne doit pas vous inquiéter : <br/>
| |
− | avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85<br/>
| |
− | avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny8<br/>
| |
− | | |
− | == réalisation du montage final == | |
− | | |
− | = Projet parallèle : modules d'effets audio electroniques simples =
| |
− | | |
− | Un certains Tim Escobedo réalise des montage électroniqes simples pour faire des effets sonores à bas coûts DIY.
| |
− | | |
− | La plupart de ses réalisations fonctionnant en 9V, il est possible de de les intégrer à des jouets modifier, à la façon de modules intégrables.
| |
− | | |
− | On peut les trouver ici : [[http://www.jiggawoo.eclipse.co.uk/guitarhq/Circuitsnippets/snippets.html Site de TIM ESCOBEDO]]
| |
− | | |
− | Parmi ceux ci :
| |
− | | |
− | * '''BOOST O RAMA''' [http://www.geocities.ws/diygescorp/schematics.html trouvé sur cette page]
| |
− | | |
− | [[File:Boostoramalayout.gif|border|640px]]
| |
− | | |
− | * '''IDIOT WAH''' [http://www.geocities.ws/diygescorp/schematics.html trouvé sur cette page]
| |
− | | |
− | [[File:Idiotwahlayout.gif|border|640px]]
| |
− | | |
− | * '''THING MODULATOR''' [http://www.geocities.ws/diygescorp/schematics.html trouvé sur cette page]
| |
− | | |
− | [[File:Thingmodulatorlayout.gif|border|640px]]
| |
− | | |
− | * '''T.M.K''' [http://www.geocities.ws/diygescorp/schematics.html trouvé sur cette page]
| |
− | | |
− | [[File:Tmk1.3layout.gif|border|640px]]
| |
− | | |
− | = utilisation de GedA =
| |
− | | |
− | J'ai utilisé la suite CAO libre Geda pour réaliser mes pcb.
| |
− | | |
− | Plus d'informations ici : http://fablabo.net/wiki/Geda
| |
− | | |
− | = Divers = | |
− | | |
− | Pour coder la puce Atmel Tiny ATTiny85, une version simple mais qui comporte certains risques électriques d'après laurentB
| |
− | | |
− | http://www.hacknowledge.org/drupal/?q=ispprogrammer
| |