sonification_vegetale_pdb_2020
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
sonification_vegetale_pdb_2020 [2020/02/27 11:08] – manumerique | sonification_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:// | ||
+ | |||
+ | ===== Préparation ===== | ||
Afin de documenter l' | Afin de documenter l' | ||
Premièrement, | Premièrement, | ||
- | + | < | |
- | sudo apt-get install supercollider | + | sudo apt install supercollider |
+ | </ | ||
Je veux ensuite faire fonctionner le capteur. En l' | Je veux ensuite faire fonctionner le capteur. En l' | ||
- | https:// | + | * https:// |
Je regrette qu'il faille s' | Je regrette qu'il faille s' | ||
Ligne 18: | Ligne 25: | ||
Le lien ci-dessus permet, après avoir ajouté le FRDM-KL25Z à la liste des compilateurs, | Le lien ci-dessus permet, après avoir ajouté le FRDM-KL25Z à la liste des compilateurs, | ||
+ | Je tape la commande | ||
+ | < | ||
cat / | cat / | ||
+ | </ | ||
+ | pour afficher les valeurs du capteur à l' | ||
- | me permet d' | + | Si cela ne fonctionne pas, il est possible que la féquence de lecture |
- | En fait, il existe déjà une classe pour accéder aux ports série : SerialPort. | + | < |
+ | stty -F / | ||
+ | </ | ||
- | [[http:// | + | 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' |
+ | |||
+ | < | ||
+ | stty -F / | ||
+ | </ | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | < | ||
+ | SerialPort.devices | ||
+ | </ | ||
me renvoie une liste des ports disponibles. / | me renvoie une liste des ports disponibles. / | ||
+ | |||
+ | Je lance SuperCollider, | ||
+ | < | ||
+ | scide | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Le code de décodage ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | ( | ||
+ | |||
+ | 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 = ""; | ||
+ | var values_list = List.new(); // Puis les regrouper dans cette liste. | ||
+ | |||
+ | input.at( (1..6) ).do( // Première valeur | ||
+ | {|item | | ||
+ | if( item.isAlphaNum, | ||
+ | string = string ++ item; | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | values_list.add( string.asInt ); | ||
+ | string = ""; | ||
+ | |||
+ | input.at( (8..14) ).do( // Deuxième valeur | ||
+ | {|item | | ||
+ | if( ( item.isAlphaNum )||( item.isPunct | ||
+ | string = string ++ item; | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | values_list.add( string.asFloat ); | ||
+ | string = ""; | ||
+ | |||
+ | input.at( (15..18) ).do( // Troisième valeur | ||
+ | {|item | | ||
+ | if( item.isAlphaNum, | ||
+ | string = string ++ item; | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | values_list.add( string.asInt ); | ||
+ | string = ""; | ||
+ | |||
+ | values_list.add( input.size - 20 ); // La dernière valeur est définie par la position de l' | ||
+ | |||
+ | // | ||
+ | |||
+ | }; | ||
+ | |||
+ | SerialPort.cleanupAll; | ||
+ | |||
+ | p = SerialPort( // On crée une nouvelle instance de port série | ||
+ | "/ | ||
+ | baudrate: 115200, // Et la bonne fréquence de communication | ||
+ | ); | ||
+ | |||
+ | // Le caractère ' | ||
+ | // 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' | ||
+ | var string = ""; | ||
+ | var list = List.new(); // Nous permet de stocker les données lues | ||
+ | var fourth_data_offset = 0; // Nous permet d' | ||
+ | |||
+ | var test_string = ""; | ||
+ | |||
+ | loop { // En boucle: | ||
+ | |||
+ | var byte = p.read; // On lit le byte actuel du capteur | ||
+ | var data = byte.asAscii; | ||
+ | |||
+ | string = string ++ data; // On ajoute la data actuelle | ||
+ | |||
+ | if( byte == 42, { // Si on a une astérisque, | ||
+ | // | ||
+ | decode_string.value( string ); // On appelle la fonction de decodage | ||
+ | string = ""; | ||
+ | } ) | ||
+ | }; | ||
+ | }; | ||
+ | ).play; // Et on lance tout ça | ||
+ | |||
+ | ) | ||
+ | |||
+ | r.stop; // Permet d' | ||
+ | </ | ||
+ | |||
+ | 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.1582801733.txt.gz · Dernière modification : 2020/02/27 11:08 de manumerique