Mesure de distance (et plus) dispositif utilisant Arduino et GPS (5 / 5 étapes)

Étape 5: Programmation Arduino

1. LCD Driver

Tout d’abord, j’ai cherché une bibliothèque simple et petite pour l’écran LCD, Nokia 5110. Il y avait quelques bibliothèques différentes pour ce LCD: Adafruitde Sparkfunet Henning Klein' s. Parmi ces bibliothèques, j’ai choisi de Henning Karlsen, parce que j’ai eu besoin que de texte simple affichage avec un couple de tailles de police différentes. Henning Karlsen a séparé la bibliothèque de graphiques ainsi. Je tiens à remercier Henning pour son partage son beau travail sur la bibliothèque. Bibliothèque de Henning prend en charge 3 tailles de police différentes : SmallFont (texte et nombre, 6 × 8), MediumNumber (nombre seulement, 12 × 16) et BigNumber (numéro seulement, 14 x 24). Seul inconvénient de cette bibliothèque, c’est que les polices moyennes et grosses ne supportent pas de textes, mais uniquement des nombres. Aussi j’aurais besoin que des nombres à afficher avec les plus gros caractères, cette limitation n’est pas de problème avec moi.

2. calcul de la distance entre deux endroits

Il y a nombre de sites Web montrant comment calculer la distance entre deux endroits de latitudes et longitudes. Movable Type Scripts montre divers calculs de distance, azimut et autres conversions utiles à l’aide de la formule Haversine et BlueMM posté la formule Excel pour calculer la distance qui est essentiellement la même manière que Haversine.

Le calcul est assez simple, mais j’ai trouvé il y a un problème : Arduino (Atmega328p) ne peut pas gérer plus de 6-7 chiffres décimaux qui est très important dans le calcul trigonométrique sur courte distance.

Page de référence Arduino dit « flotteurs ont seulement 6-7 décimales de précision. Cela signifie que le nombre total de chiffres, pas le nombre à droite de la virgule décimale. Contrairement à d’autres plateformes, où vous pouvez obtenir plus de précision à l’aide d’un double (par exemple jusqu'à 15 chiffres), sur l’Arduino, double est la même taille que le flotteur. »

Permettez-moi de vous donner un exemple. Supposons que nous sommes partis d’une position A (lat : 40.00, long : 80) à une position B (lat : 40.01, long : 80.00). Autrement dit, nous avons déménagé 0,01 degré en latitude seulement. Si vous calculez la distance à l’aide de formule Haversine sur votre PC, vous obtiendrez environ 1 111,9 m. Toutefois, Arduino il calcule que 3 110,8 m. Grosse erreur ! Plus intéressant, c’est que même si vous réduisez la différence de latitude à 0,001 ou 0,0001 degrés, vous obtenez les mêmes résultats, 3 110,8 m. J’ai donc investiguer plus avant ce qui provoque exactement cette erreur. Bien sûr je sais que le coupable est la limitation de précision flotteur comme dit plus haut. Mais je voulais savoir quelle partie du calcul par Arduino provoquer cette grosse erreur. Il y a dans la formule Haversine, COS, SIN et ACOS fonctions utilisées. J’ai testé quelques calculs différents en utilisant ces fonctions et trouvé le calcul du COS et fonctions SIN affectent un minimum, mais le problème était l’ACOS. Si vous calculez la formule sur votre PC qu’à l’intérieur du support de l’ACOS, vous obtiendrez 0.9999999848. Voir mon point ? La troisième décimale inférieure à 6 dans la fonction ACOS est effectivement important de calculer la différence angulaire pour petite distance, mais malheureusement les Arduino ne peut pas gérer cela. Non seulement pour la petite distance, mais encore relativement longue distance (plus de 1 degré dites par exemple) il y a erreur entre les résultats sur le PC et Arduino.

Eh bien, alors j’ai commencé à réfléchir à comment éviter la fonction trigonométrique calcul lorsque sur 6 décimales sont importants. Et j’ai trouvé une solution ! Au lieu de calculer la différence angulaire entre deux positions et puis en calculant la distance en multipliant le rayon de la terre moyenne, calculer un ratio de l’angle entre deux positions (latitude et longitude séparément) sur 360 degrés et diviser la circonférence de la terre par ce ratio. En d’autres termes, conservez les numéros gros tout en calcul. Type de flotteur de l’Arduino a une limitation sur les petits décimales, mais peut gérer relativement grands nombres !

Voici ma formule :

La circonférence moyenne de la terre est x π 2 x 6 371 000 m = 40,030,170 m

ΔD (lat) = 40,030,170 x ΔΘ (lat) / 360 (en supposant que ΔΘ est petit)

ΔD(long) = 40,030,170 x ΔΘ(long) x cosΘm / 360 (Θm : moyenne latitude entre deux positions)

Maintenant, la distance est √ [Δd (lat) ^ 2 Δd (long) ^ 2]

J’ai testé cette méthode en mesurant la distance entre la maison et mon travail et il a bien fonctionné. Tout d’abord, j’ai obtenu les coordonnées de ma maison et mon travail et ensuite calculé la distance par Haversine méthode et par ma formule indiquée ci-dessus. Il y a une différence dans les résultats mais négligeable.

Croquis de l’Arduino est attaché. La bibliothèque LCD peut être téléchargée à partir ici.

Merci de lire mon Instructable. Hope quelqu'un trouver ceci est utile.

Articles Liés

Mesure de Distance de LCD en utilisant Arduino

Mesure de Distance de LCD en utilisant Arduino

Et après avoir affiché jusqu'à quelques tutoriels robotiques, j'ai décidé d'aller plus en détail sur les capteurs. Pour démarrer avec j'ai choisir un capteur à ultrason et un Arduino dans le microcontrôleur.Ce Instructable est purement pour ceux qui
Commande à distance votre ordinateur en utilisant Arduino

Commande à distance votre ordinateur en utilisant Arduino

cette semaine, j'ai utilisé un Teensyduino pour agir en tant que traductrice entre une télécommande infrarouge et mon ordinateur.  Le Teensy lit les signaux infrarouges de la télécommande et puis émule un clavier USB de l'ordinateur.  Je l'utilise po
Dispositif d’alarme automatique de mesure de distance

Dispositif d’alarme automatique de mesure de distance

Aujourd'hui je vais vous montrer comment faire un dispositif de mesure de Distance avec alarme automatique à l'aide d'un Arduino Uno Board et le capteur à ultrasons. Il va montrer vous à distance sur un écran LCD et si quelque chose va venir dans une
Arduino LCD projet pour mesurer la Distance

Arduino LCD projet pour mesurer la Distance

Bonjour:)Peut être vous ne savez pas comment utiliser un capteur à ultrasons pour mesurer la distance avec un écran LCD, donc dans ce instructable j'ai décidé de vous faire plaisir et vous aider à démarrer. Ce capteur est très populaire parmi les Gee
Dispositif de mesure de Distance à ultrasons Linkit One

Dispositif de mesure de Distance à ultrasons Linkit One

Dans ce instructable, je vais vous montrer comment combiner un capteur à ultrasons (HC-SR04) avec un Linkit un faire une dispositif de mesure de distance. Cet appareil permet de mesurer une rage maximale jusqu'à 2 mètres, c'est vraiment amusant proje
Arduino basée zone de mesure de Distance

Arduino basée zone de mesure de Distance

Bonjour, dans ce projet je vais vous montrer comment créer votre propre boîte de mètres de distance avec Arduino uno et un capteur à ultrasons.Avant de commencer, assurez-vous que vous avez :Arduino unoCapteur à ultrasons HC-SR04LCD 16 x 2Page offici
Dispositif de localisation GPS voiture en utilisant Arduino et smartphone

Dispositif de localisation GPS voiture en utilisant Arduino et smartphone

À la fin de 2013, plus de 7,2 millions véhicules automobiles dans le monde entier ont été identifiées comme volé alors il est très important de protéger votre véhicule contre le vol.dans ce projet, nous allons vous aider:)vous n'avez pas à acheter to
NRF905 de mesure de Distance par ultrasons système de Transmission sans fil basée sur Arduino

NRF905 de mesure de Distance par ultrasons système de Transmission sans fil basée sur Arduino

ICStation Équipe de vous présenter cette mesure de distance à ultrasons NRF905 système de transmission sans fil avec ICStation UNO et Mega 2560 compatible avec Arduino. La tension de fonctionnement est DC5V. Il utilise les ultrason pour mesurer la di
N’importe quelle voiture contrôlée à distance en utilisant Arduino

N’importe quelle voiture contrôlée à distance en utilisant Arduino

car c'est mon premier instructable j'ai essayé de mon mieux. Cette voiture est faite en utilisant arduino sans moteur sheild ou ics. Ce rover peut être contrôlé à l'aide d'une télécommande. Tout d'abord, nous avons besoin décoder la télécommande pour
Le plus simple tutoriel Buzzer ; En utilisant Arduino

Le plus simple tutoriel Buzzer ; En utilisant Arduino

Hé Makers,Permet de faire un Simple Buzzer de Quiz en utilisant Arduino !Étape 1: Ce que nous pouvons faire avec elle ?Ce que nous pouvons faire avec elle ?> quiz Buzzer jeu> jouer des airs et beaucoup plus...Étape 2 :Choses nécessaires> Arduino
Arduino Nano : Mesurer la distance avec Ranger par ultrasons et de l’enregistrer pour carte MicroSD avec Visuino

Arduino Nano : Mesurer la distance avec Ranger par ultrasons et de l’enregistrer pour carte MicroSD avec Visuino

Les cartes MicroSD sont support de stockage bon marché et facile, et ils sont très pratiques pour stocker les données des capteurs Arduino . Il y a également un certain nombre de bon marché disponibles Modules carte MicroSD pour Arduino.Dans ce Instr
Construisez votre propre ROBOT insecte en utilisant ARDUINO et SERVO

Construisez votre propre ROBOT insecte en utilisant ARDUINO et SERVO

Hé là, je suis avec un instructalble plus. Je vais vous apprendre comment construire un robot insecte en utilisant Arduino et moteurs Servo. Sons cool, droit?. Ce que vous pensez de l'utilisation de ce robot ? En raison de leur faible encombrement qu
Automatisation de la Machine à laver en utilisant arduino

Automatisation de la Machine à laver en utilisant arduino

Nous éprouvons une machine à laver semi automatique. Vidange et interrupteur minuterie sont gâtés. J'ai essayé de les remplacer, mais il coûte plus d'argent. Nous avons cessé de l'utiliser. Puis j'ai pensé à Enlevez les commutateurs manuels et automa
Tachymètre infrarouge en utilisant Arduino

Tachymètre infrarouge en utilisant Arduino

Salut, c'est juste un autre tachymètre que vous pouvez trouver également de nombreux tutoriels là-bas. Il existe différentes approches sur mesure tr/min, ce que j'utilise ici repose sur la méthode analogRead comme écrit dans l'arduino playground appr