Arduino + papertoy = fun !

De Wikidebrouillard.

Un dimanche après-midi, J'ai décidé de réaliser l'idée de faire un robot en papier, avec de l'arduino pour l'animer.

Sommaire

un peu de recherche

  • des papertoys
  • des programmes Arduino et hop !

Voici le résultat

Matériel


Fabrication

on découpe et on colle le papertoy en prenant soin de laisser la tête ouverte pour les led et en gardant un morceau de papier pour le servomoteur qui sera dans le corps.


On colle sur la tête un des accessoirs qui se fixent sur le servomoteur.

Les led sont fixées dans la tête.

Plus qu'à assembler !

Le code

/*Code sous licence CC-By-Sa
de Antony Auffret
réalisé avec des bouts de code attrapés ici ou là !
dont notament : http://www.instructables.com/id/How-to-easily-play-music-with-buzzer-on-arduino-Th/
et Tone Melody des exemples de programmes de l'IDE Arduino : http://arduino.cc/en/Tutorial/Tone
6 décembre 2015
*/
#include <Servo.h> 
Servo myservo1;   // créer un objet servo 1 pour le contrôler

#define	C0 16.35
#define	Db0	17.32
#define	D0	18.35
#define	Eb0	19.45
#define	E0	20.60
#define	F0	21.83
#define	Gb0	23.12
#define	G0	24.50
#define	Ab0	25.96
#define	LA0	27.50
#define	Bb0	29.14
#define	B0	30.87
#define	C1	32.70
#define	Db1	34.65
#define	D1	36.71
#define	Eb1	38.89
#define	E1	41.20
#define	F1	43.65
#define	Gb1	46.25
#define	G1	49.00
#define	Ab1	51.91
#define	LA1	55.00
#define	Bb1	58.27
#define	B1	61.74
#define	C2	65.41
#define	Db2	69.30
#define	D2	73.42
#define	Eb2	77.78
#define	E2	82.41
#define	F2	87.31
#define	Gb2	92.50
#define	G2	98.00
#define	Ab2	103.83
#define	LA2	110.00
#define	Bb2	116.54
#define	B2	123.47
#define	C3	130.81
#define	Db3	138.59
#define	D3	146.83
#define	Eb3	155.56
#define	E3	164.81
#define	F3	174.61
#define	Gb3	185.00
#define	G3	196.00
#define	Ab3	207.65
#define	LA3	220.00
#define	Bb3	233.08
#define	B3	246.94
#define	C4	261.63
#define	Db4	277.18
#define	D4	293.66
#define	Eb4	311.13
#define	E4	329.63
#define	F4	349.23
#define	Gb4	369.99
#define	G4	392.00
#define	Ab4	415.30
#define	LA4	440.00
#define	Bb4	466.16
#define	B4	493.88
#define	C5	523.25
#define	Db5	554.37
#define	D5	587.33
#define	Eb5	622.25
#define	E5	659.26
#define	F5	698.46
#define	Gb5	739.99
#define	G5	783.99
#define	Ab5	830.61
#define	LA5	880.00
#define	Bb5	932.33
#define	B5	987.77
#define	C6	1046.50
#define	Db6	1108.73
#define	D6	1174.66
#define	Eb6	1244.51
#define	E6	1318.51
#define	F6	1396.91
#define	Gb6	1479.98
#define	G6	1567.98
#define	Ab6	1661.22
#define	LA6	1760.00
#define	Bb6	1864.66
#define	B6	1975.53
#define	C7	2093.00
#define	Db7	2217.46
#define	D7	2349.32
#define	Eb7	2489.02
#define	E7	2637.02
#define	F7	2793.83
#define	Gb7	2959.96
#define	G7	3135.96
#define	Ab7	3322.44
#define	LA7	3520.01
#define	Bb7	3729.31
#define	B7	3951.07
#define	C8	4186.01
#define	Db8	4434.92
#define	D8	4698.64
#define	Eb8	4978.03
// Durée des notes 
#define BPM 120    //  changer cette valeur change toutes les autres
#define H 2*Q //demi 2/4
#define Q 60000/BPM //Quart 1/4 
#define E Q/2   //huitième 1/8
#define S Q/4 // seizième 1/16
#define W 4*Q // entier 4/4

// notes de la mélodie :
int melody[] = {
LA3,LA3,LA3,F3,C4,LA3,F3,C4,LA3,E4,E4,E4,F4,C4,Ab3,F3,C4,LA3,LA4,LA3,LA3,LA4,Ab4,G4,Gb4,E4,F4,Bb3,Eb4,D4,Db4,C4,B3,C4,F3,Ab3,F3,LA3,C4,LA3,C4,E4,LA4,LA3,LA3,LA4,Ab4,G4,Gb4,E4,F4,Bb3,Eb4,D4,Db4,C4,B3,C4,F3,Ab3,F3,C4,LA3,F3,C4,LA3

};

// durée des notes
int noteDurations[] = {
Q,Q,Q,E+S,S,Q,E+S,S,H,Q,Q,Q,E+S,S,Q,E+S,S,H,Q,E+S,S,Q,E+S,S,S,S,E,E,Q,E+S,S,S,S,E,E,Q,E+S,S,Q,E+S,S,H,Q,E+S,S,Q,E+S,S,S,S,E,E,Q,E+S,S,S,S,E,E,Q,E+S,S,Q,E+S,S,H

};

int pause[] = {
  Q+1,Q+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,H+1,Q+1,Q+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,H+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,S+1,S+1,E+1+E+1,E+1,Q+1,E+S+1,S+1,S+1,S+1,E+1+E+1,E+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,H+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,S+1,S+1,E+1+E+1,E+1,Q+1,E+S+1,S+1,S+1,S+1,E+1+E+1,E+1,Q+1,E+S+1,S+1,Q+1,E+S+1,S+1,H+1+2*H

};
int potar1=A0; // le potentiomètre est branche sur la broche analogique A0
int val1;         // variable pour stocker la valeur du potentiomètre 1
int sens;   //pour faire changer de sens au mouvement de la tete

void setup() {
pinMode(8, OUTPUT);   //pour le piezo
pinMode(9, OUTPUT);       //pour les 2 leds
digitalWrite(9,LOW);
myservo1.attach(10);  // brancher le servomoteur sur l'entrée 10
sens = 1;
}

void loop() {
  // il y a 66 notes, on itère jusque 66
  for (int thisNote = 0; thisNote < 66; thisNote++) {
    digitalWrite(9,HIGH); // allume les leds

    tone(8, melody[thisNote], noteDurations[thisNote]); //joue la note
    
    digitalWrite(9,LOW); //éteins les leds
    
    delay(pause[thisNote]); //pause nécessaire entre les notes

    noTone(8);//arret de la note en cours
    
   if (val1>180) { //repere le sens de rotation de la tete
   sens = 2;
   }
   
   if (val1<10) {
   sens = 1;
   }
   
   if (sens<2) {
   val1=val1+10;
   }
   if (sens>1) {
   val1=val1-10; 
   }
    myservo1.write(val1);               // mettre le servomoteur dans la bonne position
  }
}
Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR

Arduino + papertoy = fun !

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique