Accueil du site > Ressources > Un crayon pour dessiner l’audio : DrawDio

Imaginez que vous puissiez dessiner n’importe quelle musique sur du papier avec un simple crayon pour ensuite la jouer du bout des doigts. Imaginé et développé par Jay Silver, chercheur au Lifelong Kindergarten Group du MIT Media Lab, le DrawDio va même jusqu’à transformer les objets du quotidien en instruments de musique.

Avant de passer à la transcription en français des ressources issues du site du projet et des adaptations proposées par d’autres, voici une courte présentation en images du DrawDio effectuée par Jay Silver en 2007 à l’occasion du Maker Faire d’Austin, au Texas.
Allant encore plus loin dans les applications possibles, le circuit de DrawDio vous permet même de transformer pinceaux, macaronis, arbres, évier de cuisine... en instruments de musique.

Passons maintenant à la partie pratique.

Le circuit d’origine

- Liste des composants

1 crayon à papier (mine en graphite),
1 transistor 555,
1 condensateur 680pF,
1 condensateur 0.01uF,
1 condensateur 10uF,
1 résistance 10K,
1 résistance 300K,
1 interrupteur,
1 haut-parleur 8 ohm,
1 pile 9 volts,
papier aluminium,
2 punaises,
papier.


- Schéma de montage

Kit DrawDio sur Ladyada

- Liste des composants

1 crayon à papier (mine en graphite),
1 circuit imprimé,
1 TLC551,
1 transistor PN2907 ou 2N3806,
1 condensateur céramique 680pF,
1 condensateur céramique 0.1uF,
1 condensateur 100uF / 6.3V,
2 résistances 1/4W 5% 10 MEGAohm,
1 résistance 1/4W 5% 10 ohm,
1 résistance 1/4W 5% 10K,
1 résistance 1/4W 5% 300K,
1 support de batterie AAA,
1 haut-parleur 8 ohm,
1 pile AAA,
1 bande de feuille de cuivre,
1 punaise,
papier.

Le circuit imprimé est en vente sur Adafruit. Dans la partie suivante, vous verrez comment le fabriquer vous-même.


- Montage

Retrouvez les étapes détaillées sur le site de Ladyada

DrawDio sur Veroboard

- Liste des composants

La liste des composants est ici similaire à la précédente. La différence vient du fait qu’ici, vous fabriquez vous-même votre circuit imprimé à partir d’un stripboard.


- Montage

Enfin, voici le principe du Drawduino imaginé tout d’abord par Célestin Preault et qui combine le principe d’un DrawDio avec l’Arduino.

Le Drawduino de Célestin Preault

Tout d’abord, une courte présentation de cette adaptation née suite à la construction inachevée d’un DrawDio, que Célestin Preault avait commencé un an plus tôt sur un bout de stripboard.


- Liste des composants

1 Arduino,
1 résistance 440 kOhm,
1 crayon à papier (genre 4B),
1 haut-parleur,
1 punaise,
papier.

- Montage

Ici, le crayon est représenté par un potentiomètre (résistance variable) car son rôle est le même.

Pour le crayon il suffit d’enrouler un des deux fils (reliés au potentiomètre) sur une punaise et de la planter dans le corps du crayon, afin de d’établir un contact entre la mine et le fil.

- Code

Ce code nécessite la librairie Tone

/*  Drawduino
Adaptation du principe drawAudio à l'arduino par Célestin Préault pour semageek.com, d'après Clavier_Piano
*/
 
#include <Tone.h> //Pensez à installer la librairie tone
Tone freq1;

const int NOTE_freq[] = { 261, 293, 329, 349, 392, 440, 494, 523 };
// DO, RE, MI, FA, SOL, LA, SI
const int capt = 0; //Crayon sur le pin Analog 0
int stylo=0;

void setup() {
Serial.begin(9600);
 //pin du haut-parleur
 freq1.begin(13);
}

void loop() {
stylo = analogRead(capt)/8;  //divise la valeur lue par 8 pour ramener la variable entre 0 et 100
Serial.println(stylo); //affiche la valeur //permet de controler
if (stylo<=150&&stylo>=100) {
//on ne fait rien permet d'avoir un peu de silence
}
if (stylo<=89&&stylo>=80) {
freq1.play( NOTE_freq[1], 100);
}
if (stylo<=79&&stylo>=60) {
freq1.play( NOTE_freq[2], 100);
}
if (stylo<=59&&stylo>=50) {
freq1.play( NOTE_freq[3], 100);
}
if (stylo<=49&&stylo>=40) {
freq1.play( NOTE_freq[4], 100);
}
if (stylo<=39&&stylo>=30) {
freq1.play( NOTE_freq[5], 100);
}
if (stylo<=29&&stylo>=20) {
freq1.play( NOTE_freq[6], 100);
}
if (stylo<=19&&stylo>=0) {
freq1.play( NOTE_freq[7], 100);
}
}
Le Body Drawduino de Brigade Neurale

Pour terminer, voici une adaptation du code et du montage Drawduino effectuée par Brigade Neurale afin de retrouver cette onde carrée et surtout être capable de faire passer l’électricité dans notre corps comme avec le DrawDio original.

- Télécharger le code complet du Body Drawduino

/*
This DRAWDINO program is based on the TONE PITCH FOLLOWER by Tom Igoe
BODY RESISTANCE (Like the original Drawdio)
You can also connect a push button to choose differents noises
You can play some strange melodies too.

circuit :
* 8-ohm speaker on digital pin 8 (and GND)
* pin in the pen (2B is great, 6B is wonderful) on 5V
* GND to your body resistance (wire warped around the pen)
* 10M ohm resistor on analog 0 to ground
 
Optional : push-button
* 2.2K ohm resistor on digital 2 to ground
* push button on 3.3V to digital 2

If you have some crazy values in the Serial Monitor, check your wiring 5V must pass through your body
If you have some kind of bounce problem with your push button get a better one, or debounce()

created 20 Feb 2012 by KiK from Brigade Neurale
This code is in public domain http://blog.brigadeneurale.org
You can find on our website the SIMPLE DRAWDINO, with alligator clip glued on paper, rather than flowing 5V into your body
*/
const int  buttonPin = 2;

int buttonPushCounter = 0;
// counter for the number of button presses
int buttonState = 0;
// current state of the button
int lastButtonState = 0;
// previous state of the button
int duration = 0;

void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize serial communications (for debugging only):
Serial.begin(9600);
}

void loop() {
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes:  ");
Serial.println(buttonPushCounter);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;
// The first value of duration is 10, the next are 1,2,3,4
if(buttonPushCounter==3) {
(duration = 10);
}
else if(buttonPushCounter==4) {
(duration=100);
}
else if (buttonPushCounter==5) {
(duration=200);
}
else{
(duration = buttonPushCounter+1);
}

if (buttonPushCounter > 5) {
(buttonPushCounter=0);
}
// read the sensor:
int sensorReading = analogRead(A0);
// print the sensor reading so you know its range
//Serial.println(sensorReading);
 
int thisPitch = map(sensorReading, 300, 400, 600, 800);
// map the pitch to the range of the analog input.
if (sensorReading>=200) {
tone(9, thisPitch, duration);
}
Serial.println(duration);
}

Haut
Contrat Creative Commons Contenus mis à disposition sous un contrat Creative Commons.
Plan du site | Réalisé avec Spip | Hébergé par Frédéric Guerrier | jQuery Twitter | RSS 2.0