Table des matières:

Carte 3D de suivi GPS : 9 étapes
Carte 3D de suivi GPS : 9 étapes

Vidéo: Carte 3D de suivi GPS : 9 étapes

Vidéo: Carte 3D de suivi GPS : 9 étapes
Vidéo: 🗺 Faire des vidéos suivi aérien de vos tracés GPS ! 2024, Novembre
Anonim
Carte 3D de suivi GPS
Carte 3D de suivi GPS
Carte 3D de suivi GPS
Carte 3D de suivi GPS

Ce projet est une carte 3D imprimée en 3D, avec des routes, des rivières et des villes, avec des balises LED pour montrer l'emplacement des membres de la famille. Il peut montrer si un enfant est ou non à l'école, ou simplement l'emplacement des deux parents. Nous pouvons également l'utiliser pour prédire à quelle heure les parents rentrent à la maison, afin que le dîner puisse être préparé au bon moment. C'est aussi juste un projet généralement cool à montrer et à montrer à la famille et aux amis.

J'espère que vous apprécierez faire ce Instructable, ou profiter de découvrir un projet que j'ai fait

Étape 1: Obtenir une carte 3D

Pour obtenir une carte 3D de votre région, j'ai écrit un instructable séparé pour vous guider tout au long du processus de création d'un. Le lien vers l'instructable est ici:

www.instructables.com/id/Making-a-3D-Print…

Étape 2: Préparation de la carte pour les inserts LED

Maintenant que vous avez une carte 3D, avec des routes, des villes et des rivières, nous avons besoin d'un moyen d'indiquer où se trouve une personne sur la carte. J'ai utilisé des LED RG bicolores de 3 mm, car le but principal de la carte est de montrer où se trouvent les deux parents. A certains endroits, j'ai utilisé une LED RGB, pour me permettre de montrer où se trouvait l'aîné des enfants. Il y a une limite de 28 broches à sortir sur le Raspberry Pi, alors choisissez judicieusement l'emplacement des LED. J'ai fini par en utiliser environ 24, donc ça devrait aller.

Pour percer le PLA, j'ai trouvé qu'un foret à bois normal fonctionnait bien, et j'ai traité comme je traiterais du bois.

Aux endroits où la carte était trop épaisse, je percerais la couche de base avec un gros foret, puis la couche visible au-dessus avec le bon foret de 3 mm.

Étape 3: Insérez les LED

Insérez les LED
Insérez les LED

Maintenant que nous avons des trous pour les LED, nous pouvons les coller. Le PVA ou la Superglue fonctionnent bien pour cela, j'ai trouvé que le PVA l'entourait pour le sceller en place, et la superglue fonctionnait également très bien. Assurez-vous qu'avec chaque LED, elles ne dépassent que de quelques mm du côté visible, car le fait que les LED dépassent complètement semble un peu désordonné. Ne vous inquiétez pas pour les pattes à l'arrière, nous pouvons les replier une fois qu'elles sont soudées.

Étape 4: Connectez les LED au Raspberry Pi

J'ai directement soudé les LED au Raspberry Pi, cependant, si vous en avez un avec un en-tête pré-soudé, ou si vous voulez pouvoir utiliser le pi pour autre chose, alors je suggérerais d'utiliser des cavaliers pour chaque LED, ce qui signifie que le Pi est amovible. Vous pouvez voir qu'une fois la LED soudée, j'ai rabattu les pieds pour qu'ils ne collent pas à l'arrière.

Étape 5: Testez les LED

Tester les LED
Tester les LED

Pour m'assurer que toutes les LED fonctionnent, j'ai exécuté un script qui passe par chaque broche possible et les allume, une à la fois, qui passe à la suivante lorsque je clique sur Entrée. Cela m'a permis de noter quel numéro de broche faisait quel emplacement, ce qui s'est avéré très utile.

importer RPi. GPIO en tant que GPIO

heure d'importation GPIO.setmode(GPIO. BCM) pour i dans la plage (0, 28): GPIO.setup(i, GPIO. OUT) pour i dans la plage (0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("C'était: " + str(i)) z = raw_input("Suivant ?")

Pendant que cela se produisait, je notais sur un fichier texte quelle broche faisait quel emplacement et quelle couleur. Vous devez le faire, car cela est très utile à l'étape suivante.

Étape 6: Code pour allumer la LED à la demande

La façon dont j'ai réalisé ce projet implique un Raspberry Pi Zero W, avec un site Web de base qui vous permet d'activer une broche. Cela signifie que le Pi 4 principal, qui est généralement allumé et en cours d'exécution, peut effectuer le traitement, puis le petit Pi 0 n'a qu'à allumer une broche, ce qui complique légèrement les choses. Je l'ai fait parce que cela convient à ma configuration, et j'ai également senti que le Pi 0 peut être un peu lent pour ce que nous ferons plus tard.

importer RPi. GPIO en tant que GPIO

heure d'importation depuis le flacon import Flask, render_template, request, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) pour i dans la plage (0, 28): GPIO.setup(i, GPIO. OUT) @app.route('/') def index(): return request.remote_addr @app.route("/off/") def turn_off(pin): GPIO.output(int(pin), GPIO. LOW) return "Off" @app.route("/off/all") def alloff(): for i in range (0, 28): GPIO.output(i, GPIO. LOW) return "off" @app.route("/on/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) return "On" if _name_ == '_main_': app.run(debug=True, host='0.0. 0.0')

La façon dont cela fonctionne est qu'il attend l'URL de l'adresse IP du pi, puis une activation ou une désactivation, puis le numéro de broche.

enregistrez ce code dans le répertoire home du Raspberry Pi, et nommez-le "pin_website.py"

Vous devrez configurer cela pour qu'il s'exécute automatiquement, donc pour ce faire, dans le type de terminal: sudo nano /etc/profile

Au bas de ce fichier, ajoutez "python3 pin_website.py &"

Le "&" est essentiel, car il le fait tourner en tâche de fond, et permet donc au démarrage de continuer

Étape 7: Comment recevoir l'emplacement

Comment recevoir l'emplacement
Comment recevoir l'emplacement

En utilisant IFTTT, vous pouvez configurer un service de sorte que lorsque le téléphone entre dans un certain emplacement, il puisse vous envoyer un e-mail, ou envoyer une requête ping à une adresse Web, ou vous envoyer un message par télégramme.

Étape 8: Comment tout cela fonctionne

La configuration que j'ai est un serveur Pi, hébergeant mon site Web, avec une redirection de port et un DNS statique utilisant le service fourni par https://freedns.afraid.org/. Une grande partie de cela est assez complexe, et vous devez avoir une compréhension de la redirection de port, je pourrais faire un instructable sur la façon de faire cette partie une autre fois.

Une autre façon de le faire consiste à utiliser un télégramme pour envoyer des messages au pi, ou peut-être le plus simple, consiste à configurer un lecteur de courrier électronique qui lit les courriers électroniques et reçoit les mises à jour de localisation via celui-ci.

Je n'ai pas essayé le bot Telegram ou un lecteur de courrier électronique, mais il existe de nombreux tutoriels qui vous montreront comment procéder.

Voici mon code Flask/Python qui est ensuite demandé par les webhooks utilisant IFTTT:

à partir du flacon import Flask, render_template, request, jsonify

import os from datetime import datetime from map import * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): return request.remote_addr @app.route('/mum/enter /') def mu(location): mum.current_loc(location) return "Merci pour la mise à jour, maman!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Merci pour la mise à jour, papa!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hey, Me" @app.route('/mum/exit/') def mume(location): mum.offline(location) return "Merci pour la mise à jour, maman!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "Merci pour la mise à jour, papa!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hey, Me" @app.route("/reset") def redo(): setup() return "Réinitialiser!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

et map.py:

importer http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json import time import threading import os params = urllib.parse.urlencode({ }) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup(): conn = http.client. HTTPSConnection('freedns.afraid.org') conn.request("GET", str("/dynamic/update.php?ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) réponse = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request() "GET", str("/off/all")) réponse = conn.getresponse() f = open("pin", "w") f.write(str(-1)) f.close() f = open("pind", "w") f.write(str(-1)) f.close() f = open("pinm", "w") f.write(str(-1)) f.close () classe maman: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "quatre croix": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() heure. sleep(1) conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(last_loc)) réponse = conn.getrespons e() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) réponse = conn.getresponse() last_loc = locs[l] def offline(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13, "quatre croix": 18, "llandrinio": 25, "welshpool": 27 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) réponse = conn.getresponse() f = open("pin", "w") f.write(str(locs[l])) f.close() os.system ("python3 flash.py &") classe papa: locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "four crosses": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "quatre croix": 15 } f = open("pind", "w") f.write(str(-1)) f.close() time.sleep(1) conn = http.client. HTTPConnection('192.168.1.251:5000') conn.reques t("GET", str("/off/") + str(dlast_loc)) réponse = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) réponse = conn.getresponse() dlast_loc = locs[l] def offline(l): global dlast_loc locs = { "welshpool": 3, "lynclys ": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "quatre croix": 15, "llandrinio": 10 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(dlast_loc)) réponse = conn.getresponse() f = open("pind", "w") f.write(str(locs[l])) f.close() os.system("python3 flashd.py &") classe moi: def current_loc(l): global mlast_loc locs = { "home": 22, "school": 2, "oswestry": 14 } f = open("pinm", "w") f.write(str(-1)) f.close() time.sleep(1) conn = http.client. HTTPConnection('192.168.1.251:5000 ') conn.request("GET", str("/off/") + str(mlast_loc)) réponse = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request ("GET", str("/on/") + str(lo cs[l])) response = conn.getresponse() mlast_loc = locs[l] def offline(l): global dlast_loc locs = { "home": 22, "school": 2, "oswestry": 14 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(mlast_loc)) réponse = conn.getresponse() f = open("pinm", "w") f.write(str(locs[l])) f.close() os.system("python3 flashm.py &")

Étape 9: Créez le vôtre à partir de l'inspiration de mon projet

Je sais donc que l'étape précédente sera très difficile à comprendre, je vais donc vous montrer comment faire la carte, et pouvoir avoir un raspberry pi qui allume et éteint les LED. Vous devez maintenant créer un script python qui, à l'aide d'IFTTT, vous envoie un e-mail. Ensuite, vous devez trouver un morceau de code de lecture de courrier électronique, ce qui est assez facile (google). Ensuite, une fois que vous avez lu un e-mail et trouvé l'emplacement d'un parent, utilisez les instructions « if » pour trouver la broche à activer.

Sur la carte, un feu clignotant signifie qu'ils viennent de quitter la zone

La façon d'allumer les LED sur un autre pi de python est la suivante:

importer http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #changez cela avec l'adresse IP de la carte raspberry pi conn.request("GET", str("/off /2")) # cela désactive la broche numéro 2 réponse = conn.getresponse() # cela demande l'URL, puis la carte pi lit ceci et désactive la broche numéro 2

En gros, j'espère que vous pourrez vous inspirer de ce que j'ai fait avec ma carte 3D pour créer votre propre carte de suivi GPS.

Conseillé: