Linux Quimper

Bidouille pour enregistrer la date d'un événement sur port USB

Bonjour la compagnie !

Oui une revenante… 12 ans déjà depuis le décès de Siméon, bigre !
En retraite depuis 2014, je « bricole » :

Je suis en train de finaliser une maquette d’optimisation de mon éolienne de compression d’air (stockage 500 litres à 8 bar) pour autonomisation en eau et électricité, ce qui oppose un moment mécanique maximum doublé d’un besoin de démarrage par vent minimum possible (pour l’autonomie). Ces contraintes m’ont amenée à sélectionner un rotor à contre-voiles (dérivées du Savonius) à axe vertical. Ce type de rotor a été étudié en 2007 (oui 12 ans aussi…) dans https://www.researchgate.net/profile/Jean_Luc_Menet/publication/27610691_Prevision_des_performances_aerodynamiques_d%27un_nouveau_type_d%27eolienne_le_rotor_Vinet/links/00b7d537bb69683608000000/Prevision-des-performances-aerodynamiques-dun-nouveau-type-deolienne-le-rotor-Vinet.pdf.

Cette étude, uniquement numérique, nécessite d’être complétée par des tests en soufflerie (que j’ai réalisée avec une vielle hotte du cuisine) notamment pour optimiser l’angle β et la longueur de bras L. Pour mesurer le moment statique au démarrage [M = f(U)] l’axe du rotor comporte une poulie qui enroule un fil nylon qui soulève une masse connue et on note la vitesse du vent qui décolle cette masse du sol.

Mais pour établir la courbe du coefficient de puissance correspondant, j’aurais besoin de mesurer le temps entre le décollage de cette masse du sol et son arrivée en haut, environ 1m20, donc un temps court demandant un chronométrage de précision, la commande date comme indiqué dans le titre le faisant à la nanoseconde.

Les capteurs ne me posent pas de problème, mais comment récupérer un simple changement d’état sur un port USB dans un script shell ? là je sèche. L’interface série des PC du siècle dernier était plus causante !!

Merci de vos lumières :wink:

1 J'aime

Salut !

Je suis justement tombé là-dessus la semaine dernière :

pas certain que ce soit une (bonne) solution mais c’est une première piste !

Humm, une mesure à la nanoseconde près, relevée via un système d’exploitation, j’aurais toujours un doute.
Je ferais plus confiance à un microcontroleur, arduino par exemple, qui ne ferait que ça, et qui communiquerait sa mesure en USB…
PS. L’arduino fait des mesures à la microseconde (un millionnième de seconde) seulement, et encore, avec une résolution de 4 microsecondes.

1 J'aime

Nicole,

Beau travail de recherche documentaire ; la hotte de cuisine m’a fait marrer.
Nanoseconde : normalement, c’est le microprocesseur qui fournit ce temps ? Ta temporisation ne me semble pas mériter d’y consacrer un Arduino.
Tu peux aussi te « contenter » de la microseconde du temps fourni par le système, qui n’est pas temps réel, mais devrait en être proche si tu ne fais que cela à ce moment.

Je suis du même avis de flb, la nano seconde est une unité trop petite pour être mesurée avec un pc, de plus le bus USB pose un gros problème de latente dans ce cas là. Je pense que tu voulais parler de millisecondes ou microseconde ?
Peux tu nous en dire plus sur ton capteur USB ?
François.

Merci pour vos réponses rapides en plein mois d’août :slight_smile:

Mais je constate que, sauf par Michel, ma demande n’a pas été comprise. C’est justement pour éviter de monter un système de chronométrage spécifique, genre Arduino ou autre, pour si peu que j’ai décidé de recourir à l’horloge du processeur. Ce n’est pas moi qui parle de ns mais la commande « date » avec l’option -Ins qui renvoie le temps avec cette précision sous mon Debian 8, et qui peut le plus peut le moins !

Je colle donc ci-dessous le message plus explicite que je viens d’envoyer à la liste linux29, espérant ainsi clarifier mon attente de la part de la communauté :

Bonjour la compagnie !

(In memoriam Henri d’Infini)

Je suis en train de finaliser une maquette d’optimisation de mon
éolienne de compression d’air (stockage 500 litres à 8 bar) pour
autonomisation en eau et électricité, ce qui oppose un moment mécanique maximum doublé d’un besoin de démarrage par vent minimum possible pour un maximum d’autonomie.

Ces contraintes m’ont amenée à sélectionner un rotor à contre-voiles (dérivées du Savonius) à axe vertical ainsi qu’étudié par Memet & al en 2007

https://www.researchgate.net/profile/Jean_Luc_Menet/publication/27610691_Prevision_des_performances_aerodynamiques_d’un_nouveau_type_d’eolienne_le_rotor_Vinet/links/00b7d537bb69683608000000/Prevision-des-performances-aerodynamiques-dun-nouveau-type-deolienne-le-rotor-Vinet.pdf.

Cette étude, uniquement numérique, nécessite d’être complétée par des tests dynamiques en soufflerie (que j’ai réalisée à partir d’une vielle hotte de cuisine, don de Yves, merci à lui) notamment pour optimiser l’angle ß et le rapport L/d.

Pour mesurer le moment statique au démarrage, l’axe du rotor comporte une bobine qui enroule un fil nylon qui soulève une masse m+ d’un côté et le déroule de l’autre côté en abaissant une contre-masse m-. Ces masses sont deux bocaux identiques; m+ est rempli au départ de 400 ml d’eau distillée (soit 400g) et on met en route la soufflerie à vitesse U de vent voulue, puis on verse lentement de l’eau dans m- jusqu’au décollage de m+ du sol (démarrage du rotor). La différence 400 ml de départ moins l’eau ajoutée à m- donne la masse soulevée qu’il suffit de multiplier par le rayon r de la poulie pour connaître le moment statique du rotor étudié et donc le moment maxi que le compresseur (une Qurbine) pourra lui opposer pour démarrer à cette vitesse de vent.

Comme disait le défenestré du 40ème étage arrivé au 1er, « jusqu’ici tout va bien » :slight_smile:

Mais pour connaître la dynamique correspondante {Cp = f(λ)}, j’aimerais bien mesurer le temps entre le décollage du sol de m+ et l’arrivée au sol de m- (environ 1m20 de hauteur, soit 1200/32/π ≈ 12 tours de rotor) donc un temps court demandant un chronométrage de précision.

Comme je n’ai besoin que de 9 mesures (3 angles ß × 3 ratios L/d) je n’ai pas envie de bricoler un dispositif spécial de chronométrage genre Arduino et que la commande
$ date -Ins
qui renvoie :
2019-08-06T18:38:29,878821224+0200
c’est à dire à la nanoseconde, ce qui est 1M fois ce dont j’ai besoin.
J’ai juste besoin de récupérer dans deux variables d’un script shell
très simple le résultat de la commande « date -Ins » au moment où m+ quitte le sol et celui où m- le touche, le signal transmis sur les broches D+ et D- respectivement d’une prise USB. Mais j’ignore quel code permettrait de lire un changement d’état sur ces deux entrées.

Merci de vos lumières :wink:

Bonjour @nicole,

Ta demande, formulée simplement, aurait peut-être été mieux comprise (« comment obtenir la différence en millisecondes entre deux instants » ?).

#!/bin/bash

date_debut=`date +%s%3N`

sleep 3

date_fin=`date +%s%3N`

diff_date=$((date_fin - date_debut))

echo "$diff_date"

Ce script retourne 3003 chez moi – un écart de 3ms, donc, est-il tolérable dans ton cas ?

Bonjour Vincent,

Euh, je ne crois pas qu’il s’agisse de simplicité de formulation mais de sens de la demande : Je l’avais reformulée aussi simplement dans mon dernier post :

quel code permettrait de lire un changement d’état sur ces deux entrées (broches D+ et D-)

Ce qui n’a rien à voir, conviens-en, avec comment faire une soustraction dans un script shell ?

Pour surveiller les évènements sur un port USB, je t’ai déjà donné une piste dans un message précédent.
Pour lire un « changement d’état » sur un « port USB », il faudrait savoir quel « objet » est supposé te fournir un état (une sonde ? laquelle ?), quel driver communique avec ce périphérique et comment.

Il faudra ensuite utiliser l’API adéquate pour demander au driver les informations auxquelles tu souhaites accéder.

Sans informations claires sur ton problème et ta configuration, il nous sera difficile de te filer un coup de main.

+1