Sadržaj:

GPS sistem: 7 koraka
GPS sistem: 7 koraka

Video: GPS sistem: 7 koraka

Video: GPS sistem: 7 koraka
Video: Spy GPS tracker GF-07 unboxing review 2024, Oktobar
Anonim
GPS sistem
GPS sistem
GPS sistem
GPS sistem
GPS sistem
GPS sistem

Kreator projekta: Carlos Gomez

Pouzdani navigacijski sistem najvažniji je za svakoga tko pokušava putovati i istraživati svijet.

Najvažniji aspekt koji omogućava rad navigacionog sistema je GPS funkcija ugrađena u sistem. GPS sustav omogućuje svakome da prati njihovu lokaciju i brzinu kako bi prikazao točne podatke o korisniku i korisniku dao tačan prikaz gdje se nalazi i koliko je udaljen od svoje lokacije.

Globalni sistem pozicioniranja (GPS) je mreža satelita koji kruže oko Zemlje na nadmorskoj visini od oko 20 000 km. Svako ko ima GPS uređaj može primiti radio signale koje sateliti emituju i može ih koristiti na bilo koji način koji je potreban. Gdje god se nalazili na planeti, u svakom trenutku bi vam trebala biti dostupna najmanje četiri GPS -a. Koristeći metodu koja se naziva 3-D trilateracija, GPS uređaj može koristiti tri satelita kako bi odredio lokaciju uređaja na Zemlji. Svaki od tri satelita šalje signal uređaju i uređaj određuje udaljenost od satelita. Koristeći svaki od tri proračuna udaljenosti, uređaj sada može odrediti svoju lokaciju na Zemlji i to vraća korisniku.

GPS sistem koji ćemo stvoriti moći će pratiti lokacije korisnika tako što će dobiti korisničke koordinate na Zemlji i izvršiti neke proračune kako bi vratio brzinu, lokaciju i pređenu udaljenost korisnika.

Korak 1: Početak

Počinjemo
Počinjemo
Počinjemo
Počinjemo
Počinjemo
Počinjemo
Počinjemo
Počinjemo

Da bismo započeli ovaj projekt, prvo ćemo morati prikupiti sve ispravne materijale

1: Raspberry Pi Zero W

2: GPS prijemnik

3: 1.8 TFT 128 x 160 LCD SPI ekran

4: ~ 11 žica

Dugmad 5: 2

6: 2x 1k i 2x 10k otpornici za dugmad na dole

7: Ploča za hleb

Ovaj projekt će koristiti Raspberry Pi GPIO pinove i kao takvi ćemo morati sve povezati s pločom za razvoj kruha kako bismo razvili naš projekt. Također se pretpostavlja da je lemljenje svih pinova obavljeno i završeno prije nego što krenete dalje i povežete sve naše dijelove.

Korak 2: Povežite GPS modul s Raspberry Pi

Povežite GPS modul s Raspberry Pi
Povežite GPS modul s Raspberry Pi
Povežite GPS modul s Raspberry Pi
Povežite GPS modul s Raspberry Pi

Za upotrebu našeg GPS sistema morat ćete spojiti Tx i Rx pinove iz GPS modula na GPIO pin 14 i 15 na Raspberry Pi. Tx pin GPS prijemnika ide na Rx pin Pi, a Rx pin GPS prijemnika ide na Tx pin Raspberry pi.

GPS prijemnik prikazan na slikama zahtijeva upotrebu 3,3 V za upotrebu i možete priključiti pinove od 3,3 V na odgovarajući napon, dok pin za uzemljenje spajate na masu.

Korak 3: Preuzmite podatke iz modula GPS prijemnika

Primajte podatke iz modula GPS prijemnika
Primajte podatke iz modula GPS prijemnika

Da bismo mogli primati podatke s GPS prijemnika na Raspberry Pi moramo omogućiti ispravnim utičnicama čitanje s UART portova. Čitanje sirovih podataka zahtijevalo bi od nas da stvorimo vlastitu biblioteku za raščlanjivanje, ali u ovom scenariju možemo iskoristiti prednost GPS daemona koji radi u pozadini kako bismo lakše raščlanili podatke i prenijeli ih na Raspberry Pi

Da bismo to postigli, možemo otvoriti terminal na Raspberry Pi -u i izvršiti kod:

sudo apt-get update

sudo apt-get install gpsd gpsd-clients python-gps

Ovo bi se umjesto nas trebalo pobrinuti za preuzimanje.

Kada se dovrši, moramo onemogućiti gpsd sistemsku uslugu pokretanjem sljedećih naredbi:

sudo systemctl stop gpsd.socket

sudo systemctl onemogući gpsd.socket

Ako ikada želite omogućiti zadanu gpsd sistemsku uslugu, možete pokrenuti sljedeće naredbe da biste je vratili:

sudo systemctl omogući gpsd.socket

sudo systemctl pokrenite gpsd.socket

Sada moramo pokrenuti gpsd demon i usmjeriti ga na UART portove ulaskom

sudo gpsd/dev/ttyAMA0 -F /var/run/gpsd.sock

Sada možemo pokrenuti naredbu ispod i vidjeti sve podatke koji plutaju!

cgps -s

Korak 4: Priključite zaslon na Raspberry Pi

Priključite zaslon na Raspberry Pi
Priključite zaslon na Raspberry Pi
Priključite zaslon na Raspberry Pi
Priključite zaslon na Raspberry Pi

Nakon što postavimo GPS prijemnik i počnemo raditi s Raspberry Pi, tada možemo povezati zaslon s Raspberry Pi. Upotrijebit ćemo 5 žica za povezivanje našeg LCD zaslona s Raspberry Pi i još 4 pina za povezivanje glavnog napajanja i LED diode na ekranu.

Uključio sam fotografiju TFT ekrana koji koristim, ali ovo bi trebalo funkcionirati sa ekranima slične veličine i izrade.

Spojite LED i GND na masu, a LED+ i VCC na 3.3V.

Priključite pin RESET na ekranu u pin 25 na Pi ploči.

Spojite A0 na pin 24 na Pi ploči.

Spojite SDA pin na MOSI pin na Pi ploči.

Spojite SCK pin na LCD ekranu na Pi ploču.

Spojite CS pin na pin 8 na Pi ploči.

Korak 5: Podesite zaslon za rad s Raspberry Pi

Podesite zaslon za rad s Raspberry Pi
Podesite zaslon za rad s Raspberry Pi

Za postavljanje ekrana moramo koristiti biblioteku ST7735 koja se nalazi u ovom repo -u:

Python ST7735 Biblioteka ekrana

Nakon što instaliramo ovu biblioteku prikaza na naš Raspberry Pi sistem, sada možemo nastaviti s postavljanjem datoteke primjera kako bismo potvrdili da naše prethodno ožičenje radi ispravno.

Kreirajte datoteku pod nazivom example.py i umetnite sljedeći tekst tamo zajedno sa uzorkom slike po vašem izboru u istu mapu

uvoz ST7735 kao TFTimport Adafruit_GPIO kao GPIO uvoz Adafruit_GPIO. SPI kao SPI

ŠIRINA = 128

VISINA = 160 SPEED_HZ = 4000000

# Konfiguracija Raspberry Pi.

# Ovo su pinovi potrebni za povezivanje LCD -a sa Raspberry Pi

DC = 24 RST = 25 SPI_PORT = 0 SPI_DEVICE = 0

# Kreirajte klasu TFT LCD ekrana.

disp = TFT. ST7735 (DC, rst = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))

# Inicijalizacija prikaza.

disp.begin () disp.reset ()

# Učitajte sliku.

newData = 0x42 disp.command (newData) print ('Učitavanje slike …') image = Image.open ('cat.jpg')

# Promijenite veličinu slike i rotirajte je tako da odgovara ekranu.

image = image.rotate (270).resize ((WIDTH, HEIGHT))

# Ispisat će na terminalu da naš program iscrtava našu sliku na ekranu

print ('Crtanje slike')

# Ova funkcija će prikazati našu sliku na ekranu

disp.display (slika)

Ova datoteka će postaviti Raspberry Pi konfiguraciju za LCD ekran, a biblioteka će pretvoriti našu sliku u mapu i prikazati je na ekranu.

Korak 6: Postavite državne mašine za prikaz GPS informacija na ekranu

Postavljanje strojeva stanja za prikaz GPS informacija na ekranu
Postavljanje strojeva stanja za prikaz GPS informacija na ekranu
Postavljanje strojeva stanja za prikaz GPS informacija na ekranu
Postavljanje strojeva stanja za prikaz GPS informacija na ekranu
Postavljanje strojeva stanja za prikaz GPS informacija na ekranu
Postavljanje strojeva stanja za prikaz GPS informacija na ekranu

Koristit ćemo 5 različitih državnih mašina, dok implementiramo naš dijagram zadataka za postavljanje našeg GPS sistema.

Displej Promena stanja mašine:

Ova mašina za stanje će kontrolirati šta će se prikazivati ovisno o našem unosu tipkama. To čini promjenom varijable koja omogućuje pythonu da iskoristi prednosti patkarskog kucanja i pozivanjem ispravne funkcije za prikaz ovisno o pozvanoj funkciji

Mašina stanja brzine:

Ova mašina za stanje će izvršiti trenutnu brzinu ovisno o lokaciji pojedinaca. Ovo će izvesti svaki ciklus takta za GPS sistem

Izlazna mašina stanja:

Ova mašina stanja će odrediti izlaz na osnovu varijable koju mašina stanja stanja prikaza utvrđuje kao trenutni prikaz.

Stanje mašina

Ova mašina za stanje izvršava svaki ciklus takta i određuje ukupnu udaljenost koju je korisnik prešao, a nakon što se pritisne tipka za poništavanje, resetirat će se trenutna prijeđena udaljenost.

Mapa stanja lokacije:

Ova mašina stanja vraća trenutnu lokaciju korisnika, koristeći koordinate koje GPS modul vraća o korisniku. Ova državna mašina ovisi o internetskoj vezi korisnika.

Korak 7: Omogućimo implementaciju našeg GPS sistema

Nakon što naš GPS modul šalje informacije na naš Raspberry Pi i naš LCD ekran s prikazom informacija na njemu, tada možemo početi programirati naš GPS sistem. Koristiću mašine iz konačnog stanja iz prethodnog koraka kako bih kodirao naš GPS sistem

## Glavna datoteka za navigacijski sistem # # # #

# Biblioteke za crtanje slika

iz PIL uvoza Slike iz PIL uvoza ImageDraw iz PIL uvoza ImageFonta

# Biblioteka za kontroler ST7737

uvozite ST7735 kao TFT

# Biblioteka za GPIO za Raspberry Pi

uvoz Adafruit_GPIO kao GPIO uvoz Adafruit_GPIO. SPI kao SPI

# Biblioteka za GPS

#import gpsd sa gps3 uvoz gps3

# Biblioteka za vrijeme

vreme uvoza

# Biblioteka za pronalaženje udaljenosti između dvije točke

iz matematike uvoz sin, cos, sqrt, atan2, radijani

# Uvezite Rpi biblioteku za korištenje dugmadi za prebacivanje menija i resetovanje

# uvozite RPi. GPIO kao bGPIO

# Pinovi za podešavanje dugmadi

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)

# import geopy library za Geocoding

# # Pristup internetu je neophodan da bi ovo funkcioniralo

from geopy.geocoders import Nominatim

geolokator = Nominatim ()

# Konstante za sistem

#################################

ŠIRINA = 128

VISINA = 160 SPEED_HZ = 4000000

# Raspberry Pi konfiguracijski pinovi

DC = 24 # A0 na TFT ekranu RST = 25 # Reset pin na TFT ekranu SPI_PORT = 0 # SPI port na malini pi, SPI0 SPI_DEVICE = 0 # Odabir podređenog uređaja na rapsberry pi, CE0

# Kreirajte objekat TFT LCD ekrana

disp = TFT. ST7735 (DC, rst = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))

# Inicijalizacija prikaza

disp.begin ()

# Pozadina će biti zelena

#disp.clear ((0, 255, 0))

# Očistite ekran bijelim i prikazite

#disp.clear ((255, 255, 255)) draw = disp.draw () #draw.rectangle ((0, 10, 127, 150), outline = (255, 0, 0), fill = (0, 0, 255)) #disp.display ()

# Varijable položaja brzine, zemljopisne širine i dužine

#currentS = "Trenutna brzina:" # Niz brzine #totalDis = "Ukupna udaljenost:" # Niz udaljenosti #currentLoc = "Trenutna lokacija:" # Niz lokacije

# Udaljenost x i y koordinate

distX = 10 distY = 20

bodovaLista =

# Brzine koordinata x i y

speedX = 10 speedY = 20

# Location x and y coordiantes

locX = 10 locY = 20

# Pretvara iz m/s u mph

conversionVal = 2.24

# Funkcija ažuriranja brzine, vraća niz

SpeedVar = 0

def speedFunc (): globalni SpeedVar SpeedText = data_stream. TPV ['speed'] if (SpeedText! = "n/a"): SpeedText = float (SpeedText) * conversionVal SpeedVar = okrugli (SpeedText, 1) # return (SpeedText)

def locationFunc ():

latLoc = str (latFunc ()) lonLoc = str (lonFunc ())

reverseString = latLoc + "," + lonLoc

location = geolocator.reverse (reverseString)

return (location.address)

# Funkcija ažuriranja Latitude, vraća float vrijednost

def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == "n/a"): return 0 else: return float (okruglo (Latitude, 4))

# Funkcija ažuriranja geografske dužine, vraća niz

def lonFunc (): Longitude = data_stream. TPV ['lon'] if (Longitude == "n/a"): return 0 else: return float (okruglo (Longitude, 4))

# Funkcija udaljenosti vraća UKUPNO pređenu udaljenost

totalDistance = 0

def distFunc ():

globalna ukupna udaljenost newLat = latFunc () newLon = lonFunc () if (newLat == 0 ili 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]) # povratak totalDistance

# Vraća ukupnu udaljenost

def resDistance ():

globalna ukupna udaljenost ukupna udaljenost = 0

# Funkcija koja se koristi za pronalaženje udaljenosti između dvije koordinate

# koristi Haversine formulu za pronalaženje. # Ulazne tačke su tuple

def coorDistance (tačka1, tačka2):

# Približni polumjer Zemlje u kilometrima earthRadius = 6373,0

lat1 = točka 1 [0]

lon1 = bod1 [1]

lat2 = točka2 [0]

lon2 = bod2 [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))

# Pretvorite km u milje

udaljenost = (earthRadius * c) * 0.62137

if (udaljenost <= 0,01): povratak 0,00 drugo: povratak krug (udaljenost, 3)

# Funkcija za prikaz brzine na ekranu

def dispSpeed ():

globalni SpeedVar # Postavite udaljenost na varijablu na ekranu draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))

# Funkcija za prikaz udaljenosti na ekranu

def dispDistance ():

draw.text ((distX, distY), str (totalDistance), font = ImageFont.truetype ("Lato-Medium.ttf", 60))

# Funkcija prikazivanja lokacije na ekranu zahtijeva rad Interneta

def dispLocation ():

draw.text ((locX, locY), locationFunc (), font = ImageFont.truetype ("Lato-Medium.ttf", 8))

# Korištenje rječnika za oponašanje naredbi switch

dispOptions = {

0: dispSpeed, 1: dispDistance, 2: dispLocation}

# Izlazna funkcija ekrana

def izlaz ():

# Korištenje globalne varijable za displayIndex globalni displayIndex # Brisanje ekrana i primjena pozadinske disp.clear ((255, 255, 255)) draw.rectangle ((0, 10, 127, 150), outline = (255, 0, 0), ispuni = (255, 0, 0))

# Funkcija poziva ovisno o displayIndex vrijednosti

dispOptions [displayIndex] ()

# Brisat će se ako druga metoda radi

# mjesto varijable udaljenosti na ekranu

#draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) #postavite varijablu brzine na ekranu #draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Prikaz ažuriranja na ekranu disp.display ()

displayButton = 18 # BCM Pin na malini pi

resetButton = 23 # BCM Pin na malini pi

buttonPress = Netačno

def checkDisplay ():

globalno dugmePritisnite globalni displayIndex if (bGPIO.input (displayButton), a ne buttonPress): displayIndex += 1 buttonPress = True if (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) i buttonPress): print (" Još pritisnuto ") else: buttonPress = False

# Postavljanje GPS -a

gps_socket = gps3. GPSDSocket () data_stream = gps3. DataStream () gps_socket.connect () gps_socket.watch ()

timerPeriod =.5

# Vrijednost indeksa za prikaz displayIndex = 0 pokušaj: za nove_podatke u gps_socket: ako su novi_podaci: data_stream.unpack (novi_dati) ako je data_stream. TPV ['lat']! = 'N/a': print (data_stream. TPV ['speed'], 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 još nije povezan') time.sleep (.1) time.sleep (.8) osim KeyboardInterrupt: gps_socket.close () print (' / nZavršeno od strane korisnika ctrl+c ')

Gornji kôd je samo jedan primjer kako kodirati naš sistem, a ja sam ugradio video o tome kako ovaj sistem funkcionira.

Preporučuje se: