Bonjour à tous-tes,
Je travaille sur satellite (rpi+arduino) avec pd& via firmata pour une pédale à effet.
J'utilise les 8 analog input avec des potentiomètre (5k) pour modifier les paramètres d'effet dans pure data. Les valeurs sortant de pduino sont comprises entre 0 et 1.
Mon problème est la question d'obtenir des valeurs lissées et stables lorsqu'il n'y a pas de variation sur les potentiomètres. Je bidouille avec la fonction nombre entier [i] pour supprimer les décimales par exemple. Je ne peux pas utiliser de moyenne classique car cela une latence trop importante entre le touché du pot et la variation dans pd (de toute manière, cela ne lisse pas correctement les valeurs).
Je cherche à faire une moyenne mobile exponentielle (exponential moving average) car ça semblerait assez adapté. Je ne trouve que l'objet [mavg] de flatspace zexy qui est un "moving average filter" sans exponentielle donc...
Quelqu'un aurait-il une idée ?
Comment obtenez-vous des valeurs correctement lissées dans vos projets ? pour certains paramètres ce n'est pas très grave que ça bouge un petit peu, en revanche pour un pitch une variation de 1 demi-ton c'est n'est pas possible...
Je suis encore profane, s'il manque des infos ou des choses incorrectes dans mon post n'hésitez pas à me le dire...
Merci !
Hors ligne
salut a toi
comment a tu fait ton branchage de tes 8 analogues sur le arduino ?
Hors ligne
Il y a surement un truc à faire au niveau des branchements pour stabiliser le tout… mais sinon pour le lissage exponentiel, même si il n'y aurait pas de fonction pureData spécifique (je ne connais pas Pd…), il y a possibilité d'utiliser ceci:
nouvelle estimation = a * nouvelle mesure + (1 - a) * ancienne estimation
Qu'on peut aussi écrire ainsi:
ou a appartient à l'intervalle ]0, 1[. Plus on tend vers 1 plus le lissage est "sévère", sinon si on tend vers 0, le lissage est moins fort.
Même si l'exponentielle n'apparait pas explicitement, il s'agit bien d'un lissage exponentiel: http://www.jybaudot.fr/Previsions/les.html
Dernière modification par jojolaglaise (2017-08-11 21:45:41)
Hors ligne
Oui, en d'autres termes il s'agit d'un filtre passe-bas du premier ordre, que personnellement dans une situation analogue j'avais trouvé relativement peu utile. Enfin, je ne veux pas te décourager.
Tu pourrais essayer une stratégie qui consiste à lisser les valeurs quand tu ne touches pas aux potards (bruit), et (presque) pas quand tu y touches. Le passage d'un état à l'autre se faisant par détection de variations notablement plus grandes que celle observées en situation de bruit. Cela donne des potards qui ne réagissent pas au quart de tour quand tu les "réveilles", mais qui sont réactifs juste après leur réveil et tant que tu les actionnes...jusqu'à une nouvelle mise en sommeil (par exemple soumise à un petit timer).
Je suis très curieux d'entendre des pistes également du côté hardware, car j'ai toujours pensé qu'il y avait moyen d'optimiser ça, mais je n'ai fait qu'un seul projet de ce genre et une fois les composants soudés suis passé à autre chose :-)
Nau
Dernière modification par nau (2017-08-12 00:13:56)
Hors ligne
Bonjour,
Merci des réponses. Mes potentiomètres sont branchés ainsi broche 1 au 5v, broche 2 au A0, branche 3 au gnd. De même pour les autres.
J'ai lu que l'on pouvait ajouter des condensateurs entre A0 et gnd pour lisser un peu plus sans que cela ne se vérifie franchement lors d'un essai.
J'ai effectivement pensé à "activer" l'input uniquement lorsque l'on détectait un coefficient directeur différent de +- zéro sans avoir encore été au bout...il y a sans doute à creuser de ce côté là...
Je vais voir si j'arrive à traduire dans pd l'idée de jojolaglaise !
D'ailleurs, à tout hasard, est-ce que quelqu'un sait pourquoi pduino fournit les valeurs analogiques sur un interval de 0 à 1 et non de 0 à 1024, valeurs de l'arduino ?
Hors ligne
sa ma l'air bien
tu as parlé que tu branchais un raspi avec le Arduino si c'est le cas as-tu un transfo de + de 2amp sur le raspi car il prend quand même du jus si tu alimente le Arduino c’est 500ma de plus
oui le condensateur peut aider 10 ou 100 micro farad ceramique entre lanalogue et la masse peut le stabiliser
mais commence par voir si ta source de courant est suffisante et trouve toi un bon fil usb entre le transfo et le raspi sa fait toute la difference
Hors ligne
Bonjour à tous-tes,
Un petit mot de conclusion, étant arrivé à des résultats satisfaisants :
- éviter les parasites et donc des soudures propres
- des condensateurs 104 céramiques entre les analogs input et le ground (les condensateurs au plus proche des analog inputs) -> condensateur de découplage (https://fr.wikipedia.org/wiki/Condensat … découplage)
- un petit [lop~ 100] à la réception des valeurs analogiques dans pure data
- éventuellement un système de détection de la rotation des potentiomètres avec une différentielle du signal (et donc la prise en compte des changements de valeurs uniquement lorsque ceux-ci sont estimés comme à prendre en compte. Cf. Pj ).
Voilà ! Merci pour votre aide !
Dernière modification par Taix (2018-03-07 13:35:27)
Hors ligne