(→Allons plus loin dans l'explication) |
m |
||
(33 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
{{avertissement}} | {{avertissement}} | ||
- | {{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1> | + | {{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>http://mediaspip.ptitdeb.infini.fr/IMG/flv/arduinoWWWW-encoded.flv|400|300</videoflash>}} |
=='''Présentation de l'expérience'''== | =='''Présentation de l'expérience'''== | ||
- | Nous allons réaliser un système qui permet d'enregistrer et répéter des séries d'impacts | + | |
+ | Nous allons réaliser un système qui permet d'enregistrer et répéter des séries d'impacts reçues par un objet, tel un perroquet qui répète ce qu'il entend. | ||
== '''Matériel''' == | == '''Matériel''' == | ||
- | * [[ | + | |
- | * [[ | + | * [[Fichier:ArduinoUno_R3_Front.jpg|50px]] Un [[Arduino]] |
- | * [[ | + | * [[Fichier:Piezo_Speaker.JPG|50px]] 2 [[buzzer| buzzers]] piezo-électriques |
- | * [[ | + | * [[Fichier:Resistance5k_bb.jpg|50px]] Une [[résistance]] |
- | * [[ | + | * [[Fichier:Ledxp.jpg|50px]] Une [[LED]] |
- | * [[ | + | * [[Fichier:Plaquecablage_bb.jpg|50px]] Une [[breadboard]] |
+ | * [[Fichier:Fils.jpg|50px]] Des [[fil électrique| fils électriques]] | ||
== '''L'expérience''' == | == '''L'expérience''' == | ||
==='''La réalisation'''=== | ==='''La réalisation'''=== | ||
- | |||
- | |||
- | + | * Réaliser le montage suivant : | |
+ | [[Image:Perroquet_bb.jpg|500 px]] | ||
- | + | * Lancer le logiciel arduino. | |
- | + | ||
- | + | * Copier le code : | |
- | + | <code> /////////// Déclaration des variables | |
+ | // ces variables sont constantes | ||
+ | const int CAPTEUR = A0;// le piézo est connecté à la broche Analogue 0 | ||
+ | const int LED = 13;//la LED est connecté à la broche 13 | ||
+ | const int ENCEINTE = 12;//l'enceinte est connecté à la broche 12 | ||
+ | const int SEUIL = 1;//valeur de seuil | ||
+ | const int ANTIREBOND = 100;//temps de fonctionnement de l'antirebond | ||
+ | const int FIN = 2000;//temps d'attente après le dernier coup | ||
+ | const int NOMBREMARQUEURS = 50;//nombre de coups maximum | ||
+ | // ces variables changent | ||
+ | int lectureCapteur = 0;// variable pour stocker la valeur du capteur | ||
+ | int ledEtat = LOW;//etat de la LED, LOW:eteint, HIGH:allumé | ||
+ | int mode = 1;//ecriture ou lecture | ||
+ | int posTableau = 0;// | ||
+ | long temps = 0; | ||
+ | long marqueurTemps[NOMBREMARQUEURS]; | ||
+ | int i = 0; | ||
+ | boolean DEBUG = false; | ||
+ | boolean BOUCLE = false; | ||
+ | void setup() { | ||
+ | pinMode(LED, OUTPUT); | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | /////////// Boucle principale | ||
+ | void loop() { | ||
+ | switch(mode) { | ||
+ | case 1: //mode enregistrement | ||
+ | digitalWrite(LED, HIGH); | ||
+ | if(DEBUG == true) Serial.println("mode 1"); | ||
+ | // lecture de la valeur du piézo | ||
+ | lectureCapteur = analogRead(CAPTEUR); | ||
+ | // si la valeur captée est supérieure au seuil choisi et que le temps écoulé | ||
+ | //depuis le dernier impacte est supérieur au temps de l'ANTI-REBOND, | ||
+ | //alors on rentre dans la condition | ||
+ | if (lectureCapteur >= SEUIL && millis() - temps >= ANTIREBOND) { | ||
+ | marqueurTemps[posTableau] = millis() - temps; | ||
+ | posTableau++; | ||
+ | temps = millis(); //mise à jour du temps courant | ||
+ | } | ||
+ | if (millis() - temps >= FIN && posTableau >=1) { | ||
+ | posTableau = 0; | ||
+ | mode = 2; | ||
+ | if (DEBUG == true) Serial.println("mode 2"); | ||
+ | temps = millis(); | ||
+ | } | ||
+ | break; | ||
+ | case 2: | ||
+ | digitalWrite(LED, LOW); | ||
+ | if (lectureCapteur >= 0 ) { | ||
+ | for (i=1; i<NOMBREMARQUEURS; i++) { | ||
+ | tone(ENCEINTE, 1800, 100); | ||
+ | delay(marqueurTemps[i]); | ||
+ | marqueurTemps[i]=0; | ||
+ | } | ||
+ | posTableau = 0; | ||
+ | |||
+ | mode = 1; | ||
+ | if (DEBUG == true) Serial.println("mode 2 stop"); | ||
+ | temps = millis(); | ||
+ | break; | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | }</code> | ||
- | |||
- | |||
- | + | * Relier l'arduino au pc. | |
+ | * Téléverser le programme. | ||
+ | * Attendre que la LED soit allumée. | ||
+ | * Produire une série de sons. | ||
+ | * Attendre que la LED soit éteinte. | ||
+ | * Écouter la série de sons. | ||
+ | * Attendre que la LED soit allumée. | ||
+ | * Recommencer. | ||
- | + | ==='''Que constate-t-on ?'''=== | |
- | + | Après une série de sons perçus par l'objet, on attend que la LED s’éteigne, puis on entend une répétition de la série de sons produits précédemment. Ensuite la LED se rallume, signalant la possibilité de réitérer l’expérience. | |
- | + | == '''Explications''' == | |
- | + | ==='''De manière simple'''=== | |
- | + | Le programme enregistre la série de sons reçus, puis après un temps d'attente sans bruit, il envoie un signal à l'enceinte qui le restituera. | |
- | + | La LED est allumée tant que l'on peut enregistrer, et est éteinte lorsque la carte lit la série de sons. | |
- | + | Après chaque son reçu, il faut un temps avant de pouvoir recevoir un autre son, on appelle cela l'antirebond. Il permet de ne pas enregistrer deux sons lorsqu'un seul est produit. | |
- | Après | + | |
- | + | Pour que le son soit enregistré, il faut qu'il dépasse le seuil de détection, car sinon il y aurait trop de son détecté. | |
- | ===''' | + | === '''Allons plus loin dans l'explication''' === |
- | + | ||
- | + | Une LED est un composant qui s'illumine quand un courant la traverse. La propriété de la LED est qu'elle ne s'illumine que si le courant la traverse dans un seul sens, de l'ANODE (la patte la plus longue) à la CATHODE (la patte la plus courte). | |
- | + | Un piezo est constitué d'une lamelle qui, lorsqu'elle est déformée, émet une impulsion électrique. À l'inverse, lorsqu'elle reçoit une impulsion, la lamelle vibre et émet un son. | |
- | + | ||
- | + | ||
- | + | ||
== '''Liens avec d'autres expériences''' == | == '''Liens avec d'autres expériences''' == | ||
- | ==='''Expériences sur Wikidébrouillard'''=== | + | === '''Expériences sur Wikidébrouillard''' === |
- | + | ||
- | + | [http://www.wikidebrouillard.org/index.php/Cat%C3%A9gorie:Arduino Catégorie Arduino] | |
- | + | ||
- | == ''' | + | === '''Autres expériences''' === |
- | + | ||
== '''Lieux propices à sa réalisation''' == | == '''Lieux propices à sa réalisation''' == | ||
- | + | ||
+ | Tout endroit en dehors d'un lieu humide ou trop bruyant. | ||
=='''Catégories'''== | =='''Catégories'''== | ||
- | |||
- | [[Catégorie: | + | [[Catégorie:informatique]] |
- | [[Catégorie: | + | [[Catégorie:électronique]] |
- | [[Catégorie: | + | [[Catégorie:arduino]] |
- | [[Catégorie: | + | [[Catégorie:technique]] |
- | + | ||
- | + |
Sommaire |
Nous allons réaliser un système qui permet d'enregistrer et répéter des séries d'impacts reçues par un objet, tel un perroquet qui répète ce qu'il entend.
/////////// Déclaration des variables
// ces variables sont constantes
const int CAPTEUR = A0;// le piézo est connecté à la broche Analogue 0
const int LED = 13;//la LED est connecté à la broche 13
const int ENCEINTE = 12;//l'enceinte est connecté à la broche 12
const int SEUIL = 1;//valeur de seuil
const int ANTIREBOND = 100;//temps de fonctionnement de l'antirebond
const int FIN = 2000;//temps d'attente après le dernier coup
const int NOMBREMARQUEURS = 50;//nombre de coups maximum
// ces variables changent
int lectureCapteur = 0;// variable pour stocker la valeur du capteur
int ledEtat = LOW;//etat de la LED, LOW:eteint, HIGH:allumé
int mode = 1;//ecriture ou lecture
int posTableau = 0;//
long temps = 0;
long marqueurTemps[NOMBREMARQUEURS];
int i = 0;
boolean DEBUG = false;
boolean BOUCLE = false;
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
/////////// Boucle principale
void loop() {
switch(mode) {
case 1: //mode enregistrement
digitalWrite(LED, HIGH);
if(DEBUG == true) Serial.println("mode 1");
// lecture de la valeur du piézo
lectureCapteur = analogRead(CAPTEUR);
// si la valeur captée est supérieure au seuil choisi et que le temps écoulé
//depuis le dernier impacte est supérieur au temps de l'ANTI-REBOND,
//alors on rentre dans la condition
if (lectureCapteur >= SEUIL && millis() - temps >= ANTIREBOND) {
marqueurTemps[posTableau] = millis() - temps;
posTableau++;
temps = millis(); //mise à jour du temps courant
}
if (millis() - temps >= FIN && posTableau >=1) {
posTableau = 0;
mode = 2;
if (DEBUG == true) Serial.println("mode 2");
temps = millis();
}
break;
case 2:
digitalWrite(LED, LOW);
if (lectureCapteur >= 0 ) {
for (i=1; i<NOMBREMARQUEURS; i++) {
tone(ENCEINTE, 1800, 100);
delay(marqueurTemps[i]);
marqueurTemps[i]=0;
}
posTableau = 0;
mode = 1;
if (DEBUG == true) Serial.println("mode 2 stop");
temps = millis();
break;
}
break;
}
}
Après une série de sons perçus par l'objet, on attend que la LED s’éteigne, puis on entend une répétition de la série de sons produits précédemment. Ensuite la LED se rallume, signalant la possibilité de réitérer l’expérience.
Le programme enregistre la série de sons reçus, puis après un temps d'attente sans bruit, il envoie un signal à l'enceinte qui le restituera.
La LED est allumée tant que l'on peut enregistrer, et est éteinte lorsque la carte lit la série de sons.
Après chaque son reçu, il faut un temps avant de pouvoir recevoir un autre son, on appelle cela l'antirebond. Il permet de ne pas enregistrer deux sons lorsqu'un seul est produit.
Pour que le son soit enregistré, il faut qu'il dépasse le seuil de détection, car sinon il y aurait trop de son détecté.
Une LED est un composant qui s'illumine quand un courant la traverse. La propriété de la LED est qu'elle ne s'illumine que si le courant la traverse dans un seul sens, de l'ANODE (la patte la plus longue) à la CATHODE (la patte la plus courte).
Un piezo est constitué d'une lamelle qui, lorsqu'elle est déformée, émet une impulsion électrique. À l'inverse, lorsqu'elle reçoit une impulsion, la lamelle vibre et émet un son.
Tout endroit en dehors d'un lieu humide ou trop bruyant.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique