Taula de continguts:
- Pas 1: Introducció
- Pas 2: connecteu el mòdul GPS a Raspberry Pi
- Pas 3: rebeu dades del mòdul del receptor GPS
- Pas 4: connecteu la pantalla a Raspberry Pi
- Pas 5: configureu la pantalla perquè funcioni amb Raspberry Pi
- Pas 6: configureu les màquines d'estat per mostrar la informació del GPS a la pantalla
- Pas 7: implementem el nostre sistema GPS
Vídeo: Sistema GPS: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Creador del projecte: Carlos Gómez
Disposar d’un sistema de navegació fiable és primordial per a qualsevol persona que intenti viatjar i explorar el món.
L'aspecte més important que permet que el sistema de navegació funcioni és la capacitat GPS incrustada dins del sistema. El sistema GPS permet a qualsevol persona fer un seguiment de la seva ubicació i velocitat per mostrar informació precisa sobre l’usuari i proporcionar-li una representació precisa d’on es troba i a quina distància es troba de la seva ubicació.
El Sistema de Posicionament Global (GPS) és una xarxa de satèl·lits que orbiten al voltant de la Terra a una altitud d’uns 20.000 km. Tothom que tingui un dispositiu GPS pot rebre els senyals de ràdio que emeten els satèl·lits i els pot utilitzar de la manera que sigui necessària. Sempre que sigui on sigui que tingueu la ubicació al planeta, haureu d’estar disponibles com a mínim quatre GPS en qualsevol moment. Mitjançant un mètode anomenat trilateració 3D, un dispositiu GPS pot utilitzar tres satèl·lits per determinar la ubicació del dispositiu a la Terra. Cadascun dels tres satèl·lits envia un senyal al dispositiu i aquest determina la distància del satèl·lit. Mitjançant cadascun dels tres càlculs de distància, el dispositiu ara és capaç d’identificar la seva ubicació a la Terra i la retorna a l’usuari.
El sistema GPS que crearem podrà fer un seguiment de les ubicacions de l’usuari obtenint les coordenades de l’usuari a la Terra i fent alguns càlculs per tal de retornar la velocitat, la ubicació i la distància recorreguda de l’usuari.
Pas 1: Introducció
Per començar aquest projecte, primer haurem de reunir tots els materials correctes
1: Raspberry Pi Zero W
2: Receptor GPS
Pantalla LCD SPI 3: 1,8 TFT 128 x 160
4: ~ 11 cables
5: 2 botons
Resistències 6: 2x 1k i 2x 10k per a botons desplegables
7: Tauler de pa
Aquest projecte utilitzarà els pins GPIO de Raspberry Pi i, com a tal, haurem de connectar-ho tot amb una placa de pa per desenvolupar el nostre projecte. També se suposa que la soldadura de tots els passadors està feta i acabada abans de passar i connectar totes les nostres peces.
Pas 2: connecteu el mòdul GPS a Raspberry Pi
Per utilitzar el nostre sistema GPS, haureu de connectar els pins Tx i Rx del mòdul GPS als pins GPIO 14 i 15 del Raspberry Pi. El pin Tx del receptor GPS va al pin Rx del Pi i el pin Rx del receptor GPS va al pin Tx del Raspberry pi.
El receptor GPS que es mostra a les imatges requereix un ús de 3,3 V i podeu connectar els pins de 3,3 V al voltatge correcte, mentre connecteu el pin de terra a terra.
Pas 3: rebeu dades del mòdul del receptor GPS
Per rebre dades del receptor GPS al Raspberry Pi, hem de permetre la lectura dels endolls correctes des dels ports UART. La lectura de les dades brutes requeriria que creéssim la nostra pròpia biblioteca d’anàlisi, però en aquest escenari podem aprofitar un dimoni GPS que s’executa en segon pla per ajudar a analitzar les dades i transmetre-les al Raspberry Pi
Per aconseguir-ho, podem obrir un terminal al Raspberry Pi i executar el codi:
sudo apt-get update
sudo apt-get install gpsd gpsd-clients python-gps
Això ens hauria de fer càrrec de la descàrrega.
Un cop completat, hem de desactivar el servei del sistema gpsd executant les ordres següents:
sudo systemctl stop gpsd.socket
sudo systemctl desactiva gpsd.socket
Si voleu habilitar el servei de sistema gpsd per defecte, podeu executar les ordres següents per restaurar-lo:
sudo systemctl habilita gpsd.socket
sudo systemctl arrenca gpsd.socket
Ara hem d'iniciar el dimoni gpsd i dirigir-lo als ports UART entrant
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
Ara podem executar l'ordre següent i veure totes les dades que suren.
cgps -s
Pas 4: connecteu la pantalla a Raspberry Pi
Un cop tinguem el receptor GPS activat i treballem amb el Raspberry Pi, podrem connectar la pantalla al Raspberry Pi. Utilitzarem 5 cables per connectar la nostra pantalla LCD al Raspberry Pi i altres 4 pins per connectar l’alimentació principal i el LED. a la pantalla.
He inclòs una foto de la pantalla TFT que estic fent servir, però hauria de funcionar amb pantalles de mida i construcció similars.
Connecteu LED i GND a terra i connecteu LED + i VCC a 3,3 V.
Connecteu el pin RESET de la pantalla al pin 25 del tauler Pi.
Connecteu A0 al pin 24 del tauler Pi.
Connecteu el pin SDA al pin MOSI de la placa Pi.
Connecteu el pin SCK de la pantalla LCD a la placa Pi.
Connecteu el pin CS al pin 8 del tauler Pi.
Pas 5: configureu la pantalla perquè funcioni amb Raspberry Pi
Per configurar la pantalla, hem d’utilitzar la biblioteca ST7735 que es troba en aquesta reposició:
Biblioteca de pantalles Python ST7735
Un cop tinguem aquesta biblioteca de pantalla instal·lada al nostre sistema Raspberry Pi, ara podem procedir a configurar un fitxer d’exemple per confirmar que el cablejat anterior funciona correctament.
Creeu un fitxer titulat example.py i inseriu-hi el text següent juntament amb una imatge de mostra que trieu a la mateixa carpeta
importar ST7735 com a TFT importar Adafruit_GPIO com a GPIO importar Adafruit_GPIO. SPI com a SPI
AMPLADA = 128
ALÇADA = 160 SPEED_HZ = 4000000
# Configuració de Raspberry Pi.
# Aquests són els pins necessaris per connectar la pantalla LCD al Raspberry Pi
CC = 24 RST = 25 SPI_PORT = 0 SPI_DEVICE = 0
# Crea una classe de pantalla TFT LCD.
disp = TFT. ST7735 (CC, primer = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))
# Inicialitza la visualització.
disp.begin () disp.reset ()
# Carregueu una imatge.
newData = 0x42 disp.command (newData) print ('S'està carregant la imatge …') image = Image.open ('cat.jpg')
# Canvieu la mida de la imatge i gireu-la perquè coincideixi amb la pantalla.
image = image.rotate (270).resize ((WIDTH, HEIGHT))
# Imprimirà al terminal que el nostre programa està dibuixant la nostra imatge a la pantalla
print ('Imatge de dibuix')
# Aquesta funció mostrarà la nostra imatge a la pantalla
desp.display (imatge)
Aquest fitxer configurarà la configuració de Raspberry Pi per a la pantalla LCD i la biblioteca convertirà la nostra imatge a la carpeta i la mostrarà a la pantalla.
Pas 6: configureu les màquines d'estat per mostrar la informació del GPS a la pantalla
Utilitzarem 5 màquines d’estats diferents, mentre implementem el nostre diagrama de tasques per configurar el nostre sistema GPS.
Màquina d'estat de canvi de pantalla:
Aquesta màquina d'estats controlarà quina visualització dependrà de la nostra entrada de botó. Ho fa canviant una variable que permet a Python aprofitar l’escriptura d’ànecs i cridant la funció correcta per mostrar segons la funció cridada
Màquina d'estat de velocitat:
Aquesta màquina d'estats executarà la velocitat actual en funció de la ubicació de les persones. S’executarà cada cicle de rellotge del sistema GPS
Màquina d'estat de sortida:
Aquesta màquina d'estats determinarà la sortida en funció de la variable que la màquina d'estat de canvi de pantalla determina que és la visualització actual.
Màquina d'estat de distància
Aquesta màquina d'estats s'executa cada cicle de rellotge i determina la distància total recorreguda per l'usuari i, un cop premut el botó de reinicialització, restablirà la distància recorreguda actual.
Màquina d'estat d'ubicació:
Aquesta màquina d'estats retorna la ubicació actual de l'usuari, mitjançant les coordenades que el mòdul GPS retorna sobre l'usuari. Aquesta màquina d'estat depèn de la connexió a Internet dels usuaris.
Pas 7: implementem el nostre sistema GPS
Un cop tinguem el mòdul GPS que envia informació al nostre Raspberry Pi i la pantalla LCD que hi mostra informació, podem començar a programar el nostre sistema GPS. Utilitzaré les màquines d'estat finit del pas anterior per tal de codificar el nostre sistema GPS
## Fitxer principal del sistema de navegació # # # #
# Biblioteques per dibuixar imatges
d'importació PIL Imatge d'importació PIL ImageDraw d'importació PIL ImageFont
# Biblioteca per al controlador ST7737
importeu ST7735 com a TFT
# Biblioteca per a GPIO per a Raspberry Pi
importar Adafruit_GPIO com a GPIO importar Adafruit_GPIO. SPI com a SPI
# Biblioteca per GPS
#import gpsd de gps3 import gps3
# Biblioteca per temps
temps d'importació
# Biblioteca per trobar la distància entre dos punts
a partir de matemàtiques, sin, cos, sqrt, atan2, radians
# Importeu la biblioteca Rpi per utilitzar botons per canviar de menú i restablir
# import RPi. GPIO com a bGPIO
# Pin de configuració per als botons
bGPIO.setmode (bGPIO. BCM)
bGPIO.setup (18, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)
bGPIO.setup (23, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)
# importació de la biblioteca de geopies per a la geocodificació
# # L'accés a Internet és necessari perquè això funcioni
de geopy.geocoders importen Nominatim
geolocalitzador = Nominatim ()
# Constants per al sistema
#################################
AMPLADA = 128
ALÇADA = 160 SPEED_HZ = 4000000
# Pins de configuració de Raspberry Pi
DC = 24 # A0 a la pantalla TFT RST = 25 # Restableix el pin a la pantalla TFT SPI_PORT = 0 # Port SPI a raspberry pi, SPI0 SPI_DEVICE = 0 # Selecció esclau a rapsberry pi, CE0
# Crea un objecte de pantalla TFT LCD
disp = TFT. ST7735 (CC, primer = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))
# Inicialitza la visualització
disp.begin ()
# El fons es posarà en verd
# disp.clear ((0, 255, 0))
# Esborreu la pantalla al blanc i mostreu-la
# disp.clear ((255, 255, 255)) draw = disp.draw () # draw.rectangle ((0, 10, 127, 150), contorn = (255, 0, 0), fill = (0, 0, 255)) # disp.display ()
# Variables de posició de velocitat, latitud i longitud
#currentS = "Velocitat actual:" # Speed string #totalDis = "Distància total:" # Distance string #currentLoc = "Ubicació actual:" # Cadena d'ubicació
# Distància coordenades x i
distX = 10 distY = 20
pointsList =
# Velocitat de les coordenades x i y
velocitatX = 10 velocitatY = 20
# Ubicació x i y coordinants
locX = 10 locY = 20
# Converteix de m / s a mph
conversionVal = 2,24
# Funció d'actualització de velocitat, retorna la cadena
SpeedVar = 0
def speedFunc (): SpeedVar global SpeedText = data_stream. TPV ['speed'] if (SpeedText! = "n / a"): SpeedText = float (SpeedText) * conversionVal SpeedVar = round (SpeedText, 1) # return (SpeedText)
def locationFunc ():
latLoc = str (latFunc ()) lonLoc = str (lonFunc ())
reverseString = latLoc + "," + lonLoc
location = geolocator.reverse (reverseString)
retorn (ubicació.adreça)
# Funció d'actualització de latitud, retorna el valor flotant
def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == "n / a"): return 0 else: return float (round (Latitude, 4))
# Funció d'actualització de longitud, retorna la cadena
def lonFunc (): Longitude = data_stream. TPV ['lon'] if (Longitud == "n / a"): return 0 else: return float (round (Longitud, 4))
# La funció Distància retorna la distància recorreguda TOTAL
totalDistance = 0
def distFunc ():
global totalDistance newLat = latFunc () newLon = lonFunc () if (newLat == 0 or newLon == 0): totalDistance = totalDistance # return (totalDistance) else: pointsList.append ((newLat, newLon)) last = len (pointsList) -1 if (last == 0): return else: totalDistance + = coorDistance (pointsList [last-1], pointsList [last]) # return totalDistance
# Restableix la distància total
def resDistance ():
global totalDistance totalDistance = 0
# Funció que s'utilitza per trobar la distància entre dues coordenades
# utilitza la fórmula de Haversine per trobar. # Els punts d'entrada són una tupla
def coorDistance (punt 1, punt 2):
# Radi aproximat de la Terra en quilòmetres de radi terrestre = 6373,0
lat1 = punt1 [0]
lon1 = punt1 [1]
lat2 = punt2 [0]
lon2 = punt2 [1]
distanceLon = lon2 - lon1
distanceLat = lat2 - lat1
# Haversine a
a = sin (distanceLat / 2) ** 2 + cos (lat1) * cos (lat2) * sin (distanceLon / 2) ** 2
# Haversine c
c = 2 * atan2 (sqrt (a), sqrt (1-a))
# Converteix km a milles
distància = (earthRadius * c) * 0,62137
if (distància <= 0,01): retorna 0,00 else: volta de tornada (distància, 3)
# Funció per mostrar la velocitat a la pantalla
def dispSpeed ():
global SpeedVar # Col·loca la distància a la variable draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))
# Funció per mostrar la distància a la pantalla
def dispDistance ():
draw.text ((distX, distY), str (totalDistance), font = ImageFont.truetype ("Lato-Medium.ttf", 60))
# La funció de visualització de la ubicació a la pantalla requereix que Internet funcioni
def dispLocation ():
draw.text ((locX, locY), locationFunc (), font = ImageFont.truetype ("Lato-Medium.ttf", 8))
# Ús del diccionari per imitar les afirmacions de commutació
dispOptions = {
0: dispSpeed, 1: dispDistance, 2: dispLocation}
# Funció de sortida de pantalla
sortida def ():
# Ús de variable global per displayIndex global displayIndex # Esborra la pantalla i aplica el fons disp.clear ((255, 255, 255)) draw.rectangle ((0, 10, 127, 150), contorn = (255, 0, 0), omplir = (255, 0, 0))
# Funció de trucades en funció del valor displayIndex
dispOptions [displayIndex] ()
# Esborrarà si funciona un altre mètode
variable de distància de # lloc a la pantalla
# draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) # lloc variable de velocitat a la pantalla # draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Mostra les actualitzacions de la pantalla disp.display ()
displayButton = 18 # BCM Pin a raspberry pi
resetButton = 23 # Pin BCM al raspberry pi
botó Premeu = Fals
def checkDisplay ():
botó global Premeu displayIndex global if (bGPIO.input (displayButton) i no buttonPress): displayIndex + = 1 buttonPress = True if (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) and buttonPress): print (" Encara premut ") else: buttonPress = False
# Configura gps
gps_socket = gps3. GPSDSocket () data_stream = gps3. DataStream () gps_socket.connect () gps_socket.watch ()
timerPeriod =.5
# Valor de l'índex per a la visualització displayIndex = 0 prova: per a dades noves a gps_socket: si dades noves: dades_stream.unpack (dades noves) si dades_ flux. TPV ['lat']! = 'N / a': imprimir (dades_ flux. TPV ['velocitat')], data_stream. TPV ['lat'], data_stream. TPV ['lon']) distFunc () speedFunc () output () checkDisplay () if (bGPIO.input (resetButton)): resDistance () else: output () checkDisplay () if (bGPIO.input (resetButton)): resDistance () print ('GPS encara no està connectat') time.sleep (.1) time.sleep (.8) excepte KeyboardInterrupt: gps_socket.close () print (' / nTerminat per l'usuari ctrl + c ')
El codi anterior és només un exemple de com codificar el nostre sistema i he incrustat un vídeo sobre com funciona aquest sistema.
Recomanat:
Sistema d’alerta d’accidents mitjançant GSM, GPS i acceleròmetre: 5 passos (amb imatges)
Sistema d’alerta d’accidents que utilitza GSM, GPS i acceleròmetre: si us plau vota’m pel concurs, vota’m pel concurs Avui en dia hi ha moltes persones mortes a la carretera a causa d’un accident, la causa principal és el "retard en el rescat". Aquest problema és molt gran als països en desús, així que vaig dissenyar aquest projecte per desar el
Feu el vostre propi sistema de seguiment de seguretat de SMS per GPS: 5 passos (amb imatges)
Feu el vostre propi sistema de seguiment de seguretat per SMS de GPS: en aquest projecte us mostraré com combinar un mòdul SIM5320 3G amb un Arduino i un transductor piezoelèctric com a sensor de xoc per crear un sistema de seguiment de seguretat que us enviarà la ubicació del vostre vehicle preciós per SMS quan
PCB: sistema de seguiment de vehicles basat en GPS i GSM: 3 passos
PCB: sistema de seguiment de vehicles basat en GPS i GSM: sistema de seguiment de vehicles basat en GPS i GSM 30 de juny de 2016, projectes d’enginyeria El sistema de seguiment de vehicles basat en GPS i GSM utilitza un sistema de posicionament global (GPS) i un sistema global de comunicació mòbil (GSM), que fa que aquest projecte sigui més e
Sistema d'ordenació del color: sistema basat en Arduino amb dos cinturons: 8 passos
Sistema de classificació de colors: sistema basat en Arduino amb dues corretges: el transport i / o l’envasament de productes i articles en el camp industrial es fa mitjançant línies fabricades amb cintes transportadores. Aquests cinturons ajuden a moure l’article d’un punt a un altre amb una velocitat específica. Algunes tasques de processament o identificació poden ser
Com connectar i configurar correctament un mini sistema de prestatgeria HiFi (sistema de so): 8 passos (amb imatges)
Com connectar i configurar correctament un mini sistema de prestatgeria HiFi (sistema de so): sóc una persona que gaudeix aprenent sobre enginyeria elèctrica. Sóc un institut de l'escola per a dones joves dirigents d'Ann Richards. Estic fent que sigui instructiu per ajudar a qualsevol persona que vulgui gaudir de la seva música des d'un sistema de prestatgeries Mini LG HiFi