Talaan ng mga Nilalaman:

Sistema ng GPS: 7 Mga Hakbang
Sistema ng GPS: 7 Mga Hakbang

Video: Sistema ng GPS: 7 Mga Hakbang

Video: Sistema ng GPS: 7 Mga Hakbang
Video: GPS, How does it work? | ICT #12 2024, Oktubre
Anonim
Sistema ng GPS
Sistema ng GPS
Sistema ng GPS
Sistema ng GPS
Sistema ng GPS
Sistema ng GPS

Tagalikha ng Proyekto: Carlos Gomez

Ang pagkakaroon ng isang maaasahang sistema ng nabigasyon ay pinakamahalaga para sa sinumang sumusubok na maglakbay at galugarin ang mundo.

Ang pinakamahalagang aspeto na nagpapahintulot sa sistema ng nabigasyon na gumana ay ang kakayahan ng GPS na naka-embed sa loob ng system. Pinapayagan ng sistema ng GPS ang sinuman na subaybayan ang kanilang lokasyon at bilis upang maipakita ang tumpak na impormasyon tungkol sa gumagamit at bigyan ang gumagamit ng isang tumpak na representasyon kung nasaan sila at kung gaano kalayo sila mula sa kanilang lokasyon.

Ang Global Positioning System (GPS) ay isang network ng mga satellite na umiikot sa Earth sa taas na mga 20, 000 km. Ang sinumang may isang aparatong GPS ay maaaring makatanggap ng mga signal ng radyo na nai-broadcast ng mga satellite at magagamit ang mga ito sa alinmang paraan na kinakailangan. Kung saan man ang iyong lokasyon sa planeta ng hindi bababa sa apat na GPS ay dapat na magagamit sa iyo sa anumang oras. Gamit ang isang pamamaraan na tinatawag na 3-D trilateration, ang isang aparato ng GPS ay makakagamit ng tatlong mga satellite upang matukoy ang lokasyon ng aparato sa Earth. Ang bawat isa sa tatlong mga satellite ay nagpapadala ng isang senyas sa aparato at natutukoy ng aparato na ang distansya nito mula sa satellite. Gamit ang bawat isa sa tatlong mga kalkulasyon ng distansya ang aparato ay nagawang matukoy ang lokasyon nito sa Earth at ibabalik iyon sa gumagamit.

Ang GPS system na lilikha namin ay magagawang subaybayan ang mga lokasyon ng gumagamit sa pamamagitan ng pagkuha ng mga coordinate ng gumagamit sa Earth at paggawa ng ilang mga kalkulasyon upang maibalik ang bilis ng lokasyon, lokasyon, at sakop ang distansya.

Hakbang 1: Pagsisimula

Nagsisimula
Nagsisimula
Nagsisimula
Nagsisimula
Nagsisimula
Nagsisimula
Nagsisimula
Nagsisimula

Upang masimulan ang proyektong ito, kakailanganin muna naming tipunin ang lahat ng mga tamang materyales

1: Raspberry Pi Zero W

2: Tagatanggap ng GPS

3: 1.8 TFT 128 x 160 LCD SPI Screen

4: ~ 11 mga wire

5: 2 mga pindutan

6: 2x 1k at 2x 10k resistors para sa mga pull down button

7: Bread board

Gagamitin ng proyektong ito ang mga pin ng GPIO ng Raspberry Pi at dahil dito kailangan naming ikonekta ang lahat sa isang board ng tinapay upang mapaunlad ang aming proyekto. Ipinapalagay din na ang paghihinang sa lahat ng mga pin ay tapos na at natapos bago magpatuloy at ikonekta ang lahat ng aming mga bahagi.

Hakbang 2: Ikonekta ang Modyul ng GPS sa Raspberry Pi

Ikonekta ang Modyul ng GPS sa Raspberry Pi
Ikonekta ang Modyul ng GPS sa Raspberry Pi
Ikonekta ang Modyul ng GPS sa Raspberry Pi
Ikonekta ang Modyul ng GPS sa Raspberry Pi

Para sa paggamit ng aming system ng GPS kakailanganin mong ikonekta ang mga Tx at Rx pin mula sa module ng GPS sa GPIO pin 14 at 15 sa Raspberry Pi. Ang Tx pin ng GPS receiver ay pupunta sa Rx pin ng Pi at ang Rx pin ng GPS receiver ay pupunta sa Tx pin ng Raspberry pi.

Ang tagatanggap ng GPS na ipinapakita sa mga imahe ay nangangailangan ng 3.3V upang magamit at maaari mong ikonekta ang mga 3.3V na pin sa tamang boltahe, habang kumokonekta sa Ground pin sa lupa.

Hakbang 3: Tanggapin ang Data Mula sa Modyul ng Tagatanggap ng GPS

Tanggapin ang Data Mula sa Modyul ng Tagatanggap ng GPS
Tanggapin ang Data Mula sa Modyul ng Tagatanggap ng GPS

Upang makatanggap ng data mula sa tagatanggap ng GPS sa Raspberry Pi kailangan naming payagan ang tamang mga socket na basahin mula sa mga port ng UART. Ang pagbabasa ng hilaw na data ay mangangailangan sa amin upang lumikha ng aming sariling library ng pag-parse, ngunit sa senaryong ito maaari naming samantalahin ang isang GPS daemon na tumatakbo sa background upang matulungan ang paggamit ng pag-parse ng data at ipadala ito sa Raspberry Pi

Upang magawa ito maaari naming buksan ang isang terminal sa Raspberry Pi at ipatupad ang code:

sudo apt-get update

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

Dapat nitong alagaan ang pag-download para sa amin.

Kapag nakumpleto na ito, kailangan naming huwag paganahin ang serbisyo ng system ng gpsd sa pamamagitan ng pagpapatakbo ng mga sumusunod na utos:

sudo systemctl ihinto ang gpsd.socket

sudo systemctl huwag paganahin ang gpsd.socket

Kung nais mong paganahin ang default na serbisyo ng system ng gpsd, maaari mong patakbuhin ang mga sumusunod na utos upang maibalik ito:

sudo systemctl paganahin ang gpsd.socket

sudo systemctl simulan ang gpsd.socket

Ngayon kailangan naming simulan ang gpsd daemon at ituro ito sa mga port ng UART sa pamamagitan ng pagpasok

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

Maaari na naming patakbuhin ang utos sa ibaba at makita ang lahat ng data na lumulutang!

cgps -s

Hakbang 4: Ikonekta ang Display sa Raspberry Pi

Ikonekta ang Display sa Raspberry Pi
Ikonekta ang Display sa Raspberry Pi
Ikonekta ang Display sa Raspberry Pi
Ikonekta ang Display sa Raspberry Pi

Kapag mayroon nang up ang aming GPS receiver at nagtatrabaho sa Raspberry Pi, maaari naming ikonekta ang display sa Raspberry Pi. Gumagamit kami ng 5 wires upang ikonekta ang aming LCD display sa Raspberry Pi at isa pang 4 na pin upang ikonekta ang pangunahing lakas at LED sa screen.

Nagsama ako ng larawan ng TFT na screen na ginagamit ko, ngunit dapat itong gumana sa mga screen na may katulad na laki at build.

Ikonekta ang LED- at GND sa lupa at ikonekta ang LED + at VCC sa 3.3V.

Ikonekta ang RESET pin sa screen upang i-pin ang 25 sa Pi board.

Ikonekta ang A0 upang i-pin ang 24 sa Pi board.

Ikonekta ang SDA pin sa MOSI pin sa Pi board.

Ikonekta ang SCK pin sa LCD screen sa Pi board.

Ikonekta ang CS pin sa pin 8 sa Pi board.

Hakbang 5: Pag-setup ng Display upang Magtrabaho Sa Raspberry Pi

Pag-setup ng Display upang Magtrabaho Sa Raspberry Pi
Pag-setup ng Display upang Magtrabaho Sa Raspberry Pi

Upang ma-setup ang display kailangan namin upang magamit ang ST7735 library na matatagpuan sa repo na ito:

Python ST7735 Screen Library

Kapag na-install na ang display library na ito sa aming system ng Raspberry Pi, maaari na kaming magpatuloy sa pagse-set up ng isang halimbawa ng file upang kumpirmahing gumagana nang tama ang aming dating mga kable.

Lumikha ng isang file na may pamagat na example.py at ipasok ang sumusunod na teksto doon kasama ang isang sample na imahe na iyong pinili sa parehong folder

i-import ang ST7735 bilang TFTimport Adafruit_GPIO bilang GPIO import Adafruit_GPIO. SPI bilang SPI

LUPA = 128

TAAS = 160 SPEED_HZ = 4000000

# Pagsasaayos ng Raspberry Pi.

# Ito ang mga kinakailangang pin upang ikonekta ang LCD sa Raspberry Pi

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

# Lumikha ng klase ng display na TFT LCD.

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

# Ipasimula ang pagpapakita.

disp.begin () disp.reset ()

# Mag-load ng isang imahe.

newData = 0x42 disp.command (newData) print ('Naglo-load ng imahe…') imahe = Image.open ('cat.jpg')

# Baguhin ang laki ng imahe at paikutin ito upang tumugma sa display.

imahe = imahe.rotate (270). baguhin ang laki ((LAKAS, Taas))

# I-print sa terminal na iginuhit ng aming programa ang aming Imahe sa screen

i-print ('Larawan ng guhit')

# Ang pagpapaandar na ito ay ipapakita ang aming imahe sa screen

disp.display (imahe)

Itatakda ng file na ito ang pagsasaayos ng Raspberry Pi para sa LCD screen at i-convert ng library ang aming imahe sa folder at ipapakita ito sa screen.

Hakbang 6: I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita

I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita
I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita
I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita
I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita
I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita
I-set up ang Mga Makina ng Estado upang Maipakita ang Impormasyon ng GPS sa Ipakita

Gumagamit kami ng 5 magkakaibang mga makina ng estado, habang ipinapatupad ang aming diagram ng gawain upang mai-set up ang aming gps system.

Makina ng estado ng Pagbabago ng Display:

Ang makina ng estado na ito ay makokontrol kung alin ang ipapakita depende sa aming pag-input ng pindutan. Ginagawa ito sa pamamagitan ng pagbabago ng isang variable na nagpapahintulot sa python na samantalahin ang pag-type ng pato at pagtawag sa wastong pagpapaandar upang maipakita depende sa tinawag na pagpapaandar

Makina ng estado ng bilis:

Ang makina ng estado na ito ay isasagawa ang kasalukuyang bilis depende sa lokasyon ng mga indibidwal. Isasagawa nito ang bawat ikot ng orasan para sa GPS system

Makina ng estado ng output:

Tutukuyin ng makina ng estado ang output batay sa variable na tinutukoy ng makina ng estado ng pagbabago ng display na maging kasalukuyang display.

Distansya machine machine

Ang makina ng estado na ito ay nagpapatupad ng bawat pag-ikot ng orasan at tumutukoy sa kabuuang distansya na nilakbay ng gumagamit at sa sandaling maitulak ang pindutan ng pag-reset, mai-reset ang kasalukuyang nilakbay na distansya.

Makina ng estado ng lokasyon:

Ibinabalik ng machine ng estado ang kasalukuyang lokasyon ng gumagamit, gamit ang mga coordinate na ibabalik ng module ng GPS tungkol sa gumagamit. Ang machine ng estado na ito ay nakasalalay sa koneksyon sa internet ng mga gumagamit.

Hakbang 7: Hinahayaan Magpatupad ng aming Sistema ng GPS

Sa sandaling mayroon kaming aming module ng GPS na nagpapadala ng impormasyon sa aming Raspberry Pi at ang aming LCD screen na nagpapakita ng impormasyon dito maaari naming simulan ang programa ng aming sistema ng GPS. Gagamitin ko ang mga nakaraang makina ng estado ng nakaraang hakbang upang ma-code ang aming system ng GPS

## Pangunahing file para sa Navigation system # # # #

# Mga aklatan para sa pagguhit ng mga imahe

mula sa PIL import Image mula sa PIL import ImageDraw mula sa PIL import ImageFont

# Library para sa ST7737 controller

i-import ang ST7735 bilang TFT

# Library para sa GPIO para sa Raspberry Pi

i-import ang Adafruit_GPIO bilang GPIO i-import ang Adafruit_GPIO. SPI bilang SPI

# Library para sa GPS

#import gpsd mula sa gps3 import gps3

# Library para sa oras

oras ng pag-import

# Library para sa paghahanap ng distansya sa pagitan ng dalawang puntos

mula sa math import sin, cos, sqrt, atan2, radians

# I-import ang Rpi library upang magamit ang mga pindutan upang lumipat ng mga menu at i-reset

# i-import ang RPi. GPIO bilang bGPIO

# Mga setup ng pin para sa mga pindutan

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 para sa Geocoding

# # Ang pag-access sa Internet ay kinakailangan upang gumana ito

mula sa geopy.geocoders import Nominatim

geolocator = Nominatim ()

# Patuloy para sa system

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

LUPA = 128

TAAS = 160 SPEED_HZ = 4000000

# Mga pin ng pagsasaayos ng Raspberry Pi

DC = 24 # A0 sa TFT screen RST = 25 # I-reset ang pin sa TFT screen SPI_PORT = 0 # SPI port sa raspberry pi, SPI0 SPI_DEVICE = 0 # Slave select on rapsberry pi, CE0

# Lumikha ng bagay na display ng TFT LCD

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

# Ipasimula ang pagpapakita

disp.begin ()

Itatakda sa berde ang # background

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

# I-clear ang screen sa puti at ipakita

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

# Bilis, Latitude, Mga variable ng pagkakalagay ng Longitude

#currentS = "Kasalukuyang Bilis:" # Speed string #totalDis = "Total Distance:" # Distance string #currentLoc = "Kasalukuyang Lokasyon:" # Lokasyon ng string

# Distansya x at y mga coordinate

distX = 10 distY = 20

pointsList =

# Ang bilis ng x at y mga coordinate

bilisX = 10 bilisY = 20

# Lokasyon x at y mga coordiantes

locX = 10 locY = 20

# Mga convert mula sa m / s hanggang mph

conversionVal = 2.24

# Pag-andar ng bilis ng pag-update, ibabalik ang string

SpeedVar = 0

def speedFunc (): pandaigdigan SpeedVar SpeedText = data_stream. TPV ['bilis'] kung (SpeedText! = "n / a"): SpeedText = float (SpeedText) * conversionVal SpeedVar = bilog (SpeedText, 1) # return (SpeedText)

def locationFunc ():

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

reverseString = latLoc + "," + lonLoc

lokasyon = geolocator.reverse (reverseString)

bumalik (lokasyon.address)

# Pag-andar ng pag-update ng Latitude, ibabalik ang halaga ng float

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

Ang pagpapaandar sa pag-update ng # Longitude, nagbabalik ng string

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

# Nagbabalik ang pagpapaandar ng distansya TOTAL na nilakbay ng distansya

totalDistansya = 0

def distFunc ():

pandaigdigan totalDistance newLat = latFunc () newLon = lonFunc () kung (newLat == 0 o newLon == 0): totalDistance = totalDistance # return (totalDistance) iba pa: pointsList.append ((newLat, newLon)) huling = len (pointsList) -1 kung (huling == 0): bumalik pa: totalDistance + = coorDistance (pointsList [huling-1], pointsList [huling]) # return totalDistance

# I-reset ang kabuuang distansya

def resDistance ():

pandaigdigang kabuuanDistansya totalDistansya = 0

# Function na ginamit upang makahanap ng distansya sa pagitan ng dalawang mga coordinate

# Gumagamit ng formula ng Haversine upang makahanap. # Input point ay isang tuple

def coorDistansya (point1, point2):

# Tinatayang radius ng Earth sa mga kilometro na EarthRadius = 6373.0

lat1 = point1 [0]

lon1 = point1 [1]

lat2 = point2 [0]

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

# I-convert ang km sa Miles

distansya = (earthRadius * c) * 0.62137

kung (distansya <= 0.01): bumalik 0.00 pa: pagbalik ng pag-ikot (distansya, 3)

# Pag-andar upang ipakita ang bilis sa screen

def dispSpeed ():

pandaigdigang SpeedVar # Distansya ng lugar sa variable sa screen draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))

# Pag-andar upang ipakita ang distansya sa screen

def dispDistance ():

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

# Ang pagpapaandar sa lokasyon ng pagpapakita sa screen, nangangailangan ng internet upang gumana

def dispLocation ():

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

# Paggamit ng diksyunaryo upang gayahin ang mga pahayag ng paglipat

dispOptions = {

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

# Pag-andar ng output ng screen

output ng def ():

# Paggamit ng pandaigdigang variable para sa displayIndex global displayIndex # Pag-clear ng screen at paglalapat ng background disp.clear ((255, 255, 255)) draw.rectangle ((0, 10, 127, 150), outline = (255, 0, 0), punan = (255, 0, 0))

Ang paggana ng # Mga tawag depende sa halaga ng displayIndex

dispOptions [displayIndex] ()

# Burahin kung gumagana ang ibang pamamaraan

# variable ng distansya ng lugar sa screen

# draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) # variable ng bilis ng lugar sa screen # draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Ipakita ang mga update sa screen disp.display ()

display Button = 18 # BCM Pin sa raspberry pi

reset Button = 23 # BCM Pin sa raspberry pi

buttonPress = Mali

def checkDisplay ():

global buttonPress global displayIndex if (bGPIO.input (display Button) at hindi buttonPress): displayIndex + = 1 buttonPress = True if (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (display Button) at buttonPress): print (" Pinindot pa rin ") pa: buttonPress = Mali

# Mga setup ng gps

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

timerPeriod =.5

# Halaga ng index para sa display displayIndex = 0 try: para sa new_data sa gps_socket: kung new_data: data_stream.unpack (new_data) kung data_stream. TPV ['lat']! = 'N / a': print (data_stream. TPV ['bilis'], data_stream. TPV ['lat'], data_stream. TPV ['lon']) distFunc () speedFunc () output () checkDisplay () kung (bGPIO.input (reset Button)): resDistance () iba pa: output () checkDisplay () kung (bGPIO.input (reset Button)): resDistance () print ('hindi pa konektado ang GPS') time.s Sleep (.1) time.s Sleep (.8) maliban sa KeyboardInterrupt: gps_socket.close () print (' / n Natukoy ng gumagamit ctrl + c ')

Ang code sa itaas ay isang halimbawa lamang sa kung paano i-code ang aming system at nag-embed ako ng isang video sa kung paano gumagana ang sistemang ito.

Inirerekumendang: