Expériences d'électronique sous linux : ut61 et usbrelay

  • Auteur de la discussion myf
  • Date de début
M

myf

Apprenti
Ces articles décrivent pas à pas la mise en place de l'enregistrement de mesures (de tension) et de commandes de relais par un pc sous linux.

Le multimètre employé est un ut-61 d'uni-trend, certains (pas tous) de ces modèles ont la possibilité d'ajouter une interface pour pc, série ou usb. Le cable employé est ici une liaison usb de référence ut-d04 à commander séparément. L'ensemble coûte autour de 60eur = 50eur + 10eur, par exemple sur labay. Ces expériences sont décrites avec le modèle ut-61e qui effectue 2 mesures par seconde à 4.5 décimales et 22000pts.

Le logiciel d'acquisition des données, pour ce contrôleur est sigrok, il reçoit les données par le cable du contrôleur et les transmet sur la "sortie standard" de la machine, c'est d'abord l'affichage sur simple terminal pour comprendre le fonctionnement de l'ensemble. Ce logiciel libre décode un grand nombre de multimètres et sort les données de façon a-priori homogène. Son site internet est http://sigrok.org/. La liste des multimètres qu'il décode est http://sigrok.org/wiki/Supported_hardware#Multimeters.

La carte à 8 relais commandées par le pc est un modèle classique en vente sur aliexpress.com ou ebay.fr. Celui employé a un circuit imprimé en rouge et demande un cable usb d'imprimante pour le relier au PC : d'un côté une prise carrée, et de l'autre la prise usb-1 ou usb-2 classique. Chacun de ces relais est RT avec 3 contacts électriques : commun, repos et travail.

Sur une machine sous linux-ubuntu, Le logiciel de commande de cette carte est usbrelay.

Le fil de discussion https://www.usinages.com/threads/capacite-de-piles-et-daccumulateurs-rectangulaires-de-9v.127600/ montre une photo de l'ensemble et décrit les résultats de l'expérience, cet article détaille au contraire la méthode employée pour obtenir ces résultats.

Installation et initialisation des logiciels

Ces deux logiciels font partie de la distribution ubuntu standard. Ils s'installent directement sur la machine par

sudo apt-get install sigrok
sudo apt-get install usbrelay


On peut vérifier que ces programmes sont installés en lançant la commande sigrok-cli et usbrelay dans un terminal... mais il reste à passer les bons paramètres de commande !

L'interface entre le pc et le contrôleur demande une initialisation particulière qui n'est pas effectuée par sigrok-cli. J'en décris pas-à-pas une méthode. En premier brancher le cable usb ut-d04 du controleur sur le pc, la commande "lsusb" renvoie alors la liste de tous les périphériques usb avec ce nouveau cable :

~$ lsusb
...
Bus 006 Device 003: ID 1a86:e008 QinHeng Electronics HID-based serial adapater
...


Les numéros Bus 006 et Device 003 dépendent du pc, "ID 1a86:e008" est la signature du cable ut-d04 branché.

Le programme de configuration du câble est écrit ici dans le langage Python et utilise une bibliothèque pour la prise usb. D'autres méthodes sont décrites sur internet... Mais cette méthode marche bien sur mon pc.

Si le langage python3 n'est pas installé sur la machine, la commande ubuntu ci-dessous installe et configure l'ensemble.

sudo apt-get install python3 python3-usb

Le programme ci-dessous d'une vingtaine de lignes configure ce cable usb :
Le plus simple est de couper/coller ces lignes de "#!/usr..." jusqu'à "...exit(0)" dans un fichier, par exemple init-uni-t.py
Ensuite de le rendre exécutable par chmod a+x init-uni-t.py, puis de le lancer par ./init-uni-t.py

~$ ./init-uni-t.py
port usb : 006/003


La dernière ligne affichée reconnaît l'interface branchée. La boucle "for" du programme permet de configurer tous ces cables usb branchés à ces multimètres ut-61. Le texte "aucune interface uni-t" indique que le pc ne reconnaît pas le cable branché, il reste à trouver pourquoi...

Cette commande est à relancer chaque fois que ce cable est rebranché sur le pc. On peut le lancer plusieurs fois de suite sans risque.

Remarquons que l'autre extrémité du cable ne comporte aucun contact électrique. Le contrôleur envoie ses mesures à l'interface par une diode-électro-luminescente LED. L'isolation électrique du PC par rapport au multimètre est complète.


Selon les modèles, il faut alors passer le multimètre en mode mesure, c'est par défaut le cas du ut61-e, mais pas des autres modèles. La vérification se fait sur l'écran du multimètre : il apparaît alors le pictogramme d'un écran d'ordinateur sur l'affichage lcd du contrôleur.

Enfin, cette première ligne "sigrok-cli ...." avec tous ses paramètres envoie les mesures faites sur le PC. La configuration la plus difficile est terminée!

~$ sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous
P1: 0.0 mV DC AUTO
P1: 0.0 mV DC AUTO
P1: 0.0 mV DC AUTO
...


Pour la petite histoire un couper/coller malencontreux m'a fait mettre une fois ut61c à la place de ut61e dans la ligne ci-dessus... cela empêche la communication alors que la LED du mutimètre éclaire faiblement en cadence... Les autres numéros sont ceux de l'interface obtenus par lsusb.

J'espère avoir décrit toutes les étapes, faites il y a quelques mois, pour obtenir ces mesures sous ubuntu. N'hésitez pas à commenter et questionner !

La commande de la carte à relais est beaucoup plus simple.

Il faut d'abord la brancher sur un adaptateur 12V, n'importe lequel ou presque convient. Remarquons sur la photo de l'autre fil de discussion le condensateur électrolytique que j'ai branché en parallèle sur l'alimentation, car l'adaptateur mural employé est une récupération "très très bas de gamme"...

Ensuite la commande est ~$ usbrelay HW553_0x = [0|1]x=[1|2|3|4|5|6|7|8], par exemple
usbrelay HW554_8=1 ou usbrelay HW554_8=0. Sur ma carte une diode rouge s'allume quand le relais est activé.

C'est tout pour aujourd'hui ! Le prochain article portera plus sur l'enregistrement des mesures.

édition du 05/01/2020 - reprise de l'indentation du code Python
 
Dernière édition:
M

myf

Apprenti
...Suite du message précédent... qui explique comment connecter le contrôleur et la machine sous ubuntu.

Construction du fichier des données utiles

La capacité des piles et accumulateurs s'obtient à partir du temps et de l'intensité circulant dans le circuit. La fameuse loi d'Ohm U=R.I permet de retrouver l'intensité à partir de la tension aux bornes de la résistance de décharge.

Le plus pratique consiste alors à garder dans un seul fichier la valeur de la résistance de décharge, les mesures des tensions au fil du temps et les instants de déclanchement du relais, en début et en fin d'expérience.

Le programme sigrok-cli envoie une ligne de mesure sur la sortie standard, à priori l'écran :

sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous

La commande de redirection tee unFichier.txt permet à la fois d'enregistrer ces données dans un fichier et laisser s'afficher en même temps. Ainsi la commande précédente est transformée en

sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous | tee -a mesure.txt

L'appui sur n'importe quelle touche du terminal interrompt trop brutalement à mon goût la lecture des données par sigrok.
La redirection du périphérique vide (qui n'envoie jamais rien) vers sigrok évite ces interruptions intempestives.

cat /dev/null | sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous | tee -a mesures.txt


L'option -a de la commande tee ajoute les mesures à l'éventuel fichier de même nom déjà existant. Sans cette option, une nouvelle commande efface l'ancien fichier, et donc tout le compte-rendu de la précédente expérience.

Il est plus pratique de mettre cette longue commande dans un fichier d'une seule ligne pour éviter les fautes de frappe, d'autant plus qu'il reste à enregistrer la date des mesures car le multimètre envoie uniquement les tensions mesurées.

Pour cela la commande suivante complète chaque mesure effectuée, sur une ligne, par un timbre-date. Les lignes reçues sont modifiées ainsi :

P1: 8.739 V DC AUTO
P1: 8.729 V DC AUTO
P1: 8.729 V DC AUTO

11/13/19-10:06:39 , 1573635999.339641892 , P1: 8.739 V DC AUTO
11/13/19-10:06:39 , 1573635999.838569054 , P1: 8.729 V DC AUTO
11/13/19-10:06:40 , 1573636000.338562793 , P1: 8.729 V DC AUTO


Il suffit alors d'écrire un petit script timbreDate qui ajoute en tête de chaque ligne la date, ici sous le format surprenant mois/jour/année, et ensuite sous le format numérique des secondes et fraction de seconde.

cat /dev/null | sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous \
| ./timbreDate "+%D-%X , %s.%N" " , " | tee -a mesures.txt


Cette ligne est extraite du fichier de commande, et le caractère "\" en fin de première ligne continue la commande sur la seconde.

Un fichier exécutable timbreDate écrit dans l'interpréteur de commande du système d'exploitation fait ce travail :
Je n'assure pas l'élégance de ce code, il a été mis au point par couper/coller de fonctions semblables dans lesquelles je ne maitrise pas toutes les subtilités.

#! /bin/bash
export IFS=$'\n'
while read line || [[ -n "$line" ]]; do
echo `date $1`$2$line
done

La boucle tant-que / while lit la ligne en cours tant qu'elle n'est pas vide avec le test entre crochets [[...]]. Les apostrophes ` (altGr-7) évaluent la commande date avec ses arguments, ici date "+%D-%X , %s.%N" et affiche à la suite la ligne initiale.

Ces paramètres sont séparés par des virgules pour que les programmes de traitement des données lisent plus simplement chaque champ, les dates sont mises à la fois sous une forme de lecture "humaine" pour que l'utilisateur comprenne rapidement de quand datent ces mesures, et sous une forme numérique adapté au traitement informatique, par exemple d'écart entre deux temps est une simple soustraction de nombres flottants.


Dans le même genre ce filtre enregistre une ligne sur N par une commande de la forme ... | unSurN 20

#! /bin/bash
((i = 0))
IFS=$'\r'
while read line ; do
((i++))
if [[ i -eq $1 ]] ; then ((i = 0))
echo $line
fi
done


Le prochain article décrira le script bash principal : la lecture et enregistrement des données et fin prévue ou imprévue de l'expérience.
 
M

myf

Apprenti
Ce message termine cette série de commentaires en décrivant le script principal en bash pour obtenir un fichier complet de mesure. Les graphes de l'article https://www.usinages.com/threads/capacite-de-piles-et-daccumulateurs-rectangulaires-de-9v.127600/ ont été obtenus uniquement à partir de ces fichiers de mesure. En voici un exemple :

# résistance = 222.7 ohm
# le test d'arrêt : "val>=6.5"
# foxter
#
12/12/19-08:38:04 , 1576136284.856720269 , Début des mesures
12/12/19-08:38:05 , 1576136285.162531919 , 10.012 , P1: 10.012 V DC AUTO
12/12/19-08:38:05 , 1576136285.661007618 , 10.004 , P1: 10.004 V DC AUTO
12/12/19-08:38:06 , 1576136286.161792547 , 10.001 , P1: 10.001 V DC AUTO
12/12/19-08:38:06 , 1576136286.661017106 , 9.998 , P1: 9.998 V DC AUTO
12/12/19-08:38:07 , 1576136287.160913558 , 9.997 , P1: 9.997 V DC AUTO
12/12/19-08:38:07 , 1576136287.661944823 , 9.997 , P1: 9.997 V DC AUTO
12/12/19-08:38:08 , 1576136288.160989536 , 9.994 , P1: 9.994 V DC AUTO
12/12/19-08:38:08 , 1576136288.661080431 , 9.994 , P1: 9.994 V DC AUTO
...
12/12/19-13:57:28 , 1576155448.943834072 , 6.691 , P1: 6.691 V DC AUTO
12/12/19-13:57:29 , 1576155449.443707988 , 6.665 , P1: 6.665 V DC AUTO
12/12/19-13:57:29 , 1576155449.944821343 , 6.639 , P1: 6.639 V DC AUTO
12/12/19-13:57:30 , 1576155450.443841285 , 6.610 , P1: 6.610 V DC AUTO
12/12/19-13:57:30 , 1576155450.944821170 , 6.581 , P1: 6.581 V DC AUTO
12/12/19-13:57:31 , 1576155451.443852635 , 6.550 , P1: 6.550 V DC AUTO
12/12/19-13:57:31 , 1576155451.943510735 , 6.519 , P1: 6.519 V DC AUTO
12/12/19-13:57:32 , 1576155452.443983557 , 6.488 , P1: 6.488 V DC AUTO
12/12/19-13:57:32 , 1576155452.943691734 , 6.456 , P1: 6.456 V DC AUTO
12/12/19-13:57:33 , 1576155453.447202600 , 6.425 , P1: 6.425 V DC AUTO
12/12/19-13:57:33 , 1576155453.949048611 , 6.393 , P1: 6.393 V DC AUTO
12/12/19-13:57:35 , 1576155455.713021088 , Fin de la décharge
12/12/19-13:57:35 , 1576155455.718683356 , Fin des mesures


Nous remarquons la partie entête pour laquelle les lignes commencent par un caractère #.
En outre, les différents champs d'une ligne de mesure sont séparés par des virgules. Cela simplifie le traitement ensuite par la commande python ligne.split(",") qui découpe la chaîne de caractère ligne en la liste des termes séparés par une vrigule.

Cette entête précise les données et commentaires sur l'expérience menée.
Notons aussi que ce fichier décrit les autres actions effectuées : annoncer dans ce fichier mesure.txt le début de la décharge par le relais, enfin les deux dernières lignes décrivent l'ouverture du relais à la fin de ces mesures, et la fin du processus de mesure.

Boucle principale

Le programme principal, écrit en bash, commence par commenter ce programme. En effet il est très désagréable de reprendre quelques mois plus tard un programme déjà fait dont on ne se souvient plus exactement du bon fonctionnement. Y inclure un exemple facilite l'adaptation de ce programme.

## syntaxe dechargeBatterie xxx test "ligne de commentaires"
## pour faire une entête de fichier
# résistance = xxx ohm, test est la condition Python sur la fin des mesures
# ligne de commentaires
if [ ! $# -eq 3 ]
then
echo 'la syntaxe est dechargeBatterie xxx test "ligne de commentaires"'
echo 'où xxx est la valeur de la résistance (en ohm)'
echo 'et test est la condition qui termine les mesures en fonction de val'
echo 'par exemple : \"val\>6.4\" '
exit
fi
echo $2


Les communications entre les deux parties principales de ce script se font, de façon habituelle, par des "fichiers-sentinelles".
La suite du programme vérifie que la mesure commence bien, efface ces fichiers sentinelles, et archive éventuellement le fichier des précédentes mesures.

usbrelay HW554_8=0
if test -f enCours
then
rm enCours.lock
fi
if test -f finDeSession.lock
then
rm finDeSession.lock
fi
if test -f mesures.txt
then
mv mesures.txt archives-mesures.$(date "+%F.%X").txt
fi
sleep 1


La suite déclenche le début de l'expérience, il est nécessaire d'ajouter quelques temporisations pour éviter une première mesure incohérente :

usbrelay HW554_8=1
sleep 0.5 # à laisser quand même car première mesure complètement hors propos
# même si la fin des mesures prend en compte plusieurs tests de suites
# pour éviter une mesure transitoire
echo \# résistance = $1 ohm | tee mesures.txt
echo \# le test d\'arrêt : \"$2\" | tee -a mesures.txt
echo \# $3 | tee -a mesures.txt
echo \# | tee -a mesures.txt
echo "Début des mesures"|./timbreDate "+%D-%X , %s.%N" " , "|tee -a mesures.txt
touch enCours.lock


La première partie des deux parties de la boucle principale vient ensuite. Elle reprend le filtre de sigrok-cli détaillé dans le commentaire précédent. Le programme python aTester.py contrôle la tension mesurée et crée éventuellement un fichier sentinelle pour terminer l'expérience. Le caractère & en fin de ligne de commande (qui est ici sur 3 lignes de texte) lance cette commande en tâche de fond. L'enregistrement dans le fichier s'effectue bien, et (presque) en même temps le programme évalue la suite.
En plus le programme aTester.py termine l'expérience quand le test d'arrêt est bien vérifié plusieurs fois de suite, pour éviter qu'une seule mesure erronée n'interrompe une expérience de plusieurs heures.

cat /dev/null | sigrok-cli --driver=uni-t-ut61e:conn=1a86.e008 --continuous \
| ./aTester.py "P1: (val)V DC AUTO" $2 \
| ./timbreDate "+%D-%X , %s.%N" " , " |tee -a mesures.txt &


La seconde partie est une boucle qui attend de voir le fichier sentinelle pour terminer ces mesures :


test -f finDeSession.lock
res=\"$?\"
while test $res == \"1\"
do
sleep 3
test -f finDeSession.lock ; res=\"$?\"
if test $res == \"1\"
then
test -z $( find mesures.txt -maxdepth 0 -mmin -2 ) ; res=\"$?\"
fi
done


Remarquons que ce programme se termine aussi si le fichier mesure.txt n'est pas modifié depuis plus de 2 minutes, la temporisation sleep 3 (de 3 secondes) évite que le contrôle de la bonne marche de l'expérience accapare toutes les ressources de la machine.

usbrelay HW554_8=0
echo "Fin de la décharge" | ./timbreDate "+%D-%X , %s.%N" " , "\
| tee -a mesures.txt

if test -f enCours
then
rm enCours.lock
fi
if test -f finDeSession.lock
then
rm finDeSession.lock
fi

echo "Fin des mesures" | ./timbreDate "+%D-%X , %s.%N" " , " |tee -a mesures.txt

kill $$


Enfin, ce code termine proprement l'écriture complète du fichier mesure.txt. Ces deux dernières lignes permettent a posteriori de vérifier que l'expérience s'est passée convenablement jusqu'à la fin. La dernière commande "kill $$" termine aussi les mesures lancées en tâche de fond.

Par ailleurs lors de la mise au point de ce programme j'ai par ailleurs utilisé ce script bash resetMesure pour interrompre (plus brutalement) une série de mesure qui continuait malgré tout de remplir le fichier mesure.txt. Elle teste si sigrok est encore dans la liste des processus de la machine, par ps awx|grep sigrok|grep cli|cut -b-6 et si oui, termine ce programme par kill $res. Les autres commandes effacent les fichiers sentinelles.

usbrelay HW554_8=0
echo "Fin de la décharge (par resetMesure)" \
| ./timbreDate "+%D-%X , %s.%N" " , " | tee -a mesures.txt

set res=$( ps awx | grep sigrok|grep cli|cut -b-6)
if test ! -z "$res"
then
kill $res
fi
if test -f enCours
then
rm enCours.lock
fi
if test -f finDeSession.lock
then
rm finDeSession.lock
fi


Je ne suis pas du tout certain que le code bash soit très propre : Il a été mis au point par couper/coller pris sur internet, en tout cas il marche, mais il doit y avoir des commandes plus élégantes...

Ces trois articles ont eu pour but de montrer comment s'assemblent sous linux les différents programmes et langages pour effectuer des mesures et commander des relais. Je me suis efforcé de mettre en avant les problèmes concrets de configuration et de bon fonctionnement rencontrés, et la structure générale de contrôle de l'ensemble. J'espère avoir intéressé l'un ou l'autre dans la description de ces principales étapes : passer du "matériel sur la table" au "fichiers de résultats".

En tout cas, n'hésiter pas à discuter, reprendre certaines de ces idées, en proposer d'autres...

Bien cordialement à tous.

F.
 
R

ramses76

Compagnon
merci pour ce partage très détaillé...
j'ai un mini PC qui à l'origine était sous Linux mais que j'ai converti à Windows XP depuis pas mal de temps. Il ne me servait à rien jusqu'au jour où j'ai installé un petit programme Python qui m'envoyait les changements d'adresse IP de ma box dans un email lorsque j'étais en vacances pour me passer d'un service DNS soi-disant gratuit.
Ton application ouvre d'autres horizons avec du matériel et du logiciel très bon marché. Je suppose que le module Python qui gère les ports usb est disponible dans la version Windows.
Je ne vois pas à quoi ressemblent physiquement ces relais qu'on peut commander et pour quelles applications, par exemple.
 
M

myf

Apprenti
Bonsoir,

Merci Ramses76 ! Ton message me prouve que ces explications ont au moins intéressé un lecteur.

La carte-relais (les 8 relais sont bleus, la carte du circuit imprimé est rouge) est sur la partie inférieure de la première photo dans ce fil de discussion https://www.usinages.com/threads/capacite-de-piles-et-daccumulateurs-rectangulaires-de-9v.127600/

Une recherche "relay usb" sur le site ebay.fr ou aliexpress.com donne quelques références :

https://www.ebay.fr/sch/i.html?_from=R40&_sacat=0&_nkw=usb+relay&LH_PrefLoc=2&_sop=12
http://fr.aliexpress.com/wholesale?catId=0&SearchText=usb+relay

Parmi les différents modèles j'ai privilégié ceux avec une grosse prise usb carrée, et pas une micro-usb de téléphone.
Ces cartes électroniques sont rouges.
J'ai acheté une carte à 8 relais car "qui peut le plus peut le moins" mais une alimentation de 12V est alors nécessaire.
Les cartes avec 1 ou 2 relais semblent être alimentés par le port usb directement. Cela fait un fil de moins. Les relais sont marqués 10A-220VAC-125VAC et 10A-30V-24V.J'ignore les subtilités des deux tensions indiquées. Si la différence entre le marquage et la réalité sont dans le même rapport que pour les accumulateurs palo il reste à diviser ces caractéristiques par 2 ou 3...

Sur le circuit imprimé, les pistes du relais sont plus larges 2mm ou 2.5mm, mais ne sont pas étamés.
Ces relais commutent simplement des "petites charges" et une commande de prise électrique du secteur devrait à mon avis passer par un relais de puissance à monter sur rail din.

Je ne pense pas qu'il y ait différents modèles, et le premier que j'ai acheté a marché du premier coup avec le programme usbrelay sur la distribution ubuntu.

Le programme sigrok doit d'abord avoir été écrit pour linux, et d'après le site sigrok.org devrait tourner sous windows.
Le programme de configuration du cable usb<->IR entre le PC et le multimètre n'est pas pris en compte par sigrok et doit être réinitialisé avant.

Avant tout achat, je te conseillerai de trouver comment installer la bibliothèque usb.core de python3, pour avoir un fichier .../...packages.../usb/core.py avec la fonction find. Pour cela le programme pip inclus dans python3 gère le chargement des bibliothèques python. Cette bibliothèque python est peut-être de nom pyusb ou openusb (j'en rencontré les deux quand j'ai fait marcher ce cable). Elle a été refondue il y a un an ou deux, et maintenant le "find" du port usb est dans core.py.
Une fois que la commande python "import usb.core" fonctionne et que le programme python t'affiche "pas de cable connecté" je pense que le plus dur est fait.

J'ai cherché à faire plutôt plein de "petits programmes" qu'un "gros programme" et donc j'utilise les redirections, les processus en tâche de fond, les fichiers-sentinelles. Personnellement, je trouve que dans ce cas une machine sous linux sera plus facile à maîtriser.

Bien cordialement.

F.
 
L

lion10

Compagnon
Bonsoir

Dans votre configuration vous avez réalisé tout cela sous linux avec une maîtrise de Python et des scripts bash de ce que je comprends, j'espère n'avoir rien oublié.
Pour une configuration windows comment verriez vous les choses ?
Faudrait il passer obligatoirement :sad: par un émulateur linux sur windows si ça existe ?
La carte relais Usb est commandée que ce soit sous linux ou windows par un programme et vous en extrayez l'instant de commande des charges résistives ou plutôt l'instant de la mesure le relais met en parallèle le multimètre et la pile sous test.
Ici ça ne doit pas être gênant puisque le phénomène est lent mais ensuite il y a un écart "dt" entre l'instant de fermeture du relais et l'instant auquel le multimètre fait sa mesure et je pense que ce dt n'est pas constant puisque vous n'avez pas avec ce multimètre de table la possibilité de synchroniser l'instant de mesure je pense. Il vous faut d'ailleurs sans doute filtrer les résultats si vous avez par exemple plusieurs résultats de mesure issus du multimètre entre 2 commandes des relais.

Utilisez vous un isolateur de bus usb dans votre configuration, même si ce n'est pas forcément nécessaire ici si vous êtes isolé du secteur ?
cdlt lion10
 
M

myf

Apprenti
Bonjour Lion10,

Vous résumez parfaitement ce que j'ai fait !

Je suis un grand ignorant de windows, l'interpréteur de commande de windows devrait pouvoir lancer des tâches de fond, faire des redirections, créer rapidement des fichiers, etc.

J'ai choisi de développer cette méthode avec "plein de petits programmes" qui causent entre eux par l'intermédiaire de l'interpréteur de commande minimal sh (je ne dois pas utiliser ici de commandes spécifique à bash). Si d'une façon ou d'une autre l'interpréteur de commande de windows possède à peu près toutes les possibilités de sh, l'adaptation de ces mesures devrait être possible.

J'ai cependant le préjugé qu'il est plus facile de faire "un gros programme" avec windows que plein de petits qui communiquent entre eux. Dans ce cas il faudrait plutôt partir sur l'idée de tout écrire en python3 (ou un autre langage) pour éviter le goulot d'étranglement de l'interpréteur de commandes du système.

L'autre souci sera de "lire le port usb" du multimètre uni-t. Pour cela sigrok est bien pratique, mais il devrait exister sur internet quelques programmes (en C ou autre) qui traduisent les données lues. Enfin, le reset du cable usb-ir du multimètre devrait rester nécessaire. Le langage python étant pas mal normalisé, cela ne devrait pas être insurmontable à adapter. Je vous avoue que je n'ai jamais testé le CD windows vendu avec le multimètre pour faire ses mesures depuis windows. Sigrok suffit à mon bonheur...

Je n'ai pas une maitrise suffisante des émulateurs windows/linux même si un de mes fils a mis une machine virtuelle linux dans une machine virtuelle windows à l'interieur d'une vraie machine linux il y a 5 ou 6 ans... D'après mes souvenirs ça marchait quelques minutes... Ici la stabilité nécessaire ici est de 48h ou 72h sans bogue. Mon absence d'aisance sur les émulateurs m'éviterait de risquer des problèmes de ce côté là.

Le voltmètre reste branché sur la résistance, et le relais fait commencer la décharge de l'accumulateur.

Le matériel employé ici à coût minimal n'est pas conçu pour avoir un temps de réponse garanti. Il est même impossible de demander à la carte des relais les états de ceux-ci. Mais ce petit programme permet d'avoir une idée du temps de réponse, inférieur à 0.1s :

~$ for i in 1 2 3 4 ; do
date +%s.%N ; (usbrelay HW554_8=1 1&>2 > /dev/null) ;
date +%s.%N ; (usbrelay HW554_8=0 1&>2 > /dev/null) ;
date +%s.%N ;
done
1578257794.863400445
1578257794.939107331
1578257795.013225448 # dernier date de la 1ere boucle
1578257795.015302557 # premier date de la 2eme boucle en 0.03s
1578257795.089335135
1578257795.171077110 # fin de la 2eme boucle
1578257795.173013696
1578257795.244610595
1578257795.319057407
1578257795.322723008 # début de la 4eme boucle
1578257795.396734843
1578257795.468967726


La diode de controle "relais collé" sur la carte clignote bien très vite. Je suis conscient que cette vérification est bien indirecte et incomplète...

De même le multimètre envoie "à jet continue" 2 mesures par seconde environ. Il n'y a pas de possibilité de donner un "top-départ".
Les "sleep 1" et "sleep 0.5" ont été mis au début des mesures pour que la première mesure soit réaliste, ni OverLoad de dépassement de capacité à cause du réglage automatique des calibres ni un curieux 2.3V sous estimé de la première mesure incomplète de cette tension (entre 9V et 6V)

Il est possible de mettre plusieurs multimètres sur le PC, on obtient alors l'équivalent d'un oscilloscope avec 2 échantillonnages par seconde (2S/s) et par canal, à comparer au 1 GS/s des oscilloscopes à 400eur (pour ses 4 canaux).

Enfin, même si le multimètre ut-61 n'est pas réputé pour être aussi bien isolé et solide qu'un fluke, le multimètre a résisté un branchement en mode ampéremètre dans une prise du secteur. Le prix à payer a uniquement été le fusible de 10A du controleur à changer, en plus d'une grande frayeur pour mon fils et du disjoncteur familiale 30A qui a sauté. Le cable du port usb est complètement isolé électriquement du multimètre : le corps du multimêtre émet une faible lumière qui est détectée par ce cable de liaison, il n'y a aucun contacts électrique entre les 2.

Recevant en gros deux mesures par seconde, je calcule ensuite la capacité par une approximation de l'intégrale par la méthode des trapèzes : la somme sur toutes les mesures de (U(i-1)+U(i))/2/R*(t(i)-t(i-1)).
Le test précédent justifie (en gros) que le timbreDate de chaque ligne est précise à 0.03s. Dans ce calcul de capacité, c'est-à-dire d'intégrale, les erreurs se compensent... Par ailleurs l'écriture dans les fichiers n'a jamais créé des demi-lignes incohérentes d'écriture lorsque deux lignes devraient s'écrire en même temps. La méthode employée ici ne tient pas compte de la décharge des premières 0.5s, soit pour une résistance de 1kohm : 10e-3 (10mA) x 0.5 / 3600 s par h = 1.4 e-6 Ah négligeable par rapport à 0.2 Ah, de même pour une décharge dans une résistance de 100ohm : 1.4e-5 est négligeable par rapport à 0.2. Vous avez effectivement raison que cette méthode est tout a fait inadaptée pour des "top-départ" plus précis que la seconde.

Il y a plus de 3 millions de (lignes de) mesures et je n'ai détecté aucun problème dans les calculs de capacité qui lisent ligne à ligne tous ces fichiers. Je pense que cela est du au "tampon des fichiers" de l'ordre de 4koctets et bien plus long qu'une ligne. Avec une mauvaise utilisation du print de Python ce cas peut effectivement se produire : de mémoire il faut jouer avec les paramètres flush et end.

$ cat mesures-*.txt | wc
3344730 36789702 267758691

Et voila la boucle principale du calcul de la capacité en Python :


J'espère que cela répond en partie à vos questions...
Cordiales salutations.
 
A

albatros_del_sur

Compagnon
Bonsoir,
Je n'ai pas eu le temps de décortiquer tout ce que tu nous a mis, mais je suis intéressé, je dispose d'un Mac avec Xcode, j'aimerai bien voir si je peux transposer. J'ai aussi un "vieux" portable que j'ai récupéré en panne. Une fois remplacé le DD je n'ai pas voulu m'embêter avec Windows je l'ai rechargé avec Kubutu, donc tout à fait compatible avec Ubuntu.
Je vais voir, car j'avais dans l'idée de faire les mesures à partir d'un Arduino.
C'est juste une question de temps.
 
M

myf

Apprenti
Bonsoir Albatros del sur,

Je pense que le plus simple est d'abord de tester sur le portable, pour comprendre comment l'ensemble marche en adaptant très peu ce que j'ai décrit, puis d'adapter et de tester sur le Mac...

Par ailleurs j'ai été émerveillé par la construction de A à Z du bateau pour tes petits enfants.
Je te remercie d'avoir pris le temps de rédigé ces messages, posté ces photos, etc.

Bonne soirée !

F.
 
A

albatros_del_sur

Compagnon
Bonsoir
Merci pour les compliments. J’aime bien partager les idées. Mon problème majeur c’est que j’ai plus d’idées que de temps pour tout réaliser. Mais quand je termine un projet je suis content.
 
D

dridiy21

Nouveau
Bonjour, je vous remercie pour ce projet très interessant et bien détaillé. Moi, je souhaite lire la valeur disposée par le multimètre à travers une communication série/usb. Est ce que la carte à 8 relais est nécessaire pour la récuppération des mesures ? Merci en avance !
 

Sujets similaires

G
Réponses
5
Affichages
4 810
mvt
M
Réponses
2
Affichages
781
zingilingiling
zingilingiling
A
Réponses
3
Affichages
1 522
titi t16
titi t16
vax
Réponses
11
Affichages
11 940
vax
B
Réponses
3
Affichages
1 012
dh42
Otatiaro
Réponses
5
Affichages
462
ctoutmoi
ctoutmoi
M
Réponses
6
Affichages
1 055
MitchCanon
M
Haut