Outils pour utilisateurs

Outils du site


sonification_vegetale_pdb_2020

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
sonification_vegetale_pdb_2020 [2020/03/03 11:32] Simon Deplatsonification_vegetale_pdb_2020 [2020/03/04 15:05] (Version actuelle) Benjamin Labomedia
Ligne 1: Ligne 1:
  
-====== Présentation ======+===== Présentation =====
  
 En cette année 2020, nous souhaitons à nouveau présenter un dispositif sonore piloté par les données transmises par une plante. Cette fois-ci, nous souhaitons utiliser deux nouvelles technologies : du côté matériel, un Floranion Shield couplé à un FRDM-KL25Z, du côté logiciel un  programme en SuperCollider. En cette année 2020, nous souhaitons à nouveau présenter un dispositif sonore piloté par les données transmises par une plante. Cette fois-ci, nous souhaitons utiliser deux nouvelles technologies : du côté matériel, un Floranion Shield couplé à un FRDM-KL25Z, du côté logiciel un  programme en SuperCollider.
 +
 +A propos du Floranion Shield https://www.elektormagazine.fr/magazine/elektor-201805/41593
  
 ===== Préparation ===== ===== Préparation =====
Ligne 15: Ligne 17:
 Je veux ensuite faire fonctionner le capteur. En l'ayant branché, celui-ci s'allume, mais il faut le configurer pour qu'il accepte le Floranion Shield. Il faut brancher le FRDM-KL25Z sur le PC en maintenant le bouton Reset, pour avoir accès au Bootloader, et copier le fichier de mise-à-jour dans celui-ci. Plus d'infos ici : Je veux ensuite faire fonctionner le capteur. En l'ayant branché, celui-ci s'allume, mais il faut le configurer pour qu'il accepte le Floranion Shield. Il faut brancher le FRDM-KL25Z sur le PC en maintenant le bouton Reset, pour avoir accès au Bootloader, et copier le fichier de mise-à-jour dans celui-ci. Plus d'infos ici :
  
-https://os.mbed.com/handbook/FirmwareFRDM-KL25Z+  * https://os.mbed.com/handbook/FirmwareFRDM-KL25Z
  
 Je regrette qu'il faille s'inscrire sur le site pour réaliser le projet... Je regrette qu'il faille s'inscrire sur le site pour réaliser le projet...
Ligne 29: Ligne 31:
 pour afficher les valeurs du capteur à l'écran. pour afficher les valeurs du capteur à l'écran.
  
-Si cela ne fonctionne pas, il est possible que la féquence de lecture du port série soit la mauvaise. Je peux vérifier celle-ci avec la commande :+Si cela ne fonctionne pas, il est possible que la féquence de lecture du port série soit mauvaise. Je peux vérifier celle-ci avec la commande :
  
 <code> <code>
Ligne 44: Ligne 46:
  
 En fait, il existe déjà une classe pour accéder aux ports série :  En fait, il existe déjà une classe pour accéder aux ports série : 
-[[http://doc.sccode.org/Classes/SerialPort.html|SerialPort;]].+[[http://doc.sccode.org/Classes/SerialPort.html|SerialPort]].
  
 <code> <code>
Ligne 52: Ligne 54:
 me renvoie une liste des ports disponibles. /dev/ttyACM0 apparaît bien. me renvoie une liste des ports disponibles. /dev/ttyACM0 apparaît bien.
  
-Je lance SuperCollider, dans un terminal, via la commande+Je lance SuperCollider, depuis la liste des applications ou dans un terminal, via la commande :
 <code> <code>
-sudo scide+scide
 </code> </code>
  
-En effet, sans les droits d'utilisateur, je n'obtiens pas de données lors de la lecture du port... 
  
 ===== Le code de décodage ===== ===== Le code de décodage =====
 +
 +<code>
 +
 +
 +(
 +
 +var decode_string = { | input | // Cette valeur nous permettra de transformer la suite de caractères fournie par le capteur par une liste de valeurs numériques.
 +
 + var string = ""; // On va stocker nos valeurs ici le temps de les reconstruire
 + var values_list = List.new(); // Puis les regrouper dans cette liste.
 +
 + input.at( (1..6) ).do( // Première valeur
 + {|item |
 + if( item.isAlphaNum, { // On ne garde que les chiffres
 + string = string ++ item;
 + });
 + });
 +
 + values_list.add( string.asInt );
 + string = ""; // Remise à zéro
 +
 + input.at( (8..14) ).do( // Deuxième valeur
 + {|item |
 + if( ( item.isAlphaNum )||( item.isPunct  ), { // On ne garde que les chiffres et les points
 + string = string ++ item;
 + });
 + });
 +
 + values_list.add( string.asFloat );
 + string = ""; // Remise à zéro
 +
 + input.at( (15..18) ).do( // Troisième valeur
 + {|item |
 + if( item.isAlphaNum, { // On ne garde que les chiffres
 + string = string ++ item;
 + });
 + });
 +
 + values_list.add( string.asInt );
 + string = ""; // Remise à zéro
 +
 + values_list.add( input.size - 20 ); // La dernière valeur est définie par la position de l'astérisque, moins le nombre de caractères que prennent les valeurs précédentes ( 20 caractères ).
 +
 + //values_list.postln; // On affiche la liste contenant les valeurs numériques
 +
 +};
 +
 +SerialPort.cleanupAll; // Premièrement, on remet à zéro les ports série pour ne pas avoir d'erreur
 +
 +p = SerialPort( // On crée une nouvelle instance de port série
 + "/dev/ttyACM0", // Avec la bonne adresse
 + baudrate: 115200, // Et la bonne fréquence de communication
 +);
 +
 +// Le caractère '*' équivaut au byte 42
 +// Le caractère ' ' (vide) équivaut au byte 32
 +
 +r = Routine( // Nous allons créer une boucle pour lire constamment les données du capteur
 + {
 + var state = 0; // Nous permet de référencer l'index de la valeur en cours de lecture
 + var string = ""; // Nous permet de référencer la valeur en cours de lecture
 + var list = List.new(); // Nous permet de stocker les données lues
 + var fourth_data_offset = 0; // Nous permet d'incrémenter la quatrième valeur
 +
 + var test_string = "";
 +
 + loop { // En boucle:
 +
 + var byte = p.read; // On lit le byte actuel du capteur
 + var data = byte.asAscii; // Et on le traduit en Ascii
 +
 + string = string ++ data; // On ajoute la data actuelle
 +
 + if( byte == 42, { // Si on a une astérisque, c'est fini
 + //string.postln; // On affiche la string dans la console
 + decode_string.value( string ); // On appelle la fonction de decodage
 + string = ""; // Et on la remet à zéro
 + } )
 + };
 + };
 +).play; // Et on lance tout ça
 +
 +)
 +
 +r.stop; // Permet d'arrêter la routine.
 +</code>
 +
 +Celui-ci est commenté ligne par ligne, mais sera sûrement plus agréable à lire depuis SuperCollider où les couleurs différencieront les commentaires.
  
sonification_vegetale_pdb_2020.1583235169.txt.gz · Dernière modification : 2020/03/03 11:32 de Simon Deplat