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 | ||
|
wiki:tutoriels:processing:processing_9:processing_9 [2020/11/05 14:12] damien.muti |
wiki:tutoriels:processing:processing_9:processing_9 [2020/11/17 15:21] (Version actuelle) damien.muti |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| * Porteur(s) du projet : Damien MUTI DESGROUAS | * Porteur(s) du projet : Damien MUTI DESGROUAS | ||
| Ligne 6: | Ligne 6: | ||
| * Contexte : Apprentissage | * Contexte : Apprentissage | ||
| - | ===== introduction | + | ===== Introduction |
| + | |||
| Ce tutoriel permet d' | Ce tutoriel permet d' | ||
| L' | L' | ||
| - | Un des enjeux est donc de lire les données issues du capteur de distance branchée sur la carte Arduino et d' | + | Un des enjeux est donc de lire les données issues du **capteur de distance branchée sur la carte Arduino** et d' |
| * [[wiki: | * [[wiki: | ||
| Ligne 18: | Ligne 20: | ||
| ==== Algorithme ==== | ==== Algorithme ==== | ||
| - | Si | + | Si la distance détectée est inférieure à un seuil, alors lancer le média (son, vidéo, animation). Sinon arrêter le média. |
| - | ==== Solution ==== | + | ===== Mise en œuvre ===== |
| - | Pour contourner ce problème, une des solution est de convertir le nombre (//float, int, long, double//, etc.) en une chaîne de caractère (// | + | |
| - | + | ||
| - | Du coté de la réception sur l' | + | |
| - | + | ||
| - | Référence : | + | |
| - | * [[https:// | + | |
| - | + | ||
| - | ===== Mise en œuvre | + | |
| ==== Montage ==== | ==== Montage ==== | ||
| On utilise un [[wiki: | On utilise un [[wiki: | ||
| Ligne 57: | Ligne 51: | ||
| ==== code Processing ==== | ==== code Processing ==== | ||
| - | Le code Processing est le suivant : | + | Le code Processing est le suivant : {{ : |
| < | < | ||
| - | /* | + | /** Affiche tactile interactive - |
| - | références : https:// | + | * Quand on appuie sur une touche (UP, DOWN, RIGHT, LEFT et espace ' '), cela lance une image, une vidéo, une annim, un son, etc... |
| */ | */ | ||
| + | /// librairies | ||
| + | import processing.sound.*; | ||
| + | import processing.video.*; | ||
| import processing.serial.*; | import processing.serial.*; | ||
| + | |||
| + | // variables globales | ||
| + | PImage im; // une image | ||
| + | SoundFile son; // un son - un seul lecteur CD audio | ||
| + | Movie vid; // une vidéo - un seul lecteur DVD vidéo | ||
| + | |||
| + | // bouton image active ? // est-ce que l' | ||
| + | boolean animation_active = false; // true ou false (2 valleurs possibles) => 1 bit (0 ou 1) | ||
| + | |||
| + | // bouton son actif ? | ||
| + | boolean son_actif = false; | ||
| + | float tempsDebutSon = 0; // temps du début de la musique a été joué | ||
| + | |||
| + | // bouton video active ? | ||
| + | boolean video_active = false; | ||
| + | |||
| + | /// dialogue avec la carte Arduino | ||
| Serial myPort; | Serial myPort; | ||
| String | String | ||
| - | int inEntier; | + | int donneePortSerie; // entier converti de la chaine de caractère reçue sur le port série |
| - | void setup() { | + | // seuil de détection |
| - | size(200, 200); | + | float seuil = 25; |
| - | // I know that the first port in the serial list on my mac | + | |
| - | // is always my FTDI adaptor, so I open Serial.list()[0]. | + | // compteur boucle draw() |
| - | // On Windows machines, this generally opens COM1. | + | //int nbLoopDraw = 0; |
| - | // Open whatever port is the one you're using. | + | |
| + | void setup() { // initialisation des paramètres d' | ||
| + | size(500, 500); | ||
| + | noStroke(); | ||
| + | background(0); | ||
| + | |||
| + | // initialisation des variables globales | ||
| + | | ||
| + | |||
| + | | ||
| + | son = new SoundFile(this, " | ||
| + | //println(son.duration()); | ||
| + | |||
| + | // chargement de la video | ||
| + | vid = new Movie(this, " | ||
| + | /// Port série | ||
| // Print a list of the serial ports, for debugging purposes: | // Print a list of the serial ports, for debugging purposes: | ||
| printArray(Serial.list()); | printArray(Serial.list()); | ||
| Ligne 85: | Ligne 113: | ||
| void draw() { | void draw() { | ||
| + | // lecture des données sur le port série : | ||
| + | lectureDonneePortSerie(); | ||
| + | |||
| + | // test des données lues sur le port série et choix de l' | ||
| + | // choisir le média à lancer : | ||
| + | // son | ||
| + | // | ||
| + | // video | ||
| + | gestionVideo(" | ||
| + | // animation | ||
| + | gestionAnimation(); | ||
| + | | ||
| + | // affichage de la vidéo //////////////////////////////////////// | ||
| + | if (video_active) { | ||
| + | image(vid, 0, 0, width, height); | ||
| + | } else { | ||
| + | background(0); | ||
| + | } | ||
| + | // affichage de l' | ||
| + | if (animation_active) { | ||
| + | lancerAnimation(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | //////////////////////////////////// | ||
| + | void movieEvent(Movie movie) { //// gestion de la vidéo | ||
| + | vid.read(); | ||
| + | } | ||
| + | |||
| + | void lectureDonneePortSerie() { //////////// | ||
| + | // | ||
| // lecture des données sur le port série | // lecture des données sur le port série | ||
| if ( myPort.available() > 0) { // si une donnée est disponible sur le port série | if ( myPort.available() > 0) { // si une donnée est disponible sur le port série | ||
| - | inBuffer = myPort.readString(); | + | inBuffer = myPort.readString(); |
| } | } | ||
| // | // | ||
| if (inBuffer != null) { // si la chaine de caractère n'est pas nulle | if (inBuffer != null) { // si la chaine de caractère n'est pas nulle | ||
| - | println(" | + | |
| - | | + | |
| - | println(" | + | |
| + | |||
| + | // affichage de la distance en cm | ||
| + | println(" | ||
| } | } | ||
| - | | + | } |
| - | // test des données | + | |
| - | color c ; | + | /////////////////////////////////////////////// |
| - | if (inEntier<25){ | + | void gestionSon(String nomDuSon) { |
| - | | + | if (donneePortSerie |
| + | | ||
| + | //affichage de la distance lue | ||
| + | println(" | ||
| + | // lancement du son | ||
| + | lancerSon(nomDuSon); | ||
| + | } else if (donneePortSerie > seuil && son.isPlaying()) { //si la distance est supérieure au seuil ET que le son joue : arrêter le son | ||
| + | son.stop(); | ||
| } | } | ||
| - | else{ | + | } |
| - | | + | void lancerSon(String nomDuSon) |
| + | if (!son.isPlaying()) { // le son ne joue pas | ||
| + | | ||
| + | son = new SoundFile(this, nomDuSon); | ||
| + | // jouer le son 1 | ||
| + | son.loop(); | ||
| } | } | ||
| - | fill(c); | ||
| - | rect(0, | ||
| } | } | ||
| + | |||
| + | //////////////////////////////////////////////// | ||
| + | void gestionVideo(String nomVideo) { | ||
| + | if (donneePortSerie < seuil && donneePortSerie> | ||
| + | // jouer le son SSI la distance est inférieur à un seuil, strictement supérieure à 0 et si la vidéo ne joue pas déjà | ||
| + | //affichage de la distance lue | ||
| + | println(" | ||
| + | // lancement du son | ||
| + | lancerVideo(nomVideo); | ||
| + | } else if (donneePortSerie > seuil && video_active) { //si la distance est supérieure au seuil ET que la video joue : arrêter la video | ||
| + | vid.stop(); | ||
| + | clear(); | ||
| + | video_active = false; | ||
| + | } | ||
| + | } | ||
| + | void lancerVideo(String nomVideo) { | ||
| + | if (video_active == false) { // la vidéo 1 ne tourne pas | ||
| + | // chargement de la video 1 | ||
| + | vid = new Movie(this, nomVideo ); | ||
| + | vid.loop(); | ||
| + | video_active = true; | ||
| + | } | ||
| + | } | ||
| + | //////////////////////////////////////////////// | ||
| + | void gestionAnimation() { | ||
| + | if (donneePortSerie > 100) { // on appuie sur la touche " | ||
| + | animation_active = true; | ||
| + | } else { | ||
| + | animation_active = false; | ||
| + | } | ||
| + | } | ||
| + | void lancerAnimation() { | ||
| + | float x = 30 + random(-20, 20); // random sur la position | ||
| + | float y = 30 + random(-20, 20); | ||
| + | image(im, x, y, 200, 200); | ||
| + | } | ||
| + | |||
| + | |||
| </ | </ | ||
| - | Le code est disponible sur le lien suivant : {{ : | + | Le code est disponible sur le lien suivant : {{ : |
| + | |||
| + | ===== Discussion : mesure d'une autre grandeur que la distance ===== | ||
| + | La grandeur physique mesurée dans cette étude est la distance. | ||
| + | |||
| + | Le programmes Arduino précédent peut être aisément modifié si le capteur utilisé mesure une autre grandeur physique telle que la température (capteur CTN), la force de pression (capteur piézo-électrique), | ||
| + | |||
| + | En revanche le programme Processing peut être utilisé tel-quel en prenant simplement soin de bien définir la valeur du seuil de détection associée à la grandeur physique choisie. | ||
| + | |||
| + | ===== Des projets d' | ||
| + | * Margot Goutièrre DSAA2-2021 : Boite poétique interactive | ||