Nos programmes Arduino

Modérateurs: Balajol, monteric, ramses

Messagepar Mogo Bono » Dim Mar 17, 2013 22:07 pm

Bonjour à tous

Comme beaucoup de gens je lit et je parcourt le forum souvent sans y répondre mais, j'adore tout ces liens, ces retours d'expériences
Félicitations à vous, continuez vous ne faites que du bien, le monde est si vaste, le monde de l'embarqué aussi ....

Continuez

Merci pour tout


Miguel
Avatar de l’utilisateur
Mogo Bono
Stagiaire Solaire
Stagiaire Solaire
 
Messages: 72
Enregistré le: Jeu Juin 09, 2011 18:17 pm
Localisation: Essé sud de Rennes 35

Messagepar Terran » Lun Mar 18, 2013 0:46 am

[quote="ezza"]
d'accord ma 1er brique avec le Pid (pour des boucles rapide) j'ai mis la barre trop haut (pourtant utile pour réduire l'écart mesure/consigne, vais le supprimer) :-x
et pour l'apprentissage de l'Arduino, c pas le but du Post de Fidèle Castor, mon-club-elec.fr est la pour.

je vous laisse, vais m'amusez avec le Pid ....... a une époque je me suis tellement pris la tête au boulot avec ( traitement d'air / production vapeur / ecs ) ........ vais me défoulé :grin:

les Briques en laisse tombé ???? ..... ça casse pas des briques mon idée :-o

A+
[/quote]

Non, Ezza, laisse pas tomber.
Je n'en suis pas au PID, mais quand j'y arriverai je serai content de le trouver là. Et puis, d'autres sont peut-être déjà à ce stade.
Pour l'instant je voudrais mesurer une fréquence (Sortie d'un débitmètre plage 0.5Hz à 50Hz).
J'essaie "PulseIn". C'est une briquette sans doute plus abordable que le PID.
Je patauge, mais ça vient.
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar Fidèle Castor » Lun Mar 18, 2013 17:38 pm

[quote="remi.450"]Du PID pour du solaire :mdr:[/quote]

Peut-être que c'est luxueux mais avec Arduino quelques \\ devant les lignes en trop et hop on enlève le I et le D ! qui peut le plus peut le moins !

Par contre en ce qui concerne les outils de programmation, j'ai ouvert un topic là dessus :
http://arduino.cc/forum/index.php/topic,148882.15.html

Je suis surpris par les résultats que j'ai obtenu en quelques mois de pratique !
Hier j'ai réussi à faire défiler sur un écran LCD 6 mesures de température.
Le montage que j'ai réalisé représente un budget de moins de 35€ :roll:

Donc il est inutile de tenter de me décourager, c'est trop tard !
Je suis devenu un fervent praticant de la religion Arduino :smile:
Serre solaire type walipini, microcogénérateur à l'HVU,
Cheminée insert avec marmite chaudière, cuves eau de pluie de 37 + 4 + 5 m3
3 panneaux solaires sur les supports des wicking beds pour autoconsommation.
Avatar de l’utilisateur
Fidèle Castor
Technicien Solaire
Technicien Solaire
 
Messages: 483
Enregistré le: Sam Oct 27, 2012 12:43 pm
Localisation: Yvelines Sud

Messagepar alain87 » Lun Mar 18, 2013 20:13 pm

Salut Castor,
Bravo pour tes progrès! :-D
Bien souvent ceux qui développent ne pensent pas à l'accessibilité de leurs produits ou de leurs sites web :-x .
Quand tu auras trouvé l'environnement pil poil, tout le monde en profitera! 8-)

alain87
Newbie
Newbie
 
Messages: 45
Enregistré le: Lun Nov 26, 2007 15:23 pm
Localisation: La Jonchère Saint-Maurice 87

Messagepar ezza » Lun Mar 18, 2013 20:55 pm

Apperduino Bonsoir :grin:

"inutile de tenter de me décourager, c'est trop tard ! " ..... :grin: ...... Arduino un jour Arduino toujours :-D

"Pour l'instant je voudrais mesurer une fréquence (Sortie d'un débitmètre plage 0.5Hz à 50Hz).
J'essaie "PulseIn".... "
..... sympa une nouvelle brique à venir, et pas plus compliqué que le Pid :grin:
Terran, si cela n’aboutit pas, peut être passer par un p'ti montage convertisseur tension/fréquence pour une lecture plus fiable???

.... a propos de cette fonction, une remarque dans le livre C.Tavernier, "Compte tenu du principe de programmation de la fonction pulseIn, le résultat fourni ne peut être considéré comme correct que dans la plage allant de 10microsec à 3 minutes " .... 0.5Hz à 50Hz c bon

aller prochaine briquette .... Hystérésis, on l'utilise en Solaire ??? .... :roll:

A+
Avatar de l’utilisateur
ezza
Expert Solaire
Expert Solaire
 
Messages: 617
Enregistré le: Dim Sep 25, 2011 15:28 pm
Localisation: Sud l'A r dèche

Messagepar Terran » Mar Mar 19, 2013 1:18 am

[quote="ezza"]
Terran, si cela n’aboutit pas, peut être passer par un p'ti montage convertisseur tension/fréquence pour une lecture plus fiable??? [/quote]
Pour l'instant j'utilise un convertisseur Fréquence/Tension (et non l'inverse). Je crois que c'est un 2917 de mémoire ? Mais il en faut un par débitmètre, c'est quand même du taf. Alors que sous Arduino, il suffit d'un fil qui relie le débitmètre au module..

[referp=92124;quote="ezza"].... a propos de cette fonction, une remarque dans le livre C.Tavernier, "Compte tenu du principe de programmation de la fonction pulseIn, le résultat fourni ne peut être considéré comme correct que dans la plage allant de 10microsec à 3 minutes " .... 0.5Hz à 50Hz c bon[/quote]
Sous Arduino, j'ai d'abord essayé de compter les flancs d'un signal entre 2 interups, ça marche bien. Il faudrait compter les flancs pendant une dizaine de périodes pour avoir une bonne précision, et pour les basses fréquences cela prendrait plus de 10sec par mesure, ce n'est pas jouable.

PulseIn pour l'instant me donne satisfaction, j'ai bricolé un multi. qui simule le débitmètre et qui m'a permis de faire un petit prog. qui fonctionne. Je vous le joins ainsi que le print des résultats.
Je suis bien conscient que l'on peut l'améliorer. J'ai notamment imprimé des résultats intermédiaires inutiles que je supprimerai par la suite, mais c'est un bon entraînement.
Il y a un problème pour la plus basse fréquence (0.78 Hz) de temps en temps il y a un raté. Je vais sans doute devoir insérer un "while " ou un "if" ..

Ce n'est qu'un début de briquette..
Fichiers joints
ArduinoPulseIn.jpg
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar pf26 » Mar Mar 19, 2013 9:44 am

Bonjour,
Whah, je vois que les progrès sont rapides ! Et vous vous attaquez déjà à des choses assez complexes.
Sous Arduino, j'ai d'abord essayé de compter les flancs d'un signal entre 2 interups, ça marche bien. Il faudrait compter les flancs pendant une dizaine de périodes pour avoir une bonne précision, et pour les basses fréquences cela prendrait plus de 10sec par mesure, ce n'est pas jouable.

Je crois que l'approche avec interruptions est meilleure, car elle évite des attentes. Il existe aussi les fonctions "Input Capture" qui permettent de dater un événement. Je pense qu'il est possible d'avoir une très bonne précision pour chaque flanc (en utilisant un timer assez rapide, mais alors, attention aux débordement des valeurs qui vont dépasser la capacité d'un entier 65536). Par ailleurs, il est important de voir toute la chaîne de mesure : mesurer des impulsions pour calculer un débit et l'intégrer ensuite pour retrouver des volumes.. il vaut mieux compter les impulsions, cela donne directement le volume cumulé.. Mais peut-être que votre débit sert à un calcul de puissance ? La encore, il vaut mieux calculer directement de l'énergie (proportionnel à un nombre d'impulsions de volume par un Delta de température)

Enfin, dans votre programme, au lieu de faire une attente, utilisez une variable de date et provoquez l'affichage seulement si la date actuelle diffère de plus d'une seconde de celle de l'affichage précédent..
Les briques doivent provoquer le moins d'attente possible, sans quoi, vous aurez des difficultés à "l'assemblage".
Pierre.

pf26
Etudiant Solaire
Etudiant Solaire
 
Messages: 222
Enregistré le: Mer Juin 02, 2010 11:45 am
Localisation: Aurel (26)

Messagepar Terran » Mar Mar 19, 2013 13:33 pm

[quote="pf26"] "Input Capture" qui permettent de dater un événement.[/quote]
Cela devient de la véritable programmation, je n'ai pas l'intention de commencer une carrière de programmeur à mon age. Mes neurones ne suivraient pas.
[referp=92139;quote="pf26"]
attention aux débordement des valeurs qui vont dépasser la capacité d'un entier 65536)[/quote].
J'ai déjà constaté ce pb. quand PulseIn compte le nombre de microsecondes pour les fréquences basses. Pour 0.78 Hz il y 641025 micosecondes par 1/2 période. La variable était en "float", j'ai dû la déclarer en "double".
Au lieu d'utiliser PulseIn, d'après ce que tu dis, on pourrait compter les interruptions pendant une mn par exemple, dans ce cas, même avec une fréquence de 50Hz le chiffre est beaucoup plus raisonnable.
Question : J'ai 6 débitmètres. Est-il possible de lancer 6 comptages d'interrups simultanément ? (pendant la même minute). S'il fallait les lancer à la queue leu leu cela poserait un pb. d'interprétation.

[referp=92139;quote="pf26"]Par ailleurs, il est important de voir toute la chaîne de mesure : mesurer des impulsions pour calculer un débit et l'intégrer ensuite pour retrouver des volumes.. il vaut mieux compter les impulsions, cela donne directement le volume cumulé.. Mais peut-être que votre débit sert à un calcul de puissance ? La encore, il vaut mieux calculer directement de l'énergie (proportionnel à un nombre d'impulsions de volume par un Delta de température)[/quote]
Oui les débits vont servir à calculer des puissances, puis des énergies. Mais c'est quand même sympa. d'avoir les débits en temps réel pour comprendre les éventuelles anomalies de circulation.

[referp=92139;quote="pf26"]Enfin, dans votre programme, au lieu de faire une attente, utilisez une variable de date et provoquez l'affichage seulement si la date actuelle diffère de plus d'une seconde de celle de l'affichage précédent..[/quote]
Bonne idée. As-tu quelques lignes de prog. autour desquelles je pourrais broder pour concrétiser cette remarque.

[referp=92139;quote="pf26"]Les briques doivent provoquer le moins d'attente possible, sans quoi, vous aurez des difficultés à "l'assemblage".
Pierre.[/quote]

Pour l'instant je ne conçois pas encore la structure générale dont tu parlais dans un post précédent. J'essaie de m'inspirer de ta suggestion, mais c'est encore flou. Ce n'est pas tout de faire des briques, encore faut-il pouvoir les assembler.
Merci pour la pertinence de tes interventions
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar pf26 » Mar Mar 19, 2013 15:11 pm

Bonjour,
La fonction PulseIn est bloquante : elle attend une première impulsion, puis une seconde, pour calculer le temps entre les deux (avec un paramètre de temps max d'attente).
Il n'est pas possible de faire comme cela pour un programme en temps réel, surtout si tu as 6 entrées avec 0.5Hz mini (donc 4 secondes de tps max attente indispensable pour que ça marche à 100% - donc au pire 24 secondes de blocage rien que pour ce bout de programme.
Je pense très utile d'utiliser les Timers intégrés. Les neurones suivront.
http://enseignement.ensi-bourges.fr/claroline/backends/download.php?url=L0RvY19BVE1FR0E2NF9wb3VyX1REcy5wZGY%3D&cidReset=true&cidReq=II_2012
Et probablement les interruptions. A chaque interruption, incrémente le nombre d'impulsions (pour avoir le cumul). Stocke la valeur d'un timer et fait la différence avec la valeur stockée précédemment - ce qui donne le débit.
Evite le travail avec des floats ou pire encore, double. Les long devraient suffire pour les calculs fréquents, et les float réservés aux affichages (rares).

Il n'y a généralement pas à se casser la tête avec les débordements de valeurs des unsigned long lorsqu'on fait des différences. Ca marche aussi lorsque le timer repasse par 0.

Pour l'affichage chaque seconde, c'est pareil. Lit la valeur d'un timer. Compare à celle stockée précédemment. Si l'écart est suffisant (1 seconde ?) alors effectue l'action et stocke la valeur courant du timer. Sinon, continue.

Reste à choisir la fréquence du timer pour avoir assez de résolution.

Pierre.

pf26
Etudiant Solaire
Etudiant Solaire
 
Messages: 222
Enregistré le: Mer Juin 02, 2010 11:45 am
Localisation: Aurel (26)

Messagepar ezza » Mar Mar 19, 2013 20:14 pm

Bonsoir
des info pour les mesures de fréquence
http://www.pjrc.com/teensy/td_libs_FreqMeasure.html
http://interface.khm.de/index.php/lab/e ... r-library/
avec l'utilisation d'autres librairie ....... FreqCounter ou FreqPeriod ou FreqMeasure

" je n'ai pas l'intention de commencer une carrière de programmeur" .... moi de même, le pourquoi du choix Arduino et l'idée des briquettes.

"Ce n'est pas tout de faire des briques, encore faut-il pouvoir les assembler." ..... oui Terran, la partie délicat, pas question de les empilés sans règle précise, l'ordre de compilation est encore nébuleux pour moi :oops:
Modifié en dernier par ezza le Mar Mar 19, 2013 20:15 pm, modifié 1 fois.
Avatar de l’utilisateur
ezza
Expert Solaire
Expert Solaire
 
Messages: 617
Enregistré le: Dim Sep 25, 2011 15:28 pm
Localisation: Sud l'A r dèche

Messagepar Terran » Mer Mar 20, 2013 0:38 am

[quote="pf26"]Bonjour,
La fonction PulseIn est bloquante : elle attend une première impulsion, puis une seconde, pour calculer le temps entre les deux (avec un paramètre de temps max d'attente)..[/quote]
Je te crois mais je suis étonné. Il me semblait que la fonction comptait des microsecondes entre deux instants, ça ne me semble pas bloquant ?
En tous cas, pas plus que de compter des flancs pendant une minute ? Car lorsqu'on utilise les interrups, il faut bien définir un temps pendant lequel on compte.
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar Terran » Mer Mar 20, 2013 0:48 am

[quote="pf26"]
Enfin, dans votre programme, au lieu de faire une attente, utilisez une variable de date et provoquez l'affichage seulement si la date actuelle diffère de plus d'une seconde de celle de l'affichage précédent..
.[/quote]
Je pense avoir réussi. Il est sans doute possible d'optimiser
ça tient en 2 lignes,(celles du milieu) et ça parait grès simple surtout quand on a fini.

D=((F/.45)*60); // Calcule le débit à partir de la fréquence

if (millis() - previousMillis > interval) //insère un intervalle de temps
{ previousMillis = millis() ; //paramètrable entre les affichages

Serial.print ("\r\n"); //Ligne blanche pour plus de clarté dans le tableau
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar Terran » Mer Mar 20, 2013 0:57 am

[quote="pf26"]
Je pense très utile d'utiliser les Timers intégrés. Les neurones suivront.
http://enseignement.ensi-bourges.fr/claroline/backends/download.php?url=L0RvY19BVE1FR0E2NF9wb3VyX1REcy5wZGY%3D&cidReset=true&cidReq=II_2012
[/quote]
Tu as l'air très à l'aise avec les micropro, mais pour moi c'est un sacré nonosse à ronger !
Je crains de me casser les dents.

Que penses-tu des liens proposés par Ezza sur les fréquencemètres ?
Pourrait-on envisager de n'utiliser qu'un seul fréquencemètre avec un multiplexeur à l'entrée ?
Avatar de l’utilisateur
Terran
Etudiant Solaire
Etudiant Solaire
 
Messages: 235
Enregistré le: Sam Nov 26, 2011 17:11 pm
Localisation: Choisel 78

Messagepar pf26 » Mer Mar 20, 2013 9:59 am

Bonjour,
Pour l'affichage, c'est exactement cela.
Tu peux même ne faire le calcul de débit que lorsque tu affiches, c'est à dire quand la condition du if est réalisée.

Pour PulseIn, le code source est :
http://code.google.com/p/arduino/source/browse/tags/0013/hardware/cores/arduino/wiring_pulse.c
Dans ce code, je vois des While, ce sont des boucles d'attente que l'entrée change d'état. Je dis bloquant, car le micro ne fait que cela (hormis d'éventuelles interruptions), tant que la patte n'a pas changé d'état.
Lorsque tu utilises les interruptions, le programme normal, c'est à dire ta boucle principale While (1) { du main s'execute en permanence, et lorsqu'une patte change d'état, les instructions de ta routine d'interruption s'executent rapidos, avant que le micro ne reprenne là où il en était dans la boucle principale.

Je pratique depuis un temps où on stockait les programmes sur bande magnétique (avant les disquettes donc..).
Il y a de quoi désespérer parfois, j'en conviens. Peut-être vaut-il mieux rejoindre un forum spécialisé au début pour bien assimiler les bases des micro (et avoir plus de réponses, d'autant que je ne connais pas Arduino), et revenir ici pour les aspects plus spécifiques au solaire ?
Pierre.

pf26
Etudiant Solaire
Etudiant Solaire
 
Messages: 222
Enregistré le: Mer Juin 02, 2010 11:45 am
Localisation: Aurel (26)

Messagepar Fidèle Castor » Mer Mar 20, 2013 13:08 pm

Bonjour à tous,
Je vous livre mon petit truc pour monter une "guirlande" de sondes 18B20 :

http://cgi.ebay.fr/5-Lot-RJ45Female-to- ... 0838268147

Prix : 1,47€ livré les 5 tés !

Je viens de recevoir les tés ce matin et ils correspondent bien au montage que je veux en faire.
Plus la peine de souder sur place, il faut préparer pour chaque sonde sur un bout de 20 cm ( pas plus! ) de câble réseau 5E muni d'une prise RJ45 à une extrémité , la sonde soudée et les soudures revêtues de gaine thermoretractable à l'autre extrémité. Ensuite on met au bout de cette prise le Té en question et des câbles réseau ordinaires munis de prises RJ45 sur les deux autres entrées ( ne pas utiliser de câbles croisés évidemment !).
Sur le bout de câble de 20 cm, il sera judicieux d'étiqueter au moment de la preparation, le code informatique individuel et unique de la sonde afin de le rentrer dans le programme de mesure le moment venu.
Je vais commencer ce travail et je vous tiendrais au courant des résultats.
Serre solaire type walipini, microcogénérateur à l'HVU,
Cheminée insert avec marmite chaudière, cuves eau de pluie de 37 + 4 + 5 m3
3 panneaux solaires sur les supports des wicking beds pour autoconsommation.
Avatar de l’utilisateur
Fidèle Castor
Technicien Solaire
Technicien Solaire
 
Messages: 483
Enregistré le: Sam Oct 27, 2012 12:43 pm
Localisation: Yvelines Sud

PrécédenteSuivante

Retourner vers Arduino

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité