Régulation PID, faire de jolis graphiques 2/2

La dernière fois, je vous ai présenté une méthode essentiellement graphique, permettant une bonne approximation des paramètres PID de votre régulateur. Encore faut-il savoir comment tracer les graphiques, c’est ce que je me propose de vous expliquer dans cet article. Il est bien sûr évident que cette méthode peut être utilisée pour tracer des graphiques à partir de tout type de données, du moment que les données arrivent via un port série.
La première étape va consister à récupérer les données du port série sur un PC. Comme souvent, il existe plusieurs façon de faire, je vous présenterais celle que j’ai utilisé ici : un petit script python.

import serial
import sys

serialport = serial.Serial("/dev/ttyACM0", 9600, timeout=1)
line = []

while True:
    for c in serialport.read():
        line.append(c)
        if c == '\n':
            for s in line:
                f=open('myfile','a')
                sys.stdout.write(s)
                f.write(s)
                f.close
            line = []
            break

serialport.close()

Ce petit script prend les caractères arrivant sur le port série, jusqu’au caractère marquant la fin de ligne, puis écrit la ligne dans un fichier. Ca peut éventuellement suffire pour tracer un graphique… Mais dans ce cas précis, on veut pouvoir également envoyer une consigne au régulateur, la modifier afin de suivre la réaction de ce dernier. Problème : comment envoyer des données sans perturber la lecture des données et ne pas sauter de mesure ?
Là encore, il y a plusieurs méthodes possibles, certaines plus complexes que d’autres. Celle que j’ai choisi permet de garder un programme simple, mais ne fonctionnera que sous linux. Ceux sous un autre système chercheront du côté du multithreading…

import serial
import sys
import select

serialport = serial.Serial("/dev/ttyACM0", 9600, timeout=1)
line = []

while True:
        while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
          ligne = sys.stdin.readline()
          if ligne:
            print(ligne)
            serialport.write(ligne+'\r\n')
          else: # an empty line means stdin has been closed
            print('eof')
            exit(0)
        else:
            for c in serialport.read():
                    line.append(c)
                    if c == '\n':
                        for s in line:
                                f=open('myfile','a')
                                sys.stdout.write(s)
                                f.write(s)
                                f.close
                                line = []
                    break

serialport.close()

Ah oui, j’ouvre et ferme le fichier a chaque écriture, de manière à pouvoir accéder aux données pendant l’exécution du programme. Ca permet de visualiser l’évolution du graphique en temps réel.
Les données sont envoyées par le microcontrolleur sous la forme . Je n’ai pas de mesure de temps, chaque échantillon étant pris à un intervalle d’une seconde, il suffit de compter les échantillons pour connaître le temps écoulé.

Passons maintenant au graphique lui-même. Pour cela, j’utilise le logiciel Gnuplot, outil très puissant de tracé de courbes dont nous n’utiliseront ici qu’une infime quantité de ses possibilités. Lorsque vous lancez gnuplot en ligne de commande, vous vous retrouvez avec un shell dans lequel vous pourrez lancer vos commandes gnuplot.

plot 'myfile' using 1 smooth bezier title 'temperature', 
'myfile' using 2  with line title 'CO', 
'myfile' using 3 with line title 'Setpoint'
 plot 'myfile' using 1 

Indique que l’on va tracer une courbe correspondant aux données de la première colonne du fichier

smooth bezier

Indique que l’on veut lisser les données. Il n’est pas toujours intéressant de lisser les données, par exemple, ici la colonne 3 correspondant à la consigne n’est pas lissée, ce qui permet de visualiser le moment exact du changement de consigne. Par contre, dans le cas des valeurs mesurées, cela permet de s’affranchir du bruit sur les mesures.

title 'temperature'

Légende de la courbe. Pratique dès qu’il y a plus d’une courbe.

Par défaut, gnuplot va afficher le résultat à l’écran. Pour pouvoir enregistrer le résultat dans un fichier il faut taper les instructions suivantes :

set terminal "png"
set output "monfichier.png"
replot

Nota : avec la commande replot (ou avec le bouton replot de la gui), vous pouvez rafraîchir les données affichées, de manière à visualiser en continu vos données…
Il y a certainement plein d’amélioration possibles à ma méthode, mais je vous la présente car elle a le mérite d’être simple et rapide à mettre en oeuvre, tout en fournissant de bons résultats :)

Category: General

Régulation PID, comment la régler 1/2

Étant donné que je n’ai pas encore tout le matériel nécessaire pour avancer mes autres projets, j’en profite pour approfondir un peu mes connaissances théoriques et vous en fait donc profiter. Mon projet ici est simple : Réguler une température à l’aide d’un microcontrolleur, mais surtout bien comprendre les tenants et aboutissements des différents réglages et algorithmes. L’objectif ici n’est pas tant d’expliquer ce qu’est un PID, ni comment il fonctionne dans le detail, mais plutôt de donner une méthode permettant d’approximer les coefficients du régulateur.

Je profiterais de cette expérience pour faire 2 articles :
– celui-ci concernant le PID a proprement parler
– Un second article concernant ma méthode pour obtenir des courbes « lives » a partir d’un arduino et d’un PC.

Continue reading

Category: General

Bonjour du bout du monde (bis)

Bonjour à tous,
et non, je ne suis pas mort, mon déménagement s’est plutôt bien passé, même s’il reste encore pas mal de choses à faire (trouver un appart « potable », pleinnnn de papiers, etc…).
Grosso modo la vie normale reprend son cours, et j’ai même recommencé mes petits bricolages. Bon, le plus dur ici est de trouver du bon matériel, je vous explique pas la galère rien que pour un fer à souder. Du coups, mes premiers projets consistent à me fabriquer mon propre matos, vu qu’il est compliqué (et très cher) d’importer, à partir de ce que j’arrive à trouver sur place.
Heureusement, ici c’est un peu le paradis du bidouilleur, et il y a des centaines (milliers ?) de petites boutiques vendant à peu près tout ce dont on peut avoir besoin, à des prix défiants toutes concurrences. C’est également le royaume de la récup’, et je vois passer des choses assez hallucinantes ! (Promis, des photos bientôt).
Mes projets « français » sont quand a eux en pause pour un an, donc vous ne verrez pas la fin du stirling tout de suite (je vous rassure, j’en suis tout autant frustré), mais vu le matos que j’ai sous la main ici, côté usinage, je pense me remettre rapidement à des projets sympa.

Ca me change un peu de mes montagnes :)

Ca me change un peu de mes montagnes :)

Category: General

Moteur Stirling, deuxième prototype 4/…

3-8/03 : 8h d’usinage et de FAO. Fabrication des brides de l’échangeur, ainsi que tu tube inox de l’échangeur. Ca n’aura pas été tout seul : les deux premières brides sont sorties sans problèmes, les deux suivantes ont en revanche été complètement voilées lors de l’usinage… Fraises usées ? Problème de matériau (pourtant même provenance…) ? Bref, un peu de surfaçage plus tard, je le retrouve bien plates, avec 1/10eme en moins sur l’épaisseur finale (mon brut était nettement plus épais, ce qui fait qu’au final, même après re-surfaçage, j’arrive pas loin de la côte…
Évidemment, je n’avais pas avec moi mes raccords cuivre, je n’ai donc pas encore pu braser les coudes sur les brides. En revanche, j’ai déjà brasé une bride sur le tube inox (inox sur inox donc), ça s’est plutôt bien passé :) (brasure argent). Cette partie nécessitant pas mal d’ajustement, j’ai hâte de l’avoir terminée, histoire de passer aux choses sérieuses !

19/03 : 3h d’usinage + FAO. Fabrication d’un montage pour fixer les masselottes pour l’usinage. Retour à l’alu, ça fait du bien après tout cet inox… Rien de bien compliqué sur le montage, j’en ai profité pour avancer la FAO des masselottes.

24/03 : 6h de travail. Une heure d’usinage environ, pour avancer les masselottes. Cette fois-ci, j’attaque les choses sérieuses, je fais le détourage et les perçages. Mis à part un foret cassé, tout s’est bien passé. Le gros du travail de la journée aura été de la plomberie : j’ai terminé les têtes de cylindres, avec la tuyauterie du régénérateur. C’était un peu le gros stress, car c’est le moment où je découvre si tout s’emboîte correctement, et si mes dimensions sont justes. Quelques petites frayeurs également au moment de braser, étant loin d’être expert, j’ai toujours peur de rater quelque chose (le chalumeau chauffe tellement qu’il peut trouer mon tube de cuivre sans problème !)
Au final ça s’est pas trop mal passé. Certaines brasures ne sont pas des modèles du genre, mais avec le volume d’inox à chauffer autour, pas forcément évident. En tous cas, ça a l’air étanche, ce qui est le but. Reste maintenant à trouver un moyen de nettoyer tout le noir laissé par cette opération.

Brasure de l'échangeur

Brasure de l’échangeur, avant nettoyage…

1 et 3/04 : 4h d’usinage. J’attaque les choses sérieuses : le volant d’inertie. C’est un gros morceau, pas particulièrement complexe (quoique), mais long à faire : un gros bloc d’inox à usiner, sans casser trop de trucs (donc en allant pas trop vite), avec pas mal de matière à enlever.
Pour le moment, je n’ai fait que les opérations intérieures, restera à faire le « détourage », opération qui s’annonce déjà compliquée…
Histoire de pimenter un peu un usinage qui se passait trop bien, le taraud que j’utilisai a cassé à la dernière opération (taraudage 6 sur 6 au total…). Bien évidemment, il est resté coincé dedans… Avec pour 200€ de brut d’inox, autant dire que j’ai bataillé un moment pour réussir à l’extraire (finalement en tappant (fort) dessus avec un marteau et une pointe à centrer… La pointe n’a pas aimé, mais j’ai sauvé les meubles, et le filletage s’est avéré récupérable malgré tout !)

4/4 : compliqué aujourd’hui ! Techniquement, 4h de travail, pour seulement 1h productive… En effet, en étant trop concentré sur ce que je voulais palper sur le centre d’usinage, j’en ai oublié de regarder ce qui se passait au dessus, et complètement abimé le carter du palpeur qui est venu s’écraser contre le haut de mon montage… Grosse grosse frayeur (ça vaut dans les 2-3000€, et surtout, il n’y en a qu’un, s’il casse, je bloque la machine pour tout le monde jusqu’à remplacement…).
Heureusement, après une série de mesure, ça a l’air d’être uniquement cosmétique, les pièces calibrées que nous avions pour comparer faisant toujours la même taille au centième près (ouf).
Histoire de continuer à me stresser, l’opération d’aujourd’hui consistait à percer le trou de blocage de mes masselottes (dernière opération) , mais je n’avais qu’un seul foret d’assez long pour cette opération, et il faisait…. 30cm de long !!! Autant vous dire, que j’ai serré les fesses avec celui-là, d’une part car la journée avais mal commencée, d’autre part parce que je n’avais qu’une seule chance !

Les masselottes montées sur l'arbre

Les masselottes montées sur l’arbre

 

12/05 : un peu de laissez-aller sur le compte rendu là… Du coups, je n’ai pas le compte exact du temps passé, mais une simple approximation, dans les 6h. J’ai enfin terminé le volant d’inertie. Il me restait à faire le contour externe et le clavetage. Pour le contour externe, dégrossissage au centre d’usinage, avec fraise ravageuse, par demi-sphères, ce qui permettait un serrage sur pince et donc de se passer d’un montage. Là encore, « un peu » de casse, avec deux fraises ravageuses cassées (diamètre 20 quand même !!). Après analyse et nouvel essai, il s’avère que j’avais voulu être trop prudent et prenait des passes trop petites, ce que ces fraises n’apprécient pas.
La finition de l’extérieur s’est faite au tour, ce qui a permis au passage d’avoir de jolis chanfreins. J’ai bien bataillé pour réussir à avoir une bonne concentricité (usinage des mors doux et tout…). Bref, au final, ça tourne (rond).

Dernière étape pour cette pièce : le clavetage. N’ayant pas de mortaiseuse, cette étape a été réalisée à la main, sur le tour, en utilisant l’outil à claveter comme un rabot, en enlevant la matière 1/10e de mm par 1/10e. C’est pas très rapide, mais ça marche.

Assemblage des pistons

Assemblage des pistons

26/05 au 28/05 : 1h d’usinage, et je commence l’assemblage :). Après avoir claveté le volant d’inertie, me restait les deux brides à claveter. Une fois le tout assemblé, il s’est avéré que mon arbre ne rentrait plus, il fallait ré-aléser. Malheureusement, je ne sais pas ce qui s’est passé (là je n’ai vraiment pas compris), mais mon alésage s’est fait légèrement de travers, ce qui fait que mon trou est maintenant oval d’un côté, avec 0.5mm de jeu… Je pourrais corriger en réusinant deux brides (qui servent notamment à ça), mais vu les délais je décide de laisser tel quel. Mon volant tourne légèrement voilé, mais rien de dramatique, et surtout, une fois la clavette mise, il ne bouge absolument pas.

Les débuts de l'assemblage

Les débuts de l’assemblage

Toutes les pièces ont maintenant été usinées (à l’exception de deux bagues en vermiculite qui le seront cette semaine, mais ne sont dans tous les cas pas obligatoires, je peux donc débuter l’assemblage. Ce dernier avance assez vite, j’ai déjà démonté/remonté l’ensemble en moins d’une journée pour modifier quelques paramètres. Il reste a faire les « petits » ajustements (longueur des arbres, angle des masselottes, etc…), et je pense pouvoir enfin tester la bête :)

 

 

Category: General

Un peu de changements…

Premier changement, bien visible, c’est le thème du site… Le précédent était là depuis 3 ans (déjà), et je commençait à lui trouver pas mal de défauts. Voilà donc un nouvel habillage, on verra à l’usage ce que ça donne, n’hésitez pas à me faire vos retours !

Le second changement, moins visible côté site sera nettement plus important, côté perso. En effet, d’ici quelques semaines, je déménage à l’autre bout du monde, pour y vivre un an au moins. Du coups, pas mal de projets qui ne seront pas terminés d’ici là risquent de se retrouver en attente pour un an. Dans la même idée, pendant ce temps il y aura probablement moins de posts orientés électronique, car je n’aurais pas mon matériel sur place, mais probablement d’autres posts intéressants, surtout si vous aimez la mécanique et/ou les machines à commandes numériques. J’essaierais également de faire un petit topo sur la vie sur place, et les problèmes liés à ce genre d’expériences :) (en espérant qu’il n’y en ai pas trop non plus).

D’ici là, je trime comme un fou pour voir mon moteur stirling tourner avant de partir ;) et j’ai quelques autre montages intéressants à terminer…

Mon prochain cadre de vie... :)

Mon prochain cadre de vie… :)

Category: General