2 *************************************************************************************
3 * Information importante:
4 * Ne pas modifier ce fichier à moins de vouloir y ajouter vos propres commentaires.
5 * Pour configurer votre oXs, vous devez modifier au moins le fichier oXs_config_basic.h
6 * Dans certains cas, vous devrez également modifier le fichier oXs_config_advanced.h
7 *************************************************************************************
9 Voir le github OpenXsensor https://github.com/openXsensor/
10 Ecrit par par Rainer Schlosshan traduction Thierry ZINK
12 ************************************************************************************************************************
13 ************************************* description générale de toutes les options *****************************************
14 ************************************************************************************************************************
15 * Les fichiers oXs_config_basic.h et oXs_config_advanced.h permettent à l'utilisateur de configurer différentes options. Voici un résumé des principales options.
17 * 1 - Choix du protocole de télémétrie
18 * 1.1 - Sélection de la sortie vers le récepteur
19 * 1.2 - SPORT_SENSOR_ID (utilisé uniquement pour le protocole FrSky Sport)
20 * 2 - Données a transmettre à l'émetteur
21 * 3 - Configuration de la sortie PPM (optionnel)
22 * 4 - Configuration du Vario (le vario est optionnel)
23 * 4.1 - Connections de 1 ou 2 capteurs barométriques
24 * 4.2 - Type de vitesse verticale transmise
25 * 4.3 - Sensibilité prédéfinie par programmation
26 * 4.4 - Sensibilité ajustée depuis l'émetteur
27 * 4.5 - Hystérésis & compensation de l'altitude à partir du capteur de température
28 * 4.6 - Choix du type de vitesse verticale en fonction du signal PPM (optionnel)
29 * 4.7 - Vitesse verticale analogique (optionnel)
30 * 4.8 - Calcul de la finesse du planeur, du taux moyen de montée/descente, de l’altitude moyenne gagnée/perdue(optionnel)
31 * 5 – Configuration de la vitesse air (optionnel)
32 * 6 – configuration du capteur de tension et de courant (optionnel)
33 * 6.1 - Tension de référence pour mesure des tensions et des courants
34 * 6.2 - Paramètres des tensions
35 * 6.3 - Nombre maximum de cellules LiPo à mesurer (et à envoyer à l’émetteur) (optionnel)
36 * 6.4 - Conversion de tensions en température (° Celsius)
37 * 6.5 - Configuration du capteur de mesure de courant (optionnel).
38 * 6.6 - Configuration de l'Ads1115 (optionel)
39 * 7 - Configuration du capteur RPM (tour par minute) (optionnel)
40 * 8 - Configuration de la mémoire non volatile (optionnel)
42 * 10 - IMU 6050 (capteur accéléromètre/gyroscope) (optionnel) et HMC5883 (magnétomètre) (optionnel)
43 * 11 - Capteur de débit (optionnel)
44 * 20 - Séquenceur (ON/OFF) pour certaines sorties digitales (Exemple : contrôle de lumières)
45 * xx – Réservé au développeur
47 * Note: Les paramètres activés commencent par "#define", suivi du nom du paramètre et dans la majorité des cas d’une valeur pour ce paramètre
48 * Pour activer ou désactiver un paramètre il faut supprimer ou ajouter les "//" qui précède "#define" Exemple “// #define ParameterToto Bonjour“ le ParametreToto ne sera pas pris en compte car pour Arduino c’est considérer comme un commentaire.
49 ************************************************************************************************************************
51 **** 1 - Choix du protocole de télémétrie **********************************************************************
52 * Actuellement oXs supporte 4 protocoles de télémétrie: Multiplex , Frsky, Jeti and Hott (=Graupner)
53 * Un et un seul protocole peut-être sélectionné; Exemple si vous activez le protocole Multiplex, les protocoles Frsky, Jeti et Hott sont désactivés (et vice et versa)
54 * FrSky utilise 2 protocoles différents :
55 * - SPORT utilisé par les récepteurs de la série X (comme le X8R ou X6R)
56 * - HUB utilisé par les récepteurs de la série D (comme le D4R-II)
57 * oXs peut supporter les deux protocoles FrSky en même temps (en utilisant l’option FRSKY_SPORT_HUB). oXs peut normalement détecter automatiquement le type de récepteur auquel il est connecté
58 * Si vous utilisez cette option vous n’aurez pas besoin de reprogrammer votre oXs si vous passez d’un récepteur série X à un de la série D.
59 * Cependant, l’auto détection ne semble pas marcher a 100% et demande plus de mémoire…
60 * Dans le cas où l’auto détection ne fonctionne pas ou si vous avez besoin de plus de mémoire (car vous utilisez beaucoup de capteurs connectés à votre oXs), vous pouvez forcer oXs à utiliser le protocole FRSKY spécifique que vous utilisez
61 * Pour sélectionner le protocole utilisé par oXs, il faut remplir la ligne #define PROTOCOL avec le nom du protocole sélectionné avec l’une des valeurs suivantes: FRSKY_SPORT , FRSKY_HUB , FRSKY_SPORT_HUB , MULTIPLEX , HOTT; JETI
62 ************************************************************************************************************************
63 #define PROTOCOL FRSKY_SPORT // selectionner une valeur parmi FRSKY_SPORT , FRSKY_HUB , FRSKY_SPORT_HUB , MULTIPLEX , HOTT, JETI
66 * 1.1 - Sélection de la sortie vers le récepteur ***********************************************************************************************
67 * oXs doit être connecté au récepteur afin de transmettre les informations.
68 * Pour cela, une sortie DIGITAL de l’arduino doit être connectée au récepteur.
69 * Vous devez spécifier la PIN arduino utilisée pour cette fonction.
70 * Valeur par défaut: 4 ; Les valeurs autorisées sont 2 ou 4 mais faites attention de ne pas utiliser la même PIN pour 2 fonctions.
71 ************************************************************************************************************************
72 #define PIN_SERIALTX 4
74 * 1.2 ****** SPORT_SENSOR_ID (utilisé uniquement pour le protocol FrSky Sport) **********************
76 * Pour le protocole SPORT, il peut y avoir plusieurs capteurs connectés sur le même bus mais chaque capteur doit avoir un identifiant « SPORT_SENSOR_ID » diffèrent.
77 * Pour le protocole SPORT, oXs peut utiliser jusqu’à 6 identifiants. Les 6 SPORT_SENSOR_ID utilisés par oXs sont :
78 * DATA_ID_VARIO 0x00 // 0 utilisé pour l'altitude et la vitesse vertical
79 * DATA_ID_FLVSS 0xA1 // 1 utilisé pour les mesures de tension de batterie
80 * DATA_ID_FAS 0x22 // 2 utilisé pour vfas, courant et carburant
81 * DATA_ID_GPS 0x83 // 3 utilisé pour les données GPS
82 * DATA_ID_RPM 0xE4 // 4 utilisé pour les rpm, T1, T2, et la vitesse air
83 * DATA_ID_ACC 0x67 // 7 utilisé pour les accélérations sur X, Y, Z
84 * Au besoin (par exemple pour connecter 2 oXs envoyant deux données identiques), vous pouvez changer les valeurs de SPORT_SENSOR_ID mais vous devez uniquement sélectionner des adresse parmi les valeurs suivante:
85 * 0x00,0xA1,0x22,0x83,0xE4,0x45,0xC6,0x67,0x48,0xE9,0x6A,0xCB,0xAC,0x0D,0x8E,0x2F,0xD0,0x71,0xF2,0x53,0x34,0x95,0x16,0xB7,0x98,0x39,0xBA,0x1B
86 * les valeurs du paramétre SPORT_SENSOR_ID sont définies dans le fichier oXs_config_advanced.h (section 1.2)
87 ************************************************************************************************************************
91 **** 2 - Données à transmettre **********************************************************************************************
92 * Selon les paramètres sélectionnés dans le fichier config.h (et les capteurs connectés à oXs), oXs peut calculer plusieurs mesures.
93 * Pour le protocole Multiplex, vous devez spécifier quelles mesures doivent être envoyées à l'émetteur (et sur quelle ligne de l'écran de l'émetteur chaque donnée doit être affichée) (voir ci-dessous)
94 * Pour les protocoles SPORT, HUB, JETI et HOTT, les mesures sont automatiquement transmises dans des champs prédéfinis et certains protocoles autorisent d'envoyer certaines mesures en réutilisant certains champs.
95 * Une des mesures est la "Vitesse verticale principale".
96 **** 2.1 Protocole FrSKY (SPORT et HUB ) ************************************************************************************
97 * les mesures transmises automatiquement sont :
98 * - Altitude relative (cm), Vitesse verticale principale (cm/sec) (si au minimum un capteur barométrique est connecté)
99 * - Tensions des cellules (si NUMBER_OF_CELLS > 0)
100 * - Courant (quand un capteur de courant est connecté)
101 * - GPS (long, lat, vitesse, altitude, course) (quand un GPS est connecté)
102 * - RPM (hz) (quand un capteur de vitesse de rotation est connecté)
103 * En supplément de ces mesures, vous pouvez spécifier les paramètres des mesures suivantes Vfas, Fuel, A3, A4, T1, T2, AccX, AccY, AccZ (voir les option disponible ci-dessous)
104 * Commenter toutes les lignes qui ne doivent pas être transmises.
106 * #define VFAS_SOURCE VOLT_4 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
107 * #define FUEL_SOURCE VOLT_4 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
108 * #define A3_SOURCE VOLT_4 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
109 * #define A4_SOURCE VOLT_4 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
110 * #define ACCX_SOURCE TEST_1 // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3, GLIDER_RATIO , SECONDS_SINCE_T0 ,AVERAGE_VSPEED_SINCE_TO , VOLT_1, VOLT_2, VOLT_3, VOLT_4, VOLT_5, VOLT_6, PITCH, ROLL, YAW, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
111 * #define ACCY_SOURCE TEST_2 // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3, GLIDER_RATIO , SECONDS_SINCE_T0 ,AVERAGE_VSPEED_SINCE_TO , VOLT_1, VOLT_2, VOLT_3, VOLT_4, VOLT_5, VOLT_6, PITCH, ROLL, YAW, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
112 * #define ACCZ_SOURCE TEST_3 // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3, GLIDER_RATIO , SECONDS_SINCE_T0 ,AVERAGE_VSPEED_SINCE_TO , VOLT_1, VOLT_2, VOLT_3, VOLT_4, VOLT_5, VOLT_6, PITCH, ROLL, YAW, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
113 * #define T1_SOURCE GLIDER_RATIO // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3, GLIDER_RATIO , SECONDS_SINCE_T0 ,AVERAGE_VSPEED_SINCE_TO , SENSITIVITY , PPM, VOLT_1, VOLT_2, VOLT_3, VOLT_4, VOLT_5, VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
114 * #define T2_SOURCE SENSITIVITY // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3, GLIDER_RATIO , SECONDS_SINCE_T0 ,AVERAGE_VSPEED_SINCE_TO , SENSITIVITY , PPM, VOLT_1, VOLT_2, VOLT_3, VOLT_4, VOLT_5, VOLT_6, ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
115 **** 2.2 Hott protocole ************************************************************************************
116 * Les mesures transmises automatiquement sont :
117 * - Altitude relative (cm), Vitesse verticale principale (cm/sec) (si au minimum un capteur barométrique est connecté)
118 * - Tensions des cellules (si NUMBER_OF_CELLS > 0)
119 * - jusqu'à trois mesures de tension de batterie (le setup spécifie quelle tension doivent être mesurerees et transmises - Exemple VOLT_1,VOLT_2, ...)
120 * - Courant (quand un capteur de courant est connecté)
121 * - GPS (long, latitude, vitesse, altitude, course) (quand un GPS est connecté)
122 * - RPM (hz) (quand un capteur de vitesse de rotation est connecté)
123 * Lorsque vous mesurez des tensions de batteries, une alarme peut être configurée pour indiquer qu'une tension est inférieure à un niveau préréglé.
124 * Pour activer cette alarme, dé-commenter la ligne ci-dessous (en milliVolt) pour régler le seuil d'alarme
125 * //#define CELL_UNDERVOLTAGE_WARNING 3300 // Attention c'est en mV;
127 * Vous pouvez aussi sélectionner comment les valeurs temperature1 et temperature2 seront remplies.
128 * Note : ces deux champs peuvent seulement retourner des valeurs allant de -20 à 235; pour le mode PPM une valeur de -100 sera affiché 0 et +100 sera affiché 200
129 * Mettre les lignes ci-dessous en commentaire quand aucune de ces mesures ne doit être transmise par télémétrie
131 * #define BATTERY_1_SOURCE VOLT_4 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6
132 * #define BATTERY_2_SOURCE VOLT_2 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6
133 * #define MAIN_BATTERY_SOURCE VOLT_5 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6
134 * #define TEMPERATURE_1_SOURCE TEST_1 // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3 , GLIDER_RATIO , SENSITIVITY , PPM
135 * #define TEMPERATURE_2_SOURCE SENSITIVITY // sélectionner une valeur parmi: TEST_1, TEST_2, TEST_3 , GLIDER_RATIO , SENSITIVITY , PPM
136 **** 2.3 Multiplex ************************************************************************************
137 * Pour le protocole Multiplex, vous devez définir quelle mesures de oXs sont transmises et ce sur quelle ligne de l'émetteur.
138 * Vous devez aussi spécifier les échelles qui doivent être appliquées par oXs et la plage de valeurs afin de définir le on/off des alarmes.
139 * Vous DEVEZ spécifie une ligne pour chaque mesure à envoyer à l'émetteur. Chaque ligne doit contenir :
140 * - 1 : le numéro de ligne de l'écran de l'émetteur où doit être affichée la mesure. Les valeurs autorisées vont de 2 à 15. Attention de ne pas utiliser deux fois la même valeur.
142 * - 3 : le nom du paramètre oXs qui doit être transmis sur cette ligne (exemple "VOLT_1") (voir note (2))
144 * - 5 : un coefficient multiplicateur à appliquer à la valeur transmise (mettre "1" pour conserver la mesure original, 10 pour multiplier la mesure par 10 , ...) (voir note (3))
146 * - 7 : un coefficient diviseur à appliquer à la valeur transmise (mettre "1" pour conserver la mesure original, 10 pour diviser la mesure par 10 , ...) (voir note (3))
148 * - 9 : un décalage (offset) à appliquer à la valeur après avoir appliqué les coefficients multiplicateur et diviseur ((mettre "0" pour conserver la mesure d'origine, "100" pour ajouter 100, ...)
150 * - 11 : une valeur pour la valeur minimum de l'alarme (voir note (4))
152 * - 13 : une valeur pour la valeur haute de l'alarme(voir note (4))
153 * - 14 : une virgule et un "\" s'il y a une mesure après celle-ci (attention à ne pas mettre ",\" pour la dernière mesure);
154 * /!\ ATTENTION que "\" doit être le dernier caractère de la ligne (aucun espace et toléré après)
155 * /!\ ATTENTION que aucune ligne de commentaire ("*...") ne soit glissée entre les différentes lignes
156 * Note (2) : Une mesure oXs (exemple VOLT_1) ne peut pas être déclarée dans plusieurs lignes.
157 * Note (3) : Les coefficients multiplicateur, diviseur et l'offset doivent être une valeur entière (pas de chiffre avec une virgule); ils peuvent être négatifs (exemple "-100").
158 * Les coefficients multiplicateur et diviseur peuvent être utiles dans les cas suivant:
159 * - pour convertir d’une unité de mesure a une autre (mètre <> pied)
160 * - pour convertir en pourcentage (exemple multiplier par 100 et diviser par 4000 afin d'obtenir un % de consommation pour un accu de 4000 mAmph)
161 * - pour ajuster le nombre de décimale à afficher sur l'émetteur.
162 * - pour avoir par exemple une valeur de quantité de carburant commençant à 100 (en pourcent) et diminuant à 0 quand la consommation augmente (dans ce cas vous devez utiliser un coefficient multiplicateur négatif et un offset de 100%).
163 * Multiplicateur/diviseur/offset doivent être définis mais ne sont pas toujours utilisés par oXs. C'est le cas quand:
164 * - CELLS_1_2, CELLS_3_4, CELLS_5_6 sont transmis (car ces champ requièrent un formatage spécial au niveau de l'émetteur)
165 * Note (4) : les limites d'alarme doivent être des nombres entiers (pas de chiffre avec une virgule); ils peuvent être négatifs (exemple "-100").
166 * Afin de définir les alarmes prévues dans le protocole Multiplex, oXs va procéder de la façon suivante:
167 * - adapter le nombre de décimales de la mesure faite par oXs (la plupart des mesures de oXs ont plus de décimales au sein de oXs que ce que prévoit le protocole Multiplex)
168 * - appliquer les coefficients multiplicateur, diviseur et l'offset
169 * - comparer le résultat avec les niveaux haut et bas des alarmes
170 * Les limites doivent être fixées en tenant compte de tous les digits visibles à l'écran.
171 * Exemple: Les tensions sont en principe en mVolt. Si vous voulez un alarme quand la tension est inférieure à 11.2 Volt, régler la valeur d'alarme minimum a 112.
172 * afin d'inhiber les alarmes mettre la valeur minimum à -16384 et/ou la valeur maximale a 16383 (valeur minimal et maximal pour le protocole de type Multiplex sur 15 bits)
174 * ci-dessous un exemple de réglage pour transmettre sur le protocole Multiplex
175 * - sur la ligne 3, l'altitude relative (sans alarme)
176 * - sur la ligne 6, la vitesse verticale (avec une alarme si la valeur excède 50m/s vers le haut ou vers le bas)
177 * #define SETUP_MULTIPLEX_DATA_TO_SEND \
178 * 3 , REL_ALTIMETER , 1 , 1 , 0 , -16384 , 16383,\
179 * 6 , VERTICAL_SPEED , 1 , 1 , -500 , 500
180 * /!\ IMPORTANT : toujours conserver la ligne "#define SETUP_DATA_TO_SEND \" ; ne pas insérer de ligne avant ou après les lignes utilisées pour définir les données à transmettre
182 * Ici vous trouverez la liste des mesures que peut envoyer oXs.
183 * Code à utiliser Unité Signification
184 * ALTIMETER m Altitude absolue (sur base du premier capteur baro)
185 * REL_ALTIMETER m Altitude relative (sur base du premier capteur de baro)
186 * ALTIMETER_MAX m Altitude relative maximale
187 * VERTICAL_SPEED cm/s Vitesse verticale principale (configurée dans VSPEED_SOURCE)
188 * SENSITIVITY none Sensibilité du Vario
189 * VOLT_1 0.1V(5) Valeur lue sur la première PIN_VOLTAGE
190 * VOLT_2 0.1V(5) Valeur lue sur la 2ème PIN_VOLTAGE
191 * VOLT_3 0.1V(5) Valeur lue sur la 3ème PIN_VOLTAGE
192 * VOLT_4 0.1V(5) Valeur lue sur la 4ème PIN_VOLTAGE
193 * VOLT_5 0.1V(5) Valeur lue sur la 5ème PIN_VOLTAGE
194 * VOLT_6 0.1V(5) Valeur lue sur la 6ème PIN_VOLTAGE
195 * CURRENTMA 0.1A MilliAmp mesuré par le capteur de courant
196 * MILLIAH mAh Consommation en Milli Amp heure
197 * RPM Hz Rotation par minute
198 * AIR_SPEED 0.1 km/h Vitesse air
199 * CELL_1 0.1V(5) Valeur basée sur la première PIN_VOLTAGE
200 * CELL_2 0.1V(5) Valeur basée sur la première et la 2ème PIN_VOLTAGE
201 * CELL_3 0.1V(5) Valeur basée sur les 2ème et 3ème PIN_VOLTAGE
202 * CELL_4 0.1V(5) Valeur basée sur les 3ème et 4ème PIN_VOLTAGE
203 * CELL_5 0.1V(5) Valeur basée sur les 4ème et 5ème PIN_VOLTAGE
204 * CELL_6 0.1V(5) Valeur basée sur les 5ème et 6ème PIN_VOLTAGE
205 * CELL_MIN 0.1V(5) Valeur basée sur CELL_1 ... CELL_6
206 * CELL_TOT 0.1V(5) Valeur basée sur VOLT1 ... VOLT6
207 * PPM Valeur définie par l’émetteur pour contrôler certaines fonctions (sensibilité, ...) (la plage est normalement -100 / +100)
208 * GPS_COURSE 0.1 deg Direction du mouvement
209 * GPS_SPEED 0.1 km/h Vitesse sol (2D ou 3D)
210 * GPS_ALTITUDE m Altitude absolue
211 * GPS_DISTANCE m Distance du point de départ
212 * GPS_BEARING 0.1 deg Direction par rapport au point de départ
213 * TEST_1 Valeur utilisée pour des tests
214 * TEST_2 Valeur utilisée pour des tests
215 * TEST_3 Valeur utilisée pour des tests
216 * (5) Les unités dépendent des paramètres utilisés (exemple quand une tension est fournie par un capteur de température, l'unité peut être des dégrés)
217 * Pour mesurer des cellules de lipo, vous devez vous assurer que la calibration soit telle que les valeurs internes soient en millivolt (et oXs va convertir les mVolt en 0.1Volt au moment de la transmission).
218 ***** 2.4 - Données Jeti ************************************************************************************************************************
219 * Les mesures transmises automatiquement sont :
220 * - Altitude relative (cm), Vitesse verticale principale (cm/sec) (si au minimum un capteur barométrique est connecté) et l'altitude maximum
221 * - Tensions des cellules (si NUMBER_OF_CELLS > 0)
222 * - Courant (quand un capteur de courant est connecté)
223 * - GPS (longitude, latitude, vitesse, altitude, course) (quand un GPS est connecté)
224 * A ceci vous pouvez aussi demander l'envoi de:
225 * - une des six tensions (si la tension est mesurée); quand un capteur NTS est utilisé pour mesurer une température, il faut définir aussi un VOLTAGE_SOURCE (voir la section a propos des capteurs NTC)
226 * - une température: vous pouvez sélectionner la température fournie par le MS5611 ou une sonde NTC.
227 * d'autres champs peuvent être ajoutés à la demande.
228 //#define VOLTAGE_SOURCE VOLT_1 // sélectionner une valeur parmi: VOLT_1, VOLT_2, VOLT_3 , VOLT_4, VOLT_5 , VOLT_6
229 //#define TEMPERATURE_SOURCE MS5611 // sélectionner une valeur parmi: MS5611 and NTC
230 ****** 2.5 - Comment remplir TEST_1, TEST_2, TEST_3 ******
231 * oXs peut calculer plus de mesures que ce que prévoit les protocoles.
232 * Certaines peuvent être directement configurées dans les sections 2.1 à 2.4 (exemple VOLT_3 peut être transmit dans T1 (pour le protocole SPORT)
233 * D'autres sont rarement utilisées et requièrent de procéder en deux étapes;
234 * - Première étape, décider quelles mesures vont remplir les champs TEST_1, TEST_2, TEST_3 (dans la section 2.5)
235 * - Second étape, décider dans quel paramètre de télémétrie ces mesures seront envoyées (dans la section 2.1 to 2.4)
236 * Pour choisir comment ces paramètres TEST_1, TEST_2, TEST_3 doivent être remplis dé-commentez une ou plusieurs lignes ci-dessous.
237 * Si vous dé-commentez plusieurs lignes, prenez garde à ne pas utiliser plusieurs fois le même paramètre.
238 **************************************************************************************************************************
239 //#define FILL_TEST_3_WITH_EXPECTED_ALT // dé-commenter cette ligne si oXs doit calculer une altitude "prévue" sur base de l'altitude actuelle, de la Vitesse verticale et de l'acceleration verticale
240 //#define EXPECTED_ALT_AT_SEC 0.2 // temps (en sec) pour l'altitude "prévue" (Cette ligne doit être dé-commentée si la précédente l'est aussi)
241 //#define FILL_TEST_1_2_3_WITH_LINEAR_ACC // dé-commenter cette ligne si oXs doit remplir les paramètres TEST_1, TEST_2, TEST_3 avec les accélérations linéaires
242 //#define FILL_TEST_1_2_WITH_VSPEED_AND_ALT_FROM_SECOND_VARIO // dé-commenter pour activer cette option
243 //#define FILL_TEST_1_WITH_DTE // dé-commenter pour activer cette option
244 //#define FILL_TEST_2_WITH_PPM_AIRSPEED_COMPENSATION // dé-commenter pour activer cette option
245 //#define FILL_TEST_1_WITH_YAWRATE // dé-commenter pour activer cette option
246 //#define FILL_TEST1_WITH_HEADING_FROM_MAGNETOMETER // dé-commenter pour activer cette option
247 //#define FILL_TEST_3_WITH_FLOW_SENSOR_CONSUMPTION // dé-commenter pour activer cette option
248 ************************************************************************************************************************
252 **** 3 - Configuration de PPM **************************************************************************************************
253 * oXs peut ( en option) changer certains paramètres et/ou remettre à zéro certaines données à partir d'actions prises sur l'émetteur
254 * Pour tous les protocoles, cela peut être réalisé à partir d'une sortie servo du récepteur pour recevoir les informations de l'émetteur.
255 * Cette fonction permet depuis l’émetteur:
256 * - de changer la sensibilité du vario en utilisant ou un potard ou un interrupteur de votre émetteur.
257 * - de changer entre un vario compensé et non compensé (par exemple quand on utilise 2 capteurs barométriques dont l'un est connecté sur une sonde TEK)
258 * - de réinitialiser le capteur de vitesse air (quand la valeur dévie avec la température)
259 * - de changer le facteur de compensation du vario (quand le vario compensé utilise le capteur de vitesse air) en utilisant un potentiomètre ou un interrupteur de l’émetteur.
260 * Ces différentes fonctions demandent des mixages dans l’émetteur et une configuration particulière dans le fichier oXs-config_advanced.h (voir ci-dessous).
262 * Si vous voulez utiliser ces fonctions, vous devez;
263 * - dé-commenter les 3 lignes suivantes (en supprimant les // devant la ligne) et
264 * - spécifier à la ligne PIN_PPM, la PIN Arduino qui sera connectée à la sortie servo du récepteur
265 * Par défaut: 2 ; vous pouvez aussi connecter la PIN 3 pour lire le signal PPM.
266 * Faire bien attention d’utiliser la pin sélectionnée (2 ou 3) uniquement pour le signal PPM.
267 * Garder cette ligne en commentaire si vous ne voulez pas utiliser cette fonction.
268 * - spécifier à la ligne PPM_MIN_100 la largeur d’impulsion (en micro seconde) quand la voie envoie la valeur “logique” = -100.
269 * La valeur par défaut est 988.
270 * - spécifier à la ligne PPM_PLUS_100 la largeur d’impulsion (en micro seconde) quand la voie envoie la valeur “logique” = +100.
271 * La valeur par défaut est 2012.
272 * Les deux dernières valeurs sont utilisées afin de calibrer oXs avec l’émetteur quand la fonction PPM est utilisée
273 * Il est probable que si vous utilisez les valeurs par défaut cela fonctionne.
274 * Il est plus sûr pour le bon fonctionnement de calibrer ces paramètres (uniquement si vous utilisez la fonction PPM).
275 * Pour ce faire, assurez-vous de transmettre le champ de mesure oXs "PPM" à émetteur (par exemple en l'envoyant comme T1).
276 * Noter les valeurs affichées sur l'émetteur (par exemple dans le champ T1) lorsque le TX envoie respectivement -100 et +100 sur le canal PPM (utilisez un commutateur ou un pot).
277 * Remplissez ces valeurs dans ces paramètres et rechargez votre programme dans l'Arduino.
279 * Si vous utilisé le protocole FRSKY SPORT (uniquement pour récepteur de la série X) avec openTX 2.2(ou dessus) vous pouvez envoyer le signal PPM sans avoir à connecter oXs à une sortie servo du récepteur.
280 * OpenTx 2.2 vous permet de lancer un script LUA qui envoye des valeurs depuis votre émetteur vers oXs
281 * Pour activer cette option, vous devez:
282 * - dé-commenter la ligne #define PPM_VIA_SPORT
283 * - lancer le script LUA qui vous permet d'envoyer via le protocole SPORT le même type de valeur qu'une voie du récepteur. (Cette valeur est comprise entre -100 and 100)
284 * Ce script LUA doit utiliser une commande comme ceci:
285 * Local ret = sportTelemetryPush( 0x0D , 0x10 , 0x0010 , -52 )
287 * - 0xOD : est le numéro d'identification utilisé (défini dans les fichiers oXs_config_advanced.h)
288 * - 0x10 : est une valeur non utilisé
289 * - 0x0010 : est le code utilisé pour identifier qui s'agit d'une valeur PPM
290 * - -52 : est la valeur PPM transmise (-52 est juste un exemple; elle doit être adaptée à la valeur à transmettre)
291 * vous pouvez trouver un exemple de script LUA dans ce package (dans le dossier "lua scripts"). Le nom du fichier est oXsppm.lua et doit être installé dans le répertoire SCRIPTS/FUNCTIONS de la carte SD.
292 ************************************************************************************************************************
294 #define PPM_MIN_100 988
295 #define PPM_PLUS_100 2012
296 #define PPM_VIA_SPORT // dé-commenter cette ligne pour recevoir un signal PPM par le protocole SPORT a la place d'une sortie servo du récepteur (Cela nécessite un émetteur équiper d'openTX et contenant le script en LUA)
297 ************************************************************************************************************************
301 **** 4 - Configuration du vario ************************************************************************************************
303 * 4.1 - Connections de 1 ou 2 capteurs barométriques (optionnel) *********************************************
304 * oXs peut être connecté à diffèrents capteurs barométriques.
305 * Les meilleurs résultats sont obtenus avec un capteur barométrique MS5611. Ce type de capteur est généralement monté sur un module (comme le GY-63 ou GY-86) avec un régulateur de tension de 3.3 volt et un adaptateur de voltage pour bus I2C.
306 * Il est possible d’utiliser aussi des modules avec des capteurs BMP085 ou BMP180 ou BMP280 (qui sont plus économiques mais moins précis).
307 * Il est possible de connecter 1 ou 2 capteurs barométriques ; le premier peut être un capteur de type BMP085 ou BMP180 ou BMP280 ou encore un MS5611; le second capteur doit etre un MS5611 (car les capteurs de type BMPxxx ont qu’une adresse I2C).
308 * Note : Toujours utiliser un module qui possède un régulateur de tension 3,3Volt et si possible adaptateur de voltage pour le bus I2C quand on utilise 5 Volt comme Vcc de l’Arduino.
309 * Chaque capteur peut calculer l’altitude absolue ou relative (en mètre avec 1 décimale) et la vitesse verticale (en mètre/seconde avec 2 décimales).
310 * Un second capteur peur être utile si associé à une sonde TEK (pour avoir un vario compensé pneumatiquement) et si l’option PPM est active, il est possible de sélectionner depuis l’émetteur le capteur qui vas générer le son du vario.
311 * Ceci permet de basculer entre un vario compensé pneumatiquement et un vario non compensé.
312 * Quand on utilise deux capteurs barométriques, oXs peut transmettre la moyenne des vitesses verticales des deux capteurs. Ceci ne semble toutefois pas très utile.
313 * Vous devez spécifier le type de capteur utilisé pour le premier vario avec la ligne #define FIRST_BARO_SENSOR_USE MS5611
314 * La valeur à renseigner doit être une valeur de la liste suivante: NO_BARO , MS5611, GY86 , BMP085 , BMP180 , BMP280
315 * Vous devez spécifier le type de capteur utilisé pour le second vario avec la ligne #define SECOND_BARO_SENSOR_USE NO_BARO
316 * La valeur à renseigner doit être soit NO_BARO soit MS5611
317 * Les deux capteurs sont connectés en parallèle (utilisent les pins A4 et A5 Arduino).
318 * Le premier capteur (MS5611 ou BMPxxx) répond sur l’adresse 0x77 du bus I2C.
319 * /!\ ATTENTION ne pas oublier de connecté la PIN SDO à VDD sur le BMP280 pour obtenir l'adresse 0x77
320 * Si il est utilisé, le second capteur (un MS5611) doit avoir la PIN CE connecter à VDD. Comme cela l’adresse I2C sera 0x76. (Note: par défaut la pine CE du MS5611 est connectée a GND ainsi son adresse I2C est 0x77)
321 * Note : Quand un seul capteur est connecté, il doit être connecté comme premier capteur.
322 ***********************************************************************************************************************
323 * 4.2 - Type de vitesse verticale transmise *****
324 * oXs peut calculer diffèrentes vitesses verticales et permet de choisir celle doit être transmise.
325 * Selon le contenu de la ligne #define VSPEED_SOURCE, la vitesse verticale sera basée sur
326 * - le premier capteur barométrique (= cas normal)
327 * - le deuxième capteur barométrique
328 * - la moyenne des deux capteurs barométriques
329 * - le premier capteur barométrique et la compensation par la vitesse air (avec tube de pitot/Prandtl) (= dtE)
330 * - le premier capteur barométrique + le module IMU (accéléromètre + gyroscope)
331 * - soit un premier soit une type de vitesse verticale en fonction du signal PPM envoyé par l'émetteur
332 ***********************************************************************************************************************
333 #define VSPEED_SOURCE FIRST_BARO // select between FIRST_BARO, SECOND_BARO , AVERAGE_FIRST_SECOND, AIRSPEED_COMPENSATED , BARO_AND_IMU or PPM_SELECTION
334 ***********************************************************************************************************************
335 * 4.3 - Définition de la sensibilité par programmation *****************************
336 * Quand un vario est utilisé, oXs peut prendre en compte certains paramètres pour ajuster la sensibilité
337 * La sensibilité peut être réglée entre les valeurs:
338 * - 20 (réglage conservatif, temps de réaction = plusieurs secondes)
339 * - 150 (rapide mais beaucoup d’erreurs, temps de réaction = bien inferieur à la seconde)
340 * 50 est une valeur "normale" pour mesurer de petites vitesses verticales (recherche d’ascendances en planeur); ce réglage donne une réaction autour de la seconde.
341 * La sensibilité peut être réglée par programmation et/ou par l’émetteur.
343 * Si vous voulez une réponse très rapide du vario la meilleur solution est d’utiliser un module gy-86 qui comprend un capteur MPU6050 (accéléromètre/gyroscope) en complément du capteur barométrique (voir ci-dessous).
344 * Note: quand le vario est utilisé (#define VARIO dé-commenter), vous devez spécifier (dans la section 9) comment la vitesse verticale est calculée.
346 * Le réglage de la sensibilité utilise 4 paramètres:
347 * SENSIVITY_MIN = Cette sensibilité est la sensibilité de base du vario.
348 * Ce paramètre est donc le paramètre principal de controle de la sensibilité du vario.
349 * Cette valeur est utilisée par oXs quand la différence entre la valeur de la Vitesse verticale actuelle (calculée toutes les 20 ms) et la précédente valeur de la vitesse verticale est inferieure à la valeur définie par SENSITIVITY_MIN_AT ; la valeur typique est 40.
350 * SENSIVITY_MAX = c’est la sensibilité maximale utilisée quand la vitesse verticale change très rapidement.
351 * Cette valeur est utilisée par oXs quand la différence entre la valeur de la Vitesse verticale actuelle et la précédente valeur de la vitesse verticale est supérieure à la valeur définie par SENSITIVITY_MAX_AT ; la valeur typique est 300.
352 * SENSITIVITY_MIN_AT = vitesse verticale pour laquelle SENSITIVITY_MIN est applicable (voir ci-dessus) (cm/s); la valeur typique est 100 (cm/s).
353 * SENSITIVITY_MAX_AT = vitesse verticale pour laquelle SENSITIVITY_MAX est applicable (voir ci-dessus) (cm/s); la valeur typique est 1000 (cm/s).
354 * Entre ces valeurs, la sensibilité est calculée par interpolation entre SENSITIVITY_MIN et SENSITIVITY_MAX.
355 * Ces paramètres permettent à oXs d’avoir un temps de réaction rapide quand la vitesse verticale change rapidement et d’avoir un vario silencieux dans des conditions calmes.
356 * Note: SENSITIVITY_MAX peut-être égale au paramètre SENSITIVITY_MIN si aucune adaptation automatique n'est désirée en cas de changement rapide.
357 ************************************************************************************************************************
358 #define SENSITIVITY_MIN 50
359 #define SENSITIVITY_MAX 300
360 #define SENSITIVITY_MIN_AT 100
361 #define SENSITIVITY_MAX_AT 1000
362 ************************************************************************************************************************
363 * 4.4 - Modification de la sensibilité depuis l'émetteur *******************************************************************************
364 * La sensibilité peut être ajustée depuis l’émetteur grâce à un interrupteur ou un potentiomètre et quelques mixages sur une voie de sortie servo du récepteur.
365 * Pour utiliser cette option, une sortie servo doit être connectée à oXs (voir « Configuration de PPM » dans la section 3)
366 * Quand oXs reçoit un signal de l’émetteur, la valeur SENSIVITY_MIN définie dans la section 4.3 est négligée et remplacée par une valeurs calculées sur base des paramètres ci-dessous.
368 * Le réglage utilise 4 paramètres:
369 * SENSITIVITY_MIN_AT_PPM = quand l’émetteur envoie cette valeur sur la sortie PPM, le paramètre SENSITIVITY_MIN (voir section 4.2) est remplacé par la valeur du paramètre SENSITIVITY_PPM_MIN; Une valeur typique peut être 10.
370 * SENSITIVITY_MAX_AT_PPM = quand l’émetteur envoie cette valeur sur la sortie PPM, le paramètre SENSITIVITY_MAX (voir section 4.2) est remplacé par la valeur du paramètre SENSITIVITY_PPM_MAX; Une valeur typique peut être 40.
371 * Les paramètres SENSIVITY_PPM_MIN+MAX définissent la plage dans laquelle vous aller pouvoir ajuster la sensibilité:
372 * SENSITIVITY_PPM_MIN = valeur minimum pour le paramètre SENSITIVITY_MIN qui peut lui être assigné par PPM; Une valeur typique peut être 20.
373 * SENSITIVITY_PPM_MAX = valeur maximum pour le paramètre SENSITIVITY_MAX qui peut lui être assigné par PPM; Une valeur typique peut être 100.
374 * SENSITIVITY_MIN est automatiquement interpoler entre le paramètre SENSITIVITY_PPM_MIN et le paramètre SENSITIVITY_PPM_MAX selon le signal PPM reçu.
375 * la sensibilité change seulement si la valeur du signal PMM est comprise entre SENSITIVITY_MIN_AT_PPM - 5 et SENSITIVITY_MAX_AT_PPM + 5.
376 * /!\ note importante: la sensibilité est changée sur base de la valeur absolue du signal PPM; donc PPM = -25 a le même effet que PPM = 25.
377 * Ceci est important pour pouvoir combiner un changement de sensibilité avec une sélection du type de vitesse verticale (ceci permet de passer d'un vario non compensé à un vario compensé sur l'émetteur).
378 ************************************************************************************************************************
379 #define SENSITIVITY_MIN_AT_PPM 10
380 #define SENSITIVITY_MAX_AT_PPM 40
381 #define SENSITIVITY_PPM_MIN 20
382 #define SENSITIVITY_PPM_MAX 100
383 ************************************************************************************************************************
384 * 4.5 - Hystérésis et compensation de l'altitude en fonction de la température du capteur de pression ***************************************************
385 * oXs peut appliquer un hystérésis sur les changements de vitesse verticale.
386 * Ceci permet de ne pas envoyer trop souvent un changement de vitesse verticale (ce qui peut provoquer de fausses alertes sonores). C'est un autre moyen de réduire la sensibilité.
387 * VARIOHYSTERESIS veux dire que la vitesse verticale change si la vitesse verticale mesurée (après filtrage) diffère de la valeur précédemment transmise de plus que la valeur de ce paramètre.
388 * Une valeur typique peut être 5 (= 5 cm/s); 0 veux dire pas d'hystérésis.
390 * oXs permet aussi d'avoir une compensation depuis le capteur MS5611 (pas depuis le capteur BMPxxx) afin de compenser la dérive de l'altitude due à l'augmentation de température interne du capteur après sa mise en route.
391 * La température interne du composant MS5611 augmente de plusieurs dégrés lors de sa lecture par l'Arduino.
392 * En principe, le capteur MS5611 a des paramètres de compensation pour pallier à l'augmentation de sa température interne.
393 * Pourtant il semble que ces paramètres de correction ne soit pas toujours optimum.
394 * oXs permet d'ajouter une compensation supplémentaire pour palier ce problème. Pour cela vous devez remplir le paramètre ALT_TEMP_COMPENSATION.
395 * Afin de définir la meilleure valeur pour votre capteur (cela peut varier d'un MS5611 à l'autre), la façon la plus facile est de tester plusieurs valeurs.
396 * Les informations suivantes peuvent vous être utile:
397 * - Il est préférable de faire les essais dans des conditions atmosphériques calmes (journée calme sans vent)
398 * - Assurez-vous que l'altitude est affichée sur votre émetteur
399 * - Assurez-vous que le capteur MS5611 est protégé de la lumière (le capteur est photosensible)
400 * - Premièrement avec le paramètre ALT_TEMP_COMPENSATION mis à zéro (ou mis en commentaire), démarrer votre émetteur et votre récepteur. Ne bouger pas votre oXs (l'altitude affichée sur votre émetteur doit être 0).
401 * - Après 5 minutes noter la différence d'altitude.
402 * - Eteignez votre récepteur et votre émetteur pour 5 minutes minimum afin de faire redescendre la température interne du capteur.
403 * - Répéter cette opération une ou deux fois.
404 * - Si la déviation d'altitude est environ la même entre chaque essais et dépasse 1 mètre, il sera possible de réduire cette dérive avec une valeur dans le paramètre ALT_TEMP_COMPENSATION
405 * - Si la dérive est positive, alors augmenter le paramètre ALT_TEMP_COMPENSATION autrement réduise le; ALT_TEMP_COMPENSATION peut être négatif (cela peut être le cas si la dérive est négative).
406 * - Il est très compliqué de calculer la valeur de correction. Sur mon capteur j'ai une valeur = 1000 pour compenser une variation de 3 mètre mais cela peut varier sur votre capteur.
407 * - Mettre une valeur au peremètre ALT_TEMP_COMPENSATION, répéter les tests précédent (allumer votre émetteur et votre récepteur, attendre 5 min, noter la dérive d'altitude) et augmenter ou diminuer la valeur si besoin.
408 * Note importante: donner une valeur au paramètre ALT_TEMP_COMPENSATION ne va pas éliminer totalement la dérive d'altitude car:
409 * - cela peut être le résultat d'une variation de pression atmosphérique (celle-ci ne peut pas être compensée)
410 * - la dérive peut venir d'autres facteurs
411 * - la compensation n'est pas linéaire sur toutes les valeurs de pression et de température
412 ************************************************************************************************************************
413 #define VARIOHYSTERESIS 5
414 ************************************************************************************************************************
415 * 4.6 - Choix du type de vitesse verticale en fonction du signal PPM (optionnel) **************************************************************
416 * Quand vous utiliser 2 capteurs barométriques ou un capteur barométrique et un capteur de vitesse Pitot (4525D0 - voir section 5) ou un capteur barométrique et un IMU, oXs peut calculer différentes vitesses verticales (ou dTE).
417 * Quand l'option PMM est activée, oXs permet de choisir entre 2 types de vitesse verticale (vitesse vertical du premier ou second capteur ou compensé par le Pitot, etc...) celle qui doit être envoyée à l'émetteur.
418 * Ceci permet de changer sur l'émetteur entre un vario compensé et un non compensé .
419 * Bien que oXs puisse calculer jusqu'à 5 types de vitesse verticale ( FIRST_BARO, SECOND_BARO , AVERAGE_FIRST_SECOND, AIRSPEED_COMPENSATED , BARO_AND_IMU ), il est uniquement possible de changer entre 2 vitesses verticales de son choix.
420 * Pour activer cette option, plusieurs paramètres sont nécessaires,
421 * 1) Spécifier le type de vitesse vertical qui sera la primaire et et la secondaire en utilisant les lignes ci-dessous:
422 * #define VARIO_PRIMARY XXXXXXX
423 * #define VARIO_SECONDARY YYYYYYY
424 * Ou XXXXXX et YYYYYY est une valeur sélectionnée dans la liste suivante: FIRST_BARO, SECOND_BARO , AVERAGE_FIRST_SECOND, AIRSPEED_COMPENSATED , BARO_AND_IMU
425 * 2) Spécifier la plage de valeurs PPM qui déterminent le fait que oXs doit envoyer la vitesse verticale "primaire" ou la "secondaire" dans les lignes ci-dessous.
426 * #define SWITCH_VARIO_MIN_AT_PPM 10
427 * #define SWITCH_VARIO_MAX_AT_PPM 90
428 * Quand la valeur absolue de PPM est entre le paramètre SWITCH_VARIO_MIN_AT_PPM (valeur typique = 10) et le paramètre SWITCH_VARIO_MAX_AT_PPM (valeur typique = 90),
429 * - oXs vas switcher sur la vitesse verticale primaire si la valeur de PPM est positive
430 * - oXs vas switcher sur la vitesse verticale secondaire si la valeur de PPM est négative
431 * Note: Quand la valeur absolue the PPM est hors de la plage de valeur, oXs ne va pas changer de type de calcul de vitesse vertical et va rester avec le type actuel.
432 * Ce principe permet d'utiliser un interrupteur en même temps qu'un potentiomètre pour contrôler la sensibilité.
433 * Le passage de positif à négatif sur openTx peut être réalisé à l'aide d'un mixage "MULTIPLY by -100%".
434 * L'envoi d'une valeur PPM hors de cette plage de valeurs permet d'appliquer une autre fonction (exemple la remise à zéro de offset de la vitesse air) sans changer le calcul de la vitesse vertical.
435 * 3) Spécifier dans la section 4.2 que la sélection de la source de vitesse verticale est "PPM_SELECTION"
436 ****************************************************************************************************************************
437 #define VARIO_PRIMARY AIRSPEED_COMPENSATED // sélectionner une valeur parmi: FIRST_BARO, SECOND_BARO , AVERAGE_FIRST_SECOND, AIRSPEED_COMPENSATED , BARO_AND_IMU
438 #define VARIO_SECONDARY FIRST_BARO // sélectionner une valeur parmi: FIRST_BARO, SECOND_BARO , AVERAGE_FIRST_SECOND, AIRSPEED_COMPENSATED , BARO_AND_IMU
439 #define SWITCH_VARIO_MIN_AT_PPM 10
440 #define SWITCH_VARIO_MAX_AT_PPM 90
441 *************************************************************************************************************************
442 * 4.7 - vitesse verticale analogique (optionnel) ***********************************************************************************
443 * oXs peut aussi donner la vitesse verticale (uniquement celle du capteur 1) sous forme de signal analogique. Ceci peut être utilisé par exemple sur des récepteurs Frsky ayant des entrées analogiques mais pas les protocoles HUB ou SPORT.
444 * Ceci peut être utile si votre récepteur ne possède pas de communication digital (ou si celle-ci est déjà utilisé par un autre capteur)
445 * /!\ Des composent supplémentaires (1 résistance et 1 condensateur) sont nécessaires! Lire le Wiki si vous voulez utiliser cette option.
446 * Pour activer cette option:
447 * - dé-commenter les trois paramètres suivant
448 * - définir dans le paramètre PIN_ANALOG_VSPEED la sortie Arduino DIGITAL qui va être utilisée (voir ci-dessous)
449 * Par défaut 3; la PIN utilisée ne peut être que la PIN 3 ou 11 car la fonction Arduino timer 2 doit être utilisée par oXs.
450 * - définir les limites min et max de la vitesse verticals (en mètre/sec)
451 * - ANALOG_VSPEED_MIN : une vitesse verticale inferieure ou égale va envoyer 0 Volt au récepteur
452 * - ANALOG_VSPEED_MAX : une vitesse verticale supérieure ou égale va envoyer 3.2Volt au récepteur
453 *************************************************************************************************************************
454 #define PIN_ANALOG_VSPEED 3
455 #define ANALOG_VSPEED_MIN -3
456 #define ANALOG_VSPEED_MAX 3
457 *************************************************************************************************************************
458 * 4.8 - Calcul de la finesse du planeur, du taux moyen de montée/descente, de l’altitude moyenne gagnée/perdue ***************************************************************
459 * oXs peut calculer et envoyer certaines données quand la vitesse air et la vitesse verticale restent stables (dans une certaine tolérance) plus de X secondes (exemple entre 5 à 10 sec)
460 * Les valeurs calculées sont:
461 * - le temps écoulé depuis le début du calcul de la finesses du planeur et de taux moyen de montée/descente.
462 * - le taux moyen de montée/descente ( = différence d'altitude / temps écoulé )
463 * - finesse planeur (= distance / différence d'altitude) (en fait = vitesse air * temps écoulé / différence d’altitude)
464 * Le calcul de la finesse planeur est un paramètre qui permet d'affiner les réglages du planeur. Cela n'a de sens que si les vitesses (verticale et air) sont stables.
465 * oXs effectue ces calculs uniquement quand:
466 * - la vitesse air ne change pas d'un certain pourcentage (comparé à la vitesse au début du temps écoulé). Ce pourcentage peut être défini par l'utilisateur dans le paramètre SPEED_TOLERANCE.
467 * - la vitesse verticale reste dans les limites définies par l'utilisateur dans les paramètres VSPEED_MIN_TOLERANCE et VSPEED_MAX_TOLERANCE
468 * Toutes les 0.5sec, oXs vérifie que les mesures instantanées restent dans les tolérances définies.
469 * Si les mesures effectuées par oXs sont hors des tolérances définies, oXs arrête le calcul en cours, et reprend avec de nouvelles mesures. Finesse du planeur et taux moyen de montée/descente sont remis à 0.
470 * Si les mesures d'oXs restent dans les tolérances définies par l'utilisateur au moins pendant dans le temps défini par le paramètre GLIDER_RATIO_CALCULATED_AFTER_X_SEC, oXs procède au calcul.
471 * Note: Dans cette version d’oXs, si vous voulez envoyer les paramètres calculés, vous devez faire une configuration qui demande l'envoi des paramètres de la façon suivante:
472 * - TEST1 pour le temps écoulé (en 1/10 de sec)
473 * - TEST2 pour la vitesse verticale moyenne (en cm/sec comme la vitesse verticale)
474 * - TEST3 pour la finesse du planeur (en 1/10 d'unité)
475 * Le calcul de finesse du planeur nécessite un tube de Pitot et un vario;
476 * Le taux moyen de montée/descente peut être calculé sans sonde de Pitot( mais la correction par la vitesse ne pourat pas ce faire)
477 * Afin d'activer la fonction vous devez dé-commenter et remplir les lignes suivantes.
478 * Pour désactiver la fonction il vous suffit de mettre en commentaire la ligne suivante: GLIDER_RATIO_CALCULATED_AFTER_X_SEC
479 *************************************************************************************************************************
480 #define GLIDER_RATIO_CALCULATED_AFTER_X_SEC 10 // Temps écoulé pour effectuer le calculer et le transmettre(en sec)
481 #define SPEED_TOLERANCE 5 // En % de la vitesse
482 #define VSPEED_MIN_TOLERANCE -200 // Hors de la tolérance quand la vitesse vertical est inferieur a cette valeur (cm/sec)
483 #define VSPEED_MAX_TOLERANCE -10 // Hors de la tolérance quand la vitesse vertical est supérieur a cette valeur (cm/sec)
484 ************************************************************************************************************************
485 * Note : Il n'est pas utile de mettre en commentaire les paramètres de sensibilité, hystérésis etc. quand un vario n'est pas utilisé (ces données seront juste négligées lors de la compilation)
486 * Les paramètres de sensibilité, hystérésis sont communes aux deux capteurs barométriques
487 ************************************************************************************************************************
491 **** 5 - Configuration de la vitesse air (optionnel) ***************************************************************************
492 * oXs peut mesurer la différence de pression entre une pression statique et une pression dynamique grace à une sonde de Prandtl (ou plus souvent connue sous le nom de sonde de Pitot)
493 * Les meilleurs résultats sont obtenus avec un capteur 4525DO-DS5AI001DP.
494 * Il est à noter que ce capteur fonctionne à Vcc = 5 Volt et qu'il peut mesurer des vitesses jusqu'à 360 km/h.
495 * Il existe d'autre version du capteur 4525DO fonctionnant en Vcc = 3.3 Volt ou permettant de mesurer de plus forte pressions donc de plus haute vitesse.
496 * Le Capteur 4525DO est connecté à L'Arduino en parallèle avec le capteur barométrique MS5611 (en utilisant le bus I2C et les pin A4 et A5 en plus de Vcc et Ground)
497 * Il est recommandé d'ajouter un condensateur (100nf) le plus près possible du 5424DO entre Ground et Vcc.
498 * Note: A faible vitesse air (exemple sous 10 km/h), la différence de pression à mesurer est tres faible ce qui la rend moins fiable.
499 * Le capteur 4525DO-DS5AI001DP est assez difficile à se procurer et est assez coûteux.
500 * Un alternative consiste à utiliser un capteur MPXV7002 combiné à un ADC ADS1115. Voir la section ADS1115 ci-dessous.
502 * Dans la ligne #define AIRSPEED_SENSOR_USE vous devez définir le type de capteur que vous utilisez
503 * Sélectionner une valeur parmi: NO_AIRSPEED , MS4525 , MPXV7002
505 * Le capteur de pression nécessite une calibration afin de retourner la valeur "0" quand la vitesse air est nulle.
506 * oXs calibre automatiquement le capteur quand il est mis sous tension (en considèrant que la valeur lue à ce moment correspond à une vitesse nulle)
507 * Pour cela, il est important de ne pas exposer au vent la sonde de Prandtl (Pitot) lors du démarrage de oXs.
508 * Malgré cela, une dérive peut être observée lors de l'échauffement du capteur.
509 * oXs permet de calibrer le capteur depuis l’émetteur via la fonction PPM (voir section 3).
510 * Le paramètre AIRSPEED_RESET_AT_PPM défini la valeur que doit envoyer l’émetteur pour forcer la re-calibration du capteur.
511 * La valeur par défaut est 100.
512 * Le plus simple est de configurer l'envoi d'une impulsion par l'émetteur (par exemple envoyer la valeur 100 pendant 1 seconde).
513 * /!\ Note : l'ordre de re-calibration doit être envoyé uniquement quand la vitesse air est vraiment nulle sinon cela génèrera de fausses mesures.
515 * oXs peut calculer deux types de vitesse air:
516 * - la première est une vitesse air basée sur la densité de l'air à 15°C et 11325 hPa (au niveau de la mer). C'est la vitesse air utilisée dans l'aéronautique.
517 * Exemple la vitesse de décrochage ne varie pas avec l'altitude
518 * - La seconde tient compte de la pression (fourni par le capteur barométrique) et de la température interne du capteur afin de calculer la "vraie" vitesse (à comparer avec la vitesse GPS par vent nul).
519 * La vitesse air normalisée est calculée quand la ligne #define AIRSPEED_AT_SEA_LEVEL_AND_15C n'est pas en commentaire. Pour avoir la vraie vitesse air, mettre cette ligne en commentaire.
521 * oXs peut envoyer la vitesse air en (1/10) de knot/h ou en (1/10) km/h. Pour OpenTx, vous devez utiliser l'option knot/h (seule certaines vielles versions ont besoin de l'option km/h).
522 * Pour activer l'option km/h, il faut dé-commenter la ligne #define AIRSPEED_IN_KMH
523 * Sinon mettre cette ligne en commentaire pour activer l'option knot/h.
525 * oXs peut aussi utiliser la mesure de vitesse air pour calculer le variomètre compenser appeler PRANDTL_DTE (=delta total energy).
526 * Aller voir sur le web pour plus d'information a propos dTE (= electronically compensated vario).
527 * Le principe)e est d'essayer de détecter uniquement les vrai ascendance en neutralisant les effet de la gouverne de profondeur.
528 * Normalement, DTE doit être transmis par le paramètre vitesse vertical (vitesse verticale = Valeur par défaut) car OpenTX ne supporte pas encore un champ spécifique pour celui-ci.
530 * Lorsque l'option PPM est implémentée, il est également possible d'ajuster le facteur de compensation entre 2 valeurs.
531 * Cela nécessite de dé-commenter 4 paramètres:
532 * COMPENSATION_MIN_AT_PPM Spécifiez la valeur PPM afin de définir la compensation à la valeur spécifiée par COMPENSATION_PPM_MIN; Défaut = 60
533 * COMPENSATION_MAX_AT_PPM Spécifiez la valeur PPM afin de définir la compensation à la valeur spécifiée par COMPENSATION_PPM_MAX; Défaut = 90
534 * COMPENSATION_PPM_MIN Compensation minimale; en % ; Par défaut 80
535 * COMPENSATION_PPM_MAX 120 Compensation maximal; en % ; Par défaut 120
536 ************************************************************************************************************************
537 #define AIRSPEED_SENSOR_USE MS4525
538 #define AIRSPEED_AT_SEA_LEVEL_AND_15C // Si cette ligne est commentée, la vitesse est calculée à l'aide de la pression et de la température du capteur barométrique (donc une vitesse "vraie" au lieu de la vitesse normale).
539 //#define AIRSPEED_IN_KMH // Décommentez cette ligne si la vitesse doit être en km / h au lieu de nœud / h (sauf certaines anciennes versions, OpenTx s'attend à nœud / h)
540 #define AIRSPEED_RESET_AT_PPM 100
541 #define COMPENSATION_MIN_AT_PPM 60
542 #define COMPENSATION_MAX_AT_PPM 90
543 #define COMPENSATION_PPM_MIN 80
544 #define COMPENSATION_PPM_MAX 120
545 ************************************************************************************************************************
550 **** 6 - Configuration du capteur de tension et de courant (optionnel) ***************************************************
552 * 6.1 - Tension de référence pour mesurer des tensions et des courants **************************************************************
553 * Le courant et les tensions peuvent être mesurés en (1023) pas soit par rapport à VCC, soit par rapport à une référence interne d'environ 1.1Volt soit par rapport à une référence externe.
554 * Si VCC est très stable, il est probablement plus précis et plus facile de mesurer le courant et les tensions sur base de VCC (donc en 1023 pas de VCC).
555 * Pourtant, cela exige que la tension appliquée sur la broche "RAW" d'Arduino soit régulée ou au moins toujours supérieure à 5,5 volts (afin de laisser le régulateur propre à la carte Arduino assurer la régulation à 5 volts)
556 * Si la tension sur la broche "Raw" est inférieure à 5,5 volts et change (par exemple en raison de la consommation des servos ou de la tension de la batterie), les mesures de courant et de tension seront fausses.
557 * Si VCC ne peut être très stable (par exemple, Arduino est alimenté par le RX sous 4.8 Volt NiMh) et vous n'avez besoin que des tensions (pas besoin de mesure de courant), il est possible de mesurer en fonction de la référence de tension interne Arduino (1.1 volt).
558 * Si vous avez besoin également d'une mesure de courant, l'utilisation de la tension interne (1.1 volt) n'est pas la solution, car le capteur de courant a besoin d'une tension stable aussi.
559 * Veillez à ce que les diviseurs de tension (voir ci-dessous) soient configurés pour que la tension de la broche analogique Arduino ne dépasse pas VCC ou 1,1 volt ou la tension externe en fonction de l'option que vous choisissez.
560 * - Dé-commentez la "#define USE_INTERNAL_REFERENCE" pour activer la référence à la tension interne 1.1 volt (sinon, les mesures seront basées sur VCC).
561 * - Dé-commentez la "#define USE_EXTERNAL_REFERENCE" pour activer la référence de tension externe (sinon, les mesures seront basées sur VCC).
562 * Note: pour utiliser une référence de tension externe, vous devez connecter une tension de référence à la pin AREF votre Arduino. Ceci est assez difficile avec l'Arduino pro mini car la PIN AREF n'est pas disponible.
563 * - Pour obtenir les meilleures mesures, vous pouvez configurer la référence de tension en utilisant la ligne #define REFERENCE_VOLTAGE.
564 * La valeur doit être définie en millivolt (par exemple 5100 pour 5,1 volts) et ne pas pas contenir de décimales;
565 * Si cette valeur est omise, oXs appliquera automatiquement 1100 (lorsque USE_INTERNAL_REFERENCE est défini) et 5000 dans les autre cas.
566 * Lorsqu'une référence externe est utilisée, REFERENCE_VOLTAGE doit être spécifié
567 ************************************************************************************************************************
568 //#define USE_INTERNAL_REFERENCE
569 //#define USE_EXTERNAL_REFERENCE //Dé-commentez cette ligne si vous utilisez une référence externe au lieu de Vcc
570 #define REFERENCE_VOLTAGE 5000
571 ************************************************************************************************************************
572 * 6.2 - Configuration des tensions *******************************************************************************************
573 * oXs peut mesurer jusqu'à 6 tensions d'entrée avec l'Arduino ADC (veuillez noter que chez certains fabricants, les Arduino pro mini ont moins de broches analogiques disponibles).
574 * Pour mesurer les tensions, vous:
575 * - Devez spécifier YES dans la ligne ARDUINO_MEASURES_VOLTAGES
576 * - Devez spécifier les broches analogiques (A0 à A7) connectées à une batterie (par exemple un lipo multicellulaire) ou à un capteur analogique (par exemple, un capteur de température qui transforme la température en une tension qui elle peut être mesurée)
577 * - Devez spécifier les valeurs des résistances utilisées pour les ponts diviseurs de tension (voir ci-dessous)
578 * - Pouvez spécifier un décalage et/ou une mise à l'échelle à appliquer
580 * Note : Une broche analogique peut également être utilisée pour mesurer un courant à l'aide d'un capteur de courant; La configuration d'un capteur de courant est décrite dans la section 6.4 (voir ci-dessous);
581 * N'utilisez pas la même broche analogique pour mesurer une tension et un courant.
582 * /!\ Attention: ne pas utiliser les broches A4 et A5 si vous utilisez un vario ou un capteur de vitesse air ou un ads1115 (ces broches sont réservées au bus I2C de ces capteurs).
584 * Si vous ne mesurez pas de voltages avec l'Arduino ADC, mettez NO dans la ligne ARDUINO_MEASURES_VOLTAGES
585 * Les broches utilisées pour mesurer certaines tensions sont définies dans la ligne #define PIN_VOLTAGE.
586 * Lorsqu'elle est utilisée, cette ligne doit contenir 6 valeurs (séparées par des virgules); la première valeur est utilisée pour mesurer VOLT_1, la deuxième VOLT_2, ... jusqu'à VOLT_6
587 * Chaque valeur doit être un nombre de 0 à 7 (0 signifie A0 = pin analogique 0, 1 signifie A1, ... 7 signifie A7) ou la valeur "8" (quand la tension ne doit pas être mesurée)
588 * Note: les mêmes valeurs de broches analogiques peuvent être utilisées dans plusieurs tensions (par exemple pour VOLT1 et VOLT6).
590 * Note: Si les tensions de chaque élément d'un LiPo doivent être mesurées, il FAUT commencer à partir de VOLT1 pour 1s, VOLT2 pour 2s ....., d'autres tensions peuvent être mesurées mais elles doivent être définies après celles correspondant au nombre de cellules à mesurer
591 * Et le nombre max d'éléments DOIT être spécifié dans "numberofcells" (voir la section suivante)
592 * Les numéros de broche Ax ne doivent pas être consécutives (par exemple, la cellule 1 peut être connectée à A2, la cellule 2 à A0, ...)
594 * /!\ Veillez à ce que la tension appliquée à la broche Arduino ne dépasse pas Vcc (normalement 5 volts) ou 1,1 volt (si la tension de référence interne est utilisée).
595 * Il se peut que vous deviez utiliser un diviseur de tension afin de réduire la tension appliquée sur la broche Arduino par rapport à la tension que vous souhaitez mesurer.
596 * Pour chaque tension à abaisser aux bornes Ax de oXs, procédez comme suit:
597 * - Faire un diviseur avec 2 résistances
599 * ------> Point final = connexion à l'appareil à mesurer (batterie, capteur de courant, ...)
603 * | | R2 (Resistor_To_Voltage)
607 * |------> Point milieu = connection à la broche Arduino A0, A1, A2, A3, A6 ou A7
610 * | | R1 (Resistor_To_Ground)
614 * ------> Connection à Ground
616 * Note: Un condensateur (par exemple 100nf) pourrait également être ajouté entre le ground et le point milieu afin d'obtenir des valeurs plus stables
618 * - R1 et R2 sont choisis pour s'assurer que la tension appliquée à l'Arduino est proche de (mais ne dépasse jamais) VCC ou 1.1 volt ou la tension de référence selon votre choix en ce qui concerne la mesure de courant et de tension (voir ci-dessus)
619 * - la tension max sur la pin Arduino = VCC (ou 1.1 volt ou la référence externe) = "tension maximale à mesurer à partir de ce capteur" * R1 / (R1 + R2)
620 * - R1 pourrait être de 10 kOhm; Donc R2 = R1 * (("tension maximale à mesurer à partir de ce capteur" / VCC [ou 1.1 volt ou la référence]) - 1)
621 * Par exemple, en utilisant 1.1 volt comme référence de tension, si on veut mesurer max 6 volts et R1 = 10000, alors R2 = 10000 * ((6 / 1.1) - 1) = 45545 Ohm;
622 * Il faut alors arrondir à la valeur supérieure disponible, par exemple 47000 ohm
624 * Les résistances utilisées dans les diviseurs de tension doivent être spécifiées dans les lignes #define RESISTOR_TO_GROUND (=R1) et #define RESISTOR_TO_VOLTAGE (=R2).
625 * Chaque ligne, doit contenir 6 valeurs (une pour chaque tension à mesurer); Chaque valeur représente la résistance en Ohm ou kOhm mais il faut utiliser la même unité pour les deux lignes.
626 * Si un diviseur n'est utilisé pour une certaine tension, mettez les deux valeurs de résistances à 0 (zéro)
627 * Si aucun diviseur n'est utilisé, les lignes peuvent être mises en commentaires (en ajoutant "//" à l'avant)
629 * Afin d'obtenir des mesures de tension plus précises, l'oXs peut être calibré. Ce processus facultatif permet de compenser les tolérances sur les résistances et sur l'Arduino ADC (convertisseur analogique / numérique).
630 * Pour étalonner chaque mesure de tension, procédez comme suit afin de trouver les meilleures valeurs à mettre dans les lignes #define OFFSET_VOLTAGE et #define SCALE_VOLTAGE
632 * - Laisser OFFSET_VOLTAGE = 0 et SCALE_VOLTAGE = 1 (ce réglage n'ajoute aucune compensation)
633 * - Sélectionner un champ pour transmettre la tension souhaitée (par exemple T1 pour VOLT3) et remplir la ligne "#define SETUP_DATA_TO_SEND" en conséquence
634 * - Charger le programme dans Arduino
635 * - Appliquer plusieurs tensions différentes sur le point final ( /!\ ne dépasser pas la tension maximale autorisée en fonction de R1 et R2)
636 * - Pour chaque tension appliquée, mesurer la tension appliquée avec un voltmètre et lire la valeur reçue sur le panneau de télémétrie sur l'émetteur
637 * - Mettre ces valeurs dans Excel (ou sur un graphique) et calculer les meilleures valeurs OFFSET_VOLTAGE et SCALE_VOLTAGE (à l'aide d'une régression linéaire)
638 * Si cela semble trop complexe, utilisez simplement 2 tensions aussi différentes que possible (mais dans la gamme des valeurs normales que vous souhaitez mesurer)
639 * Et appliquer un calcul basé sur l'exemple suivant: .
640 * Je m'attends à ce que la tension soit normalement entre 4 volts et 6 volts, donc j'applique 2 tensions proches de ces valeurs au point final
641 * - Pour la première tension, le voltmètre donne 3510 millivolt et la télémétrie donne 3622
642 * - Pour la deuxième tension, le voltmètre donne 5900 millivolt et la télémétrie donne 6013
643 * Alors SCALE_VOLTAGE = (5900-3510) / (6013-3622) = 0.99958
644 * et OFFSET_VOLTAGE = -3510 + (3622 * 0.99958 ) = 110
645 * Note: Vous pouvez appliquer le même principe si vous mesurez autre chose qu'une tension.
646 * Par exemple. Vous pouvez calibrer un capteur de température et régler le paramètre d'étalonnage afin d'obtenir une mesure en degré sur l'affichage de l'émetteur.
648 * Les lignes #define OFFSET_VOLTAGE et #define SCALE_VOLTAGE sont facultatives (elle peuvent être mises en commentaire en ajoutant "//" à l'avant))
649 * Si elle est définie, chaque ligne doit contenir 6 valeurs. Utilisez 0 (pour le décalage => OFFSET) et 1 (pour l'échelle => SCALE) si aucun étalonnage n'est effectué pour une certaine tension.
651 ************************************************************************************************************************
652 VOLT1 VOLT2 VOLT3 VOLT4 VOLT5 VOLT6
653 #define ARDUINO_MEASURES_VOLTAGES YES
654 #define PIN_VOLTAGE 2 , 0 , 2 , 3 , 8 , 8
655 #define RESISTOR_TO_GROUND 12 , 20 , 30 , 40 , 50 , 60 // Mettre la valeur à 0 lorsqu'aucun diviseur n'est utilisé pour une de ces tensions
656 #define RESISTOR_TO_VOLTAGE 50, 100.1 , 200, 300 , 500 , 600 // Mettre la valeur à 0 lorsqu'aucun diviseur n'est utilisé pour une de ces tensions
657 #define OFFSET_VOLTAGE 0 , 0 , 0 , 0 , 0 , 0 // Peut être négatif, doit être un nombre entier
658 #define SCALE_VOLTAGE 1 , 1 , 1 , 1 , 1 , 1 // Peut être négatif, peut avoir des décimales
659 ************************************************************************************************************************
660 * 6.3 - Maximum de cellules LiPo à mesurer (et à envoyer à l’émetteur) ***********************************************************
661 * Les différentes tensions mesurées comme expliqué dans la section 6.2 sont toutes référencées à Ground.
662 * oXs peuvent utiliser certains d'entre elles pour calculer par différence la tension de cellules lipo individuelles.
663 * Définissez ici le nombre maximal de cellules lipo que vous souhaitez mesurer/transmettre; La valeur peut être 0 (sans cellules), 1,2,3,4,5,6
664 * Si une valeur supérieure à 1 est définie, l'oXs calculera la tension de chaque cellule en fonction de la différence entre 2 tensions successives à partir de la tension1.
665 * Dans openTx, l'émetteur affichera la tension totale dans un champ de télémétrie nommé "Cells".
666 * L'émetteur identifiera également la cellule avec la tension la plus basse et l'affichera dans un champ nommé "Cell".
667 * L'émetteur à également un écran spécial où toutes les tensions s'affichent (voir le manuel Taranis).
668 * Par exemple. Si nombre de cellules = 3,
669 * La tension sur la cellule 1 sera la tension mesurée sur la première broche définie dans PIN_Voltage
670 * La tension sur la cellule 2 sera la différence entre la mesure des tensions sur la deuxième broche et la première broche (donc VOLT2 - VOLT1)
671 * La tension sur la cellule 3 sera la différence entre la mesure des tensions sur la troisième broche et la deuxième broche (donc VOLT3 - VOLT2)
673 * Pour mesurer les tensions des cellules, vous ne devez pas oublier de configurer PIN_VOLTAGE, RESISTOR_TO_GROUND, RESISTOR_TO_VOLTAGE (et optionnellement les paramètres d'étalonnage).
674 * Les broches utilisées pour mesurer des cellules DOIVENT être mises au début et en séquence (VOLT1 pour la première cellule, VOLT2 pour la deuxième, ...)
675 * Les broches non utilisées peuvent être utilisées pour transmettre d'autres tensions (par exemple: un capteur de température)
676 * Par exemple. Si NUMBEROFCELLS = 3, la première broche (dans la liste de 6) doit être connectée à la cellule 1 (via un diviseur de tension calculé pour environ 4,5 volts)
677 * La deuxième broche doit être connectée à la cellule 2 (via un diviseur de tension calculé pour environ 9 volts)
678 * La troisième broche doit être connectée à la cellule 3 (via un diviseur de tension calculé pour environ 13 volts)
679 * D'autres broches peuvent encore être utilisées pour d'autres données (température, courant, ...)
680 * Remarques: Vous devez utiliser des diviseurs de tension pour réduire les tensions sur chaque broche de la boucle d'équilibrage lipo
681 * Si vous utilisez la référence interne 1.1 et si R1 = 10 kOhm pour chaque diviseur, alors R2 pourrait être
682 * 33 kOhm pour la tension1, 68 kOhm pour la tension2, 120 kOhm pour la tension 3 et 150 kOhm pour la tension4
683 * Si vous utilisez 5V Vcc comme réference, vous ne devez pas utiliser de diviseur pour Volt1 et si pour les autres voltages vous utilisez R1 (resistor to ground) = 10 kOhm. Alors R2 (resistor to voltage) peut être
684 * 8.7 kOhm pour Voltage2, 22 kOhm pour Voltage3 et 27 kOhm pour voltage4
686 * Veuillez noter que plus vous disposez de cellules, plus la marge d'erreur augmente si vous ne calibrez pas les tensions.
687 * Si vous ne souhaitez pas transmettre de tension de cellule, réglez la valeur sur 0 (zéro) ou mettez la ligne en commentaire.
688 * Ce paramètre définit le nombre maximal de cellules que vous attendez à transmettre.
689 * Si oXs est connecté à un lipo ayant moins de cellules que défini, oXs réduira automatiquement le nombre de cellules ce qui permet à l'émetteur de continuer à calculer la tension totale et la tension de cellule la plus basse
690 ************************************************************************************************************************
691 #define NUMBEROFCELLS 3
692 ************************************************************************************************************************
693 // 6.4 - Conversion de tension en température (° Celsius) ********************************************************************
694 * Pour mesurer une température, il est possible d'utiliser un composant électronique spécial (comme le LM35) qui génère une tension proportionnelle à la température
695 * Dans ce cas, vous pouvez simplement connecter la sortie de ce composant à une broche analogique arduino et configurer oXs comme décrit dans la section 6.2 afin de mesurer la tension
696 * En ajoutant un décalage "OFFSET" et une mise à l'échelle "SCALE" (voir la section 6.2) en fonction de la caractéristique de votre composant, oXs peut calculer directement la température correspondant à la tension mesurée.
697 * Vous pouvez ensuite demander à oXs de transmettre cette tension dans le champ de télémétrie souhaité (par exemple, T1) en remplissant la configuration comme expliqué dans la section 2.
699 * Ce type de composant (ex LM35) n'est pas prévu pour mesurer une température élevée (par exemple supérieure à 150 ° C)
700 * Vous pouvez alors utiliser des thermistances (= NTC).
701 * L'inconvénient des NTC est que la tension générée n'est pas proportionnelle à la température et nécessite des calculs supplémentaires.
702 * oXs vous permet d'utiliser une ou plusieurs NTC (par exemple une par cylindre) afin de mesurer de haute(s) température(s).
703 * Pour chaque NTC, vous devez ajouter une résistance en série suivant le schéma ci-dessous:
705 * ------> < Arduino Vcc >
709 * | | [serie resistor]
713 * |------> <Arduino analog pin>
722 * Si vous utilisez plusieurs NTC, toutes les NTC et les résistances doivent être identiques et doivent être connectées à des broches analogiques consécutives (tel que défini dans PIN_VOLTAGE)
724 * La configuration donc être spécialement adaptée pour que oXs calcule correctement.
725 * Par conséquent, aux sections 6.1 et 6.2,
726 * USE_INTERNAL_REFERENCE doit être mis en commentaire (donc avec // en avant)
727 * USE_EXTERNAL_REFERENCE doit être mis en commentaire (donc avec // en avant)
728 * REFERENCE_VOLTAGE doit être mis en commentaire (donc avec // en avant)
729 * RESISTOR_TO_GROUND doit être mis à 0 (pour l'index utilisé)
730 * OFFSET_VOLTAGE doit (normalement) doit être mis à 0 (pour l'index utilisé)
731 * SCALE_VOLTAGE doit être configuré sur 204.6 (= 1000 * 1023/5000) (pour l'index utilisé)
732 * Ensuite, vous devez définir certains paramètres dans la section 6.4
733 * FIRST_NTC_ON_VOLT_NR spécifie l'indice de la première tension utilisée pour la conversion en température (par exemple, 3 signifie VOLT_3) (donc ce n'est pas le code de la broche analogique, celui-ci est défini dans la section 6.2)
734 * LAST_NTC_ON_VOLT_NR spécifie l'indice de la dernière tension utilisée pour la conversion en température (par exemple, 5 signifie VOLT_5)
735 * Dans cet exemple, cela signifie que vous prévoyez de mesurer 3 températures basées sur NTC connectées aux broches utilisées pour VOLT_3, VOLT_4 et VOLT_5
736 * Note: si vous utilisez un seul NTC, vous devez spécifier la même valeur pour FIRST_NTC_ON_VOLT_NR et pour LAST_NTC_ON_VOLT_NR
737 * Si vous n'utilisez pas NTC, mettez cette ligne en commentaire
738 * SERIE_RESISTOR spécifie le résistance (en Ohm) connecté entre Arduino Vcc et NTC (et la broche analogique); Sélectionnez une valeur presque égale à la résistance de la NTC dans la gamme de température où vous voulez obtenir la meilleure précision
739 * Les 3 paramètres suivants sont spécifiques à la NTC que vous utilisez. Les valeurs entre parenthèses sont les valeurs nominales pour un NTC bon marché disponible sur aliexpress.com avec 100k ohms à 25 ° C et un coefficient bêta de 3950 pour la gamme 25/50.
740 * STEINHART_A (e.g. 7.00111E-4 )
741 * STEINHART_B (e.g. 2.1644E-4 )
742 * STEINHART_C (e.g. 1.0619E-07 )
743 * Si vous ne connaissez pas ces 3 paramètres, vous pouvez les calculer en mesurant la résistance NTC à 3 températures différentes. Utiliser, par exemple, La formule donnée sur Wikipédia pour la thermistance
744 * Lorsque vous utilisez 1 ou 2 NTC, la température (s) sera enregistrée dans VOLT_X et VOLT_Y où X est la valeur de FIRST_NTC_ON_VOLT_NR et Y la valeur de LAST_NTC_ON_VOLT_NR
745 * Si vous utilisez plus de 2 NTC, oXs inscrit dans:
746 * VOLT_X la température la plus basse
747 * VOLT_X + 1 l'indice de la température la plus élevée (1 étant l'indice du premier NTC)
748 * VOLT_Y la température la plus élevée
749 * Vous pouvez alors définir comment transmettre ces données dans la section 2
750 ************************************************************************************************************************
751 //#define FIRST_NTC_ON_VOLT_NR 5 // Décommettez cette ligne lorsque la thermistance est utilisée; Spécifiez l'indice de la première tension utilisée pour la conversion en température (par exemple, 5 signifie VOLT_5)
752 #define LAST_NTC_ON_VOLT_NR 6 // Spécifiez l'indice de la dernière tension utilisée pour la conversion en température (par exemple 6 signifie VOLT_6)
753 #define SERIE_RESISTOR 4700 // Résistance connectée à Arduino Vcc (en Ohm)
754 #define STEINHART_A 7.00111E-4
755 #define STEINHART_B 2.1644E-4
756 #define STEINHART_C 1.0619E-07
757 ************************************************************************************************************************
758 * 6.5 - Configurationou la référence externe. du capteur de mesure de courant. *****************************************************************
759 * Il est possible de mesurer un courant (et une consommation de courant) si un capteur de courant est connecté.
760 * La connexion d'un capteur de courant est une option.
761 * Il nécessite un matériel supplémentaire. Il peut s'agir d'un IC comme le ACS712 (pour 5, 20, 30 ampères) ou le ACS758 (pour 50, 100, 150, 200 ampères).
762 * La plupart des capteurs sont bidirectionnels, mais le ACS758 de type "U" ne peut mesurer qu'un courant unidirectionnel (fournissant alors une sensibilité plus élevée).
763 * Ces capteurs de courant sont assez bon marché (voir par exemple ebay ou aliexpress ) et renvoyent une tension proportionnelle au courant. Cette tension est mesurée par oXs via une broche analogique.
764 * La valeur de la PIN à remplir dans oXs_config_advanced.h est un nombre de 0 à 7 (0 signifie A0, 1 signifie A1, ... 7 signifie A7).
765 * Si un capteur de courant est utilisé, ne pas utiliser une broche déjà utilisée pour mesurer une tension.
766 * /!\ Veillez à ce que la tension appliquée à la broche de l'Arduino ne dépasse pas Vcc (normalement 5 volts) ou 1,1 volt (si la tension de référence interne est utilisée)
767 * Il se peut que vous deviez utiliser un diviseur de tension afin de réduire la tension appliquée à la broche Arduino.
768 * Voir l'explication ci-dessus (paragraphe 6.2) sur le diviseur de tension.
769 * Attention: ne pas utiliser les broches A4 et A5 si vous utilisez un vario ou un capteur de vitesse ou un ads1115 (ces broches sont réservées aux capteurs avec bus i2C).
770 * Remarque: Le capteur de courant est normalement alimenté par le VCC 5 volts d'oXs (identique au capteur barométriques).
771 * Il existe des capteurs bidirectionnels et des capteurs unidirectionnels.
772 * Pour les capteurs bidirectionnels, la sortie est normalement égale à VCC / 2 lorsque le courant = 0 Amp et, pour les unidirectionnels, la sortie est normalement de 0,6 volt pour 0 Amp.
773 * Si oXs est connecté à une batterie qui ne dépasse pas 5,2 volts, la tension d'alimentation du capteur de courant varie avec la tension d'alimentation oXs.
774 * Par conséquent, VCC / 2 (= O amp) varie avec VCC.
775 * Ceci est un problème si l'Arduino ADC est configuré pour utiliser la référence interne de 1.1 volts avec un capteur bidirecttionnel.
776 * Donc, dans ce cas, il est préférable de configurer l'ADC afin d'utiliser VCC comme référence pour la conversion.
777 * Pour utiliser un capteur de courant, vous devez mettre YES dans la ligne ARDUINO_MEASURES_A_CURRENT et vous devez spécifier dans PIN_CURRENTSENSOR la broche Arduino connectée au capteur utilisé.
778 * Vous devez également définir 2 paramètres en fonction du type de capteur utilisé; Ces paramètres sont donnés dans la fiche technique du capteur.
779 * - MVOLT_AT_ZERO_AMP = MilliVolt généré par le capteur lorsque le courant est 0 Amp: la valeur normale est:
780 * - Pour un capteur bidirectionnel: Vcc du capteur de courant / 2 (donc = 2500 si le capteur est connecté à Arduino Vcc et Arduino Vcc est de 5 Volt).
781 * - 600 pour capteur unidirectionnel
782 * - MVOLT_PER_AMP = MilliVolt par Amp. La valeur dépend de la sensibilité du capteur (par exemple, un ACS712ELCTR-30A-T a une sensibilité de 66 mvolt/Amp, un ACS758LCB-050U a une sensibilité de 60 mvolt/Amp)
784 * Si vous utilisez la référence interne 1.1 volt pour mesurer le voltage et le courant, vous devez également utiliser un diviseur de tension pour réduire la tension produite par le capteur actuel.
785 * Voir la section 6.2 ci-dessus sur le diviseur de tension. Le principe est tout simplement le même, mais les noms des 2 paramètres sont:
786 * - RESISTOR_TO_GROUND_FOR_CURRENT
787 * - RESISTOR_TO_CURRENT_SENSOR
788 * Remarque: ces paramètres sont automatiquement négligés lorsque ARDUINO_MEASURES_A_CURRENT est NO
789 * Remarque: Lorsque un capteur de courant est utilisé, oXs peut également calculer et transmettre la consommation de courant (milliAh) et le "carburant restant" (fuel) (en % descendant de 100% à 0%).
790 * Si vous voulez ce dernier, utilisez une configuration comme "Fuel , MILLIAH , -100 , 4000 ,0" dans la section "données à transmettre" (et remplacez 4000 par la capacité - en milliAmph - de votre batterie) (voir ci-dessous) .
791 * Avec les émetteurs utilisant le logiciel OpenTx ou Ersky9x, il est préférable de laisser l'émetteur calculer ces valeurs en fonction du courant.
792 * Cela garantit que les valeurs sont cohérentes et permet de réinitialiser les valeurs du côté émetteur; Il permet de changer la valeur de la capacité de la batterie du côté de émetteur (donc sans devoir recharger une autre configuration oXs dans Arduino).
793 * Par exemple: avec Ersky9x, dans le menu de télémétrie configuré "courant source" défini "FAS"; Dans «Alarme mAh», réglez le mah que vous désirez pour que l'alarme sonne et sélectionnez le son d'avertissement / la voix,
794 * Pour n'utiliser que 70% d'une lipo de 2200 mAh, utilisez 1540 comme capacité. Le pourcentage de FUEL commencera à 100% et descendra 0% lorsque 1540 sont consommés.
795 ************************************************************************************************************************
796 #define ARDUINO_MEASURES_A_CURRENT NO
797 #define PIN_CURRENTSENSOR 2
798 #define MVOLT_AT_ZERO_AMP 600
799 #define MVOLT_PER_AMP 60
800 #define RESISTOR_TO_GROUND_FOR_CURRENT 10
801 #define RESISTOR_TO_CURRENT_SENSOR 40
802 ************************************************************************************************************************
803 ***** 6.6 - Paramètres de Ads1115 *************************************************************************************
804 * Il est possible de connecter un ADC externe du type ads1115.
805 * Ce composant est très bon marché (environ 2 €) et peut fournir plus de précision que l'ADC interne de Arduino.
806 * Il a une résolution de 16 bits, une référence de tension interne précise, un amplificateur de gain programmable et la capacité de mesurer directement la différence de tension entre 2 broches
807 * Voir la fiche technique de ADS1115 pour plus de détails
808 * oXs peut être connecté à l'un de ces composant via le bus I2C. Il peut alors fournir jusqu'à 4 mesures de tension appelées ADS_VOLT_1 ... ADS_VOLT_4
809 * oXs permet de convertir une des mesures de tension en courant et consommation (lorsque l’ads1115 est connecté à un capteur de courant)
810 * oXs permet également de convertir une des mesures de tension en vitesse et vario compensé (lorsque l’ads1115 est connecté à un capteur baro différentiel comme le MPXV7002)
811 * Le capteur MPXV7002 est une alternative moins coûteuse et plus facile à trouver que le capteur MS4525 (mais elle est moins précise)
812 * Pour utiliser un ads1115 ADC, vous devez sélectionner YES dans la ligne AN_ADS1115_IS_CONNECTED (dans oXs_config_basic.h) et spécifier plusieurs groupes de 4 paramètres.
813 * /!\ Attention: mettez NO AN_ADS1115_IS_CONNECTED si un ads1115 n'est pas utilisé (afin d'éviter les erreurs I2C et de ralentir oXs)
814 * Dans ACD_MEASURE, vous spécifiez les broches ads115 utilisées pour les mesures de tension
815 * Remplissez toujours les 4 valeurs. Pourtant, si vous n'avez pas besoin de toutes les 4 mesures, utilisez la valeur ADS_OFF pour les mesures non requises
816 * Note : Plus vous demandez de mesures, plus il faudra de temps pour obtenir chacune d'elles car elles sont mesurées l'une à la suite de l'autre
817 * Sélectionnez 4 valeurs parmi: A0_TO_A1, A0_TO_A3, A1_TO_A3, A2_TO_A3, A0_TO_GND, A1_TO_GND, A2_TO_GND, A3_TO_GND, ADS_OFF
818 * Dans ADC_FULL_SCALE_VOLT, vous spécifiez le paramètre de gain ads1115 pour chacune des 4 mesures.
819 * Remplissez toujours 4 valeurs même si vous n'avez pas besoin des 4 mesures
820 * Cela permet d'amplifier une faible tension appliquée sur les broches d'entrée avant qu'il ne soit converti par l'ADC. La précision de la conversion est donc optimale.
821 * Sélectionnez entre MV6144 MV4096 MV2048 MV1024 MV512 MV256 où les chiffres donnent le mvolt maximal appliqué sur la broche (par exemple pour A0_TO_GND) ou entre 2 broches (par exemple pour A0_TO_A1)
822 * Dans ADS_SCALE, vous spécifiez un facteur d'échelle à appliquer sur chaque mesure afin d'obtenir une valeur conforme vos attentes.
823 * Remplissez toujours 4 valeurs même si vous n'avez pas besoin des 4 mesures
824 * Lorsque le paramètre de mise à l'échelle = 1, oXs renvoie une valeur = 1 lorsque la tension appliquée sur la/les PIN de ads1115 est la tension maximale définie par ADC_FULL_SCALE_VOLT.
825 * Donc, par exemple, si ADC_FULL_SCALE_VOLT est réglé sur MV512, lorsque la tension d'entrée sera de 512mv (ou plus), oXs renvera 1 si ADS_SCALE = 1
826 * Si vous ne disposez pas d'un diviseur de tension sur l'ads1115, vous vous attendez probablement à ce que oXs renvoie 512; définissez alors ADS_SCALE à 512.
827 * Si vous avez un diviseur de tension, la tension que vous souhaitez mesurer est supérieure à la tension appliquée sur la broche de l'ads1115 et vous devez augmenter ADS_SCALE.
828 * Par exemple. Si votre diviseur de tension divise votre tension par un facteur 10, vous devez définir ADS_SCALE à 5120 (= 512 * 10)
829 * Note: ADS_SCALE peut avoir des décimales (par exemple, 100.5). Il peut être positif ou négatif; Il ne peut pas être 0
830 * Dans ADS_OFFSET, vous spécifiez un décalage à appliquer.
831 * Remplissez toujours 4 valeurs même si vous n'avez pas besoin des 4 mesures
832 * Lorsqu'aucun décalage ne doit être appliqué, mettez la valeur à 0
833 * Le décalage spécifié est ajouté à la valeur calculée après la mise à l'échelle
834 * Chaque valeur doit être un nombre entier (positif ou négatif); Il peut être 0
835 * Dans ADS_RATE, vous spécifiez le nombre de milli sec que Ads1115 prend pour convertir une tension.
836 * Remplissez toujours 4 valeurs même si vous n'avez pas besoin des 4 mesures.
837 * L'utilisation d'une valeur élevée réduit la consommation d'énergie, mais elle réduit le nombre de mesures pouvant être effectuées / transmises par seconde
838 * Sélectionnez les valeurs entre MS137, MS69, MS35, MS18, MS9, MS5, MS3, MS2; Les chiffres correspondent au nombre de milli sec (par exemple MS18 signifie 18 ms)
839 * Remarque: oXs attendra au moins le délai spécifié, mais il se peut que le délai soit plus élevé en raison d'autres tâches devant être exécutées par oXs
840 * Dans ADS_AVERAGING_ON, vous spécifiez le nombre de mesures de tensions successives à effectuer afin de calculer une moyenne qui elle sera exploitée.
841 * Remplissez toujours 4 valeurs, même si vous n'avez pas besoin des 4 mesures. Si vous ne désirez pas de moyenne, définissez la valeur sur 1
842 * Cela doit être un nombre entier, positif et différent de 0.
843 * Note : L'augmentation de la valeur est un moyen de réduire le bruit (et donc d'augmenter la précision), mais il augmente le délai entre 2 transmissions
844 * Dans ADS_CURRENT_BASED_ON, vous spécifiez quelle mesure de tension (le cas échéant) est utilisée pour calculer un courant (et la consommation actuelle)
845 * Dé-commentez cette ligne uniquement lorsqu'un capteur de courant est connecté à l'ads1115.
846 * Gardez cette ligne en tant que commentaire s'il n'y a pas de capteur de courant ou si le capteur est connecté à une broche Arduino comme expliqué à la section 6.4
847 * Remplissez une seule valeur; Sélectionnez une valeur parmi ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
848 * Note : Lorsque oXs calcule un courant basé sur un ads1115, il utilise également 2 paramètres de la section 6.4: MVOLT_AT_ZERO_AMP et MVOLT_PER_AMP
849 * Dans ADS_AIRSPEED_BASED_ON, vous spécifiez quelle mesure de tension (le cas échéant) est utilisée pour calculer la vitesse air
850 * Dé-commentez cette ligne uniquement lorsqu'un capteur de pression différentielle analogique est connecté à l'ads1115
851 * Gardez cette ligne comme un commentaire s'il n'y a pas de capteur de pression connecté à l'ads1115
852 * Remplissez une seule valeur; Sélectionnez une valeur entre ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
853 * Note : Un capteur de vitesse typique est le MPXV7002DP qui est disponible sur ebay ou aliexpress.com.
854 * Lorsque ce capteur est utilisé, vous devez configurer l'ads1115 de la manière suivante
855 * - Demandez une seule mesure à l'ads1115 et celle-ci doit être une tension différentielle (entre 2 pins de l'ads1115): utilisez donc cette configuration: ADS_MEASURE A0_to_A1, ADS_OFF, ADS_OFF, ADS_OFF
856 * - Connectez une résistance d'environ 10kohm entre ads1115 Vcc et ads1115 A1 et une autre de la même valeur entre ads1115 Ground et ads1115 A1; Donc la broche A1 est à Vcc/2 volt
857 * - Définissez le gain d’ads1115 pour obtenir 2048 mvolt à pleine échelle: utilisez donc: ADC_FULL_SCALE_VOLT MV2048, MV2048, MV2048, MV2048
858 * - Définissez le taux de rafraîchissement de l’ads afin de faire la conversion ADC le plus rapidement possible; utilisez donc: ADS_RATE MS2, MS2, MS2, MS2
859 * - Les autres paramètres ne sont pas critiques (non utilisés pour la vitesse air)
860 ************************************************************************************************************************
861 #define AN_ADS1115_IS_CONNECTED NO // Sélectionnez parmi YES et NO
862 #define ADS_MEASURE A1_TO_GND , ADS_OFF , ADS_OFF , ADS_OFF // Si un ads1115 est utilisé, sélectionnez 4 valeurs parmi A0_TO_A1, A0_TO_A3, A1_TO_A3, A2_TO_A3, A0_TO_GND, A1_TO_GND, A2_TO_GND, A3_TO_GND, ADS_OFF
863 #define ADS_FULL_SCALE_VOLT MV4096, MV4096, MV4096, MV4096 // Sélectionnez parmi MV6144 MV4096 MV2048 MV1024 MV512 MV256
864 #define ADS_OFFSET 0, 0 , 0 , 0 // Doit être un nombre entier (positif ou négatif)
865 #define ADS_SCALE 2, 10, 1, 1 // Peut est un float (avec décimales)
866 #define ADS_RATE MS137 , MS5, MS3 , MS2 // Sélectionnez parmi MS137, MS69, MS35, MS18, MS9, MS5, MS3, MS2
867 #define ADS_AVERAGING_ON 1 , 10, 50, 50 // Nombre de valeurs utilisées pour la moyenne (doit être compris entre 1 et 254)
868 #define ADS_CURRENT_BASED_ON ADS_VOLT_1 // Dé-commentez si le courant et la consommation doivent être calculés en fonction de l'une des mesures de tension ADS; Sélectionnez ensuite la tension à utiliser parmi ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
869 #define ADS_AIRSPEED_BASED_ON ADS_VOLT1 // Dé-commentez si la vitesse (et dte) doit être calculée en fonction de l'une des mesures de tension ADS; Sélectionnez ensuite la tension à utiliser parmi ADS_VOLT_1, ADS_VOLT_2, ADS_VOLT_3, ADS_VOLT_4
870 ************************************************************************************************************************
874 **** 7 - Configuration du capteur RPM (tour par minute) (optionnel) ***************************************************************************
875 * Il est possible de mesurer une fréquence de rotation (RPM) à l'aide d'un capteur connecté sur la PIN ICP (= PB0, = broche 8) d'oXs
876 * Ce capteur doit fournir un changement de niveau (0 - Vcc) sur cette broche par exemple chaque fois qu'une pale devant le capteur.
877 * Le nombre de pales est un paramètre important à configurer dans le paramètre PULSES_PER_ROTATION. Totefois pour le protocole Frsky, ce paramètre est négligé car le paramètre est introduit dans le Tx
878 * Il est également possible de construire une petite carte PCB qui fournira des impulsions lorsqu'elle est connectée à un moteur brushless.
879 * Pour activer cette fonction, mettez YES au lieu de NO dans la ligne #define CALCULATE_RPM .
880 * Note: La broche numérique 8 (PB0 / ICP) est la seule à être utilisée pour mesurer les RPM.
881 * Attention : Pour le protocole Frsky la valeur calculée par oXs est en Hertz (et non en tour par minute) et la conversion est faite dans le Tx
882 ************************************************************************************************************************
883 #define CALCULATE_RPM NO
884 #define PULSES_PER_ROTATION 2
886 ************************************************************************************************************************
889 **** 8 - Configuration de la mémoire persistante (=non volatile) (optionnel) ************************************************************************************
890 * Fonction optionnelle.
891 * Si la mémoire persistante est activée, la consommation de courant et la consommation de carburant (+ paramètres de flux) seront stockées dans EEPROM toutes les 30 secondes.
892 * Cette valeur sera restaurée chaque mise sous tension.
893 * Ainsi, vous obtiendrez une consommation continue même si vous éteignez le modèle entre les vols.
894 * Si vous souhaitez enregistrer ces données, vous devez dire OUI dans la ligne "#define SAVE_TO_EEPROM"
896 * Il est également possible de réinitialiser:
897 * - la consommation de courant et de carburant à zéro en appuyant sur un bouton-poussoir connecté à oXs.
898 * pour cela une broche DIGITAL Arduino doit être connectée à un bouton-poussoir, l'autre broche du bouton-poussoir étant connectée à Gnd (terre).
899 * Pour utiliser cette fonction, vous devez spécifier la broche DIDITAL Arduino utilisée.
900 * Par défaut: 10; Une autre broche numérique peut être utilisée; N'utilisez pas une broche déjà utilisée dans un autre but.
901 * - la consommation de carburant à zéro à partir de l'émetteur en connectant une voie du récepteur à l'Arduino à l'aide de la fonction PPM (voir la section 3 PPM et 11 capteur de débit)
902 ************************************************************************************************************************
903 #define SAVE_TO_EEPROM NO
904 #define PIN_PUSHBUTTON 10
905 ************************************************************************************************************************
909 **** 9 - GPS (optionnel) *********************************************************************************************
910 * Il est possible de connecter un module GPS à Arduino. Dans ce cas, oXs transmettra à l'émetteur certaines données générées par le module GPS.
911 * Note: les données sont envoyées uniquement lorsque le GPS a un "fix" (est connecté à plusieurs satellites).
912 * Cela peut donc prendre plusieurs minutes avant que oXs ne commence à envoyer des données GPS.
913 * Si le GPS perd sa connexion avec les satellites, oXs arrête d'envoyer des données GPS jusqu'à ce que le GPS obtienne une nouvelle connection satellite.
914 * Lorsqu'un récepteur Frsky (SPORT ou HUB) est utilisé, oXs enverra toujours la longitude, la latitude, l'altitude, la vitesse du sol et le parcours.
915 * Cela ne nécessite aucune ligne supplémentaire dans la section "Données à transmettre" (voir 2 ci-dessus)
916 * Lorsqu'un récepteur multiplex est utilisé, l'utilisateur doit définir sous la ligne "#define SETUP_MULTIPLEX_DATA_TO_SEND" les données à envoyer et le numéro de la ligne sur laquelle les données doivent apparaître à l'écran.
917 * Points d'attention concernant le type de matériel:
918 * Modules GPS pris en charge: oXs prend en charge les modules GPS utilisant un GPS UBLOX (facilement disponible sur ebay ou aliexpress) comme Neo6M, Neo7M et Neo8M.
919 * La plupart des modules sont équipés d'un régulateur de tension afin de ramener la tension à 3,3 volts, soit environ le maximum autorisé par le GPS
920 * Ils ont 4 broches disponibles qui doivent être connectés à Arduino
921 * - GPS Ground est connecté à Arduino Ground
922 * - GPS Vcc est normalement connecté à la broche Raw Arduino (qui est normalement connectée à Vcc du récepteur)
923 * Prendre soin que le régulateur de tension sur le module GPS supporte la tension maximale appliquée à la broche Raw. La plupart des modules GPS supportent 6 volts ( alors que la broche RAW arduino accepte elle plus de 6V).
924 * Donc, si votre broche RAW reçois plus de 6 volts, il est prudent d'ajouter un autre régulateur de tension pour réduire la tension GPS Vcc.
925 * - La broche GPS Tx est connectée à la broche Arduino Rx
926 * - La broche GPS Rx est connectée à une résistance (par exemple 10k) et l'autre broche de la résistance est connectée à la broche 6 d'Arduino (broche digitale 6).
927 * Cette résistance est ajoutée (au moins pour un Arduino 5 volts) afin de protéger la broche GPS.
928 * Ceci est nécessaire car l'Arduino génére un signal avec un niveau haut égal à Arduino Vcc (donc normalement 5 volts) alors que le module GPS ne supporte en principe pas plus que 3.3 Volt.
929 * Pour être plus sûr, vous pouvez même ajouter une deuxième résistance entre GPS Rx pin et Ground (valeur = 22k) mais, dans mon cas, cela a fonctionné sans cette deuxième résistance.
930 * Note: Il serait possible d'utiliser une autre broche que la broche 6 d'Arduino, mais il faut modifier certains paramètres dans le fichier oXs_gps.cpp (voir "Configuration du capteur GPS").
931 * /!\ Note importante :
932 * La broche Arduino Rx a 2 utilités: obtenir les données du GPS et télécharger le programme dans l'Arduino (normalement fait une seule fois) à l'aide d'un adaptateur USB/série.
933 * Vous devez éviter d'utiliser le GPS et l'USB en même temps, car lors du téléchargement d'un programme dans Arduino, il y aura des conflits entre les signaux envoyés par les 2 appareils (le PC et le GPS) et la programmation échouera.
934 * Il existe un autre risque: si votre adaptateur USB vers série génère un signal de 5 volts, il pourrait endommager le module GPS.
935 * Donc, lorsque vous connectez l'adaptateur série à l'Arduino, vous devez déconnecter au moins la broche GPS TX de la broche Arduino Rx.
936 * Personnellement, j'utilise un connecteur entre l'Arduino et le module GPS et je peux donc déconnecter complètement le module GPS.
937 * Points d'attention concernant le logiciel:
938 * Le module GPS UBLOX est normalement livré avec une configuration par défaut (générant automatiquement, par exemple, des messages NMEA à 9600 bauds à un taux de rafraîchissement de 1 hz).
939 * oXs suppose que, au démarrage, le GPS fonctionne à 9600 bauds. oXs envoie alors quelques commandes pour
940 * - Désactiver tous les messages NMEA
941 * - Activer certains messages UBX (format spécifique à UBLOX)
942 * - Augmenter la fréquence de calcul (à 5 Hz au lieu de 1 heure)
943 * - Configurez le débit à 38400 bauds au lieu de 9600 bauds.
944 * Ces paramètres ne sont pas enregistrés dans le GPS (car certains modules GPS ne le permettent pas). Ainsi, oXs enverra ces commandes à chaque mise sous tension.
945 * Si oXs n'émet pas de données GPS, vérifiez que votre module GPS a encore la configuration par défaut (le plus important est qu'il soit configuré pour recevoir des messages de commande UBX à 9600 bauds).
946 * Un moyen simple de vérifier la configuration GPS est de connecter le module GPS à un FTDI de 3,3 volts (ou à un adaptateur USB/série) et d'utiliser un logiciel gratuit nommé "u-center".
947 * Ce logiciel est disponible sur le site officiel de UBLOX. Plus d'informations sont facilement disponibles sur le Web.
948 * oXs permet de modifier certains paramètres dans le fichier config.h:
949 * - #define A_GPS_IS_CONNECTED NO : Remplacez NO par YES si un GPS est connecté et doit transmettre ses données
950 * - #define GPS_SPEED_IN_KMH : Dé-commentez cette ligne si la vitesse GPS doit être envoyée en km / h au lieu de nœud / h (note: le protocole Frsky exige une valeur en noeud, la conversion en km/h se fait dans l'émetteur)
951 * - #define GPS_SPEED_3D : Décommentez cette ligne si la vitesse GPS doit être la vitesse 3d au lieu de la vitesse 2d (note: 3d est probablement moins précis - à tester)
952 * - #define GPS_REFRESH_RATE 5 // taux de rafraichissment des données du GPS; selectionnez parmi 1, 5 or 10 (Hz). Par défaut = 5 Hz; Ublox NEO6 ne supporte pas le 10 Hz
953 ************************************************************************************************************************
954 #define A_GPS_IS_CONNECTED YES // Selectionnez parmi YES , NO
955 //#define GPS_SPEED_IN_KMH // Dé-commentez cette ligne si la vitesse GPS doit être envoyée en km/h au lieu de noeud/h (ne pas utiliser pour les protocole FRSKY, HOTT et JETI car c'est le TX qui fait la conversion)
956 #define GPS_SPEED_3D // Décommentez cette ligne si la vitesse GPS doit être la vitesse 3d au lieu de la vitesse 2d (note: 3d est probablement moins précis - à tester)
957 #define GPS_REFRESH_RATE 5 // taux de rafraichissment des données du GPS; selectionnez parmi 1, 5 or 10 (Hz). Par défaut = 5 Hz; Ublox NEO6 ne supporte pas le 10 Hz
958 ************************************************************************************************************************
960 ****** 10 - IMU 6050 (capteur accéléromètre/gyroscope) (optionnel) et HMC5883 (magnétomètre)) *************************************************
961 // ***** 10.1 - IMU 6050 *****
962 * Il est possible de connecter un capteur IMU (= accéléromètre / gyro) à l'Arduino; C'est optionnel.
964 * - De réduire le temps de réaction du vario d'environ 0,5 sec (note: un capteur baro doit également être connecté parce que oXs fusionne les données des deux capteurs)
965 * - de transmettre des données sur les accélérations et / ou l'orientation (pitch / roll); dans ce cas, il est important que le dispositif oXs soit monté dans une position correcte et soit aligné avec l'axe de vol de l'avion.
966 * Le seul capteur IMU qui est pris en charge est le: mpu6050.
967 * Ce capteur est facilement disponible sur ebay,et aliexpress sous forme de différents modules. Le meilleur module à utiliser est probablement le GY-86 car il dispose également d'un régulateur de tension (3.3 volts), d'un convertisseur de niveau I2C et d'un capteur baro (MS5611)
968 * 5 broches du mpu6050 doivent être connectées à l'Arduino:
969 * - MP6050 ground <---> Arduino ground
970 * - MP6050 Vcc <---> Arduino Vcc
971 * - MP6050 SDA <---> Arduino SDA = Arduino A4
972 * - MP6050 SCL <---> Arduino SCL = Arduino A5
973 * - MP6050 INT <---> Arduino INT0 = Arduino 2 ou Arduino INT1 = Arduino 3 (n'utilisez pas la même broche pour une autre fonction, comme PPM!)
974 * Pour activer l'IMU, mettez YES dans la ligne #define A_MPU6050_IS_CONNECTED
975 * Lorsque l'IMU est activée, oXs peut calculer la vitesse verticale de autre manière en fusionnant l'altitude du capteur baro avec l'accélération verticale de l'IMU (par rapport à la Terre).
976 * Cet autre type de vitesse verticale peut être envoyé comme vitesse verticale en choississant la valeur "BARO_AND_IMU" dans la ligne #define VSPEED_SOURCE (voir section 4.2)
977 * Il est également possible de l'affecter à "VARIO_PRIMARY" ou "VARIO_SECONDARY" et donc de basculer entre 2 sources au départ du Tx (en utilisant un canal ppm)
978 * Afin d'obtenir les meilleurs résultats avec l'IMU, il est conseillé de calibrer les "offset" de l'accéléromètre. Pour ce faire, il vous faut:
979 * - Chargez une version d'oXs en veillant à ne pas mettre la ligne #define DISPLAY_ACC_OFFSET en commentaire
980 * - Lancez oXs alors qu'il est connecté au PC (via l'interface série USB = FTDI)
981 * - Ouvrir le terminal IDE Arduino (appuyez simultanément sur CTRL + MAJ + M)
982 * - Veillez à régler le débit du terminal IDE à 115200 bauds (ou 38400 bauds si le GPS est aussi activé)
983 * - Après le démarrage, le terminal doit, toutes les 2 ou 3 s, afficher Acc suivi par 3 nombres respectivement AccX, AccY et AccZ. Notez que ces chiffres changent lorsque le mpu6050 se déplace.
984 * - Assurez-vous que le mpu6050 (GY86) est parfaitement horizontal et ne se déplace pas (par exemple, le mettre sur une table)
985 * - Notez les 2 premiers nombres (= AccX et AccY); Ne tenez pas compte du 3ème nombre car lorsque le capteur est dans cette position, il reflètera la gravité et sera autour de 16384.
986 * - Tournez le mpu6050 afin de mettre l'axe X ou Y parfaitement vertical et ne vous déplacez pas. Maintenant, le 3ème nombre sera beaucoup plus petit (car il ne mesurera plus la gravité)
987 * - Notez le 3ème nombre (= Accz)
988 * - Mettez à jour le fichier oXs_config_advanced.h en remplissant les 3 nombres dans les lignes #define ACC_OFFSET_X, #define ACC_OFFSET_Y et #define ACC_OFFSET_Z
989 * - Mettez la ligne #define DISPLAY_ACC_OFFSET en commentaire (ajoutant "//" à l'avant)
990 * - Télécharger à nouveau le firmware oXs dans arduino
991 ************************************************************************************************************************
992 #define A_MPU6050_IS_CONNECTED NO // Remplacez NO by YES si un IMU6050 est connecté et doit transmettre ses données
993 #define PIN_INT_6050 3 // La broche INT0 de l'IMU6050 doit être connecté à la broche 2 ou 3 de l'Arduino(n'utilisez pas la même broche que pour PPM)
994 #define DISPLAY_ACC_OFFSET
995 #define ACC_OFFSET_X 0 // Reportez ici la valeur affichée quand DISPLAY_ACC_OFFSET est activé (eg. -160)
996 #define ACC_OFFSET_Y 0 // Reportez ici la valeur affichée quand DISPLAY_ACC_OFFSET est activé (eg. -150)
997 #define ACC_OFFSET_Z 0 // Reportez ici la valeur affichée quand DISPLAY_ACC_OFFSET est activé (eg. -1100)
998 ************************************************************************************************************************
999 // ***** 10.2 - HMC5883 *****
1000 * Si vous utilisez un module comme GY-86 et si l'IMU6050 est connecté à l'Arduino (voir 10.1), oXs peut accéder à un magetomètre HMC5883 afin d'obtenir une mesure Yaw.
1001 * Cela ne nécessite pas de câblage supplémentaire.
1002 * Pour activer le HMC5883, réglez YES dans la ligne CALCULATE_YAW_WITH_HMC5883
1003 * Veillez à obtenir des valeurs fiables du magnétomètre, il est obligatoire de le calibrer.
1004 * Il s'agit d'un processus non trivial.
1005 * Je recommande de suivre le processus décrit dans ce lien: http://www.physi.cz/hmc5883l-magnetometer-calibration.html
1006 * Cela signifie que vous devez:
1007 * 1) Collecter des données d'oXs:
1008 * Cela exige que vous:
1009 * - Dé-commentiez la ligne #define GENERATE_MAG_CALIBRATION_DATA
1010 * - Téléchargiez le programme dans l'Arduino
1011 * - Ouvriez le terminal PC Arduino
1012 * - Dans le terminal PC, vous obtiendrez quelques lignes de données générales suivies d'une liste avec 3 valeurs par ligne (il s'agit des lectures X, Y et Z du magnétomètre)
1013 * - Tournez le capteur lentement sur 360 ° le long de tous les axes afin de collecter plus de 1000 lignes de données (cela peut prendre plusieurs minutes)
1014 * 2)Copier et coller les lignes du terminal PC vers un fichier TXT (en utilisant un éditeur de texte comme bloc-notes). Supprimez les premières lignes de données générales (avant la liste) et enregistrez ce fichier en tant que fichier TXT
1015 * 3)Téléchargez le programme Windows dans le lien ci-dessus (voir "Téléchargement exécutable")
1016 * Exécutez ce programme, réglez la norme en 1.0, cliquez sur "ouvrir" et sélectionnez le fichier TXT avec vos données d'échantillons, puis cliquez sur "Calibrer"
1017 * 4) Notez les 3 valeurs "biais combiné" et copiez-les dans XMAG_OFFSET, YMAG_OFFSET et ZMAG_OFFSET (dans oXs_config_advanced.h)
1018 * 5) Notez les 9 "facteurs d'échelle combinés ..." et ouvrez maintenant un lien vers un site Web qui vous permettra de trouver l'inverse de la matrice des 9 valeurs:
1019 * https://www.wolframalpha.com/input/?i=%7B%7B591.0437,-13.1628,-15.0294%7D,%7B-13.1628,596.1147,30.5314%7D,%7B-15.0294,30.5314,552.0759%7D%7D%5E-1
1020 * - Remplissez les 9 valeurs dans le premier champ de saisie (respecter le format spécial avec {{,,}, {,,}, {,,}} et cliquez sur le bouton à droite de la ligne d'entrée.
1021 * 6) Vous obtiendrez une matrice "résultat". Notez les 9 valeurs du résultat et copiez-les dans XXMAG_CORRECTION, XYMAG_CORRECTION, XZMAG_CORRECTION ... ZZMAG_CORRECTION (dans oXs_config_advanced.h)
1022 * 7) Définissez la ligne #define GENERATE_MAG_CALIBRATION_DATA comme commentaire et téléchargez encore le programme à Arduino
1023 ************************************************************************************************************************
1024 #define CALCULATE_YAW_WITH_HMC5883 NO // Sélectionnez YES ou NO; YES exige aussi que A_MPU6050_IS_CONNECTED soit à YES (voir ci-dessus)
1025 //#define GENERATE_MAG_CALIBRATION_DATA // Dé-commentez cette ligne lorsque l'étalonnage HMC5883 doit être effectué. Remmettez la ligne en commentaire une fois que les paramètres d'étalonnage ont été introduits
1026 #define XMAG_OFFSET 2 // Doit être un nombre entier (= sans décimales)
1027 #define YMAG_OFFSET -1 // Doit être un nombre entier (= sans décimales)
1028 #define ZMAG_OFFSET 139 // Doit être un nombre entier (= sans décimales)
1029 #define XXMAG_CORRECTION 0.122082 // Peut avoir des décimales
1030 #define XYMAG_CORRECTION -0.00204026
1031 #define XZMAG_CORRECTION 0.00377534
1032 #define YXMAG_CORRECTION -0.00204026
1033 #define YYMAG_CORRECTION 0.130413
1034 #define YZMAG_CORRECTION -0.00491189
1035 #define ZXMAG_CORRECTION 0.00377534
1036 #define ZYMAG_CORRECTION -0.00491189
1037 #define ZZMAG_CORRECTION 0.138038
1038 ************************************************************************************************************************
1042 ****** 11 - Flow sensor ******************
1043 * Si vous utilisez un moteur à essence, vous pouvez connecter un débitmètre à oXs
1044 * Ce capteur génère une impulsion chaque fois que quelques milli litres de carburant passent à travers le capteur
1045 * oXs peut compter le nombre d'impulsions et calcule 3 données: la consommation courante milli litres / min et, en prenant soin de la capacité du réservoir, le carburant restant en ml et en%.
1046 * Il est recommandé d'utiliser le capteur de débit suivant, car il est probablement plus précis que d'autres lorsque le débit est faible
1047 * http://www.conrad.be/ce/nl/product/155374/BIO-TECH-eK-FCH-M-Doorstroomsensor-1-stuks-Voedingsspanning-bereik-5-24-VDC-Meetbereik-08-0015-lmin-l-x;jsessionid=EED7B26A7F28BA3F20F0060807E20FD1.ASTPCEN22?ref=searchDetail
1048 * Il est prévu pour mesurer de 0,015 à 0,8 ml / min.
1049 * Le signal de sortie du débitmètre doit être connecté à la broche 9 de l'Arduino (et les 2 autres broches à 5 volts VCC et à Grnd).
1050 * Il existe d'autres capteurs de débit bon marché sur ebay ou aliexpress, mais je pense qu'ils n'offrent pas assez de précision lorsque le débit est faible.
1052 * Pour activer le débitmètre, vous devez:
1053 * - Affecter YES au paramètres A_FLOW_SENSOR_IS_CONNECTED (dans le fichier oXs_config_basic.h)
1054 * - Spécifier dans PULSES_PER_ML le nombre d'impulsions générées par le capteur lorsque 1 milli litre de liquide s'écoule à travers
1055 * - Spécifier dans TANK_CAPACITY la capacité maximale du réservoi en milli litre
1056 * - Spécifiez 8 valeurs utilisées pour calibrer votre capteur dans INIT_FLOW_PARAM
1057 * Ces paramètres sont utilisés car le nombre d'impulsions générées par le capteur (pour 1 milli-litre de liquide) varie en fonction du débit.
1058 * Pour 4 valeurs de débit (les 4 premiers paramètres), oXs vous permet, dans les 4 derniers paramètres, de définir la correction (en%) à appliquer .
1059 * Le processus d'étalonnage du capteur peut être le suivant:
1060 * Définir les 4 derniers paramètres sur 0 (donc 0% de correction)
1061 * Faire fonctionner votre moteur à 4 vitesses différentes (d'une vitessee très basse, à une moyenne et à très élevée) pendant quelques minutes.
1062 * Pour chaque régime de fonctionnement,
1063 * - Notez le carburant restant (en ml) rapporté par oXs au démarrage (par exemple 1200) et à la fin du test (par exemple 1090)
1064 * - Mesurer le carburant restant réellement (en ml) dans le réservoir au démarrage (par exemple 1500) et à la fin du test (par exemple 1380)
1065 * - Notez le temps de fonctionnement (en min) entre le début et la fin du test (par exemple, 2 minutes).
1066 * - Comparez le carburant en ml consommé (différence entre le carburant restant au début et à la fin) rapporté par oXs à la consommation réelle (par exemple, rapporté = 1200 - 1090 = 110 ml; réel = 1500 - 1380 = 120 ml)
1067 * - Calculer le facteur de correction à appliquer (par exemple (120 - 110) / 110 = 9%); La correction des notes pourrait être négative)
1068 * - Calculer le débit où cette correction s'applique (= ml consommé rapporté par oXs / temps en conflit = 110 ml / 2 min = 55 ml / min)
1069 * Remplissez les 4 premiers paramètres avec les débits calculés (par exemple, 55) et les 4 derniers paramètres avec le pourcentage de correction (par exemple, 9).
1070 * Veillez à ce que les 4 premiers paramètres soient en ordre croissant (donc de faible vitesse à grande vitesse).
1071 * Note: Lorsque oXs calcule la consommation, il appliquera une interpolation linéaire pour la gamme de valeurs associée.
1073 * Si vous déplacez un débitmètre oXs d'un avion à un autre, vous devrez probablement modifier les valeurs définies dans TANK_CAPACITY et / ou INIT_FLOW_PARAM.
1074 * Cela nécessite de télécharger un nouveau firmware dans votre oXs, sauf si vous utilisez le protocole JETI ou le protocole SPORT avec openTx 2.2.x (ou suivant).
1075 * Pour le protocole JETI, vous pouvez simplement entrer dans la boîte de dialogue JETIBOX, appuyer sur la touche DOWN pour passer à l'élément à modifier et appuyer sur "<" or ">" pour augmenter / diminuer la valeur.
1076 * N'oubliez pas d'activer l'option SAVE_TO_EEPROM dans la section 8 afin d'enregistrer les paramètres et de les réutiliser à la prochaine mise sous tension.
1077 * Pour le protocole SPORT, vous devez exécuter certains scripts LUA. Dans le dossier oXs (dans le sous-dossier "scripts lua"), vous pouvez trouver 3 scripts LUA à charger dans le dossier SCRIPTS/FUNCTIONS de la carte SD:
1078 * - Un (rstful.lua) pour réinitialiser le carburant consommé à 0 (à utiliser lorsque le réservoir est rempli)
1079 * - Un (tank.lua) pour définir la capacité maximale du réservoir (avant l'exécution du script, la capacité du réservoir doit être entrée dans GVAR9 pour la phase 9
1080 * La valeur dans GVAR9 est le nombre de 50 ml dans le réservoir. Cela signifie, par exemple, que pour un réservoir de 1000 ml, GVAR9 doit être réglé sur 20 (= 1000/50)
1081 * - Un (calful.lua) pour définir les 8 (4 X 2) paramètres d'étalonnage (avant d'exécuter le script, les paramètres doivent être entrés dans GVAR9 pour les phases 0 à 8)
1082 * Les premières 4 valeurs sont le débit en ml / min (min = 30, max = 800); les valeurs doivent être en ordre croissant
1083 * Les 4 dernières valeurs sont la correction en pourcentage à appliquer (min = -100, max = 100) pour chaque flux
1084 * Note: Les paramètres enregistrés dans l'eeprom ou chargés par un script LUA ont prioritésur les paramètres définis dans la configuration.
1086 * Veuillez noter que la consommation de carburant peut être sauvegardée toutes les 30 secondes dans une mémoire non volatile.
1087 * Pour activer cette option, vous devez dire YES dans la ligne #define SAVE_TO_EEPROM de la section 8
1088 * Si cette option est activée, à la mise sous tension oXs continue à décompter à partir du carburant qui restait lorsque l'alimentation à été coupée.
1089 * Sinon, oXs réinitialise la consommation de carburant et assume un réservoir de 100%.
1091 * Une réinitialisation de la consommation de carburant peut être demandée sur le TX. Ceci est vraiment nécessaire lorsque SAVE_TO_EEPROM est activé
1092 * Cela peut se faire de plusieurs façons en fonction également du protocole utilisé:
1093 * Pour tous les protocoles, il peut être demandé à l'aide d'un signal PPM
1094 * Cela nécessite d'activer l'option oXs PPM (voir la section 3) et de connecter un canal Rx à oXs.
1095 * La réinitialisation se produira lorsque la valeur absolue du signal PPM dépasse la valeur spécifiée dans FLOW_SENSOR_RESET_AT_PPM (section 11)
1097 * - Pour le protocole JETI, il peut être effectué avec le JETIBOX en pressant simultanément les touches "<" et ">" lorsque JETIBOX affiche le pourcentage de carburant restant
1098 * - Pour le protocole FRSKY SPORT, depuis OpenTX version 2.2.x, il est possible d'activer un script de fonction LUA qui enverra une commande de réinitialisation à oXs
1100 * Pour les protocoles JETI, oXs transmet automatiquement le débit actuel, le carburant restant en ml et en%
1101 * Pour d'autres protocoles, vous devez demander à oXs de transmettre les données; Donc vous avez:
1102 * - à dé-commenter la ligne #define FILL_TEST_1_2_3_WITH_FLOW_SENSOR_CONSUMPTION (dans la section 2.5)
1103 * - à spécifier dans lequel des champs de télémétrie, TEST_1 (débit actuel en ml / min), TEST_2 (carburant restant en ml) et TEST_3 (carburant restant en%) sont envoyés (voir section 2.1 / 2.4)
1104 * Notez que si vous transmettez TEST_1 ... TEST_3 dans AccX ... AccZ dans le protocole FRSKY, les valeurs sont divisées par 100 par OpenTx. Vous pouvez récupérer les valeurs d'origine si vous configurez une échelle = 255 sur le côté Tx dans les champs de télémétrie
1105 **************************************************************************************************************************************
1106 #define A_FLOW_SENSOR_IS_CONNECTED NO // Sélectionnez parmi YES , NO
1107 #define PULSES_PER_ML 10.0 // Nombre d'impulsions par milli litre (dépend du capteur); Peut avoir des décimales
1108 #define TANK_CAPACITY 1000 // Capacité du réservoir en ml
1109 #define INIT_FLOW_PARAM 30 , 100 , 500 , 700 , 20 , 10, -5, 15 // Définissez 4 niveaux de débit (en ml / min) (par exemple 30, 100, 500, 700) et 4 paramètres de correction (en%; par exemple 20, 10, -5, 15); Les débits doivent être mis en ordre ascendant.
1110 #define FLOW_SENSOR_RESET_AT_PPM 95 // Lorsque la valeur absolue de ppm est supérieure à celle-ci, la consommation est réinitialisé.
1111 **************************************************************************************************************************************
1115 ****** 20 - Séquenceur (ON/OFF) pour certaines sorties digitales **************************************************************************************
1116 * oXs vous permet de contrôler (HIGH / LOW) jusqu'à 6 sorties Arduino dans différentes séquences.
1117 * Chaque séquence est composée d'une ou plusieurs étapes; Chaque étape définit pour combien de temps (= une durée) les sorties sont HAUT et puis BAS.
1118 * oXs détermine normalement la séquence à lire en fonction du signal reçu sur un canal PPM (voir la section 3 pour configurer un signal PPM).
1119 * Il y a encore 2 exceptions:
1120 * À la mise sous tension ou lorsque aucune chaîne PPM n'est configurée / reçue, oXs générera par défaut la séquence définie dans la ligne #define SEQUENCE_m100 (voir ci-dessous)
1121 * Lorsqu'une alarme de basse tension est configurée (voir ci-dessous) et si la tension devient faible, oXs générera la séquence définie dans la ligne #define SEQUENCE_LOW (voir ci-dessous) tant que la tension reste faible
1122 * Lorsqu'une séquence a été exécutée, oXs peut soit la répéter soit attendre l'ordre d'exécuter une nouvelle séquence. La différence est faite dans la configuration de la séquence.
1123 * Chaque fois qu'un nouveau signal PPM (= un signal différent) est reçu, oXs démarre immédiatement la séquence correspondante (même si la séquence actuelle n'est pas complètement exécutée)
1124 * - Pour utiliser la fonctionnalité du séquenceur, vous devez d'abord définir quelles broches Arduino doivent être contrôlées par le séquenceur.
1125 * Les broches arduino qui peuvent être contrôlées sont les broches 13, 12, 11, 10, 9 et 8.
1126 * Cette configuration est obtenue par une ligne comme: #define SEQUENCE_OUTPUTS 0b100100
1127 * Chaque bit (1 ou 0 après le "b") représente une sortie; Le bit le moins important correspond à la broche 8, le bit à gauche la broche 9, etc., jusqu'à la broche 13
1128 * Mettre 1 lorsque la broche doit être contrôlée par le séquenceur, 0 sinon; Dans cet exemple, cela signifie que seules les broches 13 et 10 seraient contrôlées.
1129 * Remarque: si la ligne #define SEQUENCE_OUTPUTS xxxx est omise ou mise comme commentaire, le séquenceur n'est pas actif du tout.
1130 * Veillez à ne pas utiliser la même broche pour le séquenceur et pour une autre fonctionnalité oXs (par exemple comme broche Tx, pour bouton poussoir, pour PPM, pour RPM, ...)
1131 * Si une broche est configurée avec 0 (= non contrôlée par oXs), elle ne sera jamais forcée à HIGH ou LOW par le séquenceur même si un 1 ou 0 est configuré dans une séquence.
1132 * Lorsque le séquenceur est activé (SEQUENCE_OUTPUTS est défini) Le signal PPM est automatiquement utilisé SEULEMENT pour contrôler la séquence (donc PPM ne peut plus contrôler la sensibilité du vario ...)
1133 * Le passage de courant à travers les broches numériques d'Arduino ne doit pas dépasser 40mA par broche (et 200 mA pour l'ensemble des broches).
1134 * Dans le cas où vous souhaitez avoir un courant plus élevé (ce qui est le cas pour la plupart des LED à haute puissance et des bandes LED), vous devez ajouter un transistor. Le schéma de connexion peut facilement être trouvé dans Google.
1135 * - Ensuite, vous pouvez (optionnel) spécifier les unités utilisées pour définir les durées
1136 * Par défaut, les durées sont exprimées en 10 millièmes de seconde. Un paramètre vous permet d'augmenter l'unité en multiple de 10 millièmes de seconde;
1137 * Exemple: avec une ligne comme #define SEQUENCE_UNIT 50, les durées deviennent des multiples de 500 millièmes de seconde (= 50 * 10)
1138 * Remarque: ce paramètre doit être un nombre entier entre 1 et 1000. Donc il est impossible d'obtenir une durée inférieure à 10 ms.
1139 * Si cette ligne est omise (ou comme commentaire), la valeur par défaut (1 = 10 ms) sera appliquée.
1140 * - Ensuite, vous devez définir les séquences utilisées pour chaque valeur du canal PPM
1141 * Vous pouvez définir jusqu'à 9 séquences différentes.
1142 * Une séquence est définie par une ligne comme: #define SEQUENCE_m50 200, 0b100000, 300, 0b000000, 100, 0b100100
1143 * Chaque séquence est identifiée par la valeur du signal en ppm qui l'active; Le suffixe m100 (m = moins) signifie qu'il doit être activé lorsque la valeur de ppm est d'environ -100, m75 est pour ppm = -75, 75 est pour ppm = +75, etc.
1144 * Le suffixe de séquence est en multiple de 25; Les seuls suffixes de séquence valides sont : m100, m75, m50, m25, 0, 25, 50, 75 et 100
1145 * Chaque séquence se compose de plusieurs étapes (de 1 à 126 étapes ou même plus) (séparées par ",")
1146 * Chaque étape est composée de 2 paramètres (également séparés par ","): une durée et une combinaison (LOW / HIGH) des sorties
1147 * - Une durée peut être n'importe quelle valeur entre 0 et 255.
1148 * La valeur fixe la durée minimale qu'une combinaison de sorties doit être appliquée. La durée (en ms) est égale à la valeur indiquée * SEQUENCE_UNIT * 10
1149 * Ainsi, une valeur = 2 signifie une durée de 1 seconde si SEQUENCE_UNIT = 50.
1150 * Une valeur égale à 0 a une signification particulière. Lorsque oXs atteint une durée = 0, il applique la combinaison correspondante de sorties et la conserve pendant un temps non limité.
1151 * Cela permet de forcer les sorties à rester avec une combinaison spécifique après avoir joué la séquence.
1152 * Si la durée = 0 est utilisée, elle devrait être dans la dernière étape de la séquence (parce qu'oXs n'appliquera jamais les étapes suivantes).
1153 * Si la durée est 0 dans la première étape, oXs appliquera directement la combinaison spécifique des sorties et la gardera.
1154 * Si la durée = 0 n'est pas utilisée dans une séquence, oXs répétera automatiquement toute la séquence après avoir atteint la dernière étape.
1155 * Note: Si vous avez besoin d'une durée supérieure à la durée maximale (= 255 * SEQUENCE_UNIT * 10 ms), vous pouvez définir plusieurs étapes successives avec la même combinaison de sorties.
1156 * - Une combinaison (LOW / HIGH) des sorties définit les broches qui doivent être forcées sur LOW et celles sur HIGH
1157 * Une combinaison peut être définie en format binaire pour définir six 1 (HIGH) et / ou 0 (LOW) juste après "0b" (par exemple 0b100100)
1158 * Le bit le moins important correspond à la broche 8, le bit à gauche la broche 9, etc., jusqu'à la broche 13.
1159 * Donc, si SEQUENCE_OUTPUTS = 0b110111, alors 0b100100 signifie que:
1160 * - les broches 13 et 10 doivent être HIGH,
1161 * - Les broches 9 et 8 doivent être LOW
1162 * - Les autres (broches 12 et 11) ne sont pas contrôlées par une séquence en raison de la valeur attribuée à SEQUENCE_OUTPUTS = 0b100111
1163 * Ainsi, #define SEQUENCE_m50 2, 0b100000, 3, 0b000000, 1, 0b100100 signifie (en supposant que SEQUENCE_OUTPUTS = 0b100100 et SEQUENCE_UNIT = 50,):
1164 * - Mettre la broche 13 sur HIGH et la broche 10 à 0 (= 0b100000) lorsque le signal PPM devient -50
1165 * - Attendre au moins 2 * 50 * 10 = 1000 ms = 1 sec avant de changer les sorties
1166 * - Après 1 sec, mettre la broche 13 (et la broche 10) sur LOW (= 0b000000) pendant une durée de 1,5 sec (3 * 50 * 10)
1167 * - Après 1,5 sec, mettre les broches 13 et 10 sur HIGH pendant une durée de 0,5 sec (1 * 50 * 10)
1168 * - Après 0,5 seconde, répéter la première étape (broche 13 HIGH pendant 1 sec)
1169 * - Continuez avec les prochaines étapes
1170 * Note: lorsqu'une séquence n'est pas définie, oXs la gère comme s'il elle était définie avec 0, 0b000000 (donc pas de répétition, toutes les sorties LOW)
1171 * - Enfin, vous pouvez (mais ce n'est pas obligatoire) configurer la (les) condition (s) pour détecter une tension trop basse. Lorsqu'une tension devient trop faible, oXs démarre automatiquement la SEQUENCE_LOW (et néglige les informations venant par le canal PPM)
1172 * Une condition basse tension peut être configurée en fonction de 1 ou 2 tension (s):
1173 * - La tension sur la broche Arduino définie par le 6ème paramètre PIN_VOLTAGE; Cette configuration est obtenue par une ligne comme: #define SEQUENCE_MIN_VOLT_6 6000 où 6000 est la tension "basse" en mVolt.
1174 * Note: Si vous utilisez cette option, n'oubliez pas d'assigner un numéro de broche au 6ème paramètre dans #define PIN_VOLTAGE et de remplir (si demandé) les autres paramètres de tension pour ce 6ème élément.
1175 * La broche définie dans le 6ème paramètre de PIN_VOLTAGE peut être identique à un autre paramètre dans PIN_VOLTAGE; Cela peut être utile si vous souhaitez également configurer des paramètres de basse tension.
1176 * - La plus faible tension de toutes les cellules lipo; Cette configuration est obtenue par une ligne comme: #define SEQUENCE_MIN_CELL 3000 où 3000 est la tension "basse" en mVolt.
1177 * Note: Si vous utilisez cette option, n'oubliez pas de définir les autres paramètres de tension PIN_VOLTAGE, etc ... et NUMBEROFCELLS
1178 * Note: Lorsque aucun paramètre de basse tension n'est défini, oXs ne démarre pas automatiquement SEQUENCE_LOW.
1179 * Lorsque les deux paramètres de tension sont définis, oXs démarrera automatiquement SEQUENCE_LOW dès que l'une des 2 tensions devient faible.
1180 * Si vous souhaitez que oXs notifie une détection de basse tension, n'oubliez pas de définir SEQUENCE_LOW (sinon, oXs définira toutes les broches de sortie sur LOW)
1181 * Si vous avez la télémétrie, vous pouvez également effectuer une configuration sur le Tx pour détecter une tension trop faible, puis envoyer une valeur spécifique sur le canal ppm.
1182 * Dans ce cas, vous ne devez pas définir la configuration dans oXs et le même appareil peut être utilisé sur plusieurs modèles.
1183 ************************************************************************************************************************
1185 **** xx - Reservé au développeur **************************************************************************************
1186 * DEBUG doit être activé ici lorsque vous souhaitez déboguer une ou plusieurs fonctions dans d'autres fichiers.
1187 * L'activation de DEBUG permettra d'utiliser l'Arduino Serial Monitor à 115200 baud (ou 38600 lorsque le GPS est activé) pour voir les données d'initialisation et certaines valeurs de capteur en direct
1188 * Vous pouvez ensuite sélectionner les parties que vous souhaitez déboguer en dé-commentant les paramètres DEBUG spécifiques que vous souhaitez dans chaque fichier cpp.
1189 * Note: oXs permet aussi de transmettre 3 champs appelés TEST_1, TEST_2, TEST_3. Vous pouvez remplir ces champs avec ce que vous voulez, si vous voulez transmettre des données supplémentaires au Tx.
1190 * Il suffit de remplir test1.value (ou 2, 3) avec un int32_t et test1.available (ou 2, 3) avec true et ajouter TEST_1, (2 ,3) dans la section qui précise les données à envoyer.
1191 ************************************************************************************************************************