Sisukord:

GPS -süsteem: 7 sammu
GPS -süsteem: 7 sammu

Video: GPS -süsteem: 7 sammu

Video: GPS -süsteem: 7 sammu
Video: Мини GPS-Трекер GF-07 с Микрофоном Обзор и Настройка 2024, Oktoober
Anonim
GPS süsteem
GPS süsteem
GPS süsteem
GPS süsteem
GPS süsteem
GPS süsteem

Projekti looja: Carlos Gomez

Usaldusväärse navigeerimissüsteemi olemasolu on ülioluline kõigile, kes üritavad reisida ja maailma avastada.

Kõige olulisem aspekt, mis võimaldab navigeerimissüsteemil töötada, on süsteemi sisseehitatud GPS -funktsioon. GPS -süsteem võimaldab kõigil jälgida oma asukohta ja kiirust, et kuvada kasutaja kohta täpset teavet ja anda kasutajale täpne ülevaade sellest, kus nad asuvad ja kui kaugel nad oma asukohast on.

Globaalne positsioneerimissüsteem (GPS) on satelliitide võrgustik, mis tiirleb ümber Maa umbes 20 000 km kõrgusel. Kõik, kellel on GPS -seade, saavad satelliitide edastatavaid raadiosignaale vastu võtta ja saavad neid igal võimalikul viisil kasutada. Kõikjal, kus teie asukoht planeedil on, peaks igal ajal olema saadaval vähemalt neli GPS -i. Kasutades meetodit nimega 3-D trilateration, saab GPS-seade kasutada kolme satelliiti, et määrata seadme asukoht Maal. Kõik kolm satelliiti saadavad seadmele signaali ja seade määrab selle kauguse satelliidist. Kasutades kõiki kolme kaugusarvutusi, saab seade nüüd täpselt kindlaks määrata oma asukoha Maal ja tagastab selle kasutajale.

Meie loodud GPS -süsteem suudab jälgida kasutaja asukohti, hankides kasutaja koordinaadid Maal ja tehes mõned arvutused, et tagastada kasutaja kiirus, asukoht ja läbitud vahemaa.

1. samm: alustamine

Alustamine
Alustamine
Alustamine
Alustamine
Alustamine
Alustamine
Alustamine
Alustamine

Selle projekti käivitamiseks peame kõigepealt koguma kõik õiged materjalid

1: Vaarika Pi Zero W

2: GPS -vastuvõtja

3: 1,8 TFT 128 x 160 LCD SPI -ekraan

4: ~ 11 juhtmest

5: 2 nupud

6: 2x 1k ja 2x 10k takistid allalaaditavate nuppude jaoks

7: leivalaud

See projekt kasutab Raspberry Pi GPIO tihvte ja sellisena peame oma projekti arendamiseks ühendama kõik leivalauaga. Samuti eeldatakse, et kõigi tihvtide jootmine on tehtud ja lõpetatud, enne kui liigume ja ühendame kõik meie osad.

Samm: ühendage GPS -moodul Raspberry Pi -ga

Ühendage GPS -moodul Raspberry Pi -ga
Ühendage GPS -moodul Raspberry Pi -ga
Ühendage GPS -moodul Raspberry Pi -ga
Ühendage GPS -moodul Raspberry Pi -ga

Meie GPS -süsteemi kasutamiseks peate ühendama GPS -mooduli Tx- ja Rx -tihvtid Raspberry Pi GPIO -pistikutega 14 ja 15. GPS -vastuvõtja Tx -tihvt läheb Pi Rx -tihvti ja GPS -vastuvõtja Rx -tihvt Raspberry pi Tx -tihvti juurde.

Piltidel näidatud GPS -vastuvõtja vajab kasutamist 3,3 V ja saate ühendada 3,3 V nööpnõelad õige pingega, samal ajal ühendades maandusnõela maandusega.

3. samm: andmete vastuvõtmine GPS -vastuvõtumoodulist

Andmete vastuvõtmine GPS -vastuvõtumoodulist
Andmete vastuvõtmine GPS -vastuvõtumoodulist

Selleks, et saada andmeid GPS -vastuvõtjalt Raspberry Pi -le, peame lubama UART -portidest õigete pesade lugemise. Toorandmete lugemine nõuaks meilt oma analüüsimisteegi loomist, kuid selle stsenaariumi korral saame kasutada taustal töötavat GPS -deemonit, et aidata andmeid analüüsida ja Raspberry Pi -le edastada

Selle saavutamiseks saame avada terminali Raspberry Pi -l ja käivitada koodi:

sudo apt-get update

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

See peaks meie jaoks allalaadimise eest hoolitsema.

Kui see on lõpule viidud, peame gpsd süsteemiteenuse keelama, käivitades järgmised käsud:

sudo systemctl stop gpsd.socket

sudo systemctl keela gpsd.socket

Kui soovite kunagi lubada gpsd -süsteemi vaiketeenuse, saate selle taastamiseks käivitada järgmised käsud:

sudo systemctl lubab gpsd.socket

sudo systemctl käivitage gpsd.socket

Nüüd peame käivitama gpsd deemoni ja suunama selle sisestades UART -portidele

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

Nüüd saame käivitada alloleva käsu ja näha kõiki andmeid hõljumas!

cgps -s

Samm: ühendage ekraan Raspberry Pi -ga

Ühendage ekraan Raspberry Pi -ga
Ühendage ekraan Raspberry Pi -ga
Ühendage ekraan Raspberry Pi -ga
Ühendage ekraan Raspberry Pi -ga

Kui oleme oma GPS -vastuvõtja püsti pannud ja Raspberry Pi -ga töötanud, saame ekraani Raspberry Pi -ga ühendada. LCD -ekraani ühendamiseks Raspberry Pi -ga kasutame 5 juhtmest ja põhitoite ja LED -i ühendamiseks veel 4 kontakti. ekraanil.

Olen lisanud foto kasutatavast TFT -ekraanist, kuid see peaks toimima sarnase suuruse ja ehitusega ekraanidega.

Ühendage LED- ja GND-ühendus maandusega ning ühendage LED+ ja VCC toitepingega 3.3V.

Ühendage ekraanil olev RESET -tihvt Pi -plaadi tihvtiga 25.

Ühendage A0 Pi -plaadi tihvtiga 24.

Ühendage SDA -tihvt Pi -plaadi MOSI -tihvtiga.

Ühendage LCD -ekraanil olev SCK -tihvt Pi -plaadiga.

Ühendage CS -tihvt Pi -plaadi tihvtiga 8.

Samm: seadistage ekraan Raspberry Pi -ga töötamiseks

Seadistage ekraan Raspberry Pi -ga töötamiseks
Seadistage ekraan Raspberry Pi -ga töötamiseks

Ekraani seadistamiseks peame kasutama selles repos leiduvat ST7735 raamatukogu:

Python ST7735 ekraaniteek

Kui oleme selle ekraaniteegi oma Raspberry Pi süsteemi installinud, võime nüüd jätkata näidisfaili seadistamist, et veenduda, et meie eelmine juhtmestik töötab õigesti.

Looge fail nimega example.py ja sisestage sinna järgmine tekst koos teie valitud näidispildiga samasse kausta

importige ST7735 TFT -na Importige Adafruit_GPIO GPIO -ks importige Adafruit_GPIO. SPI SPI -na

LAIUS = 128

KÕRGUS = 160 SPEED_HZ = 4000000

# Vaarika Pi konfiguratsioon.

# Need on tihvtid, mida on vaja LCD -ekraani ühendamiseks Raspberry Pi -ga

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

# Looge TFT LCD -ekraanide klass.

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

# Ekraani initsialiseerimine.

disp.begin () disp.reset ()

# Laadige pilt.

newData = 0x42 disp.command (newData) print ('pildi laadimine …') image = Image.open ('cat.jpg')

# Muutke pildi suurust ja pöörake seda vastavalt ekraanile.

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

# Prindib terminali, et meie programm joonistab ekraanile meie pildi

print ('Joonistav pilt')

# See funktsioon kuvab meie pildi ekraanil

disp.display (pilt)

See fail seadistab LCD -ekraani jaoks Raspberry Pi konfiguratsiooni ja raamatukogu teisendab meie pildi kausta ja kuvab selle ekraanil.

6. samm: seadistage olekumasinad GPS -i teabe kuvamiseks ekraanile

Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil
Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil
Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil
Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil
Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil
Seadistage olekumasinad GPS -i teabe kuvamiseks ekraanil

GPS -i seadistamiseks kasutame oma ülesande skeemi rakendades 5 erinevat olekumasinat.

Ekraani muutmise oleku masin:

See olekumasin kontrollib, mida kuvada, sõltuvalt meie nupuvajutusest. See muudab muutujat, mis võimaldab pythonil kasutada parditüüpi ja kutsuda õige funktsiooni kuvamiseks sõltuvalt kutsutud funktsioonist

Kiiruse oleku masin:

See olekumasin käivitab praeguse kiiruse sõltuvalt üksikisikute asukohast. See käivitab GPS -i iga kella tsükli

Väljundi oleku masin:

See olekumasin määrab väljundi muutuja põhjal, mille kuva muutmise oleku masin määrab praeguseks kuvaks.

Kauguse oleku masin

See olekumasin täidab iga kella tsüklit ja määrab kasutaja läbitud kogu vahemaa ning kui lähtestusnuppu vajutatakse, lähtestab see praeguse läbitud vahemaa.

Asukoha oleku masin:

See olekumasin tagastab kasutaja praeguse asukoha, kasutades koordinaate, mille GPS -moodul kasutaja kohta tagastab. See olekumasin sõltub kasutajate Interneti -ühendusest.

Samm: rakendage meie GPS -süsteem

Kui oleme oma GPS -mooduli saatnud teavet meie Raspberry Pi -le ja meie LCD -ekraanil kuvatakse selle kohta teavet, saame hakata oma GPS -süsteemi programmeerima. Kasutan meie GPS -süsteemi kodeerimiseks eelmise sammu piiratud olekuga masinaid

## Navigatsioonisüsteemi põhifail # # # #

# Raamatukogud piltide joonistamiseks

PIL -i importimisest Pilt PIL -ist Import ImageDraw PIL -i importimisest ImageFont

# ST7737 kontrolleri raamatukogu

importige ST7735 TFT -na

# Raamatukogu GPIO jaoks Raspberry Pi jaoks

importige Adafruit_GPIO GPIO -ks importige Adafruit_GPIO. SPI SPI -na

# GPS -i raamatukogu

#import gpsd gps3 -st importige gps3

# Raamatukogu aega

impordi aeg

# Raamatukogu kahe punkti vahelise kauguse leidmiseks

matemaatikast import sin, cos, sqrt, atan2, radiaanid

# Importige Rpi teek, et kasutada nuppe menüüde vahetamiseks ja lähtestamiseks

# impordi RPi. GPIO kui bGPIO

# Seadistage nööpnõelad nuppudele

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)

# impordige geokodeerimiseks geopiiraamatukogu

# # Selle toimimiseks on vaja Interneti -ühendust

saidilt geopy.geocoders impordivad Nominatimi

geolokator = Nominatim ()

# Konstandid süsteemile

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

LAIUS = 128

KÕRGUS = 160 SPEED_HZ = 4000000

# Raspberry Pi konfiguratsiooninõelad

DC = 24 # A0 TFT -ekraanil RST = 25 # TFT -ekraani nööpnõela SPI_PORT = 0 # SPI -port vaarika pi, SPI0 SPI_DEVICE = 0 # Slave select on rapsberry pi, CE0

# Looge TFT LCD -ekraani objekt

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

# Ekraani initsialiseerimine

disp.begin ()

# Taust on seatud roheliseks

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

# Puhastage ekraan valgeks ja kuvage

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

# Kiiruse, laiuskraadi ja pikkuskraadi paigutuse muutujad

#currentS = "Praegune kiirus:" # Speed string #totalDis = "Kogu vahemaa:" # Distance string #currentLoc = "Praegune asukoht:" # Asukoha string

# Kaugus x ja y koordinaadid

distX = 10 distY = 20

pointsList =

# Kiiruse x ja y koordinaadid

kiirusX = 10 kiirustY = 20

# Asukoha x ja y koordinaadid

locX = 10 locY = 20

# Teisendab m/s kiiruseks mph

conversionVal = 2,24

# Kiirvärskendusfunktsioon, tagastab stringi

SpeedVar = 0

def speedFunc (): globaalne SpeedVar SpeedText = data_stream. TPV ['kiirus'], kui (SpeedText! = "n/a"): SpeedText = float (SpeedText) * conversionVal SpeedVar = ümmargune (SpeedText, 1) # return (SpeedText)

def locationFunc ():

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

reverseString = latLoc + "," + lonLoc

asukoht = geolokator.reverse (reverseString)

tagasi (asukoht.address)

# Laiuskraadi värskendamise funktsioon tagastab ujuva väärtuse

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

# Pikkuskraadi värskendamise funktsioon, tagastab stringi

def lonFunc (): pikkuskraad = data_stream. TPV ['lon'] if (pikkuskraad == "n/a"): tagastab 0 muud: tagastab ujuki (ümmargune (pikkuskraad, 4))

# Kaugusfunktsioon tagastab TOTAL läbitud vahemaa

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 kui (viimane == 0): tagasta muidu: totalDistance += coorDistance (pointsList [last-1], pointsList [last]) # return totalDistance

# Lähtestab kogu vahemaa

def resDistance ():

globaalne totalDistance totalDistance = 0

# Funktsioon, mida kasutatakse kahe koordinaadi vahelise kauguse leidmiseks

# kasutab leidmiseks Haversine'i valemit. # Sisendpunktid on tüübid

def coorDistance (punkt1, punkt2):

# Maa ligikaudne raadius kilomeetrites maaRadius = 6373,0

lat1 = punkt1 [0]

lon1 = punkt1 [1]

lat2 = punkt2 [0]

lon2 = punkt2 [1]

kaugusLon = lon2 - lon1

kaugusLat = lat2 - lat1

# Haversine a

a = sin (kaugusLat/2) ** 2 + cos (lat1)*cos (lat2)*sin (kaugusLon/2) ** 2

# Haversine c

c = 2 * atan2 (sqrt (a), sqrt (1-a))

# Teisenda km miilideks

kaugus = (earthRadius * c) * 0,62137

if (kaugus <= 0,01): tagasisõit 0,00 muu: tagasitulek (kaugus, 3)

# Funktsioon kiiruse kuvamiseks ekraanil

def dispSpeed ():

globaalne SpeedVar # Asetage kaugus muutujale ekraanile draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))

# Funktsioon kauguse kuvamiseks ekraanil

def dispDistance ():

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

# Funktsioon kuvab ekraanil asukoha, nõuab töötamiseks Internetti

def dispLocation ():

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

# Sõnastiku kasutamine lülitite avaldiste jäljendamiseks

dispOptions = {

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

# Ekraani väljundfunktsioon

def väljund ():

# Globaalse muutuja kasutamine kuva jaoksIndex globaalne kuvaIndex # Ekraani puhastamine ja tausta disp. Rakendamine täitke = (255, 0, 0))

# Kõnede funktsioon sõltub displayIndexi väärtusest

dispOptions [displayIndex] ()

# Kustutatakse, kui muu meetod töötab

# koha kauguse muutuja ekraanil

#draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) #kiiruse muutuja ekraanil #draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Ekraanivärskenduste kuvamine

displayButton = 18 # BCM Nõel vaarika pi

resetButton = 23 # BCM Nõel vaarika pi

nupuvajutus = vale

def checkDisplay ():

globaalne nupp Vajutage globaalset kuvaIndex kui (bGPIO.input (displayButton) ja mitte nupuvajutus): displayIndex += 1 buttonPress = True if (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) ja buttonPress): print (" Ikka vajutatud ") else: buttonPress = False

# GPS -i seadistamine

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

taimerPeriood =.5

# Indeksiväärtus kuvari kuvaleIndex = 0 proovige: uue_andme jaoks gps_socketis: kui uus_andmed: data_stream.unpack (uus_andmed) kui data_stream. TPV ['lat']! = 'N/a': print (data_stream. TPV ['kiirus')], 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 pole veel ühendatud') time.sleep (.1) time.sleep (.8), välja arvatud KeyboardInterrupt: gps_socket.close () print (' / nLõpetas kasutaja ctrl+c ')

Ülaltoodud kood on vaid üks näide meie süsteemi kodeerimisest ja ma olen lisanud video selle süsteemi toimimise kohta.

Soovitan: