Wearables e IoTTécnico

Rastreador GPS de bolsillo y registro de viajes

Graba tu ruta al caminar, montar bicicleta o navegar y súbela por Wi-Fi al llegar a casa.

NivelTécnico
Tiempo2 h
Costo est.~$73
Pasos5

Un módulo GPS habla frases de texto sencillas (NMEA) por serial. El Pico las lee, guarda tu posición cada pocos segundos en su memoria flash y sincroniza cuando ve el Wi-Fi de tu casa.

⚠ SEGURIDAD
Rastrear a otra persona sin su consentimiento puede ser ilegal. Este proyecto es para registrar tus propios viajes y equipos que te pertenecen.

Video tutorial

▶ Computadoras y SensoresVer en YouTube ↗

Video de Computadoras y Sensores, insertado desde YouTube. Los pasos escritos abajo son nuestros y coinciden con la lista de piezas.

Pasos de la misión

  1. Conecta el GPS

    TX del GPS al GP1 del Pico (RX de UART0), RX del GPS al GP0, energía de 3V3 y GND.

  2. Consigue señal

    Sal afuera. Un arranque en frío puede tardar un minuto o más; el LED del módulo suele parpadear cuando tiene señal.

  3. Interpreta NMEA

    Lee las frases $GNRMC/$GPRMC para latitud, longitud, velocidad y hora.

  4. Guarda de forma eficiente

    Escribe una línea cada 5–10 segundos. La memoria flash tiene ciclos de escritura limitados, así que guarda en lotes.

  5. Respeta la privacidad

    Solo rastréate a ti mismo o a personas que estén claramente de acuerdo. Rastrear a otros a escondidas es ilegal en muchos lugares.

Código

# MicroPython on Pico 2 W
from machine import UART, Pin
import time

gps = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))

def to_deg(v, d):
    if not v: return None
    deg = int(float(v) / 100); mins = float(v) - deg * 100
    val = deg + mins / 60
    return -val if d in ('S', 'W') else val

buf = []
while True:
    line = gps.readline()
    if line and (line.startswith(b'$GNRMC') or line.startswith(b'$GPRMC')):
        f = line.decode('ascii', 'ignore').split(',')
        if len(f) > 6 and f[2] == 'A':                    # A = valid fix
            buf.append('%s,%.6f,%.6f\n' % (f[1], to_deg(f[3], f[4]), to_deg(f[5], f[6])))
    if len(buf) >= 12:
        with open('track.csv', 'a') as out:
            out.write(''.join(buf))
        buf = []
        time.sleep(5)

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

¿Puede enviar la posición en vivo?

Por Wi-Fi solo cuando hay alcance. Para rastreo en vivo a distancia, combínalo con LoRa (Meshtastic) o un módulo celular.