Orodha ya maudhui:

Mfumo wa GPS: Hatua 7
Mfumo wa GPS: Hatua 7

Video: Mfumo wa GPS: Hatua 7

Video: Mfumo wa GPS: Hatua 7
Video: Циркуляционный насос Ремонт Устройство 7 видов поломок 2024, Oktoba
Anonim
Mfumo wa GPS
Mfumo wa GPS
Mfumo wa GPS
Mfumo wa GPS
Mfumo wa GPS
Mfumo wa GPS

Muumba Mradi: Carlos Gomez

Kuwa na mfumo wa urambazaji wa kuaminika ni muhimu kwa mtu yeyote anayejaribu kusafiri na kukagua ulimwengu.

Kipengele muhimu zaidi ambacho kinaruhusu mfumo wa urambazaji kufanya kazi ni uwezo wa GPS uliowekwa ndani ya mfumo. Mfumo wa GPS huruhusu mtu yeyote kufuatilia eneo lao na kasi ili kuonyesha habari sahihi juu ya mtumiaji na kumpa mtumiaji uwakilishi sahihi wa wapi na umbali gani kutoka kwa eneo lao.

Mfumo wa Kuweka Nafasi Ulimwenguni (GPS) ni mtandao wa setilaiti zinazozunguka Dunia kwa urefu wa takriban km 20,000. Mtu yeyote aliye na kifaa cha GPS anaweza kupokea ishara za redio ambazo satelaiti hutangaza na anaweza kuzitumia kwa njia yoyote inayohitajika. Popote mahali ulipo kwenye sayari angalau GPS nne inapaswa kupatikana kwako wakati wowote. Kutumia njia inayoitwa trilateration ya 3-D, kifaa cha GPS kinaweza kutumia satelaiti tatu ili kujua mahali kifaa kilipo duniani. Kila moja ya satelaiti tatu hutuma ishara kwa kifaa na kifaa huamua ni umbali kutoka kwa setilaiti. Kutumia kila hesabu za umbali tatu kifaa sasa kinaweza kubainisha eneo lake duniani na huirudisha kwa mtumiaji.

Mfumo wa GPS ambao tutatengeneza utaweza kufuatilia maeneo ya mtumiaji kwa kupata kuratibu za mtumiaji Duniani na kufanya mahesabu kadhaa ili kurudisha kasi ya mtumiaji, eneo, na umbali uliofunikwa.

Hatua ya 1: Kuanza

Kuanza
Kuanza
Kuanza
Kuanza
Kuanza
Kuanza
Kuanza
Kuanza

Ili kuanza mradi huu, kwanza tutahitaji kukusanya vifaa vyote sahihi

1: Raspberry Pi Zero W

2: Mpokeaji wa GPS

3: 1.8 TFT 128 x 160 LCD SPI Screen

4: ~ waya 11

Vifungo 5: 2

6: 2x 1k na 2x 10k resistors kwa vifungo vya kuvuta

7: Bodi ya mkate

Mradi huu utatumia pini za Raspberry Pi za GPIO na kwa hivyo tutahitaji kuunganisha kila kitu na bodi ya mkate ili kukuza mradi wetu. Inachukuliwa pia kuwa kulehemu kwenye pini zote hufanywa na kumaliza kabla ya kuendelea na kuunganisha sehemu zetu zote.

Hatua ya 2: Unganisha Moduli ya GPS kwa Raspberry Pi

Unganisha Moduli ya GPS kwa Raspberry Pi
Unganisha Moduli ya GPS kwa Raspberry Pi
Unganisha Moduli ya GPS kwa Raspberry Pi
Unganisha Moduli ya GPS kwa Raspberry Pi

Kwa matumizi ya mfumo wetu wa GPS utahitaji kuunganisha pini za Tx na Rx kutoka moduli ya GPS hadi GPIO pin 14 na 15 kwenye Raspberry Pi. Pini ya Tx ya mpokeaji wa GPS huenda kwa pini ya Rx ya Pi na pini ya Rx ya mpokeaji wa GPS huenda kwenye pini ya Tx ya pi ya Raspberry.

Mpokeaji wa GPS aliyeonyeshwa kwenye picha anahitaji 3.3V itumike na unaweza kuunganisha pini 3.3V kwa voltage sahihi, huku ukiunganisha pini ya chini.

Hatua ya 3: Pokea Takwimu kutoka kwa Moduli ya Mpokeaji wa GPS

Pokea Takwimu Kutoka kwa Moduli ya Mpokeaji wa GPS
Pokea Takwimu Kutoka kwa Moduli ya Mpokeaji wa GPS

Ili kupokea data kutoka kwa mpokeaji wa GPS kwenda kwa Raspberry Pi tunahitaji kuruhusu soketi sahihi kusoma kutoka kwa bandari za UART. Kusoma data ghafi itahitaji sisi kuunda maktaba yetu ya kuchambua, lakini katika hali hii tunaweza kuchukua faida ya daemon ya GPS ambayo hutumika nyuma kusaidia kutumia kuchanganua data na kuipeleka kwa Raspberry Pi

Ili kufanikisha hili tunaweza kufungua kituo kwenye Raspberry Pi na kutekeleza nambari:

Sudo apt-pata sasisho

Sudo apt-get install gpsd gpsd-wateja python-gps

Hii inapaswa kutunza kupakua kwetu.

Mara tu ikikamilika, tunahitaji kulemaza huduma ya mfumo wa gpsd kwa kutekeleza amri zifuatazo:

Sudo systemctl kuacha gpsd.socket

Sudo systemctl afya gpsd.socket

Ikiwa unataka kuwezesha huduma chaguomsingi ya mfumo wa gpsd, unaweza kutekeleza amri zifuatazo kuirejesha:

Sudo systemctl kuwezesha gpsd.socket

Sudo systemctl kuanza gpsd.socket

Sasa tunahitaji kuanza daemon ya gpsd na tuielekeze kwa bandari za UART kwa kuingia

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

Sasa tunaweza kuendesha amri hapa chini na kuona data zote zikielea!

cgps -s

Hatua ya 4: Unganisha Uonyesho kwenye Raspberry Pi

Unganisha Uonyesho kwenye Raspberry Pi
Unganisha Uonyesho kwenye Raspberry Pi
Unganisha Uonyesho kwenye Raspberry Pi
Unganisha Uonyesho kwenye Raspberry Pi

Mara tu tunapokuwa na kipokeaji chetu cha GPS juu na kufanya kazi na Raspberry Pi, tunaweza kuunganisha onyesho kwa Raspberry Pi. Tutatumia waya 5 kuunganisha onyesho letu la LCD kwa Raspberry Pi na pini nyingine 4 kuunganisha nguvu kuu na LED. kwenye skrini.

Nimejumuisha picha ya skrini ya TFT ninayotumia, lakini hii inapaswa kufanya kazi na skrini za saizi sawa na kujenga.

Unganisha LED- na GND chini na unganisha LED + na VCC hadi 3.3V.

Unganisha pini ya RESET kwenye skrini ili kubandika 25 kwenye ubao wa Pi.

Unganisha A0 ili kubandika 24 kwenye ubao wa Pi.

Unganisha pini ya SDA na pini ya MOSI kwenye ubao wa Pi.

Unganisha pini ya SCK kwenye skrini ya LCD na bodi ya Pi.

Unganisha pini ya CS kubandika 8 kwenye ubao wa Pi.

Hatua ya 5: Sanidi Onyesha kufanya kazi na Raspberry Pi

Sanidi Kuonyesha Kufanya Kazi na Raspberry Pi
Sanidi Kuonyesha Kufanya Kazi na Raspberry Pi

Ili kusanidi onyesho tunahitaji kutumia maktaba ya ST7735 inayopatikana katika repo hii:

Maktaba ya Screen ST7735

Mara tu tunapokuwa na maktaba hii ya onyesho iliyosanikishwa kwenye mfumo wetu wa Raspberry Pi, sasa tunaweza kuendelea kuweka faili ya mfano ili kudhibitisha wiring yetu ya zamani inafanya kazi kwa usahihi.

Unda faili iliyoitwa example.py na ingiza maandishi yafuatayo ndani pamoja na mfano wa mfano wa chaguo lako kwenye folda moja

kuagiza ST7735 kama TFTimport Adafruit_GPIO kama GPIO kuagiza Adafruit_GPIO. SPI kama SPI

Upana = 128

Urefu = 160 SPEED_HZ = 4000000

Usanidi wa # Raspberry Pi.

# Hizi ni pini zinazohitajika kuunganisha LCD na Raspberry Pi

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

# Unda darasa la kuonyesha TFT LCD.

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

# Anzisha onyesho.

ongeza () ongeza upya ()

# Pakia picha.

newData = 0x42 disp.command (newData) chapa ('Inapakia picha …') image = Image.open ('cat.jpg')

# Badilisha ukubwa wa picha na ubadilishe ili iwe sawa na onyesho.

picha = picha.protate (270).

# Tutachapisha kwenye kituo ambacho mpango wetu unachora Picha yetu kwenye skrini

chapisha ('Kuchora picha')

# Kazi hii itaonyesha picha yetu kwenye skrini

onyesha (picha)

Faili hii itaweka usanidi wa Raspberry Pi kwa skrini ya LCD na maktaba itabadilisha picha yetu kwenye folda na kuionyesha kwenye skrini.

Hatua ya 6: Weka Mashine za Jimbo ili Kuonyesha Maelezo ya GPS kwenye Onyesho

Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho
Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho
Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho
Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho
Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho
Sanidi Mashine za Jimbo kuonyesha Habari za GPS kwenye Onyesho

Tutatumia mashine 5 tofauti za serikali, wakati tunatekeleza mchoro wetu wa kazi kuanzisha mfumo wetu wa gps.

Onyesha mashine ya hali ya Mabadiliko:

Mashine hii ya serikali itadhibiti ambayo itaonyeshwa kulingana na uingizaji wa kitufe chetu. Inafanya hivyo kwa kubadilisha tofauti ambayo inaruhusu chatu kuchukua fursa ya kuandika bata na kuita kazi sahihi kuonyesha kulingana na kazi inayoitwa

Kasi mashine ya serikali:

Mashine hii ya serikali itafanya kasi ya sasa kulingana na eneo la watu binafsi. Hii itafanya kila mzunguko wa saa kwa mfumo wa GPS

Mashine ya serikali ya pato:

Mashine hii ya serikali itaamua pato kulingana na ubadilishaji ambao mashine ya hali ya mabadiliko huamua kuwa onyesho la sasa.

Mashine ya hali ya umbali

Mashine hii ya serikali hufanya kila mzunguko wa saa na huamua umbali wote uliosafiri na mtumiaji na mara tu kitufe cha kuweka upya kitakaposukuma, kitaweka upya umbali wa sasa uliosafiri.

Mashine ya serikali ya eneo:

Mashine ya serikali inarudisha eneo la sasa la mtumiaji, kwa kutumia kuratibu ambazo moduli ya GPS inarudi juu ya mtumiaji. Mashine hii ya serikali inategemea muunganisho wa wavuti ya watumiaji.

Hatua ya 7: Wacha Tekeleze Mfumo wetu wa GPS

Mara tu tunapokuwa na moduli yetu ya GPS inayotuma habari kwa Raspberry Pi yetu na skrini yetu ya LCD inayoonyesha habari juu yake tunaweza kuanza kupanga mfumo wetu wa GPS. Nitatumia mashine za serikali za hatua ya hapo awali ili kuweka nambari ya mfumo wetu wa GPS

## Faili kuu ya mfumo wa Navigation # # # #

Maktaba za kuchora picha

kutoka PIL kuagiza Picha kutoka PIL kuagiza ImageDraw kutoka PIL kuagiza ImageFont

# Maktaba ya mdhibiti wa ST7737

kuagiza ST7735 kama TFT

# Maktaba ya GPIO ya Raspberry Pi

kuagiza Adafruit_GPIO kama GPIO kuagiza Adafruit_GPIO. SPI kama SPI

# Maktaba ya GPS

#port gpsd kutoka gps3 kuagiza gps3

# Maktaba kwa wakati

muda wa kuagiza

# Maktaba ya kutafuta umbali kati ya alama mbili

kutoka kwa hesabu kuagiza sin, cos, sqrt, atan2, radians

# Ingiza maktaba ya Rpi kutumia vitufe kubadili menyu na kuweka upya

# kuagiza RPi. GPIO kama bGPIO

Pini za usanidi wa vifungo

bGPIO.setmode (bGPIO. BCM)

usanidi wa bGPIO (18, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)

usanidi wa bGPIO (23, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)

# kuagiza maktaba ya jiografia ya Geocoding

# # Ufikiaji wa mtandao ni muhimu ili hii ifanye kazi

kutoka kwa geopy.geocoders kuagiza Nominatim

geolocator = Nominatim ()

# Mara kwa mara kwa mfumo

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

Upana = 128

Urefu = 160 SPEED_HZ = 4000000

Pini za usanidi wa Raspberry Pi

DC = 24 # A0 kwenye skrini ya TFT RST = 25 # Rudisha pini kwenye skrini ya TFT SPI_PORT = 0 # bandari ya SPI kwenye pi ya rasiberi, SPI0 SPI_DEVICE = 0 # Mtumwa chagua kwenye rapsberry pi, CE0

# Unda kitu cha kuonyesha TFT LCD

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

# Anzisha onyesho

onza ()

# Usuli utawekwa kijani

# wazi.. ((0, 255, 0))

# Futa skrini kuwa nyeupe na uonyeshe

# wazi. (255, 255, 255)) chora = dis.draw () # sare. mstatili ((0, 10, 127, 150), muhtasari = (255, 0, 0), kujaza = (0, 0, 255)] # onyesho ()

# Kasi, Latitudo, anuwai za uwekaji wa Longitude

#currentS = "Kasi ya Sasa"

# Umbali x na y kuratibu

distX = 10 distY = 20

Orodha ya pointi =

# Uratibu wa x na y

kasiX = 10 kasiY = 20

# Mahali x na y coordiantes

locX = 10 locY = 20

# Hugeuza kutoka m / s hadi mph

uongofuVal = 2.24

# Kazi ya kusasisha kasi, inarudisha kamba

SpeedVar = 0

def speedFunc (): SpeedVar SpeedText = data_stream. TPV ['speed'] ikiwa (SpeedText! = "n / a"): SpeedText = kuelea (SpeedText) * kubadilishaVal SpeedVar = pande zote (SpeedText, 1) # kurudi (SpeedText)

eneo waziFunc ():

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

reverseString = latLoc + "," + lonLoc

eneo = geolocator.reverse (reverseString)

kurudi (anwani. anwani)

Kazi ya kusasisha Latitudo, inarudisha thamani ya kuelea

def latFunc (): Latitude = data_stream. TPV ['lat'] ikiwa (Latitude == "n / a"): kurudi 0 mwingine: kurudi kuelea (pande zote (Latitudo, 4))

# Kazi ya kusasisha Longitude, inarudisha kamba

def lonFunc (): Longitude = data_stream. TPV ['lon'] ikiwa (Longitude == "n / a"): kurudi 0 mwingine: kurudi kuelea (pande zote (Longitude, 4))

Kazi ya umbali hurudisha umbali TOTAL uliosafiri

JumlaDistance = 0

def distFunc ():

global totalDistance newLat = latFunc () newLon = lonFunc () ikiwa (newLat == 0 au newLon == 0): -1 ikiwa (mwisho == 0): kurudi mwingine: jumlaDistance + = coorDistance (alamaList [mwisho-1], alamaList [mwisho]) # kurudi jumlaUsaidizi

# Inasasisha umbali kamili

def Resistance ():

jumla ya jumlaDistance totalDistance = 0

Kazi iliyotumika kupata umbali kati ya kuratibu mbili

# hutumia fomula ya Haversine kupata. Sehemu za kuingiza ni Tuple

def coorDistance (point1, point2):

# Radius ya karibu ya Dunia katika kilomita dunianiRadius = 6373.0

lat1 = kumweka1 [0]

lon1 = kumweka1 [1]

lat2 = kumweka2 [0]

lon2 = kumweka2 [1]

umbaliLon = lon22 - upweke1

umbaliLat = lat2 - lat1

# Mkombozi a

dhambi = (umbaliLat / 2) ** 2 + cos (lat1) * cos (lat2) * dhambi (umbaliLon / 2) ** 2

# Haversine c

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

# Badilisha km hadi Maili

umbali = (earthRadius * c) * 0.62137

ikiwa (umbali <= 0.01): rudisha 0.00 nyingine: kurudi pande zote (umbali, 3)

# Kazi ya kuonyesha kasi kwenye skrini

def dispSpeed ():

SpeedVar ya kimataifa # Weka umbali juu ya kutofautisha kwenye sare ya skrini. maandishi ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))

# Kazi kuonyesha umbali kwenye skrini

def DisDistance ():

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

# Kazi ya kuonyesha eneo kwenye skrini, inahitaji mtandao kufanya kazi

defLocation ():

chora maandishi ((locX, locY), eneoFunc (), font = ImageFont.truetype ("Lato-Medium.ttf", 8))

# Kutumia kamusi kuiga taarifa za ubadilishaji

chaguzi = {

0: dispSpeed, 1: disDistance, 2: dispocation}

Kazi ya pato la Screen

pato la def ():

# Kutumia ubadilishaji wa ulimwengu kwa onyeshoIndex onyesho la kimataifaIndex # Kusafisha skrini na kutumia usuli wazi. (255, 255, 255)) chora. jaza = (255, 0, 0))

Kazi # za simu kulingana na onyesho la Thamani ya Kielelezo

chaguzi [onyeshaIndex] ()

# Itafuta ikiwa njia nyingine inafanya kazi

Mahali # ya kutofautisha umbali kwenye skrini

# chora. maandishi ((distX, distY), str (distFunc ()), font = ImageFont..pakia_default ()) # Onyesha visasisho kwenye skrini dis.display ()

kuonyeshaButton = 18 # BCM Pin kwenye rasiberi pi

resetButton = 23 # BCM Bandika kwenye rasiberi pi

buttonPress = Uongo

def checkDisplay ():

kitufe cha kimataifa Bonyeza onyesho la kimataifaIndex ikiwa (bGPIO.input (displayButton) na sio buttonPress): displayIndex + = 1 buttonPress = True ikiwa (displayIndex == 2): Bado imeshinikizwa ) mwingine: buttonPress = Uongo

# Kuweka gps

gps_socket = gps3.

Kipima muda =.5

Thamani ya kielelezo cha onyesho la kuonyeshaIndex = 0 jaribu: kwa data mpya katika gps_socket: ikiwa new_data: data_stream.unpack (new_data) ikiwa data_stream. TPV ['lat']! = 'N / a': chapisha (data_stream. TPV ['speed'], data_stream. TPV ['lat'], data_stream. checkDisplay () ikiwa (bGPIO.input (resetButton)): resDistance () chapisha ('GPS haijaunganishwa bado') wakati. lala (.1) wakati. lala (.8) isipokuwa KeyboardInterrupt: gps_socket.close () chapa (' / nImehitimishwa na mtumiaji ctrl + c ')

Nambari iliyo hapo juu ni mfano mmoja tu wa jinsi ya kuweka alama kwenye mfumo wetu na nimeingiza video juu ya jinsi mfumo huu unavyofanya kazi.

Ilipendekeza: