From 49d59f3619e8ae24e7545e9d153c102bf6eda6a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E8=BF=9B?= Date: Mon, 28 Jun 2021 12:02:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'README.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f789e79..51ee43f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,126 @@ # OpenVario-XCSOAR-Arduino -新兴航 \ No newline at end of file +https://www.volavoile.net/index.php?showtopic=12188 + + +新兴航 + +``` +#include +#include +/* deuxième sketch pour IAS pour LK8000 dans une forme plus rigoureuse*/ +//int ptot=1013; //à supprimer quand BMP085 dispo; +Adafruit_BMP085 bmp; +void setup(){ + Serial.begin (57600); + bmp.begin(); +} + +void loop(){ + Serial.println("loop"); + + while (Serial.peek()!='$'){ + if (Serial.available()<1){ + continue; + } + Serial.print(char(Serial.read())); //penser à enlever le LN! + } + char nmea[83]={'$'}; + get_nmea(nmea); //entre toute la trame dans la chaine nmea + if (get_entete(nmea)==true){ //si l'entete est celle qui donne la p_stat + Serial.println("if_loop true"); + Serial.print("ptot "); Serial.print(bmp.readPressure()/100);Serial.println("hpa"); + int ias=10*sqrt((2*((bmp.readPressure()/100) - get_pstat(nmea)))/1.225); + //calcul de l'IAS + Serial.print("IAS caculé est de: "); Serial.print(ias);Serial.println("dm/s");//penser à enlever le LN! + envoie_trame_ias(ias); + + }else { + Serial.print("if loop false"); + // Serial.print(nmea); + } +} + +void get_nmea(char nmea[]){ +// Serial.println("get_nmea"); + for (int i=0; i<83; i++){ + while (Serial.available()<1); // attente de 1 caractères dispo dans le buffer + nmea[i]=Serial.read(); //replissage de la chaine nmea avec les caratcères dispo + if (nmea[i]==10){ //si le caractère est on arrête de remplir + // Serial.print("caractere LF trouvé"); + break; // et on quitte la boucle + } + } + Serial.println(nmea); // on renvoie la trame sur la sortie serie //penser à enlever le LN! + return; + +} +boolean get_entete(char nmea[]){ +// Serial.print(nmea); + char entete_alti[8]="$PGRMZ,"; + for (int i=0;i<6;i++){ + if(entete_alti[i]!=nmea[i]){ + // Serial.print("condition fausse"); + return false; + } + } + return true; + } + + +int get_pstat(char nmea[]){ + char char_pstat[7]={'\0'}; + int pstat; + for (int i=7 ; nmea!=',' ; i++){ + char_pstat[i-7]=nmea; + } + // Serial.print(char_pstat);Serial.println("pieds"); + pstat= atoi(char_pstat); + // Serial.print(pstat);Serial.println("pieds"); + pstat=1013.25 * pow((288-(0.0065*pstat*0.3028))/288,5.255); //formule de conversion pieds en hpa + // Serial.print("pstat "); Serial.print(pstat); Serial.println("hPa"); + return pstat; +} + +void envoie_trame_ias(int ias){ +// Serial.println("envoie trame ias"); + char char_ias[4]={'\0'}; + char char_nmea_ias[15]="$PLKAS,"; + int n; + itoa (ias,char_ias,10); + // Serial.print("char_ias: "); Serial.println(char_ias); + + for (int i=7; char_ias[i-7]!='\0';i++){ + char_nmea_ias=char_ias[i-7]; + n=i; + // Serial.print("i= "); Serial.println(i); + } + char_nmea_ias[n+1]=','; + /* char XOR=0; + for (int i=0; char_nmea_ias!='\0';i++){ + XOR^=char_nmea_ias; + }*/ + char_nmea_ias[n+2]=get_XOR(char_nmea_ias); + char_nmea_ias[n+3]=13; + char_nmea_ias[n+4]=10; + Serial.print (char_nmea_ias); + return; +} + +char get_XOR(char trame[]){ + // Serial.println("get_XOR"); + char XOR='\0'; + for (int i=0; trame!='\0';i++){ + XOR^=trame; + } + return XOR; +} +``` + + +为了准确测量空气速度,需要一个动态压力范围为 0-50mb (AMS5915) 的单向差动传感器。 + +对于分辨率为10cm的高度计,我们需要一个24位转换压力传感器(MS5611-01)和卡尔曼滤波降噪。 + +我怀疑你用 BMP085 操作的结果,被 BMP180 取代,但仍然不够精确,对于 pitot 和 alti-vario ... +