Мазмұны:

GPS жүйесі: 7 қадам
GPS жүйесі: 7 қадам

Бейне: GPS жүйесі: 7 қадам

Бейне: GPS жүйесі: 7 қадам
Бейне: Урок 8 Gps трекинг 2024, Қазан
Anonim
GPS жүйесі
GPS жүйесі
GPS жүйесі
GPS жүйесі
GPS жүйесі
GPS жүйесі

Жоба авторы: Карлос Гомес

Саяхаттауға және әлемді зерттеуге тырысатын кез келген адам үшін сенімді навигациялық жүйенің болуы маңызды.

Навигациялық жүйенің жұмыс істеуіне мүмкіндік беретін ең маңызды аспект - бұл жүйенің ішіне ендірілген GPS мүмкіндігі. GPS жүйесі кез келген адамға өзінің орналасқан жері мен жылдамдығын қадағалауға мүмкіндік береді, бұл туралы пайдаланушы туралы нақты ақпаратты көрсетеді және пайдаланушыға олардың қай жерде және олардың орналасқан жерінен қаншалықты алыс екендігі туралы нақты мәлімет береді.

Жаһандық позициялау жүйесі (GPS) - шамамен 20 000 км биіктікте Жерді айналатын спутниктер желісі. GPS құрылғысы бар кез келген адам спутниктер тарататын радио сигналдарды қабылдай алады және оларды қажет болған жағдайда қолдана алады. Сіздің планетада қай жерде болсаңыз да, кез келген уақытта сізге кем дегенде төрт GPS қол жетімді болуы керек. Үш өлшемді трилатерация деп аталатын әдісті қолдана отырып, GPS құрылғысы құрылғының Жердегі орнын анықтау үшін үш спутникті қолдана алады. Үш спутниктің әрқайсысы құрылғыға сигнал жібереді және құрылғы оның спутниктен қашықтығын анықтайды. Үш қашықтықты есептеулердің әрқайсысын қолдана отырып, құрылғы Жердегі орнын анықтай алады және оны пайдаланушыға қайтарады.

Біз жасайтын GPS жүйесі пайдаланушының жылдамдығын, орналасқан жерін және жүріп өткен қашықтықты қайтару үшін пайдаланушының Жердегі координаттарын алу және кейбір есептеулер жүргізу арқылы пайдаланушының орналасқан жерін бақылай алады.

1 -қадам: Жұмысты бастау

Бастау
Бастау
Бастау
Бастау
Бастау
Бастау
Бастау
Бастау

Бұл жобаны бастау үшін біз алдымен барлық қажетті материалдарды жинауымыз керек

1: Raspberry Pi Zero W

2: GPS қабылдағышы

3: 1,8 TFT 128 x 160 СКД экраны

4: ~ 11 сымдар

5: 2 түймелері

6: 2x 1k және 2x 10k резисторлары төмен түсіру түймелері үшін

7: Нан тақтасы

Бұл жоба Raspberry Pi GPIO түйреуіштерін қолданады, сондықтан біз өз жобамызды дамыту үшін бәрін нан тақтасымен байланыстыруымыз қажет. Сондай -ақ, барлық түйреуіштерді дәнекерлеу барлық бөлшектерді жылжытпастан және қосудан бұрын орындалады және аяқталады деп есептеледі.

2 -қадам: GPS модулін Raspberry Pi -ге қосыңыз

GPS модулін Raspberry Pi -ге қосыңыз
GPS модулін Raspberry Pi -ге қосыңыз
GPS модулін Raspberry Pi -ге қосыңыз
GPS модулін Raspberry Pi -ге қосыңыз

Біздің GPS жүйесін пайдалану үшін GPS модулінен Tx және Rx түйреуіштерін Raspberry Pi -дегі GPIO PIN 14 пен 15 -ке жалғау қажет болады. GPS қабылдағышының Tx түйрегіші Pi -дің Rx түйреуішіне, ал GPS -қабылдағыштың Rx түйрегіші Raspberry pi -дің Tx түйреуішіне өтеді.

Кескіндерде көрсетілген GPS қабылдағышы 3.3В кернеуді қажет етеді, ал сіз 3.3В түйреуіштерді кернеуге дұрыс қосуға болады, ал жерге тұйықтауышты жерге қосасыз.

3 -қадам: GPS қабылдағыш модулінен деректерді алу

GPS қабылдағыш модулінен деректерді алу
GPS қабылдағыш модулінен деректерді алу

GPS қабылдағыштан Raspberry Pi -ге деректерді алу үшін бізге UART порттарынан дұрыс розеткаларды оқуға рұқсат беру қажет. Шикі деректерді оқу бізден жеке талдау кітапханасын құруды талап етеді, бірақ бұл жағдайда біз деректерді талдауға және оны Raspberry Pi -ге жіберуге көмектесу үшін фонда жұмыс істейтін GPS демонын пайдалана аламыз.

Мұны істеу үшін біз Raspberry Pi терминалын ашып, кодты орындай аламыз:

sudo apt-get жаңартуы

sudo apt-get gpsd gpsd-client python-gps орнатыңыз

Бұл біз үшін жүктеу туралы қамқорлық жасауы керек.

Ол аяқталғаннан кейін біз келесі командаларды орындау арқылы gpsd жүйесінің қызметін өшіруіміз керек:

sudo systemctl stop gpsd.socket

sudo systemctl gpsd.socket өшіреді

Егер сіз әдепкі gpsd жүйелік қызметін қосқыңыз келсе, оны қалпына келтіру үшін келесі пәрмендерді орындауға болады:

sudo systemctl gpsd.socket қосады

sudo systemctl gpsd.socket іске қосыңыз

Енді біз gpsd демонын іске қосып, оны енгізу арқылы UART порттарына бағыттауымыз керек

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

Енді біз төмендегі пәрменді іске қосамыз және барлық деректерді көре аламыз!

cgps -s

4 -қадам: Дисплейді Raspberry Pi -ге қосыңыз

Дисплейді Raspberry Pi -ге қосыңыз
Дисплейді Raspberry Pi -ге қосыңыз
Дисплейді Raspberry Pi -ге қосыңыз
Дисплейді Raspberry Pi -ге қосыңыз

Біз GPS қабылдағышты орнатып, Raspberry Pi -мен жұмыс жасасақ, дисплейді Raspberry Pi -ге қосамыз, біз LCD дисплейді Raspberry Pi -ге қосу үшін 5 сымды, ал негізгі қуат пен жарықдиодты қосу үшін тағы 4 түйреуішті қолданамыз. экранда.

Мен қолданатын TFT экранының фотосуретін қостым, бірақ бұл өлшемі мен құрылымы ұқсас экрандармен жұмыс істеуі керек.

Жарықдиодты- және GND-ді жерге қосыңыз, светодиод+ мен вк-ды 3,3В-ке қосыңыз.

Экрандағы RESET түйреуішін Pi тақтасындағы 25 түйреуішке жалғаңыз.

Pi тақтасындағы 24 түйреуішке A0 қосыңыз.

SDA түйреуішін Pi тақтасындағы MOSI түйреуішіне қосыңыз.

СКД экранындағы SCK түйреуішін Pi тақтасына қосыңыз.

CS тақтасын Pi тақтасындағы 8 түйреуішке қосыңыз.

5 -қадам: Raspberry Pi -мен жұмыс істеу үшін дисплейді орнатыңыз

Raspberry Pi -мен жұмыс істеу үшін дисплейді орнатыңыз
Raspberry Pi -мен жұмыс істеу үшін дисплейді орнатыңыз

Дисплейді реттеу үшін бізге осы репода табылған ST7735 кітапханасын пайдалану қажет:

Python ST7735 экрандық кітапханасы

Бізде Raspberry Pi жүйесінде осы дисплей кітапханасы орнатылғаннан кейін, біз алдыңғы сымның дұрыс жұмыс істеуін растайтын мысал файлын орнатуға кірісе аламыз.

Example.py деп аталатын файл жасаңыз және келесі мәтінді сол қалтаға өзіңіз таңдаған суреттің үлгісімен бірге енгізіңіз.

ST7735 импорттау TFTimport Adafruit_GPIO ретінде GPIO ретінде импорттау Adafruit_GPIO. SPI ретінде SPI ретінде

Ені = 128

Биіктігі = 160 SPEED_HZ = 4000000

# Raspberry Pi конфигурациясы.

# Бұл СКД -ны Raspberry Pi -ге қосу үшін қажет түйреуіштер

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

# TFT LCD дисплей класын жасаңыз.

disp = TFT. ST7735 (DC, бірінші = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))

# Дисплейді инициализациялау.

disp.begin () disp.reset ()

# Суретті жүктеңіз.

newData = 0x42 disp.command (newData) басып шығару ('Кескін жүктелуде…') сурет = Image.open ('cat.jpg')

# Кескіннің өлшемін өзгерту және оны бұру дисплейге сәйкес келеді.

image = image.rotate (270). resize ((ені, биіктігі))

# Біздің бағдарлама экранда біздің суретімізді салатын терминалға басып шығарады

басып шығару ('Сурет салу')

# Бұл функция экранда біздің суретті көрсетеді

disp.display (сурет)

Бұл файл СКД экраны үшін Raspberry Pi конфигурациясын орнатады және кітапхана біздің кескінді қалтаға түрлендіреді және оны экранда көрсетеді.

6 -қадам: GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнату

GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз
GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз
GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз
GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз
GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз
GPS ақпаратын дисплейде көрсету үшін күй машиналарын орнатыңыз

Біз gps жүйесін орнату үшін тапсырмалар диаграммасын іске асыра отырып, 5 түрлі мемлекеттік машинаны қолданамыз.

Дисплей күйінің машинасын өзгерту:

Бұл күй машинасы біздің түйме енгізуімізге байланысты нені көрсету керектігін басқарады. Бұл мұны python -ға үйрек терудің артықшылығын пайдалануға мүмкіндік беретін айнымалы мәнді өзгерту арқылы және шақырылған функцияға байланысты дұрыс функцияны көрсету арқылы жасайды.

Жылдамдық күй машинасы:

Бұл мемлекеттік машина жеке орналасқан жеріне байланысты ағымдағы жылдамдықты орындайды. Бұл GPS жүйесінің әрбір сағаттық циклін орындайды

Шығу күйінің машинасы:

Бұл күй машинасы шығуды дисплейдің өзгеру күйінің машинасы ағымдағы дисплей деп анықтайтын айнымалының негізінде анықтайды.

Қашықтық күй машинасы

Бұл күй машинасы әр сағаттық циклды орындайды және пайдаланушының жүріп өткен жолын анықтайды, ал қалпына келтіру түймесі басылғаннан кейін ағымдағы жүріп өткен қашықтықты қалпына келтіреді.

Орналасқан күй машинасы:

Бұл күй машинасы GPS модулі пайдаланушы туралы қайтаратын координаттарды қолдана отырып, пайдаланушының ағымдағы орнын қайтарады. Бұл мемлекеттік машина пайдаланушылардың интернетке қосылуына байланысты.

7 -қадам: GPS жүйесін енгізуге рұқсат етіңіз

Бізде Raspberry Pi -ге ақпарат жіберетін GPS модулі мен оған ақпаратты көрсететін СКД экраны болғаннан кейін біз GPS жүйесін бағдарламалауды бастай аламыз. GPS жүйесін кодтау үшін мен алдыңғы қадамның соңғы машиналарын қолданамын

## Навигациялық жүйенің негізгі файлы # # # #

# Суреттер салуға арналған кітапханалар

PIL импорттауынан PIL импорттауынан ImageDraw PIL импорттау ImageFont

ST7737 контроллеріне арналған # кітапхана

ST7735 TFT ретінде импорттаңыз

Raspberry Pi үшін GPIO үшін # кітапхана

Adafruit_GPIO -ны GPIO ретінде импорттау Adafruit_GPIO. SPI -ді SPI ретінде импорттау

# GPS үшін кітапхана

gps3 импорттау gps3 импорттау

# Уақытша кітапхана

импорт уақыты

# Екі нүкте арасындағы қашықтықты табуға арналған кітапхана

математикадан импорт sin, cos, sqrt, atan2, radians

# Мәзірлерді ауыстыру және қалпына келтіру түймелерін пайдалану үшін Rpi кітапханасын импорттаңыз

# импорт RPi. GPIO bGPIO ретінде

# Түймешіктерге түйреуіштерді орнатыңыз

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)

# геокодтауға арналған geopy кітапханасын импорттау

# # Интернетке кіру бұл жұмыс істеуі үшін қажет

geopy.geocoders -тен Nominatim импортталады

геолокатор = Номинатим ()

# Жүйеге арналған тұрақтылар

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

Ені = 128

Биіктігі = 160 SPEED_HZ = 4000000

# Raspberry Pi конфигурациясы

TFT экранындағы DC = 24 # A0 RST = 25 # TFT экранындағы түйреуішті қалпына келтіру SPI_PORT = 0 # таңқурайдағы SPI порты, SPI0 SPI_DEVICE = 0 # Rapsberry pi -де құлды таңдау, CE0

# LCD дисплейінің TFT нысанын жасаңыз

disp = TFT. ST7735 (DC, бірінші = RST, spi = SPI. SpiDev (SPI_PORT, SPI_DEVICE, max_speed_hz = SPEED_HZ))

# Дисплейді инициализациялау

disp.begin ()

# Фон жасылға орнатылады

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

# Экранды ақ түске дейін тазартыңыз және көрсетіңіз

#disp.clear ((255, 255, 255)) draw = disp.draw () #draw.tectangle ((0, 10, 127, 150), құрылым = (255, 0, 0), толтыру = (0, 0, 255)) #disp.display ()

# Жылдамдық, ендік, бойлық орналастыру айнымалылары

#currentS = «Ағымдағы жылдамдық:» # Жылдамдық жолы #totalDis = «Жалпы қашықтық:» # Қашықтық жолы #currentLoc = «Ағымдағы орын:» # Орын жолы

# X және y арақашықтығы

distX = 10 distY = 20

pointsList =

# X және y жылдамдықтарының координаттары

жылдамдықX = 10 жылдамдықY = 20

# X және y коордианталарының орналасуы

locX = 10 locY = 20

# М/с -тен миль/сағатқа түрлендіреді

convertVal = 2.24

# Жылдамдықты жаңарту функциясы, жолды қайтарады

SpeedVar = 0

def speedFunc (): жаһандық SpeedVar 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

орналасу = геолокатор.қайтару (reverseString)

қайтару (орналасқан жері. мекен -жайы)

# Latitude жаңарту функциясы, өзгермелі мәнді қайтарады

def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == «n/a»): 0 қайтару басқа: float қайтару (дөңгелек (Latitude, 4))

# Бойлық жаңарту функциясы жолды қайтарады

def lonFunc (): Longitude = data_stream. TPV ['lon'] if (Longitude == «n/a»): 0 қайтару басқа: float қайтару (дөңгелек (Longitude, 4))

# Distance функциясы TOTAL жүріп өткен қашықтықты қайтарады

totalDistance = 0

def distFunc ():

жаһандық totalDistance newLat = latFunc () newLon = lonFunc () if (newLat == 0 немесе 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

# Жалпы қашықтықты қалпына келтіреді

def resDistance ():

жаһандық жиынтықDistance totalDistance = 0

# Екі координатаның арасындағы қашықтықты табуға арналған функция

# табу үшін Гаверсин формуласын қолданады. # Енгізу нүктелері - жинақ

def coorDistance (нүкте1, нүкте2):

# Жердің шамамен радиусы жердегі километрмен Радиус = 6373.0

лат1 = нүкте1 [0]

lon1 = нүкте1 [1]

lat2 = нүкте2 [0]

lon2 = нүкте2 [1]

қашықтықLon = lon2 - lon1

қашықтықLat = лат2 - лат1

# Гаверсин а

a = sin (қашықтықLat/2) ** 2 + cos (lat1)*cos (лат2)*sin (қашықтықLon/2) ** 2

# Гаверсин c

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

# Км -ді мильге түрлендіру

қашықтық = (жер радиусы * с) * 0,62137

if (арақашықтық <= 0,01): қайтару 0,00 басқа: қайту айналымы (қашықтық, 3)

# Экранда жылдамдықты көрсету функциясы

def dispSpeed ():

жаһандық SpeedVar # Арақашықтықты экрандағы draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype («Lato-Medium.ttf», 72)) айнымалыға қойыңыз.

# Экранда қашықтықты көрсету функциясы

def dispDistance ():

draw.text ((distX, distY), str (totalDistance), қаріп = ImageFont.truetype («Lato-Medium.ttf», 60))

# Функциясы экранда орналасуын көрсетеді, жұмыс істеу үшін интернетті қажет етеді

def dispLocation ():

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

# Коммутатор мәлімдемелерін қайталау үшін сөздікті қолдану

dispOptions = {

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

# Экран шығару функциясы

def шығысы ():

# DisplayIndex үшін global айнымалы мәнді пайдалануIndex # Экранды тазарту және disp.clear фонды қолдану ((255, 255, 255)) draw.rectangle ((0, 10, 127, 150), құрылым = (255, 0, 0), толтыру = (255, 0, 0))

# DisplayIndex мәніне байланысты қоңыраулар функциясы

dispOptions [displayIndex] ()

# Басқа әдіс жұмыс істесе өшіріледі

# ара қашықтық айнымалысы экранда

#draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) #экранда жылдамдық айнымалысын орналастыру #draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Screen disp.display () жаңартуларын көрсету

displayButton = 18 # BCM Таңқурай pi түйреуіші

resetButton = 23 # BCM Таңқурай пи бойынша түйреу

түймесін басыңыз = жалған

def checkDisplay ():

жаһандық түйме global displayIndex егер (bGPIO.input (displayButton) емес, түймесін басыңыз): displayIndex += 1 түймешігін басыңыз = True болса (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) және түймесін басыңыз): басып шығару (« Әлі де басылды «) басқа: buttonPress = False

# GPS орнату

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

timerPeriod =.5

DisplayIndex = 0 көрсетуге арналған индекс мәні: gps_socket ішіндегі new_data үшін: егер new_data: data_stream.unpack (new_data) егер data_stream. TPV ['lat']! = 'N/a': басып шығару (data_stream. TPV ['жылдамдық' ')], 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 () басып шығару ('GPS әлі қосылмаған') уақыт. / nҚолданушымен анықталды ctrl+c ')

Жоғарыдағы код - бұл біздің жүйені қалай кодтауға болатыны туралы бір ғана мысал, мен бұл жүйенің қалай жұмыс істейтіні туралы бейнені енгіздім.

Ұсынылған: