Creer un perimetre

Salut les gens.
Je suis en terminale STI2D et je dois faire un projet avec une carte arduino méga. Ma partie du boulot c'est de faire un programme pour recevoir des coordonnées GPS de 4 balises (imaginaire), les utiliser pour créer un périmètre et lancer un signal quand une balise matérielle mobile entre ou sort de la zone.

Je sais absolument pas quoi faire pour ça...mes professeurs ne m'aident pas trop et les autres membres de mon groupes sont suffisamment occupé avec leur propre partie du boulot donc....au secours? j'ai besoin d'aide urgente

A chaque fois que tu reçois les coordonnées de la balise mobile, tu dois calculer si elle est dans la zone ou non. Si son statut change (dedans --> dehors ou dehors --> dedans) tu crées une alarme.
Reste à savoir comment calculer le statut de la balise. Si ta zone est fixe et définie par un polygone convexe (c’est ton cas puisque c'est un quadrilatère dont tu connais les coordonnées des sommets, les 4 balises), c'est assez simple : un point est à l'intérieur d'un polygone si la somme des angles entre ce point et les côtés du polygone vaut 360°. Sinon, il est à l'extérieur (un petit dessin suffit à s'en convaincre).

Quelques infos ici...

pour recevoir des coordonnées GPS de 4 balises (imaginaire),

4 balises forment un quadrilatère.
Comment obtiens tu les informations de ces 4 balises virtuelles ?
Sous qu'elle forme les obtient-tu ?

Balise mobile :
As tu réussit à l'interroger et à recevoir sa position ?
Sait tu exploiter une trame GPS

Prend les problèmes un par un et ne reste pas les pieds dans le même sabot, nous sommes presque déjà en avril.

En fait pour être plus précis :

on va faire la zone en carré ou en rectangle (pour plus de facilité) donc avec des angles droits ce qui est plus simple pour la règle des angles.
J’ai également pour mission de faire passer un signal S de “Low” a “High” quand la balise libre (V) appartient à un des côtés de la zone.

Mon prof m’a donné une partie de code

boolean verif_point(Point V) //verifier que V est dans la zone//
{
// droite d12
// point V
double res1 = d12.a * V.x + d12.b * V.y +d12.c;
// point p3
double res2 = d12.a * p3.x + d12.b * p3.y +d12.c;

if (res1 * res2 < 0) {
return false;
}

// droite d23
// point V
res1 = d23.a * V.x + d23.b * V.y +d23.c;
// point p4
res2 = d23.a * p4.x + d23.b * p4.y +d23.c;

if (res1 * res2 < 0) {
return false;

}

// droite d34
// point V
res1 = d34.a * V.x + d34.b * V.y +d34.c;
// point p1
res2 = d34.a * p1.x + d34.b * p4.y +d34.c;

if (res1 * res2 < 0) {
return false;
}

// droite d41
// point V
res1 = d41.a * V.x + d41.b * V.y +d41.c;
// point p2
res2 = d41.a * p2.x + d41.b * p4.y +d41.c;

if (res1 * res2 < 0) {
return false;
}

return true;
}

Je ne connais rien a Arduino et au codage malheureusement. Je fais mon maximum mais je suis très limité et pour une trame GPS je dois pouvoir extraire les coordonnées facilement grâce à notre dieu internet

Bonjour

Je ne connais rien a Arduino et au codage malheureusement. Je fais mon maximum mais je suis très limité

Ce n’est pas une fatalité !
Il y a un début à tout !!
Ne pas perdre de temps, s’initier à Arduino à l’aide des tutos indiqués dans les messages épinglés en tête de forum.

al1fch:
Ne pas perdre de temps, s'initier à Arduino à l'aide des tutos indiqués dans les messages épinglés en tête de forum.

Seulement....les tutos ne me donnent que des infos limitées et pas sur mon sujet actuel et j'ai pas mal de problême avec l'autonomie et les prise d'initiative

Je ne connais rien a Arduino et au codage malheureusement. Je fais mon maximum mais je suis très limité

Ce n'est pas notre problème, c'est celui de ton professeur et le tien.
Si le professeur t'as donné ce sujet c'est qu'il juge qu'en terminale et avec les cours que tu as suivi tu dois être capable de le faire.

Au bout du bout il y a un diplome qui ouvre l'accès aux études supérieures et saches que nous ne dérogerons jamais à notre ligne qui est d'aider qu'à la condition qu'en face on puisse nous présenter un réel travail personnel.

Désolé mais tu ne présente strictement rien et tu n'as nullement répondu à mes questions qui pourtant sont essentielles pour la réalisation de ton projet :
Comment sont connus les emplacements des balises virtuelles ?
Sous quelle forme leur position est connue ?
Sait tu interroger la vraie balise mobile ?
Sous quelle forme donne-t-elle les information ?
Sais tu décoder et exploiter ces informations ?

Notes qu'aucune question n'a de rapport avec l'arduino, c'est le b a ba du projet.

C'est ton travail de trouver des réponses à ces questions.

Si tu as une information que tu as du mal à comprendre, tu l'exposes et il se trouvera quelqu'un sur ce forum qui pourra t'aider mais jamais il fera le travail à ta place.

Bonjour,
Je vais être plus cool que 68tjs (mais je suis tout à fait en accord avec lui).
Au tuto, tu ajoutes la "théorie des collisions"

68tjs:
Si le professeur t'as donné ce sujet c'est qu'il juge qu'en terminale et avec les cours que tu as suivi tu dois être capable de le faire.

Je n'ai eu aucun cours sur arduino et c'est les membres du groupes qui ont choisi pour moi sans me demander si j'étais capable de le faire.

Ensuite :

-les coordonnées des balises virtuelles sont mise dans le codage directement en nous servant de google map par exemple

-leur position est connu sou forme de latitude et longitude

-la balise GPS mobile, je suis censé récupérer les coordonnées qui sont mise a jours toute les x temps (probablement toute les 10 millisecondes ou équivalent)

-elle donne des infos sous forme de coordonnées GPS aussi

-et décoder une trame GPS je le peux grâce à internet qui peut m'aider à déchiffrer

Comment ton application récupère-t-elle les données GPS de la balise mobile ? bluetooth ? WifI ?

al1fch:
Comment ton application récupère-t-elle les données GPS de la balise mobile ? bluetooth ? WifI ?

On sait pas encore, un de mes collègues doit s’en occuper pas moi

Il faut que vous écriviez un cahier des charges avec qui fait quoi et définir exactement comment les données sont échangées.
Ton collègue doit te donner ces information de façon théorique, bien sûr qu'il n'a pas encore de vraies valeurs mais cela n'empêche de donner la documentation.

Et toi sans attendre que sa partie fonctionne tu dois apprendre à exploiter ces données.

Il faut travailler en parallèle et surtout pas en série.

Si tu connais la position en degrés, minute, seconde (c'est au hasard) rien ne t'empêche de créer des réponses aléatoires pour la balise et de tester si elle sont dans ton quadrilatère.
Si tu as une trame GPS il faut que tu apprenne à en extraire les degrés, les minutes et les secondes.
Tu n'as pas besoin d'attendre d'avoir les vraies valeurs pour le faire.

Nota :
Je vais être coupeur de cheveux en 4 mais le périmètre c'est une ligne dont l'épaisseur tend vers zéro et qui entoure le quadrilatère.
Tu cherche à savoir si tu es dans le quadrilatère, tu peux franchir le périmètre du quadrilatère entre deux mesures mais tu peux tout aussi bien rester dans le quadrilatère.

icare:
Bonjour,
Je vais être plus cool que 68tjs (mais je suis tout à fait en accord avec lui).
Au tuto, tu ajoutes la "théorie des collisions"

Ca commence à me gonfler tous ces lycéens qui pleurnichent ( et Quentin_L est loin d'être le pire mais pas de chance c'est tombé sur lui): mon prof est pas bon, quand c'est pas mon prof est nul, j'ai pas eu de cours, je suis nul, etc....
Ils sont en terminale quand même !

Ils ont déjà fait l'apprentissage d'un projet en classe de première avec leur TPE.
Cela ne leur tombe pas dessus sans expérience préalable.
L'an prochain si tout va bien pour eux ils seront dans l'enseignement supérieur et fini le dorlotage, ils seront livré à eux même.

Quentin_L:
Mon prof m’a donné une partie de code

Ce prof est plutôt sympa.

Que fait ce code ? C’est écrit dedans “vérifier que V est dans la zone”.
En lisant le code, tu vois plusieurs choses :

  • ça commence par “boolean verif_point(Point V)” et le code est entre accolades : c’est une fonction que tu dois appeler avec un argument (le V) qui est de classe ‘Point’, et qui renvoie un booléen
  • dans le code, on trouve des V.x, V.y qui doivent être les coordonnées du point V. Elles doivent être définies dans la classe Point, quelque part dans le reste du code (à écrire)
  • enfin, le code fait 4 fois la même chose, et il y a 4 coté au quadrilatère… à chaque fois il calcule un truc qui ressemble bougrement à l’équation d’une droite : double res1 = d12.a * V.x + d12.b * V.y +d12.c; Un peu de maths te dira que ceci est positif ou négatif selon la position du point et de la droite.

Quentin_L:
boolean verif_point(Point V) //verifier que V est dans la zone//
{
// droite d12
// point V
double res1 = d12.a * V.x + d12.b * V.y +d12.c;
// point p3
double res2 = d12.a * p3.x + d12.b * p3.y +d12.c;

if (res1 * res2 < 0) {
return false;

return true;
}

il te reste à apprendre quelques trucs du langage C++, du genre “que fait un return” ou “comment définir une classe” et le reste viendra tout seul… Voici un lien intéressant pour ça.

On a hâte de voir ton code. N’hésite pas à demander de l’aide, mais poste ton code avant pour qu’on puisse t’aider dans l’avancement.

... et ne t'en fais pas pour les grincheux :grin: , c'est parmi les meilleurs et les plus calés du forum : leurs conseils seront à suivre avec respect, pour peu que tu fasses preuve d'un minimum de travail personnel... 8)

T'en fait pas ^^" je suis qu'un sac qui aurai du venir ici dès le début de l'année et pas a 10 semaines de la fin de l'année.
Je dois avouer que ta technique avec les angles a l'air plus simple que le code que j'ai mis plus haut et qui sert a dire que le point V est sous la droite (1;2) ...
J'ai 7h de projet par semaine et je pense que je vais le bosser en plus chez moi histoire de pas pénaliser un membre de mon groupe en monopolisant le PC

Même sans carte arduino avec l'IDE tu peux écrire du code et voir s'il compile.

Quentin_L:
Je dois avouer que ta technique avec les angles a l'air plus simple que le code que j'ai mis plus haut et qui sert a dire que le point V est sous la droite (1;2) ...

Plus précisément, il vérifie que V est du même coté de la droite 1-2 que le point 3. Il calcule les côtés pour V et pour P3, fait le produit et si le signe du produit est négatif c'est qu'ils ne sont pas du même côté. Et ainsi de suite pour les autres côtés du quadrilatère.
C'est assez fin je trouve...

Calculer les angles, c'est un peu plus bourrin, il faut calculer des arc-cosinus : c'est un peu dur pour un chtiot microcontrôleur.

J'ai fait un algorithme sous algobox qui résume pas mal le shmilblick et qui est plutôt bien fait. Seulement maintenant...il faudrai que je le convertisse sous arduino.
J'ai pas encore de solution pour le périmètre mais ça m'aiderai déjà à bien commencer et à pas me sentir inutile et incompétent

Peut-être des pistes ici pour préparer le code Arduino

Est ce que quelqu'un a une manière de passer mon algorithme (qui est sous algobox) sur Arduino? Je sais pas trop comment faire