Tabla de contenido:

Mapa 3D de seguimiento GPS: 9 pasos
Mapa 3D de seguimiento GPS: 9 pasos

Video: Mapa 3D de seguimiento GPS: 9 pasos

Video: Mapa 3D de seguimiento GPS: 9 pasos
Video: visor 3d Mapbox Oruxmaps centrar mapa a posición gps 2024, Noviembre
Anonim
Mapa 3D de seguimiento GPS
Mapa 3D de seguimiento GPS
Mapa 3D de seguimiento GPS
Mapa 3D de seguimiento GPS

Este proyecto es un mapa 3D impreso en 3D, con carreteras, ríos y pueblos, con balizas LED para mostrar la ubicación de los miembros de la familia. Puede mostrar si un niño está en la escuela o no, o solo la ubicación de ambos padres. También podemos usarlo para predecir a qué hora llegan los padres a casa, de modo que la cena se pueda preparar en el momento adecuado. También es un proyecto generalmente genial para presumir y mostrar a familiares y amigos.

Espero que disfrutes haciendo este Instructable, o disfrutes descubriendo un proyecto que he realizado.

Paso 1: obtener un mapa 3D

PARA obtener un mapa 3D de su área, he escrito un instructivo separado para ayudarlo a guiarlo a través del proceso de hacer uno. El enlace al instructable está aquí:

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

Paso 2: preparación del mapa para inserciones de LED

Ahora que tiene un mapa 3D, con carreteras, pueblos y ríos, necesitamos una forma de indicar dónde se encuentra una persona en el mapa. Usé LED RG bicolor de 3 mm, porque el propósito principal del mapa es mostrar dónde están los dos padres. En ciertos lugares utilicé un LED RGB, para permitirme mostrar dónde estaba el hijo mayor. Hay un límite de 28 pines para la salida en la Raspberry Pi, así que elija sabiamente la ubicación de los LED. Terminé usando alrededor de 24 de ellos, por lo que debería estar bien.

Para perforar PLA, encontré que una broca normal para madera funcionaba bien y la traté como trataría la madera.

En lugares donde el mapa era demasiado grueso, perforaba la capa base con una broca grande y luego la capa superior visible con la broca correcta de 3 mm.

Paso 3: inserte los LED

Inserte los LED
Inserte los LED

Ahora que tenemos agujeros para que se asienten los LED, podemos pegarlos. PVA o Superglue funcionan bien para esto, descubrí que PVA lo rodeaba sellándolo en su lugar, y el superglue también funcionaba muy bien. Asegúrese de que con cada LED, solo sobresalgan unos pocos mm en el lado visible, porque tener los LED sobresaliendo por completo se ve un poco desordenado. No se preocupe por las patas en la parte posterior, podemos doblarlas una vez que estén soldadas.

Paso 4: conecta los LED a la Raspberry Pi

Soldé directamente los LED a la Raspberry Pi, sin embargo, si tiene uno con un encabezado pre-soldado, o si desea poder usar el pi para otra cosa, sugeriría usar cables de puente para cada LED, lo que significa que el Pi es extraíble. Pueden ver que una vez que hube soldado el LED, doblé las patas hacia abajo para que no se pegaran en la parte trasera.

Paso 5: prueba los LED

Prueba los LED
Prueba los LED

Para asegurarme de que todos los LED están funcionando, ejecuté un script que pasa por cada pin posible y los ilumina, uno a la vez, que pasa al siguiente cuando hago clic en Enter. Esto me permitió anotar qué número de pin hizo qué ubicación, lo que resultó muy útil.

importar RPi. GPIO como GPIO

tiempo de importación GPIO.setmode (GPIO. BCM) para i en el rango (0, 28): GPIO.setup (i, GPIO. OUT) para i en el rango (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("Eso fue:" + str (i)) z = raw_input ("¿Siguiente?")

Mientras esto sucedía, anotaba en un archivo de texto qué pin hizo qué ubicación y qué color. Debe hacer esto, ya que es muy útil en el siguiente paso.

Paso 6: Código para encender el LED cuando se lo solicite

La forma en que he realizado este proyecto involucra una Raspberry Pi Zero W, con un sitio web básico que te permite activar un pin. Esto significó que el Pi 4 principal, que generalmente está encendido y en ejecución, puede hacer el procesamiento, y luego el pequeño Pi 0 solo tiene que encender un pin, lo que hace las cosas un poco más complicadas. Hice esto porque se adapta a mi configuración, y también sentí que el Pi 0 puede ser un poco lento para lo que haremos más adelante.

importar RPi. GPIO como GPIO

import time from flask import Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) para i en el rango (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 (): para i en el rango (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 forma en que esto funciona es que espera la URL de la dirección IP del pi y luego un encendido o apagado y luego el número de pin.

guarde este código en el directorio de inicio de la Raspberry Pi y asígnele el nombre "pin_website.py"

Deberá configurar esto para que se ejecute automáticamente, así que para hacer esto, en el tipo de terminal: sudo nano / etc / profile

En la parte inferior de este archivo, agregue "python3 pin_website.py &"

El "&" es esencial, ya que hace que se ejecute en segundo plano y, por lo tanto, permite que el arranque continúe.

Paso 7: Cómo obtener la ubicación

Cómo recibir la ubicación
Cómo recibir la ubicación

Con IFTTT, puede configurar un servicio para que cuando el teléfono ingrese a una ubicación determinada, pueda enviarle un correo electrónico, hacer ping a una dirección web o enviarle un mensaje por telegrama.

Paso 8: Cómo funciona todo esto

La configuración que tengo es un Server Pi, que aloja mi sitio web, con reenvío de puertos y un DNS estático utilizando el servicio proporcionado por https://freedns.afraid.org/. Mucho de esto es bastante complejo, y necesita comprender el reenvío de puertos, podría hacer un instructivo sobre cómo hacer esta parte en otro momento.

Otra forma en que puede hacerlo es usar telegram para enviar mensajes al pi, o posiblemente la más fácil, es configurar un lector de correo electrónico que lea los correos electrónicos y reciba actualizaciones de ubicación a través de él.

No he probado el bot de Telegram ni un lector de correo electrónico, pero hay muchos tutoriales que le mostrarán cómo hacerlo.

Aquí está mi código de Flask / Python que luego es solicitado por webhooks usando IFTTT:

desde el matraz import Flask, render_template, request, jsonify

importar sistema operativo desde fecha y hora importar fecha y hora desde mapa importar * app = Flask (_ name_) l = 0 setup () @ app.route ('/') def index (): return request.remote_addr @ app.route ('/ mum / enter / ') def mu (ubicación): mum.current_loc (ubicación) return "¡Gracias por la actualización, mamá!" @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) return "¡Gracias por la actualización, papá!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) return "Hey, yo" @ app.route ('/ mum / exit /') def mume (ubicación): mum.offline (ubicación) return "¡Gracias por la actualización, mamá!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) return "¡Gracias por la actualización, papá!" @ app.route ("/ child / exit /") def child_exit (l): yo.offline (l) return "Hey, yo" @ app.route ("/ reset") def redo (): setup () return "¡Reiniciar!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

y map.py:

importar 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")) respuesta = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251n. "GET", str ("/ off / all")) response = 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 () class mum: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "cuatro cruces": 18, "llandrinio": 25, "welshpool": 27} f = open ("pin", "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 (last_loc)) respuesta = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) respuesta = 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," cuatro cruces ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (" / off / ") + str (last_loc)) response = conn.getresponse () f = open (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") class dad: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "cuatro cruces": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," cuatro cruces ": 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)) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) response = conn.getresponse () dlast_loc = locs [l] def offline (l): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," casa ": 23," shrewsbury ": 0," llanymynech ": 6," cuatro cruces ": 15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ off /") + str (dlast_loc)) response = conn.getresponse () f = open ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") class me: 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)) response = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("OBTENER", 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)) response = conn.getresponse () f = open ("pinm", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Paso 9: crea el tuyo propio a partir de la inspiración de mi proyecto

Entonces sé que el paso anterior será muy difícil de entender, así que lo dejaré como para mostrarte cómo hacer el mapa, y poder tener una raspberry pi que encienda y apague los leds. Ahora necesita crear un script de Python que, usando IFTTT, le envíe un correo electrónico. Luego, debe encontrar un código de lectura de correo electrónico, lo cual es bastante fácil (busque en Google). Luego, una vez que lea un correo electrónico y encuentre la ubicación de un padre, use las declaraciones 'si' para encontrar qué pin activar.

En el mapa, una luz intermitente significa que acaban de salir del área.

La forma de encender los LED en otro pi de python es la siguiente:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #cambie esto con la dirección IP del mapa de raspberry pi conn.request ("GET", str ("/ off / 2 ")) # esto desactiva el pin número 2 response = conn.getresponse () # esto solicita la URL, y luego el mapa pi lee esto y desactiva el pin número 2

Básicamente, espero que puedas usar lo que he hecho con mi mapa 3D como inspiración para hacer tu propio mapa de rastreo GPS.

Recomendado: