Commande automatique de groupe électrogène - machine à états et autres questions

bricofoy:
Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

...
Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...

Bonjour bricofoy
je ne suis pas un specialiste des interruptions, mais j'ai joué avec il n'y a pas longtemps
voir ici
http://forum.arduino.cc/index.php?topic=165087.msg1236504#msg1236504

suggestion : une fois en marche ton code ne voit plus jamais de rising ? (trop rapide ?)
juste pour test ça donne quoi avec change au lieu de rising , "une dent et un creux" c'est 3 "change"

alors en fait, c'est plus merdique que ça ! là j'attaque l'entrée avec un signal carré à 100Hz, ce qui devrait me donner une valeur de rpm à environ 667 trs/min, et en fait j'ai une valeur qui oscille entre zéro et 416 avec de temps en temps des pics à 7000, enfin bref c'est totalement n'importe-quoi.

donc en fait la fonction de calcul ou ma fonction de mesure ne marchent pas.

trop rapide, non, certainement pas, grand maximum mon entrée sera à 500Hz ça ne devrait pas poser trop de soucis...

bricofoy:
alors en fait, c'est plus merdique que ça ! là j'attaque l'entrée avec un signal carré à 100Hz, ce qui devrait me donner une valeur de rpm à environ 667 trs/min, et en fait j'ai une valeur qui oscille entre zéro et 416 avec de temps en temps des pics à 7000, enfin bref c'est totalement n'importe-quoi.

donc en fait la fonction de calcul ou ma fonction de mesure ne marchent pas.

trop rapide, non, certainement pas, grand maximum mon entrée sera à 500Hz ça ne devrait pas poser trop de soucis...

ça depend du temps que tu consomme en phase d'interruption
pour ne rien louper j'ai du deriver le calcul et me contenter de renseigner simplement un tableau (voir code commenté)
mais ceci n'est peut etre pas exploitable dans tons cas

Est-ce que tu es sûr que c'est software ? Est-ce que le code que tu post ici est juste un résumé du code qui est réellement exécuté ou bien ce code ci te pose réellement problème ?

ben justement, j'ai essayé d'en faire le moins possible en interruption, regarde la fonction void comptetour() elle est réduite à sa plus simple expression..

bon en fait, le calcul marche, c'est mon entrée qui merdait (tension de sortie du gbf intégré au DSO Quad trop basse ! j'ai bricolé un ampli et ça marche, j'ai bien mes 666 trs/min (avec de temps en temps un pic à 740, donc il reste un bug que je n'ai absolument aucune espèce d'idée de la manière de la trouver ! )

par contre je retrouve mon comportement du début : dès que l'état de la machine change, je mesure 0 !! donc c'est que ça ne passe plus en interruption...

B@tto:
Est-ce que tu es sûr que c'est software ? Est-ce que le code que tu post ici est juste un résumé du code qui est réellement exécuté ou bien ce code ci te pose réellement problème ?

je croyais être sûr que c'était un soucis soft (en tout cas il y en a un : les pics à 740tr/min) mais à vrai dire je ne suis plus sûr de rien, là :confused:

le code est bien un résumé du code actuellement executé par l'atmega

ARGHHH en fait quand j'ai les relais qui s'activent, l'alim baisse avec la conso des bobines, et les créneaux en sortie du pont diviseur R37/R32 sont trop bas (3,08V crète) et l'atmega ne les détecte plus !! en remontant l'alim, ça fonctionne... Pourtant d'après la donc de l'atméga, il me semblait qu'un niveau haut était pris en compte à partir d'une tension bien plus faible que ça ??

le schéma est là : http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw

Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Le capteur que j'utilise fonctionne en 12V, avec une sortie collecteur ouvert PNP, d'où ce pont diviseur pour ne pas cramer l'entrée de l'atmega avec des pulse en 12V

bricofoy:
Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Le capteur que j'utilise fonctionne en 12V, avec une sortie collecteur ouvert PNP, d'où ce pont diviseur pour ne pas cramer l'entrée de l'atmega avec des pulse en 12V

J'avais demerdé un probleme du genre capricieux comme le tiens Vin 12 ---> Vcommut 5V
si les temps de recouvrement sont acceptable , essaye un petit 78L05 comme regulateur du signal d'entrée , (ne pas oublier de tirer un peu dessus )
ce n'est pas à priori fait pour, mais si F° est faible ça peut etre une bonne solution "à pas cher" 8)

Artouste:
Bonjour bricofoy
je ne suis pas un specialiste des interruptions, mais j'ai joué avec il n'y a pas longtemps
voir ici
projet inutile donc absolument necessaire - #16 by Artouste - Français - Arduino Forum

suggestion : une fois en marche ton code ne voit plus jamais de rising ? (trop rapide ?)
juste pour test ça donne quoi avec change au lieu de rising , "une dent et un creux" c'est 3 "change"

je vois que tu stockes les valeurs dans un tableau, au lieu de les additionner comme moi. C'est plus rapide ainsi ?

Dans mon cas, en faisant des print avec la valeur du compteur, je constate qu'elle est majoritairement à 1 et n'a jamais dépassé 3, donc finlement le reste du code (machine à état, entrées/sorties, liaison série) que je pensais assez lent s'execute en fait assez rapidement.

Je n'ai aucun idée en revanche de la manière de débugger mon erreur occasionelle avec le pic à 740 au lieu des 666 theoriques...
En fait la seule explication que je vois à cette erreur c'est un passage en interruption avant la fin du traitement de la fonction calcule_rpm(), auquel cas j'ai alors un calcul fait avec une valeur de compteur erronée car elle n'a pas eu le temps d'être remise à zéro.
Peut-être que je devrait faire un detachInterrupt() a l'entrée dans la fonction, et à nouveau attachInterrup() à sa sortie ? ainsi je risque de rater un ou deux pulse, mais au moins e calcul restera juste avec les suivants ?

bricofoy:
...

  • je vois que tu stockes les valeurs dans un tableau, au lieu de les additionner comme moi. C'est plus rapide ainsi ?
    ...

  • Peut-être que je devrait faire un detachInterrupt() a l'entrée dans la fonction, et à nouveau attachInterrup() à sa sortie ? ainsi je risque de rater un ou deux pulse, mais au moins e calcul restera juste avec les suivants ?

  • Dans mon cas : je sais +/- quel est le temps d'amortissement (nombre de secteurs parcourus) pour tendre à Vitesse=0
    c'etait dans le but d'une collecte statistique
    c'est la methode d'acquisition la plus efficace que j'avais trouvé (tout ce qui est traité dans l'interrupt consomme du temps)

  • comme je l'ai expliqué , je ne suis pas assez pointu sur ce domaine , mais ça semble une bonne voie pour "calibrer une fenetre de tir" 8)

bricofoy:
ARGHHH en fait quand j'ai les relais qui s'activent, l'alim baisse avec la conso des bobines, et les créneaux en sortie du pont diviseur R37/R32 sont trop bas (3,08V crète) et l'atmega ne les détecte plus !! en remontant l'alim, ça fonctionne... Pourtant d'après la donc de l'atmega, il me semblait qu'un niveau haut était pris en compte à partir d'une tension bien plus faible que ça ??

Apparemment la question est simple mais la réponse complexe : http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=109947&start=20

bricofoy:
Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Résitance + zener c'est le top : coût et mise en place identique à un pont diviseur mais sans les inconvénients. D'ailleurs on l'oublie parfois mais la zener n'est pas forcement obligatoire seule la résistance limitant le courant est nécessaire : http://www.atmel.com/images/doc2508.pdf

merci b@tto pour ces liens. j'avais déja trouvé ce matin l'AN atmel, mais l'autre est très instructif aussi...

en gros, c'est la merde :stuck_out_tongue:

Je crois que je vais tenter la version sale à la sauce atmel : juste une R en série avec l'entrée, et laisser les diodes internes faire leur boulot.
En fait, j'avais voulu faire un pont diviseur pour m'assurer d'avoir un courant minimum dans mon entrée pour éviter un certain nombre de parasites, dans la mesure ou l’environnement du montage (groupe électrogène : bobines, relais, alternateur, fort courants, etc) est quand même EMF-gène au possible...

bon là le soucis de voltage en entrée est flagrant :

tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=12.00 rpm=1666
tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=12.00 rpm=1333
tps : 0:2 0:2 ubat=11.81 rpm=1333
tps : 0:2 0:2 ubat=11.69 rpm=1333
tps : 0:2 0:2 ubat=11.60 rpm=1666
tps : 0:2 0:2 ubat=11.52 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.42 rpm=0
tps : 0:2 0:2 ubat=11.71 rpm=1333
tps : 0:2 0:2 ubat=12.20 rpm=1666
tps : 0:2 0:2 ubat=12.47 rpm=1333
tps : 0:2 0:2 ubat=12.57 rpm=1666
tps : 0:2 0:2 ubat=12.63 rpm=1333
tps : 0:2 0:2 ubat=12.90 rpm=1333
tps : 0:2 0:2 ubat=12.06 rpm=1333
tps : 0:2 0:2 ubat=11.28 rpm=0
tps : 0:2 0:2 ubat=11.28 rpm=0
tps : 0:2 0:2 ubat=10.64 rpm=0
tps : 0:2 0:2 ubat=10.93 rpm=0
tps : 0:2 0:2 ubat=11.91 rpm=1333
tps : 0:2 0:2 ubat=12.45 rpm=1333
tps : 0:2 0:2 ubat=12.73 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1333
tps : 0:2 0:2 ubat=12.84 rpm=1666

pour ce qui est des erreurs de mesure, je viens de me rendre compte d'un truc : à la fréquence de mes impulsions, la période n'est que de quelques ms. Il faut déjà que je fasse la mesure avec des µs, ça sera sans doute bien plus précis...

ok, bon avec la mesure de période en µs avec micros(), ça fonctionne très bien jusqu'a 1kHz, soit le double de la vitesse maxi du moteur, j'ai donc de la marge :slight_smile:

reste à modifier le câblage de mon entrée, et là par contre c'est merdique, car la tension batterie peut varier de 14,5V (en fonctionnement, alternateur en charge) à moins de 7V (démarreur en fonction par temps froid). Et la tension ne doit pas descendre en sortie de pont en dessous de 3,1V... ce qui n'est pas possible pour ne pas non plus dépasser 5,5V !
Donc j'hésite entre laisser le pont, calibré pour arriver à 3,5V avec 7V en entrée, et utiliser les diodes internes à l'atmega pour limiter le voltage lorsque la Ubat remonte, ou remplacer R37 par une zener à 5V.
La zener est-elle préférable ? j'ai lu un peu tout et son contraire dans les topics parlant de limiter une tension d'entrée par une zener...

bricofoy:
ok, bon avec la mesure de période en µs avec micros(), ça fonctionne très bien jusqu'a 1kHz, soit le double de la vitesse maxi du moteur, j'ai donc de la marge :slight_smile:

reste à modifier le câblage de mon entrée, et là par contre c'est merdique, car la tension batterie peut varier de 14,5V (en fonctionnement, alternateur en charge) à moins de 7V (démarreur en fonction par temps froid). Et la tension ne doit pas descendre en sortie de pont en dessous de 3,1V... ce qui n'est pas possible pour ne pas non plus dépasser 5,5V !
Donc j'hésite entre laisser le pont, calibré pour arriver à 3,5V avec 7V en entrée, et utiliser les diodes internes à l'atmega pour limiter le voltage lorsque la Ubat remonte, ou remplacer R37 par une zener à 5V.
La zener est-elle préférable ? j'ai lu un peu tout et son contraire dans les topics parlant de limiter une tension d'entrée par une zener...

tu n'a pas un 78L05 (ou meme un 7805) pour tester l'entrée comme je l'ai proposé plus haut ?
http://forum.arduino.cc/index.php?topic=125887.msg1302300#msg1302300
ça procure une large fourchette de tension en entrée, ça coute 20cts et en TO92 ce n'est pas compliqué à implanter

La zener ou la diode interne devrait parfaitement faire l'affaire

Artouste:
tu n'a pas un 78L05 (ou meme un 7805) pour tester l'entrée comme je l'ai proposé plus haut ?
Commande automatique de groupe électrogène - machine à états et autres questions - #115 by Artouste - Réalisations et Projets Finis - Arduino Forum
ça procure une large fourchette de tension en entrée, ça coute 20cts et en TO92 ce n'est pas compliqué à implanter

à 500Hz ? je doute fort que ça fonctionne... mais ça mériterait de le tester :slight_smile: mais pour le greffer sur le carte, c'est pas des plus simple. Je vais déja tester avec une zener car ça c'est facile j'ai juste à la mettre à la place de la R37 du pont

Hmmm pour moi les erreurs de calcul de RPM que tu observes (valeurs erronees et valeurs a zero) sont probablement dues a un probleme d'exclusion mutuelle.

Le code qui execute en interruption et le code qui execute dans la boucle principale operent sur des variables communes. Ceci n'est pas un probleme jusqu'au moment ou les variables sont assignees, par chaque morceau de code. Les 2 codes executent concouramment, creant une condition de course.
Ces conditions peuvent etre intermittentes ou tres frequentes, et ce qui est interessant est qu'elles apparaissent et disparaissent en function de la charge du microcontroller.

En bref, si chaque partie du code doit assigner des variables partagees, il doit y avoir un moyen d'assurer que les variables ne sont pas assignees concouramment. La solution la plus facile est d'inhiber les interruptions depuis le code principal (loop) lorsque les variables partagees sont assignees. Ceci cree une section de code critique.

Dans tous les comptes tours a base d'interruptions sur lesquels j'ai travaille il fallait creer une section de code critique.

bricofoy:
Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

le nouveau scema de la carte V3.0 est le suivant :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw

J'ai connecté ce capteur sur l'entrée INT1 (pin D03), ma fonction associée à l'interruption mesure la période entre plusieurs tops et compte ces tops. Ensuite j'ai une fonction qui est appelée dans la boucle principale, qui calcule la vitesse de rotation du moteur à partir de cette période et du nombre de tops comptés.

unsigned int rpm_moteur; 	//vitesse de rotation moteur.

//variables utilisees en interruption (volatile = stockees en RAM)
volatile unsigned int rpm_cpt;                     //compteur de passage en interruption. Pour savoir cb de périodes sont utilisées pour le calcul de F
volatile unsigned long rpm_periode;                //periode des implulsion du capteur de rotation
volatile unsigned long rpm_tprecedent,rpm_tcourant;//temps utilisés pour calculer la période

void setup()
{
(...)
attachInterrupt(1, comptetour, RISING); //entree rotation moteur sur INT1
(...)
}

void calcule_rpm() {
 //calcul de la vitesse de rotation du moteur.
 
 //on calcule la fréquence avec 1601000/période car la période est en ms (*1000), et que l'on veut la fréquence en tr/min et non en Hz ou tr/s (*60)
 //on divise ensuite le total par le nombre de dents comptées par le capteur sur 1 tour moteur
 //la periode est une moyenne des rpm_cpt periodes mesurees en interruption avant passage par ici
 
 //Serial.print(rpm_cpt);
 //Serial.println(" ");  
 if (rpm_cpt) {
   rpm_moteur = (unsigned int)(60000/(rpm_periode/rpm_cpt))/nbr_dents_capteur_rota;
   rpm_cpt = 0; //remise à zero du compteur pour les prochaines mesures
   rpm_periode = 0; //idem pour la periode
 }
 else if (rpm_tcourant<(temps_courant-300))
rpm_moteur = 0; //si pas de nouvelle mesure pdt plus de 300ms, alors le moteur est à l'arret ou le capteur est HS
//300ms de période correspond à 22trs minutes si nbr_dents_capteur_rota=9
 //Serial.print(rpm_moteur);
 //Serial.print(" ");
 
}

void comptetour(void) {
 //passage ici en interruption à chaque top capteur de vitesse.
 //On stocke juste la somme des période des impulsions, et un compteur du nombre de périodes additionnées  
 rpm_tprecedent = rpm_tcourant;
 rpm_tcourant = millis();
 rpm_cpt++;
 rpm_periode += (rpm_tcourant-rpm_tprecedent);  
}




le code complet est ici : http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino

Tout ça fonctionne très bien, du moins tant que le système est en veille (machine à état en état et_attente). 

En revanche, dès que je demande un démarrage du moteur, on dirais que le passage en interruption ne se fait plus. Je passe bien dans la fonction de calcul de vitesse à chaque boucle, comme en attestent les serial.print que j'ai collé dedans, mais le nombre de tops comptés est toujours 0, quelle que soit la fréquence des impulsions en entrée, ce qui semble vouloir dire que je ne passe pas dans l'interruption.

Le pire, c'est que une fois la séquence de démarrage (ratée !) finie, quand la machine à état repasse en attente, ben ça remarche.... arghhhh !

Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...

ciel ! bonjour JS, tu t'es perdu sur ce forum dédié aux "microcontrolleurs d'en bas" ? :slight_smile: je serai ravi de profiter de ton expérience en la matière en tout cas :slight_smile: :slight_smile:

merci pour ta réponse. en effet, j'avais pensé à désactiver l'interruption le temps de calculer la vitesse. Et à vrai dire, je ne sais plus pourquoi je ne l'ai pas fait.
Quoi qu'il en soit, les soucis d'erreurs de mesure énormes du début étaient liés à un bête soucis de tension d'entrée trop basse, à cause d'un pont diviseur foireux. Là ça fonctionne, j'ai toujours des erreurs de temps en temps, mais minimes (de l'ordre de 50à100tr/min) et qui ne gênent en rien le fonctionnement normal, vu que ce n'est pas l'atmega qui fait la régulation de vitesse.

D'ailleurs je viens tout juste de rentrer de l'installation du premier groupe avec cette version du matériel, et quelques correction du soft sur place (parceque forcément, si on part installer un matériel testé, c'est beaucoup moins drôle :blush: ) avec un nuit blanche à la clef, mais ça fonctionne.
En plus, aller travailler à 1850m d'altitude dans la montagne, c'est la classe 8) dommage que je n'ai pas eu le temps d'aller aux champignons =(

La dernière version (qui marche) de la carte et du soft son disponible ici :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tarball

Attention toutefois pour la carte, il faut remplacer deux résistances dans les ponts diviseurs des entrées d'interruption par des zeners à 4,6V, je n'ai pas eu le temps de modifier les fichiers kicad.

la carte V3 en place sur le groupe :

un peu de déboggage sur place après une nuit blanche, parceque sinon c'est pas sport :

pas mal la vue depuis la fenetre du bureau quand même !

et finalement la bête à sa place :

Ahah, j'ai achete une Arduino Uno il y a 2 jours (ma premiere :blush:). Je mettrai des photos du projet sur Facebook la semaine prochaine. Je me suis apercu un peu tard que j'avais besoin d'une carte microcontrolleur pour les vacances, pas le temps d'en construire une. Arduino c'est bien parce qu'il y a beaucoup de code et de shields disponibles. Par contre, quelle perte de temps sans debugguer et programmeur!
Je serais ravis d'aider, envois moi du code a developer ou une carte a construire. En ce moment je suis un peu a cours d'idees pour des projets personnels. Mon nouveau constructeur de cartes les livres en violet ::love::, ca rajoutera de la gaiete dans cette boite grise!

Quel est le but de ce controleur de ce groupe electrogene? Demarrer quand le systeme solaire a epuise toutes ses reserves?
C'est marrant parce qu'au travail on a achete un petit generateur diesel de chez Caterpillar (18kW) pour un des projets de recherche. On le controle par Modbus. On l'a un peu modifie pour verifier l'efficacite, on a rajoute des capteurs de debit d'essence etc. Avant de travailler sur ce projet, je ne savais pas que la plupart des reserves indiennes au nord de Winnipeg utilisent des generateurs diesel. La plupart de ce generateurs marchent en paires, un supporte la charge du reseau, l'autre tourne au ralenti, en standby au cas ou le generateur principal tombe en panne. Aussi, la plupart de ces generateurs tournent a regime constant, ce qui fait que tu peux te retrouver avec trop d'energie si la demande du reseau est trop basse. Donc a present ces generateurs peuvent mieux faire.
Donc on a monte un projet de recherche et on s'amuse avec ce generateur, on fait tourner different scenario, estime lequel conserve le plus de diesel, compare avec des simulation etc.

Meme si le compte tour semble marcher maintenant je pense que c'est dans ton interet d'ajouter une section de code critique quand les variables partagees sont assignees dans le code principal.

Est ce que tu as un port de debuggage ou de telemetrie sur cette carte? Type OBD? Bluetooth ou WIFI ::love::. Il manque un LCD d'une vielle imprimante dans ton design!

Combien de place est ce qu'il te reste sur ce microcontrolleur? Une chose qui me frustre un peu avec l'Arduino que j'ai eu, c'est le manque de flash. C'est facile de s'habituer a des micros avec 512k de flash et 64k de RAM.

bricofoy:
ciel ! bonjour JS, tu t'es perdu sur ce forum dédié aux "microcontrolleurs d'en bas" ? :slight_smile: je serai ravi de profiter de ton expérience en la matière en tout cas :slight_smile: :slight_smile:

merci pour ta réponse. en effet, j'avais pensé à désactiver l'interruption le temps de calculer la vitesse. Et à vrai dire, je ne sais plus pourquoi je ne l'ai pas fait.
Quoi qu'il en soit, les soucis d'erreurs de mesure énormes du début étaient liés à un bête soucis de tension d'entrée trop basse, à cause d'un pont diviseur foireux. Là ça fonctionne, j'ai toujours des erreurs de temps en temps, mais minimes (de l'ordre de 50à100tr/min) et qui ne gênent en rien le fonctionnement normal, vu que ce n'est pas l'atmega qui fait la régulation de vitesse.

D'ailleurs je viens tout juste de rentrer de l'installation du premier groupe avec cette version du matériel, et quelques correction du soft sur place (parceque forcément, si on part installer un matériel testé, c'est beaucoup moins drôle :blush: ) avec un nuit blanche à la clef, mais ça fonctionne.
En plus, aller travailler à 1850m d'altitude dans la montagne, c'est la classe 8) dommage que je n'ai pas eu le temps d'aller aux champignons =(

La dernière version (qui marche) de la carte et du soft son disponible ici :
groupe / Git / Commit [c2ef5b]

Attention toutefois pour la carte, il faut remplacer deux résistances dans les ponts diviseurs des entrées d'interruption par des zeners à 4,6V, je n'ai pas eu le temps de modifier les fichiers kicad.

la carte V3 en place sur le groupe :

un peu de déboggage sur place après une nuit blanche, parceque sinon c'est pas sport :

pas mal la vue depuis la fenetre du bureau quand même !

et finalement la bête à sa place :