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/02/26 14:28] Simon Deplatsonification_vegetale_pdb_2020 [2020/03/04 15:05] (Version actuelle) Benjamin Labomedia
Ligne 1: Ligne 1:
 +
 +===== 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 =====
  
 Afin de documenter l'ensemble du processus, je décide de partir d'une installation neuve de Debian 9. Afin de documenter l'ensemble du processus, je décide de partir d'une installation neuve de Debian 9.
  
 Premièrement, je souhaite installer SuperCollider, à l'aide de la commande suivante : Premièrement, je souhaite installer SuperCollider, à l'aide de la commande suivante :
- +<code> 
-sudo apt-get install supercollider+sudo apt install supercollider 
 +</code>
  
 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 18: Ligne 25:
 Le lien ci-dessus permet, après avoir ajouté le FRDM-KL25Z à la liste des compilateurs, de compiler et récupérer un fichier .bin correspondant au paramétrage du Shield pour cette carte ARM précise, qu'il faut rajouter dans le dossier MBED, disponible après avoir rebranché le FRDM-KL25Z. J'appuie ensuite sur le bouton Reset pour mettre tout ça à jour. Le lien ci-dessus permet, après avoir ajouté le FRDM-KL25Z à la liste des compilateurs, de compiler et récupérer un fichier .bin correspondant au paramétrage du Shield pour cette carte ARM précise, qu'il faut rajouter dans le dossier MBED, disponible après avoir rebranché le FRDM-KL25Z. J'appuie ensuite sur le bouton Reset pour mettre tout ça à jour.
  
 +Je tape la commande
 +<code>
 cat /dev/ttyACM0 cat /dev/ttyACM0
 +</code>
 +pour afficher les valeurs du capteur à l'écran.
  
-me permet d'afficher les valeurs du capteur à l'écran. Très bien ! Il me faut maintenant trouver comment les envoyer vers SuperCollider.+Si cela ne fonctionne pas, il est possible que la féquence de lecture du port série soit mauvaiseJe peux vérifier celle-ci avec la commande :
  
-En fait, il existe déjà une classe pour accéder aux ports série : SerialPort.+<code> 
 +stty -F /dev/ttyACM0 
 +</code>
  
-SerialPort.devices;+Si la valeur affichée après speed est différente de 115200, je tape la commande suivante pour ajuster le bitrate de réception des capteurs à 115200 bauds (sans quoi je n'aurai pas de retour) : 
 + 
 +<code> 
 +stty -F /dev/ttyACM0 115200 
 +</code> 
 + 
 +Il me faut maintenant trouver comment envoyer données vers SuperCollider. 
 + 
 +En fait, il existe déjà une classe pour accéder aux ports série :  
 +[[http://doc.sccode.org/Classes/SerialPort.html|SerialPort]]. 
 + 
 +<code> 
 +SerialPort.devices 
 +</code>
  
 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, depuis la liste des applications ou dans un terminal, via la commande :
 +<code>
 +scide
 +</code>
 +
 +
 +===== 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.1582727291.txt.gz · Dernière modification : 2020/02/26 14:28 de Simon Deplat