GPS à ultrasons. Modèle conceptuel
Avant de partir pour un si long voyage, il vaut la peine de vérifier si tout se fait vraiment à genoux.
De quoi traite cet article: comment fabriquer rapidement et à peu de frais un simple GPS à ultrasons.
Liste des appareils requis
- HC-SR04 3 pièces
- Arduino 1 Pcs.
- Une bobine de fils.
Concept
Fig. 1 - Idée générale de l'appareilDans les coins supérieurs de la pièce, HC-SR04 est installé, qui joue le rôle d'émetteurs, le troisième est à l'envers au sol avec le récepteur, et il joue le rôle de récepteur pour nous.
Tout cela est connecté selon le schéma:
Fig. 2 - Schéma de connexion des appareilsEt bien sûr, vous connectez Arduino via USB à un ordinateur.
Comment tout cela fonctionne:
- Mesurer la distance du récepteur à l'émetteur 1
- Envoyez un signal sur le début de la mesure de distance au récepteur et à l'émetteur 1 (tirez avec les jambes de déclenchement).
- Attendez que le récepteur nous donne la longueur.
- Répétez la même chose pour l'émetteur 2.
- Calculez les coordonnées du récepteur.
Rappeler la géométrie de l'école
Fig. 3 - Représentation géométrique du problèmeSur la base de cette figure, nous composons les formules de calcul des coordonnées:

A, F est la hauteur des émetteurs par rapport au récepteur;
C, E sont les longueurs obtenues en mesurant la distance des émetteurs au récepteur;
G est la distance entre les émetteurs.
Pratique
Installez deux radiateurs sous le plafond, à une distance décente l'un de l'autre (3 mètres), dirigez-les avec des radiateurs en un point, autour duquel votre zone de travail sera formée.
Montez le récepteur sur quelque chose de plat (par exemple, un morceau de planche) et enveloppez-le avec du ruban adhésif avec du ruban adhésif afin de ne pas créer de bruit ultrasonique inutile dans la pièce.
Connectez tout selon le schéma présenté ci-dessus.
Voici à quoi pourraient ressembler les attaches des émetteurs et le substrat du récepteur:
Fig. 4 - Type de modulesLe programme
Considérez les parties clés du code plus en détail.
Nous forçons l'émetteur 1 et le récepteur à commencer à mesurer la distance en déplaçant l'entrée Trig de ces appareils de bas en haut, de 10 microsecondes et de nouveau en bas.
digitalWrite(trigPinRessiv, LOW); digitalWrite(trigPinTransmit1, LOW); delayMicroseconds(5); digitalWrite(trigPinRessiv, HIGH); digitalWrite(trigPinTransmit1, HIGH); delayMicroseconds(10); digitalWrite(trigPinRessiv, LOW); digitalWrite(trigPinTransmit1, LOW);
En règle générale, ces appareils eux-mêmes émettent un signal ultrasonore et attendent qu'il soit réfléchi par quelque chose et qu'il y revienne. Mais nous les trompons, dans notre cas, l'un envoie et l'autre reçoit, celui qui a reçu pense que c'est son signal, bien que ce soit un signal provenant d'un autre appareil, et nous donne la distance à cet autre appareil.
Nous attendons que le capteur commence à nous dire la durée de vol du signal ultrasonore:
while (digitalRead(echoPinRessiv) == LOW);
Enregistrez l'heure de début du signal:
timeStartSignal = micros();
On attend que le capteur arrête de nous dire l'heure de vol du signal ultrasonore:
while (digitalRead(echoPinRessiv) == HIGH);
Nous écrivons l'heure de fin:
timeEndSignal = micros();
En utilisant une formule simple, nous calculons la distance de l'émetteur au récepteur:
lenC = ((timeEndSignal-timeStartSignal)/58.00)*10.00;
Nous attendons que le bruit des ultrasons disparaisse dans la pièce:
delay(100);
Il convient de noter que le capteur nous indique la distance en abaissant la sortie d'écho à faible pendant une période de temps directement proportionnelle à la distance mesurée.
La même chose se répète pour le deuxième émetteur.
En utilisant les règles sur un triangle rectangle, nous projetons la distance résultante sur le plan du sol (Fig. 3).
Nous mettons en œuvre le logiciel de transition des coordonnées tridimensionnelles vers le plan, la formule est présentée ci-dessus:
lenB = sqrt((lenC*2.00)*(lenC*2.00) - lenA*lenA);
Malheureusement, nous avons des erreurs, et pour les supprimer, j'ai trouvé une formule aussi expérimentée, supprimez-la et voyez ce que vous obtenez.
measurementError = 26.437 - 0.08*lenC/10; lenB = (lenB + measurementError*10)/10.00;
Répétez la même chose pour le capteur 2.
Nous calculons les coordonnées sur l'avion
Trouvez l'angle Alpha:
alfa = acos(((lenG*lenG + lenD*lenD - lenB*lenB)*1.00) / ((2*lenE*lenG)*1.00));
Trouvez les coordonnées elles-mêmes:
koord_X = lenE*cos(1.57-alfa); koord_Y = lenE*cos(alfa);
Si la valeur des coordonnées dépasse le possible, remplacez-la par la valeur précédente:
if((koord_X > 0) && (koord_X < 500) && (koord_Y > 0) && (koord_Y < 500)) { oldKoord_X = koord_X; oldKoord_Y = koord_Y; }else{ koord_X = oldKoord_X; koord_Y = oldKoord_Y; }
Nous créons un tampon pour 6 valeurs de coordonnées et le décalons constamment:
koord_X5 = koord_X4; koord_X4 = koord_X3; koord_X3 = koord_X2; koord_X2 = koord_X1; koord_X1 = koord_X; koord_Y5 = koord_Y4; koord_Y4 = koord_Y3; koord_Y3 = koord_Y2; koord_Y2 = koord_Y1; koord_Y1 = koord_Y;
On obtient la valeur moyenne des 6 dernières mesures:
averageKoord_X = (koord_X + koord_X1 + koord_X2 + koord_X3 + koord_X4 + koord_X5)/6; averageKoord_Y = (koord_Y + koord_Y1 + koord_Y2 + koord_Y3 + koord_Y4 + koord_Y5)/6;
Envoyez les coordonnées au PC:
Serial.println(averageKoord_X); Serial.println(averageKoord_Y);
Fonctions:
float asin(float c) float acos(float c) float atan(float c)
il suffit de prendre et d'utiliser =)
Code entier:
int trigPinRessiv = 8; int echoPinRessiv = 9; int trigPinTransmit1 = 2; int trigPinTransmit2 = 3; int i; long lenA = 2700;
Nous avons donc obtenu le système GPS à ultrasons le plus simple avec une portée mètre par mètre, la vidéo montre comment tout cela fonctionne.
La visualisation de la trajectoire se fait dans Matlab, j'écrirai comment faire la même visualisation dans le prochain article.
Dans les prochains articles, j'examinerai plus en détail les différentes parties de ce système et j'essaierai de les améliorer.
Je serai heureux d'entendre vos opinions et vos retours sur ce sujet, le projet est toujours vivant =)
Page du projetInspiré des sources suivantes:
WikipédiaUn article sur le GPS "Indoor" Habr avec une précision de + -2cm "