Bonjour à tous, je suis régulièrement ce forum pour trouver des réponse, mais là j'ai besoins de vous pour un projet précis. Je me présente, étudiant en design je joue régulièrement avec les robot, automatisme, fraiseuse numérique et arduino dans mes projets. Là je tape sur un mix de monde "réel" et processing, chose que je ne maitrise pas sur le bout des doigt.
Voici mon projet, j'ai hacké depuis quelque temps un jouet mindflex ( http://frontiernerds.com/brain-hack ). Mais j'aimerais maintenant créer un ptit code sous processing pour que les différentes infos récupérées sur le cerveaux génére une forme 3D en fonction de celles-ci. Donc passer de l'arduino à processing ou chaque paramètre en contrôles d'autre pour la forme. En code "brut" en sortie de l'arduino j'ai une trame de chiffres correspondant à chaques colonne du code (déjà existant sous processing). celles-ci augmentent ou diminuent en fonction de l'activité et fait évoluer les graphes.
je pense donc que les infos sont facilement récupérable et exploitable. J'aimerai un coup de pouce pour le début de code, ou si vous avez certains exemples facilement adaptable pour commencer à illustrer le truc.
La fin du projet serais d'arriver à maitriser pas mal de paramètre et pouvoir exporter l'objet en 3D pour l'imprimer ensuite. En définissant au départ une famille de forme (chaise, vase, lumière...) et les paramètre viendrais les modifiers
voici ce qu'un designer a déjà produit dans le même registre, en partant du son. François Brument.
merci
Hors ligne
Juste un message pour te demander ou en sont tes recherches et si c'est vraiment interessant comme truc?
Je suis aller voir chez neurosky, et tout ça m'a l'air vraiment fou!! qu'est-ce que ça donne alors?
Hors ligne
salut, du coup je me suis interessé à pleins de trucs, et je suis passeé finalement par un plug in pour rhino 3D(logiciel de 3D) qui gère pas mal de paramètre, comme le pilotage d'arduino, des données pour la modélisation et autre. Ce plug in s'appelle grasshopper, et avec un plug in supplémentaire je fais communiquer le casque en OSC avec grasshopper par l'intermédiaire de processing. Du coup j'ai plus qu'a exploiter ça dans grasshopper, assez complet comme truc. Je documente dès que j'avance
Hors ligne
Je pensais plutôt essayer de faire un soft pour faire des cartes mentales de projet en 3D, genre avec certaines commandes et autre...
Hors ligne
J'ai le mindwave, et la vue processing, haha! ça tue!
Hors ligne
et ça s'interface bien avec processing ?
Hors ligne
ça marche plustot pas mal, la seule limite est hardware, les frequences de mise à jours de la puce et d'envoie du paquet et d'environ une seconde, dût à la puce. Mais j'ai crus voir une bidouille qui permettais de changer ça, mais faut rajouter de l'électronique, je regarderai. Sinon j'ai bien avancé, j'ai d'abord bossé avec un pote sur un code "graphisme", pour réussir à isoler tout ce qui m'interessé, j'ai pas mal épuré le code de base. Là je m'attaque à la 3D, avec ton code si je ne me trompe pas de personne . Quand on a finit avec mon pote je pense qu'on fera un poste avec explication et sources.
Dernière modification par elastickman (2012-06-14 07:58:43)
Hors ligne
bonjour tout le monde. Bon ça avance, je fait plusieurs trucs en même temps mais j'ai pu bien m'y remettre. Je suis bloqué sur un dernier point. voilà où j'en suis, j'ai utlisé et modifier un code de Gilles, je me permet de le publier en espérant que c'est ok.
voilà j'ai réussis à épurer le code de base du casque, du coup je n'ai que les valeurs brut qu'il me faut, (chaine de 10 charactères chacun identifié et a imprimer en "print" dans la fenêtre. Ensuite je me suis dit je vais remplacer certaines de ces variables du genre ("hauteur", "rayon modu", etc...). Tout semblais pouvoir marcher. Mais non, mais je pense que le soucis viens du début de la boucle dans "void draw ()", dans la déclaration du "for".
for(int j=-hauteur/2 + 2;j<hauteur/2 + 2;j+=20){
for(int i=0;i<360;i+=20){
rayon=cos(radians(j+phi)*facteur)*attention*200+rayonBase;
vertex(cos(radians(i))*rayon,sin(radians(i))*rayon,j);
vertex(cos(radians(i+20))*rayon,sin(radians(i+20))*rayon,j);
rayon=cos(radians(j+20+phi)*facteur)*attention*200+rayonBase;
vertex(cos(radians(i+20))*rayon,sin(radians(i+20))*rayon,j+20);
vertex(cos(radians(i))*rayon,sin(radians(i))*rayon,j+20);
}
}
.
Sur le code du casque il vérifie d'autre chauses:
for (int i = 0; i < monitors.length; i++) {
monitors[i].update();
monitors[i].draw();
}
Mais il s'agit de "class" que je n'utilise pas du tout.
voici le code en entier, celui de Gilles + le mien mixé.
import processing.opengl.*;
float rotX;
float rotY;
float rayon;
float rayonBase=100;
int hauteur=800;
float phi=60;
float facteur=0.7;
float attention;
import processing.serial.*;
Serial serial;
String message; // the message to send
// TODO Import OSC library
int packetCount = 0;
void setup() {
size(1280,800,OPENGL);
frameRate(60);
strokeWeight(0.5);
smooth();
// Set up serial connection
println("Find your Arduino in the list below, note its [index]:\n");
println(Serial.list());
serial = new Serial(this, Serial.list()[0], 9600);
serial.bufferUntil(10);
}
void serialEvent(Serial p) {
// Split incoming packet on commas
// See https://github.com/kitschpatrol/Arduino … ter/README for information on the CSV packet format
String[] incomingValues = split(p.readString(), ',');
// Verify that the packet looks legit
if (incomingValues.length > 1) {
packetCount++;
// Wait till the third packet or so to start recording to avoid initialization garbage.
if (packetCount > 3) {
float signalQuality = Integer.parseInt(incomingValues[0].trim());
float attention = Integer.parseInt(incomingValues[1].trim());
int meditation = Integer.parseInt(incomingValues[2].trim());
int delta = Integer.parseInt(incomingValues[3].trim());
int theta = Integer.parseInt(incomingValues[4].trim());
int lowAlpha = Integer.parseInt(incomingValues[5].trim());
int highAlpha = Integer.parseInt(incomingValues[6].trim());
int lowBeta = Integer.parseInt(incomingValues[7].trim());
int highBeta = Integer.parseInt(incomingValues[8].trim());
int lowGamma = Integer.parseInt(incomingValues[9].trim());
int highGamma = Integer.parseInt(incomingValues[10].trim());
// prints the message on the console
print( attention + ";" + signalQuality);
}}}
void draw() {
background(255);
pushMatrix();
translate(width/2,height/2,-300);
rotateY(radians(rotY));
rotateX(radians(rotX));
beginShape(QUADS);
fill(10,237,255,34);
stroke(0);
for(int j=-hauteur/2 + 2;j<hauteur/2 + 2;j+=20){
for(int i=0;i<360;i+=20){
rayon=cos(radians(j+phi)*facteur)*attention*200+rayonBase;
vertex(cos(radians(i))*rayon,sin(radians(i))*rayon,j);
vertex(cos(radians(i+20))*rayon,sin(radians(i+20))*rayon,j);
rayon=cos(radians(j+20+phi)*facteur)*attention*200+rayonBase;
vertex(cos(radians(i+20))*rayon,sin(radians(i+20))*rayon,j+20);
vertex(cos(radians(i))*rayon,sin(radians(i))*rayon,j+20);
}
}
endShape();
popMatrix();
}
void mouseMoved(){
if(keyPressed&&key=='m'){
rotX=map(mouseY,50,height-50,-180,180);
rotY=map(mouseX,50,width-50,-180,180);
}}
si vous y voyez clair dites moi tout, ça serais génial. merci et bonne journée
Hors ligne
Bon j'ai testé le code chez moi et ça marche pas faute d'arduino, tu peux copier coller le message d'erreur ici, comme ça on verra de quoi il en relève.
Hors ligne
salut, en fait de mon côté, le code marche, fin se lance, mais rien ne se passe avec les valeurs que j'utilise. ça veut dire qu'il les reconnais bien mais on dirais qu'il ne les utilise pas. (elles varient de 0 à 200 pour l'attention, je les vois bouger dans "print" dans la console). Je voudrais en fait remplacer les controlP5 par ses valeurs que je reçois, tout simplement.
on dirais que la boucle se lance pas. Mais quand je laisse les controlP5 pour contrôler le reste je peux modifier la forme comme le code de base, mais pour la valeur "hauteur" par exemple, je la remplace par "attention" et rien ne se passe. donc aucun message d'erreur...
Hors ligne
Salut elastickman,
C'est un problème avec la portée des variables, tu redéfinis dans la fonction serialEvent() les deux variables attention et signalQuality, leurs valeurs ne sont pas "vues" de l'extérieur. Pour bien comprendre, compare le résultat de ces deux codes :
et (les variables ne sont pas redéfinies) :
Hors ligne
Tu utilises quel model de mindflex/wave.. etc. Comme la vidéo?
Hors ligne
salut tout le monde, désolé j'étais absent pendant 15 jours, je viens de rentrer. Je vous fait un ptit topo d'où j'en suis assez rapidement. ça a avancé.
Hors ligne
Hate de voir ça
Hors ligne
Pages: 1