Variomètre maison à base d'Arduino

Le type de donnée de la variable ‘percent’ est uint8_t, c’est à dire un entier non signé 8 bits. Par conséquent, il ne peut représenter que des valeurs entières entre 0 et 255.
Je ne connais pas le comportement exact du compilateur utilisé, mais si toute l’expression est calculée avec des entiers 8 bits, ça ne peut pas marcher.
En déclarant les variables en uint32_t je pense que le calcul devrait être correct.

@carambar

Oui c’est vrai ce que tu dit mais si je dit pas de bêtises la librairie ‘Encoder’ utilise les interruptions. Du coup je ne suis pas sur que cette méthode fonctionne. A moins de personnaliser le code de la librairie, et encore.
Par contre ça aurai pu être fait pour le push mais bon pour ce que coûte aussi 3 résistances et la sureté de ne pas avoir à gérer ça dans le code.

@marcus

Je pense aussi que ça viens du comportement du compilateur avec cet entier.
Mais sinon ‘map’ ça marche, non ? :roll: ça permet d’éviter de mettre une variable en 32bits pour rien et au vu de l’occupation mémoire, c’est toujours ça de pris.

Je pense que vous ne prenez pas le problème dans le bon sens. Ça n’est pas la variable qui va recevoir le résultat final qu’il faut modifier mais les opérandes du calcul. Je ne connais pas (pas encore) le langage de l’Arduino mais dans les langages habituels il faut forcer le compilateur à passer provisoirement par des réels même si les variables utilisées comme opérandes sont des entiers. En général ça se fait en écrivant “.0” après un entier.

Ça donnerait donc ça :
uint8_t percent = round((average_vcc - 3100) / 10.0);

@carambar

N’ayant jamais fais d’Arduino au début j’ai cherché un projet de variomètre déjà en place et je me suis inspiré de celui-là.
Ça fonctionnait pour faire un simple bip mais vu que je voulais ajouter une interface graphique + des options + l’enregistrement des stats, il restait du chemin à faire.
Ce que j’ai entrepris petit à petit mais je me suis vite heurté à la limitation de ram de l’Arduino nano.

Pour la gestion du menu j’ai utilisé la librairie MenuBackend que j’ai dû un peu transformer et optimiser pour stocker les chaines de caractères en mémoire flash.
Le reste des librairies je les ai prise telles qu’elles.

Question filtrage du capteur de pression, sur le code du projet d’origine le codeur fait une moyenne des X dernière valeurs… Pas terrible car cela prend beaucoup de place en ram, espace qui nous est très précieux…
Du coup j’ai dû changer de méthode de filtrage (qui porte surement un nom que j’ignore) et j’ai fais comme cela :

A chaque interrogation du capteur je pondère sa réponse d’un certain pourcentage et j’ajoute son résultat à la valeur précédente du capteur, lui aussi pondéré d’un pourcentage de tel sorte que la somme des deux pourcentage soit égale à 100%.

Exemple : vario_ancienne_valeur = vario_ancienne_valeur * 0.8 + vario_lu * 0.2;

En gros ici la nouvelle réponse du capteur n’a que 20% de poids par rapport à l’ancienne valeur.
Cela à pour effet de lisser la réponse du capteur, mais en contrepartie de la retarder. Mais comme l’Arduino effectue une multitude d’interrogations par seconde, le temps de latence reste court, et le résultat beaucoup moins bruité. Le jeu consistant à équilibrer les pourcentages en faveur de l’ancien ou du nouveau résultat.

Cette méthode permet aussi de n’utiliser que deux variables flottantes dans notre code au lieu de X variables avec la méthode des moyennes et donc de soulager la ram, ce qui était aussi le but recherché.

Après dans l’ensemble oui j’ai écris moi même le sketch, mais en m’appuyant sur la documentation et les exemples immenses qu’on trouve sur Internet, et aussi grâce à l’aide d’un ami passionné d’Arduino qui m’a bien appris comment fonctionnait cette bestiole (les interruptions, les différents type de mémoire, …)

Concernant les résistance en effet je pense que la réponse de @Xiboard est la bonne :smiley:

Et puis pour le reste la fonction map fonctionne à merveille, mais on pourrait également faire des test en ajoutant le .0 juste pour voir. Merci @Jérémie LeCouvert et @marcus

Je n’ai pas encore eu le temps de bien étudier l’état de l’art concernant le branchement d’un buzzer piezo sur un microcontrôleur mais j’ai l’impression qu’il existe un risque non négligeable ! Non pas dans le courant demandé à l’Arduino lors de l’excitation du buzzer mais dans la tension générée par le buzzer lui-même lorsqu’il est “excité manuellement”. Si on laisse tomber le vario par terre par exemple, cela va créer une onde qui va exciter le buzzer qui va lui-même ensuite retransmettre une tension très importante (bien au delà des 5V) à l’Arduino comme le ferait un microphone avec un risque de griller le micro-contrôleur.

Cf. ce post par exemple :
http://electronics.stackexchange.com/questions/58582/using-a-microcomputer-in-the-drive-circuit-of-a-piezo-buzzer

Je viens de voir que tu utilises la librairie ‘ToneAC’ (à l’origine je me demandais pourquoi tu n’avais pas branché une patte du buzzer à la masse) dont le créateur préconise le branchement tel que tu l’as fait. Je lui poserai la question par mail pour avoir son avis sur les “back EMF”.

https://code.google.com/p/arduino-tone-ac/

Oui, j’avais utilisé cette librairie car elle permettait une meilleure restitution sonore et de faire varier le volume.

La réponse du créateur de ToneAC sur le sujet :

[quote]A piezo can work just about as well as a microphone as it can a speaker. So, a shock like dropping or tapping it can generate a large pulse current that will back-feed to the microprocessor. While the voltage is high, the current is probably very low. So even then, it’s not very likely. However, it’s always good to provide some level of protection.

But, installing a diode is not the solution to this. It’s better to install a resistor to limit the back voltage. With toneAC I suggest using a 100 Ohm resistor, which will limit the current and prevent a problem. It’s even more important NOT to use a diode with toneAC as the alternating current will nullify many of toneAC’s advantages.

In any case, use about a 100 Ohm resistor inline with one of the pins when using a piezo buzzer.
[/quote]

Salut à tous,

Je viens de tester mon montage, non pas en parapente mais sur un moto-planeur de modélisme (1m80 d’envegure)
Mais malheureusement mon montage déconne complet :
ça bip dans tout les sens et ça même au sol au moindre mouvement, je comprenait rien…
chez moi dans la maison ça marchait bien.

Alors en faisant quelques test il semble que la cause soit la température. Dès que le soleil tapait sur le BMP180, la temp grimpe super vite. Et comme la temp est utilisée pour le calcul de l’altitude : ça bip à donf. (La temp passe facilement de 28°C à 36°C quand le soleil tape sur le composant)

Donc à voir si dans un boitier ça s’atténue… mais je doute avec un boitier noir…
Je vais peut être faire des test en lissant la mesure de temp comme t’as fait pour le vcc et l’alti.

Ou alors c’est mon module BMP qui à une couille, j’ai tout le matos en double, je pourrait test.

Une dernière chose, pour moi, il manque un moyen de stopper manuellement la fin du chrono et donc de la mesure. Bon c’est lié au fait que ça déconnait et que je n’arrivait plus à arrêter le chrono autre que reset.

A+ :trinq:

Ces capteurs sont hyper sensibles à la lumière, ainsi qu’au perturbations liés au flux d’air au contact direct. Essai avec un boitier et un bout de mousse sur la surface du capteur, ça devrait aider.

Bon courage.

bonsoir à tous

je viens de découvrir ce forum en cherchant des infos sur les alti-vatio , et ce montage me plait plus particulièrement.
j’ai envie de me bricoler ça cet hiver.
Seulement c’est la première fois que je touche à un micro controleur (arduino) et je n’y connais rien du tout.

Sur le site github il y a plusieurs lignes de programmes avec des modifs mais le quel prendre ?

Quelqu’un aurait-il le programme complet à jour ?

je vous remercie

bonne soirée à tous

Le troubadour

Salut Troubadour,

Je suis justement en train de bricoler un altivario en m’inspirant très fortement de celui-ci pour l’instant (j’ai plein d’idées pour la V2 mais on va déjà essayer de finir la V1 ^_^)

Avant de parler du programme final, je te conseille de tester chaque composant un par un pour comprendre le fonctionnement de tout ça et valider le fait qu’ils fonctionnent également ! Une fois que tu as fini les tests unitaires tu peux être sûr à 99% que le bouzin va fonctionner !

GitHub est un système de suivi de version donc le mieux est de créer un fork du projet puis d’installer le client GitHub afin de gérer tes modifs. Tu peux aussi simplement télécharger une archive de la version courante et la balancer dans l’Arduino mais c’est beaucoup moins drôle…

Salut les curieux,
si tu veux télécharger directement tout le code clic sur le lien “Download ZIP” de GitHub.

Tu retrouveras tout les fichiers présents sur GitHub dans leur dernière version (c’est le “programme” complet à jour ).

Donc comme tu auras pu le remarquer c’est du code non compilé. Pour ce faire il te faudra télécharger l’IDE Arduino qui va te servir à éditer/compiler/téléverser le code Variometer/Variometer.ino qui est le code source du Vario. Autour de ce code gravite des librairies (dossier libraries) qui seront à installer sur ton système (cf la doc officielle). Ensuite tu pourras suivre cette petite manip pour initialiser la mémoire de ton proc.

Et comme le dit Jérémie LeCouvert si tu n’y connais rien il est peut-être important que tu apprennes un peu à te servir des composants les uns après les autres déjà pour voir s’ils fonctionnent bien tous.
Bon montage !

Bonsoir a tous

merci pour les infos, je vais déjà commencer à commander les composants en suivant la liste et les ref. de Xiboard

je vais suivre les liens de Sinseman et suivre vos conseils , en tout cas merci .

quelle va être la v2 avez vous déjà des idées pour des modifs ?

merci

Le troubadour

J’ai fait une liste aussi avec les liens DealExtreme, je la posterai sur le forum prochainement ça pourra t’aider.

Pour la V2 j’ai pensé à ça pour l’instant :

  • Écran eInk
  • Teensy au lieu de l’Arduino Nano :
    • RTC intégré (avec pile + crystal)
    • Carte SD Mass storage (enregistrement et déchargement de statistiques/traces par USB) pour export auto dans LogFly
  • Tracking GPS (cout supplémentaire ?)

Mais bon faut déjà valider la V1 en vol :slight_smile:

J’en profite que ce fil ai remonté un peu pour poster des photos de mon montage.

C’est pas super propre mais j’ai fait avec ce que j’avais sous la mains et malheureusement c’était un pistolet à (sainte) colle chaude :vol:

Donc l’intégration ressemble pas mal à celui de Sinseman sauf l’encodeur sur le haut.
Et moi pareil pas encore testé en vol.
Depuis que c’est dans le boitier ça semble bien mieux niveau sensibilité du capteur au soleil.

Jolie réalisation ! Ca n’est pas évident de tout faire tenir dans le boitier comme ça…

La liste des composants achetés chez DealExtreme avec les adresses (les prix c’est ceux du blog de Sinseman, je n’ai pas comparé avec les miens) :

Arduino nano V3.0 | 5,10€
http://www.dx.com/fr/p/arduino-nano-v3-0-81877

Nokia LCD 5110 | 2€
http://www.dx.com/fr/p/replacement-1-6-lcd-screen-with-blue-backlight-for-nokia-5110-blue-145860

BMP085 Digital Barometric Pressure Sensor | 2,90€ (BMP180)
http://www.dx.com/fr/p/bosch-bmp180-atmospheric-temperature-pressure-sensor-module-deep-blue-331485

Digital Push Button Switch Rotary Encoder | 4,20€
http://www.dx.com/fr/p/rotary-encoder-dode-switch-ec11-audio-digital-potentiometer-green-silver-2-pcs-275658

Mini USB Battery Charging Board 5V | 0,90€
“MP1405 5V 1A Lithium Battery Charging Board - Blue + Black” (SKU 844219454)

Buzzer 8 ohm | 0,20€ (mais 0,25 W ça n’est pas suffisant, prendre du 0,5 voir 1W !)
http://www.dx.com/fr/p/jtron-diy-29mm-8-ohms-0-25w-small-speaker-black-bronze-pair-281598

DC-DC Converter Step Up 1-5V 500mA | 1,15€
http://www.dx.com/fr/p/dc-dc-1-5v-converter-booster-module-274695

3,7V 600mAh LiPo Battery | 3,25€
Récupérée d’un vieux téléphone, on a tous des batteries au Lithium qui trainent en fait !

RTC Module for Arduino | 1,55€
http://www.dx.com/fr/p/i2c-rtc-ds1307-24c32-real-time-clock-module-for-arduino-blue-149493

Interrupteur à glissière :
http://www.dx.com/fr/p/ss-12f16-mini-3-pin-slide-switches-diy-parts-silver-black-50-piece-pack-136833

Matériel supplémentaire :
Breadboard, fils, etc. :
http://www.dx.com/fr/p/830-point-solderless-breadboard-118354
http://www.dx.com/fr/p/40-pin-2-54mm-pitch-pin-headers-20-pcs-279494
https://www.sparkfun.com/products/11367

Condensateurs, résistances, etc. :
http://www.dx.com/fr/p/aluminum-electrolytic-capacitor-for-diy-project-120-piece-pack-132738
http://www.dx.com/fr/p/ceramic-capacitor-for-diy-electronic-circuit-red-270-piece-pack-146724
http://www.dx.com/fr/p/1-4w-resistance-metal-film-resistors-400-piece-pack-121339

:bravo:
Bravo les gars pour ce vario…top…

Salut,

cool pour la vario, c’est un super projet.
Par contre, tu as essayé avec un ms5561 plutôt comme capteur de pression ? il semble bcp plus sensible que le BMP085
un peu plus cher aussi.