GoFly - Parapente/Parapente/deltaplane altimètre-variomètre de votre navigation de voiture (5 / 8 étapes)

Etape 5: Programmation votre Arduino...

Donc finalement nous avons projet prêt à mettre un code à l’intérieur.

Comment installer l’environnement de programmation ?
Vous trouverez tout sur cette page.
http://Arduino.cc/en/guide/Windows

Annonce du programme.
Vous avez besoin d’environnement Arduino 1.0 pour compiler ce programme. Vous devez également quelques bibliothèques supplémentaires.
http://code.google.com/p/bmp085driver/
http://code.google.com/p/Rogue-code/
J’ai fait la programmation long il y a quelque temps (il y a plus de 10 ans) donc ce programme n’est pas parfait. Basé sur ce que j’ai trouvé sur internet, certains d’apprentissage, en train et références de sites Web.
Il y a beaucoup de commentaires pour vous permettre de comprendre comment fonctionne ce programme.

/*
Arduino Vario par Jaros, 2012 (dédié à arduinos atmega328 basé)
Cadre du projet « GoFly »
https://sites.google.com/site/jarosrwebsite/para-NAV
Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
elle aux termes de la GNU General Public License telle que publiée par
la Free Software Foundation ; soit la version 2 de la licence, ou
(selon votre choix) toute version ultérieure.
Ce programme est distribué dans l’espoir qu’il sera utile,
mais sans aucune garantie ; sans même la garantie implicite de
Qualité marchande ou ADEQUATION a un usage particulier.  Voir le
GNU General Public License pour plus de détails.
Vous devriez avoir reçu une copie de la GNU General Public License
avec ce programme ; Si tel n’est pas le cas, écrivez à la Free Software
Foundation, Inc., 51 Franklin St, 5ème étage, Boston, MA 02110-1301 USA

Carte Arduino crée NMEA comme protocole avec sortie variomètre et beping sonore.
LK8000 INSTRUMENT EXTERNE SÉRIE 1 - PHRASE NMEA : LK8EX1
VERSION A, 110217

$LK8EX1, pression, altitude, vario, température, batterie, * checksum

Terrain 0, pression brute en hPascal:hPA * 100 (exemple pour 1013.25 devient 101325)
sans remplissage (987.25 devient 98725, pas 098725)
Si aucune pression disponible, envoyer 999999 (9 6 fois)
Si la pression est disponible, altitude domaine 1 sera ignoré
Champ 1, altitude en mètres, par rapport au QNH 1013.25
Si la pression brute est disponible, cette valeur sera ignorée (vous pouvez le définir à 99999
mais pas vraiment nécessaire) ! (si vous souhaitez utiliser cette valeur, la valeur brute pression 999999)
Cette valeur est par rapport au niveau de la mer (QNE). Nous partons du principe qu’actuellement à 0m
altitude pression est 1013.25.If standard, vous ne pouvez pas envoyer crus d’altitude, puis envoie
ce que vous avez, mais alors vous ne devez pas ajuster du réglage de base in LC.
Altitude peut être négatif. Si non disponible, altitude et ne pression pas l’Altitude disponible, ensemble
à 99999. LK diront « Baro altitude disponible » si un des champs de 0 et 1 est disponible.
Zone 2, vario en cm/s
Si le vario n’est pas disponible, envoyer 9999. Valeur peut aussi être négative.
Zone 3, c, la température peut être aussi négatif. Si non disponible, envoyer 99
Domaine 4, pourcentage de tension ou de charge de batterie. Ne peut pas être négatif. Si non disponible, envoyer 999.
Tension est envoyée comme valeur de type float comme : 0,1 1,4 2,3 11,2. Pour envoyer un pourcentage, ajoute 1000.
Exemple 0 % = 1000. 14 % = 1014. N’envoyez pas des valeurs float pour les pourcentages.
Pourcentage devrait être de 0 à 100, avec pas de nombres décimaux, ajoutés par 1000 !
Crédits :
(1) Bibliothèque de //bmp085 de http://code.google.com/p/bmp085driver/
(2) http://mbed.org/users/tkreyche/notebook/bmp085-pressure-sensor/ //more sur le filtre bmp085 et moyenne
(3) http://code.google.com/p/rogue-code/ //helpfull bibliothèque de ton faire beau bip sans utiliser de retard
(4) http://www.daqq.eu/index.php?show=prj_sanity_nullifier //how faire haut-parleur piézo forte
(5) http://lk8000.it //everything à cause de cela
(6) http://taturno.com/2011/10/30/variometro-la-rivincita/ //huge Merci pour l’algorithme de Vario
(7) //how http://code.google.com/p/tinkerit/wiki/SecretVoltmeter pour mesurer le niveau de la batterie à l’aide d’ucontroller AVR
*/

#include < Wire.h > //i2c bibliothèque
#include < BMP085.h > //bmp085 bibliothèque, téléchargement de lien url (1)
#include < Tone.h > //tone bibliothèque, téléchargement de lien url (3)
#include < stdlib.h > à //we besoin d’utiliser dtostrf() et convertir char en string
/////////////////////////////////////////
variables que vous pouvez tester et essayer
court speaker_pin1 = 8 ;                Arduino haut-parleur sortie-
court speaker_pin2 = 9 ;                sortie haut-parleur Arduino +
float vario_climb_rate_start = 0,4 ;    montée minimale bip valeur (départ ex. escalade bip à 0,4 m/s)
float vario_sink_rate_start = -1,1 ;    maximale évier bip valeur (ex. début évier bip à - 1,1 m/s)
#define SAMPLES_ARR 6 //define déplacement filtre moyenne taille de tableau (2 -> 30), signifie plus vario est moins sensible et plus lent
#define UART_SPEED 9600 vitesse de transmision série //define (9600,19200, etc....)
/////////////////////////////////////////
/////////////////////////////////////////
BMP085 bmp085 = BMP085() ;            installation capteur bmp085
Ton tone_out1 ;
Ton tone_out2 ;
Température de longue = 0 ;
longue pression = 101325 ;
flotteur d’Altitude ;
int Battery_Vcc = 0 ;             variable pour stocker la valeur de SCR de batterie
const float p0 = 101325 ;              Pression au niveau de la mer (Pa)
unsigned long get_time1 = millis() ;
unsigned long get_time2 = millis() ;
unsigned long get_time3 = millis() ;
thermique booléen = false ;
int my_temperature = 1 ;
char altitude_arr [6] ;            Wee besoin ce tableau flotteur en chaîne de la traduction
char vario_arr [5] ;               Wee besoin ce tableau flotteur en chaîne de la traduction
échantillons d’int = 40 ;
int maxsamples = 50 ;
flotteur alt [51] ;
flotteur de tim [51] ;
bip de flotteur ;
float Beep_period ;
public static long k [SAMPLES_ARR] ;

public static Averaging_Filter long (long d’entrée) ;
public static Averaging_Filter long (long d’entrée) / / moving fonction filtre moyenne
{
longtemps la somme = 0 ;
pour (int i = 0; i < SAMPLES_ARR; i ++) {}
k [i] = k [i + 1] ;
}
k [SAMPLES_ARR - 1] = entrée ;
pour (int i = 0; i < SAMPLES_ARR; i ++) {}
Sum += k [i] ;
}
retour (somme / SAMPLES_ARR) ;
}

void play_welcome_beep() //play seul bip une fois bienvenue après avoir tourné sur arduino vario
{
pour (int aa = 300; aa < = 1500; aa = aa + 100)
{
tone_out1.Play(AA,200) ;             jouer le bip sur la broche 8 (Remarque, duration)
tone_out2.Play(AA+3,200) ;           jouer le bip sur la broche 9 (note, durée), il est plus fort si nous déplaçons aplitude phase
Delay(100) ;
}
pour (int aa = 1500; aa > = 100; aa = aa-100)
{
tone_out1.Play(AA,200) ;             jouer le bip sur la broche 8 (Remarque, duration)
tone_out2.Play(AA+3,200) ;           jouer le bip sur la broche 8 (Remarque, duration)
Delay(100) ;
}
}

readVcc() long / / fonction pour lire la valeur de batterie - toujours en phase de développement
{
résultat de long ;
Référence de lecture 1.1V contre AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) ;
Delay(2) ; Attendez la Vref à régler
ADCSRA | = _BV(ADSC) ; Convert
tandis que (bit_is_set(ADCSRA,ADSC)) ;
résultat = ADCL ;
résultat | = ADCH << 8 ;
résultat = 1126400L / en résulter ; Rétrocalcul AVcc en mV
retourner le résultat ;
}

void setup() / / setup() fonction de configurer tous les paramètres nécessaires avant de passer à la fonction loop() sans fin
{
Serial.Begin(UART_SPEED) ;       mettre en place l’arduino serial port
Wire.Begin() ;             permet le protocole i2c init
tone_out1.Begin(speaker_pin1) ;       piézo orateur sortie pin8-
tone_out2.Begin(speaker_pin2) ;       sortie de haut-parleur piézo pin9 +
BMP085.init (MODE_ULTRA_HIGHRES, p0, false) ;
BMP085 mode ultra-high-res, 101325Pa = 1013.25hPa, = false à l’aide d’unités de Pa
cette initialisation est utile pour normaliser la pression de référence spécifique.
OU la définition actuelle d’informations locale hPa vers un aéroport de la station météo/local (QNH).
play_welcome_beep() ;      tout est prêt, lire son « Bienvenue »
}

Sub loop(void)
{
float tempo=millis() ;
flotteur vario = 0 ;
flotteur N1 = 0 ;
flotteur N2 = 0 ;
flotteur N3 = 0 ;
flotteur D1 = 0 ;
D2 de flotter = 0 ;
BMP085.calcTruePressure(&Pressure) ;                                   obtenir un échantillon de BMP085 dans chaque arceau
long average_pressure = Averaging_Filter(Pressure) ;                   mettre dans le filtre et prendre la moyenne
Altitude = (float) 44330 * (1 - pow(((float)Pressure/p0), 0.190295)) ;  prendre la nouvelle altitude en mètres
Serial.println(Battery_Vcc) ;
pour (int cc = 1; cc < = maxsamples; cc ++) {//samples moyenne et vario algorithme
Alt[(CC-1)] = alt [cc] ;
Tim[(CC-1)] = tim [cc] ;
};
Alt [maxsamples] = Altitude ;
Tim [maxsamples] = tempo ;
flotteur stime = tim [maxsamples-samples] ;
pour (int cc =(maxsamples-samples); cc < maxsamples; cc ++) {}
N1 += (tim [cc]-stime) * alt [cc] ;
N2 += (tim[cc]-stime) ;
N3 += (alt[cc]) ;
D1 = (tim[cc]-stime)*(tim[cc]-stime) ;
D2 = (tim[cc]-stime) ;
};

Vario=1000*((Samples*N1)-N2*N3)/(Samples*D1-D2*D2) ;
Si ((tempo-beep) > Beep_period) / / faire un bip
{
bip = tempo ;
Si (vario > vario_climb_rate_start & & vario < 15)
{
Beep_period=350-(Vario*5) ;
tone_out1.Play((1000+(100*Vario)),300-(Vario*5)) ; Quand vous faites plus rapides et plus courts bips
tone_out2.Play((1003+(100*Vario)),300-(Vario*5)) ;
thermique = true ;                               OK, nous avons thermall dans nos mains
} ElseIf ((vario < 0) & & (thermique == true)) //looks comme on saute par la thermall
{
Beep_period = 200 ;
play_siren() ;                                   Oo, nous avons perdu thermall jeu alarme
thermique = false ;
} ElseIf (vario < vario_sink_rate_start) {//if vous avez haute performace planeur vous pouvez changer couler bip au - 0,95 m/s;)
Beep_period = 200 ;
tone_out1.Play(300,340) ;
tone_out2.Play(303,340) ;
thermique = false ;
}
}

Si (millis() > = (get_time2 + 1000)) //every obtenir deuxième niveau de température et de batterie
{
BMP085.getTemperature(&temperature) ; obtenir la température en degrés celsius de temps à autre, il faut diviser par 10 pour obtenir XY. Z
my_temperature = Temperature/10 ;
Battery_Vcc = (readVcc () / 42) + 1000 ;    obtenir la tension et de préparer en pourcentage
get_time2 = millis() ;
}

Si (millis() > = (get_time3 + 333)) //every 1/3 seconde envoyer la sortie NMEA sur le port série
{
String str_out = //combine toutes les valeurs et créer le cadre de la sortie de chaîne des données NMEA
String("LK8EX1"+String(",")+String(average_pressure,DEC) + String(",")+String(dtostrf(Altitude,0,0,altitude_arr))+String(",") +
String(dtostrf((Vario*100),0,0,vario_arr))+String(",")+String(my_temperature,DEC)+String(",")+String(Battery_Vcc,DEC)+String(",")) ;
unsigned int checksum_end, ai, bi ;                                                 Calcul de checksum pour la chaîne de données
pour (checksum_end = 0, IA = 0; IA < str_out.length() ; IA ++)
{
BI = (unsigned char) str_out [IA] ;
checksum_end ^ = bi ;
}
créer maintenant sortie NMEA pour LK8000. Format de protocole de LK8EX1 :
$LK8EX1, pression, altitude, vario, température, batterie, * checksum
Serial.Print("$") ;                     imprimer le premier signe du protocole NMEA
Serial.Print(str_out) ;                 chaîne de données d’impression
Serial.Print("*") ;                     fin de chaîne de protocole
Serial.println(checksum_end,hex) ;      imprimer la somme de contrôle calculée sur la fin de la chaîne en hexadécimal
get_time3 = millis() ;
}
}
La fin

Articles Liés

Raspberry Pi - MPL3115A2 altimètre de précision capteur Python Tutorial

Raspberry Pi - MPL3115A2 altimètre de précision capteur Python Tutorial

La MPL3115A2 utilise un capteur de pression MEMS grâce à une interface I2C pour fournir des données exactes de l'Altitude/pression et température. Les sorties du capteur sont numérisées par une haute résolution 24-bit ADC. Traitement interne supprime
Raspberry Pi - MPL3115A2 altimètre de précision capteur Java Tutorial

Raspberry Pi - MPL3115A2 altimètre de précision capteur Java Tutorial

La MPL3115A2 utilise un capteur de pression MEMS grâce à une interface I2C pour fournir des données exactes de l'Altitude/pression et température. Les sorties du capteur sont numérisées par une haute résolution 24-bit ADC. Traitement interne supprime
Entoilage MS5067 altimètre avec Linkit-un

Entoilage MS5067 altimètre avec Linkit-un

MS50XX série est la série des altimètres ame-Specs, utilisations de mesure de la pression afin d'estimer l'altitude l'air. Ici je vais utiliser l'unité MS5607Fiche technique : http://www.meas-spec.com/downloads/MS5607-02BA03.pdfÉtape 1: connexionsMS5
Particule Photon - tutoriel de capteur altimètre de précision MPL3115A2

Particule Photon - tutoriel de capteur altimètre de précision MPL3115A2

La MPL3115A2 utilise un capteur de pression MEMS grâce à une interface I2C pour fournir des données exactes de l'Altitude/pression et température. Les sorties du capteur sont numérisées par une haute résolution 24-bit ADC. Traitement interne supprime
Un altimètre Arduino compact, pour les avions RC

Un altimètre Arduino compact, pour les avions RC

Merci de voter pour ce Instructable si vous pensez qu'il le mérite ! Merci !L' Altimètre ultime est un altimètre Arduino contrôlée super compact, capable de mesurer l'altitude avec une précision de 0,3 mètres et enregistrer les valeurs maximale et mi
Arduino Nano - tutoriel de capteur altimètre de précision MPL3115A2

Arduino Nano - tutoriel de capteur altimètre de précision MPL3115A2

La MPL3115A2 utilise un capteur de pression MEMS grâce à une interface I2C pour fournir des données exactes de l'Altitude/pression et température. Les sorties du capteur sont numérisées par une haute résolution 24-bit ADC. Traitement interne supprime
Standalone Arduino altimètre

Standalone Arduino altimètre

Voici un altimètre autonome travaillant avec Arduino que vous pouvez utiliser dans le projet RC, randonnée pédestre, voitures... où vous voulez:)Il montre sur le premier écran de l' altittude, la température et la pression de l'air, et dans le second
Monter A thermomètre dans votre couchette

Monter A thermomètre dans votre couchette

dans ce Instructable, je vais vous montrer comment monter simplement un thermomètre dans votre sommeil. Je me suis fatigué de ne pas connaître la température dans mon lit, alors j'ai décidé de monter un thermomètre numérique dans mon lit, et un therm
PropVario, un variomètre bricolage/altimètre avec sortie vocale pour planeurs RC

PropVario, un variomètre bricolage/altimètre avec sortie vocale pour planeurs RC

cette instructables vous montrera comment construire un Vario peu coûteux, qui pourrait parler de l'altitude etbien sûr envoyer des tonalités diverses lors du changement de la hauteur de votre planeur.Quelques caractéristiques :-voix et le ton-Utilis
Arduino moniteur portatif de météo, altimètre, température, humidité, à l’aide de DHT11 et BMP85 avec écran LCD à l’aide de seulement 3 points

Arduino moniteur portatif de météo, altimètre, température, humidité, à l’aide de DHT11 et BMP85 avec écran LCD à l’aide de seulement 3 points

j'ai fait ce projet parce que j'ai souvent escalader des montagnes comme celui de la photo et j'ai besoin de connaître l'altitude, la température et aussi des changements de temps, parfois en quelques minutes le temps obtenir très mauvais, avec la gr
Homebrew Arduino cardiofréquencemètre (visualiser votre pulsation)

Homebrew Arduino cardiofréquencemètre (visualiser votre pulsation)

films air cool avec ces EKG (électrocardiogramme), celui qui émet un signal sonore et détecte les activités cœur. Il y a quelques mois nous avons dû tourner une scène de l'hôpital pour notre projet d'école. Nous avions besoin d'un instrument d'EKG. P
Chronomètre Arduino-basé pour la voiture électrique, pistes de course

Chronomètre Arduino-basé pour la voiture électrique, pistes de course

Dans ce projet, que j'utilise un capteur de proximité d'infra-rouge sur mesure connecté à une carte Arduino pour chronométrer les tours sur une voiture électrique circuit de course. Le capteur détecte la voiture quand il passe devant elle et mesure l
10 fenêtres sur votre HP Jet 7 !

10 fenêtres sur votre HP Jet 7 !

Ou autre tablette de même pas cher ~Vous étiez l'une des personnes qui ont acheté une tablette de Windows 8.1 100 $? Vous aimez votre tablette ? Eh bien, ma réponse est oui aux deux ! J'ai fais peur aimer mon petit HP Jet 7 ! Alors qu'il n'a pas asse
Permet d’effectuer des « intérieurs » StickyFrames - un cadre d’affichage avec un contenu facilement remplaçable qui s’attache aux fenêtres dans votre voiture.

Permet d’effectuer des « intérieurs » StickyFrames - un cadre d’affichage avec un contenu facilement remplaçable qui s’attache aux fenêtres dans votre voiture.

En raison de la popularité soudaine de mon précédent instructable, j'ai décidé de suivre avec un autre. Cette fois-ci, peur de faire « à l'intérieur » StickyFrames - qui est un cadre d'affichage avec un contenu facilement remplaçable qui s'attache au