Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Variomètre acoustique (baromètre ultra-sensible)

Composants et fournitures

SparkFun Arduino Pro Mini 328 - 3.3V/8MHz
× 1

À propos de ce projet

Présentation :

C'est un instrument utilisé par les pilotes pendant les vols (planeur, parapente, deltaplane, ballon, etc.) pour aider à trouver le cœur des thermiques et monter plus et mieux dans les airs.

Brève description :

C'est un baromètre très sensible qui émet des sons lors de la montée (montée) et aussi lors de la descente (descente). Les sons sont de simples bips-bips, toutes les secondes, ou deux par seconde ou plus pendant la montée (plus de taux de montée =bips de fréquence plus élevée) :il est si sensible qu'il se met à biper juste après quelques centimètres (!) par seconde; vous pouvez essayer de lever lentement votre bras tenant en main le Vario pour obtenir le son. En cas de taux de chute, il émet de longs bips (continus) à -1 m/sec ou plus.

Liste des composants :

  • Arduino Pro Mini 3.3v 8 Mhz en tant que MCU
  • Capteur de pression barométrique GY-63 (MS5611) 3,3 v
  • Switch 8
  • Buzzer (actif avec oscillateur interne)
  • Multiplexeur 8x1 4051 3.3v
  • Batterie LiPo 1s 3.7v 350mAh + 10cm fil rouge/noir et connecteurs M+F
  • Module élévateur de tension + chargeur USB LiPo, TP5400 de AZDelivery ;
  • Quelques résistances, résistance réseau 8x4,7k, 220, 2x10k et condensateurs 47uF, 470uF
  • Fusible réarmable 0.5A
  • Petite boîte noire en plastique ABS, taille 78x39x22 mm
  • Interrupteur marche/arrêt coulissant
  • Connecteur femelle à 6 broches (pour FTDI)
  • 17 broches mâles (2x, 2x, 2x, 2x, 2x, 4x, 1x, 1x et 1x)
  • 4 broches mâle 90° pour circuit capteur P
  • 30 cm de fil rigide, recouvert de plastique, pour les cavaliers et les connexions
  • Cordon vert

Le schéma de Fritzing ci-dessus montre tout vous devez construire le circuit. Veuillez faire attention que le "condensateur en céramique" marron, juste en dessous de l'interrupteur noir, est un fusible réinitialisable à la place (je n'ai pas trouvé la bonne conception pour cela). A la place des 8 x résistances, j'ai utilisé un seul composant, un réseau de résistances, il comprend 8 x 4,7K ohms, tous à l'intérieur; regardez la photo suivante pour le trouver, c'est difficile à trouver, c'est le noir en haut du dipswitch bleu, il a neuf broches, une commune, les autres huit pour les résistances. Le fichier schématique Fritzing à télécharger est disponible ci-dessous.

La signification du dipswitch :

J'ai aimé utiliser le dipswitch bleu , 8 x très petits interrupteurs marche/arrêt dans un boîtier de couleur, pour sélectionner et modifier les paramètres de fonctionnement du Vario. Il s'agit d'un tableau pour ces paramètres montré ci-dessus et expliqué ici comme suit :

  • 1 - non utilisé
  • 2 - volume faible ou élevé
  • 3 et 4 - alarme de chute m/sec :-999 -1 -2 -3
  • 5 et 6 - fréquence des bips Hz :+1 +1,5 +2 +3
  • 7 et 8 - sensibilité m/sec :+0,0 +0,1 +0,2 +0,5

La broche 1 n'est pas utilisée , aucune position, allumée ou éteinte, ne change rien.

La broche 2 modifie le niveau de volume de la sonnerie ; il fonctionne électriquement :lorsque la broche est allumée, il court-circuite la résistance en série avec le buzzer et laisse passer plus de courant pour avoir des bips plus forts.

Les broches 3 et 4 définissent le niveau d'enfoncement (en descendant) en dessous duquel le Vario jouera beeeeeeeep ; les broches sont utilisées comme code binaire, deux bits, 4 paramètres :00=0, 01=1, 10=2 11=3 ; vous pouvez régler l'alarme de naufrage à -999 m/sec (cela signifie qu'il n'y a pas de limite, il n'émettra jamais de bip) avec la broche 3=off et la broche 4=off (binaire 00) ; vous pouvez régler les autres valeurs sur -1, -2 ou -3 m/sec respectivement avec la broche 3=off/4=on, 3=on/4=off et 3=on/4=on. Par exemple, à la position 2, le Vario émet un beeeeeeeee uniquement à une vitesse de chute supérieure à -2 m/sec. Pour tester, vous devriez essayer d'utiliser un ascenseur... en descendant de l'étage numéro 3 à l'étage numéro 0, ou courir rapidement les marches de l'échelle...

Les broches 5 et 6 règlent la fréquence des bips , ils fonctionnent ensemble comme un code binaire comme expliqué ci-dessus pour l'autre couple de broches ; à la même vitesse de montée, réglé à +2 Hz, bip-bip sera plus rapide qu'à +1 Hz. Certaines personnes aiment avoir des bips lents et moins de "stress" :-)

Les broches 7 et 8 règlent la sensibilité de l'instrument :+0.0 signifie une sensibilité maximale au mouvement de montée, il faut moins de 10cm/sec de vitesse pour bip-bip; dans cette position, l'instrument émet parfois un bip, même en place, en captant de très petits changements de pression (c'est-à-dire que la fermeture d'une porte dans la pièce peut augmenter un peu la pression de l'air) ; il capte également les "bruits" électriques normaux mais est assez stable et utile. En 4ème position on a une sensibilité de +0,5 m/sec, nettement moins sensible aux changements de pression atmosphérique, il faut "beaucoup" plus de vitesse pour monter en altitude pour obtenir un bip-bip. Pour les tests, vous devriez essayer d'utiliser un ascenseur... du numéro d'étage 0 au numéro d'étage 3...

D'un point de vue circuit électronique, les broches 1 et 3-8 sont lues analogiquement par le biais de la puce du multiplexeur 4051, puis le logiciel décide s'il est allumé ou éteint, valeurs> 512 ou non :il a 8 entrées pour 1 commun ports connectés à l'Arduino en entrée. Pour sélectionner lequel des 8 ports pour lire les positions marche/arrêt du Dipswitch, le MCU (Arduino) définit 3 bits en sortie que vous connaissez déjà car il fonctionne :000, 001, 010, 011, 100, 101, 110, 111 (0, 1, 2, 3, 4, 5, 6, 7 =8 ports =8 interrupteurs marche/arrêt). Regardez le code de la fonction "readDIPswitch()".

Attention à la batterie :

Les deux résistances 10k ainsi que le condensateur 47uF fonctionnent comme diviseur de tension pour tester la tension de la batterie. Les LiPo sont connus pour être critiques lorsqu'ils sont déchargés en dessous de 3,3 v pour cette raison toutes les 10 secondes (BATTinterval) la fonction "checkBATT()" est appelée et en cas de basse tension le buzzer vous informera avec 6 bips courts par seconde. N'attendez pas trop longtemps pour éteindre, et rechargez vite !

Il est très IMPORTANT de ne pas oublier de faire au moins un TROU dans la boîte pour laisser passer l'air pour les changements de pression du capteur. J'ai fait deux trous comme vous le voyez sur la photo :l'un pour écouter les bips du buzzer et l'autre pour voir le voyant d'état de charge lorsqu'il est connecté au câble micro USB et au chargeur. Ah oui, c'est un autre trou pour le micro USB aussi. Avec des trous, le variomètre n'est plus étanche...

Le cordon vert sert à l'accrocher en toute sécurité quelque part à bord :vous ne voulez pas le perdre, absolument !

Le PCB :

Est utilisé un PCB simple face pour cette raison j'ai dû inclure quelques cavaliers de fil (celles en pointillés) pour résoudre les itinéraires pour tout le circuit. Suit ici la face des composants mais ci-dessous vous avez à la fois les fichiers, les composants et les faces de soudure, en miroir, à télécharger et à imprimer au moyen d'une imprimante laser sur des feuilles "jaunes" ou "bleues". J'ai utilisé les jaunes mais ils disent que les bleus sont meilleurs (le prix est plus élevé). Lors de l'impression, n'oubliez pas de désactiver les paramètres d'économie de toner, utilisez plutôt une résolution de 1 200 ppp pour obtenir un véritable noir profond. Le processus de transfert de toner des feuilles magiques au PCB est effectué à l'aide d'un fer chaud... L'impression des deux faces du PCB rend le projet "professionnel".

Sont utilisées une douzaine de broches Arduino. Il n'est pas nécessaire de souder les broches inutilisées et non obligatoire :laissez-les libres. Placez l'embase femelle 6 broches sur la face supérieure du Mini Pro pour laisser, si nécessaire à l'avenir, l'interface FTDI à connecter pour d'autres mises à jour du logiciel.

Le circuit d'alimentation survolteur USB est placé à l'envers. Pour le maintenir en place, utilisez deux broches solides, des broches mâles normales utilisées pour Arduino mais sans la ceinture en plastique, à côté du connecteur USB où est écrit "Power USB":utilisez la soudure pour assembler le tout, deux broches et un connecteur USB. 3 fils relient les bornes Gnd-, Batt+ et Out+ à ce circuit.

Le capteur barométrique :

Le capteur de pression barométrique GY-63 (MS5611), P-Sensor sur le PCB, est enfermé dans une petite carte de circuit imprimé et Arduino communique avec lui via le bus i2c. L'utilisation est simple, il comprend également un capteur de température que je n'ai pas utilisé.

Le programme appelle la fonction "readPSensor()" qui est le cœur du logiciel. Ce dont nous avons besoin, c'est du changement relatif de altitude, la fonction lit plusieurs fois par seconde et s'accumule dans PrexTotal ; toutes les demi-secondes (PrexInterval) il calcule le changement d'altitude moyen et procède par bip-bip ou long beeeeeeep compte tenu des réglages des commutateurs DIP. Ce moyen simple de filtrer les données est suffisant ; J'ai essayé la méthode de filtrage intéressante de Kalman, ainsi que les algorithmes de filtrage compliqués de Madgwick et Mahony sans avantages significatifs pour ce projet.

Mises à jour/Conseils :

C'est tout. J'ai vraiment apprécié ce projet ! Faites-le aussi ! :-)

Marco Zonca

Code

  • Code du variomètre acoustique
Code du variomètre acoustiqueArduino
/* Ce croquis fait office de variomètre pour le parapente, par Marco Zonca, 2020 Arduino MiniPro 3.3 en tant que CPU, capteur de pression barométrique GY-63 (MS5611), 8 x dipswitch, buzzer, Mux 4051, lipo 1s 3.7v 350mA, 3.7 v -> élévation de tension 5v + chargeur lipo usb ; DipSwitch :1=non utilisé 2=volume sonore bas/élevé 3=\ alarme de chute :OFF -1,0 -2,0 -3,0 m/sec 4=/ 5=\ bips de fréquence :+1,0 +1,5 +2,0 +3,0 Hz 6=/ 7=\ sensibilité :+0.0 +0.1 +0.2 +0.5 m/sec 8=/ */#include #include const int muxIOpin =15;const int vbattPin =14;const int muxbit0 =4;const int muxbit1 =5;const int muxbit2 =6;const int buzzerPin =7;const int DIPSWinterval =5000;const int BATTinterval =10000;const int PrexInterval =500;const booléen isDebug =false;float sensibilité[5 ];fréquence flottante[5];alarme de rejet flottant[5];long n=0;commutateur dip booléen[9];Diverses de chaîne;long non signé prevDIPSWmillis =0;long non signé prevBATTmillis =0;float n1=0;float n2=0; float SensorVBatt=0;double referencePressure =0;unsigned long prevPrexMillis =0;unsigned long currPrexMillis =0;double realPressure =0;float AbsoluteAltitude =0;float relativeAltitude =0;float avgAltitude =0;float avgPrevAltitude =0;long PrexCounter =0;float PrexTotal =0;float PrexVario =0;booléen est FirstCalc =true;MS5611 psensor; // pression sensorvoid setup() { Serial.begin(9600); pinMode(muxbit0, SORTIE); pinMode(muxbit1, SORTIE); pinMode(muxbit2, SORTIE); pinMode(buzzerPin, SORTIE); sensibilité[4]=0; sensibilité[3]=0,5 ; sensibilité[2]=0,2 ; sensibilité[1]=0,1 ; sensibilité[0]=0.0; fréquence[4]=0 ; fréquence[3]=3.0 ; fréquence[2]=2,0 ; fréquence[1]=1,5 ; fréquence[0]=1,0 ; alarme évier[4]=0 ; alarme d'évier[3]=-3.0 ; alarme d'évier[2]=-2.0 ; alarme d'évier[1]=-1.0 ; alarme de chute[0]=-999,9 ; readDIPswitch(); psensor.begin(); referencePressure =psensor.readPressure(); if (isDebug ==true) Serial.println("Vario est activé"); NewTone (buzzerPin,4) ; retard (750); noNewTone();} // terminer setup()void loop() { readPSensor(); if ((prevDIPSWmillis+DIPSWinterval) =PrexInterval) { avgAltitude =PrexTotal / PrexCounter; // moyenne if (isFirstCalc ==true) { avgPrevAltitude=avgAltitude; isFirstCalc=false ; } PrexVario=(avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // vario mSec if ((PrexVario <=sensibilité[4]) &&(PrexVario>=alarme de puits[4])) { noNewTone(); } if ((PrexVario> sensibilité[4])) { // lever le bip bip + NewTone (buzzerPin,((int)(PrexVario+fréquence[4]))); } if ((PrexVario  512) dipswitch[n]=false ; // lit le port sélectionné else dipswitch[n]=true; if (isDebug ==true) { if (dipswitch[n]==false) Serial.print("0"); else Serial.print("1"); } } // fin pour if (isDebug ==true) Serial.println(""); s=0 ; if (dipswitch[7]==true) s =s + 2 ; if (dipswitch[8]==true) s =s + 1 ; sensibilité[4]=sensibilité[s]; if (isDebug ==true) { Serial.print("Sensibility="); Serial.println(sensibilité[4]); } s=0; if (dipswitch[5]==true) s =s + 2; if (dipswitch[6]==true) s =s + 1; fréquence[4]=fréquence[s] ; if (isDebug ==true) { Serial.print("Frequency="); Serial.println(fréquence[4]); } s=0; if (dipswitch[3]==true) s =s + 2; if (dipswitch[4]==true) s =s + 1 ; alarme d'évier[4]=alarme d'évier[s] ; if (isDebug ==true) { Serial.print("SinkAlarm="); Serial.println(sinkalarm[4]); }} // terminer readDIPswitch() void checkBATT() { // vérifier la tension de la batterie lipo/liion n1 =analogRead(vbattPin); n2=(((6,60 * n1) / 1023,00)); SensorVBatt=(n2 + ((n2 * 0.0) /100)); // correction arbitraire (non active =0,0%) if (SensorVBatt <=3,4) { NewTone (buzzerPin,6,1000); } if (isDebug ==true) { Serial.print("VBatt="); Serial.println(SensorVBatt); }} // termine checkBATT()

Pièces et boîtiers personnalisés

Schémas

vario_R1XzPifiX4.fzz

Processus de fabrication

  1. Stocker et gérer les données sensibles avec Secret Manager
  2. Baromètre anéroïde
  3. Capteurs de contrainte ultra-minces et très sensibles
  4. Récepteurs optiques sensibles pour l'espace
  5. Amstrong® Ultra 650MC
  6. Amstrong® Ultra 650MCT
  7. Amstrong® Ultra 700MC
  8. Amstrong® Ultra 700MCT
  9. Chrome ultra haute pureté (UHP Cr)>99,95 %