Mündəricat:

GPS sistemi: 7 addım
GPS sistemi: 7 addım

Video: GPS sistemi: 7 addım

Video: GPS sistemi: 7 addım
Video: GPS трекер SmartGPS GF 07 видеоинструкция 2024, Oktyabr
Anonim
GPS sistemi
GPS sistemi
GPS sistemi
GPS sistemi
GPS sistemi
GPS sistemi

Layihənin yaradıcısı: Carlos Gomez

Gəzmək və dünyanı kəşf etmək istəyən hər kəs üçün etibarlı bir naviqasiya sisteminə sahib olmaq hər şeydən önəmlidir.

Naviqasiya sisteminin işləməsinə imkan verən ən vacib cəhət sistemin içərisinə yerləşdirilmiş GPS qabiliyyətidir. GPS sistemi hər kəsə istifadəçi haqqında dəqiq məlumatları göstərmək və istifadəçiyə harada olduqlarını və yerləşdikləri yerdən nə qədər uzaq olduqlarını dəqiq bir şəkildə göstərmək üçün yerlərini və sürətlərini izləməyə imkan verir.

Qlobal Konumlandırma Sistemi (GPS), təxminən 20.000 km yüksəklikdə Yer ətrafında fırlanan bir peyklər şəbəkəsidir. GPS cihazı olan hər kəs, peyklərin yayımladığı radio siqnallarını qəbul edə bilər və lazım olduğu şəkildə istifadə edə bilir. Planetinizdə harada olmağınızdan asılı olmayaraq ən azı dörd GPS istənilən vaxt əlinizdə olmalıdır. Üçölçülü trilaterasiya adlanan bir metoddan istifadə edərək, GPS cihazı cihazın Yerdəki yerini təyin etmək üçün üç peykdən istifadə edə bilir. Üç peykin hər biri cihaza bir siqnal göndərir və cihaz onun peykdən uzaqlığını təyin edir. Üç məsafə hesablamasının hər birini istifadə edərək, cihaz Yerdəki yerini dəqiq müəyyən edə bilir və istifadəçiyə qaytarır.

Yaratacağımız GPS sistemi, istifadəçinin Yerdəki koordinatlarını əldə edərək və istifadəçinin sürətini, yerini və keçdiyi məsafəni geri qaytarmaq üçün bəzi hesablamalar apararaq istifadəçinin yerlərini izləyə biləcək.

Addım 1: Başlayın

Başlanğıc
Başlanğıc
Başlanğıc
Başlanğıc
Başlanğıc
Başlanğıc
Başlanğıc
Başlanğıc

Bu layihəyə başlamaq üçün əvvəlcə bütün lazımi materialları toplamalıyıq

1: Raspberry Pi Zero W

2: GPS qəbuledicisi

3: 1.8 TFT 128 x 160 LCD SPI Ekranı

4: ~ 11 tel

5: 2 düymələri

Düymələri aşağı çəkmək üçün 6: 2x 1k və 2x 10k rezistorlar

7: Çörək lövhəsi

Bu layihə Raspberry Pi -nin GPIO pinlərindən istifadə edəcək və buna görə də layihəmizi inkişaf etdirmək üçün hər şeyi bir çörək taxtası ilə birləşdirməliyik. Bütün hissələr üzərində hərəkət etmədən və birləşdirmədən əvvəl bütün sancaqlar üzərində lehimləmə işlərinin aparıldığı və bitdiyi güman edilir.

Addım 2: GPS Modulunu Raspberry Pi -yə qoşun

GPS Modulunu Raspberry Pi -yə qoşun
GPS Modulunu Raspberry Pi -yə qoşun
GPS Modulunu Raspberry Pi -yə qoşun
GPS Modulunu Raspberry Pi -yə qoşun

GPS sistemimizdən istifadə etmək üçün GPS modulundan Tx və Rx pinlərini Raspberry Pi üzərindəki GPIO pin 14 və 15 -ə bağlamalısınız. GPS qəbuledicisinin Tx pimi Pi -nin Rx pininə və GPS qəbuledicisinin Rx pimi Raspberry pi -nin Tx pininə gedir.

Şəkillərdə göstərilən GPS qəbuledicisi 3.3V istifadə edilməsini tələb edir və 3.3V sancaqlarını düzgün bir gərginliyə bağlaya bilərsiniz.

Addım 3: GPS Alıcı Modulundan Məlumat Alın

GPS Alıcı Modulundan Məlumat Alın
GPS Alıcı Modulundan Məlumat Alın

GPS qəbuledicisindən Raspberry Pi -yə məlumat almaq üçün düzgün yuvaların UART limanlarından oxumasına icazə verməliyik. Xam məlumatları oxumaq üçün öz təhlil kitabxanamızı yaratmalıyıq, ancaq bu ssenaridə, məlumatların təhlil edilməsinə və Raspberry Pi -yə ötürülməsinə kömək etmək üçün arxa planda çalışan bir GPS daemonundan istifadə edə bilərik.

Bunu etmək üçün Raspberry Pi -də bir terminal aça və kodu icra edə bilərik:

sudo apt-get yeniləməsi

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

Bu, bizim üçün yükləmənin qayğısına qalmalıdır.

Tamamlandıqdan sonra, aşağıdakı əmrləri yerinə yetirərək gpsd sistem xidmətini deaktiv etməliyik:

sudo systemctl gpsd.socket dayandırın

sudo systemctl gpsd.socket -i deaktiv edin

Varsayılan gpsd sistem xidmətini aktivləşdirmək istəyirsinizsə, onu bərpa etmək üçün aşağıdakı əmrləri işlədə bilərsiniz:

sudo systemctl gpsd.socket imkan verir

sudo systemctl gpsd.socket işə salın

İndi gpsd demonunu işə salmalı və daxil olaraq UART portlarına yönəltməliyik

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

İndi aşağıdakı əmri işlədə bilərik və daxil olan bütün məlumatları görə bilərik!

cgps -s

Addım 4: Ekranı Raspberry Pi -yə qoşun

Ekranı Raspberry Pi -yə qoşun
Ekranı Raspberry Pi -yə qoşun
Ekranı Raspberry Pi -yə qoşun
Ekranı Raspberry Pi -yə qoşun

GPS qəbuledicimizi hazırladıqdan və Raspberry Pi ilə işlədikdən sonra ekranı Raspberry Pi -yə bağlaya bilərik. LCD displeyimizi Raspberry Pi -yə bağlamaq üçün 5 teldən istifadə edəcəyik və əsas gücü və LED -i bağlamaq üçün başqa 4 pindən istifadə edəcəyik. ekranda.

İstifadə etdiyim TFT ekranının bir fotoşəkilini daxil etdim, amma bu oxşar ölçüdə və quruluşlu ekranlarla işləməlidir.

LED və GND-ni yerə bağlayın və LED+ və VCC-ni 3.3V-ə qoşun.

Pi lövhəsindəki 25 pin üçün ekrandakı RESET pinini bağlayın.

A0 -nu Pi lövhəsindəki 24 pininə bağlayın.

SDA pinini Pi lövhəsindəki MOSI pininə qoşun.

LCD ekrandakı SCK pinini Pi lövhəsinə qoşun.

CS pinini Pi lövhəsindəki 8 pininə qoşun.

Addım 5: Raspberry Pi ilə işləmək üçün Ekranı qurun

Raspberry Pi ilə İşləmək üçün Ekranı Qurun
Raspberry Pi ilə İşləmək üçün Ekranı Qurun

Ekranı qurmaq üçün bu depoda olan ST7735 kitabxanasından istifadə etməliyik:

Python ST7735 Ekran Kitabxanası

Bu ekran kitabxanasını Raspberry Pi sistemimizə quraşdırdıqdan sonra, əvvəlki kabellərimizin düzgün işlədiyini təsdiqləmək üçün nümunə fayl qurmağa davam edə bilərik.

Example.py adlı bir fayl yaradın və eyni mətnə seçdiyiniz nümunə şəkli ilə birlikdə aşağıdakı mətni daxil edin

ST7735, TFTimport Adafruit_GPIO olaraq GPIO olaraq idxal Adafruit_GPIO. SPI olaraq SPI olaraq

Eni = 128

Hündürlük = 160 SPEED_HZ = 4000000

# Raspberry Pi konfiqurasiyası.

# Bunlar LCD -ni Raspberry Pi -yə bağlamaq üçün lazım olan sancaqlardır

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

# TFT LCD ekran sinfi yaradın.

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

# Ekranı işə salın.

disp.begin () disp.reset ()

# Şəkil yükləyin.

newData = 0x42 disp.command (newData) çap ('Şəkil yüklənir…') image = Image.open ('cat.jpg')

# Görüntünün ölçüsünü dəyişdirin və ekrana uyğun olaraq döndərin.

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

# Proqramımızın Şəklimizi ekranda çəkdiyi terminala çap edəcək

çap et ('Şəkil çəkmək')

# Bu funksiya görüntümüzü ekranda göstərəcək

disp.display (şəkil)

Bu fayl, LCD ekran üçün Raspberry Pi konfiqurasiyasını quracaq və kitabxana imicimizi qovluqda çevirərək ekranda göstərəcək.

Addım 6: Ekranda GPS məlumatlarını göstərmək üçün Dövlət Maşını qurun

GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun
GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun
GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun
GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun
GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun
GPS məlumatlarını ekranda göstərmək üçün dövlət maşınlarını qurun

GPS sistemimizi qurmaq üçün tapşırıq diaqramımızı həyata keçirərkən 5 fərqli dövlət maşınından istifadə edəcəyik.

Vəziyyəti dəyişdirmə maşını göstərin:

Bu dövlət maşını, düymə girişimizdən asılı olaraq nəyin göstəriləcəyini idarə edəcək. Bunu, pythonun ördək yazmasından istifadə etməsinə və çağırılan funksiyadan asılı olaraq düzgün funksiyanı göstərməsinə imkan verən bir dəyişəni dəyişdirərək edir.

Sürət vəziyyəti maşını:

Bu dövlət maşını, fərdlərin yerindən asılı olaraq cari sürəti icra edəcək. Bu, GPS sistemi üçün hər saat dövrünü yerinə yetirəcəkdir

Çıxış vəziyyəti maşını:

Bu vəziyyət maşını, çıxış dəyişikliyi vəziyyəti maşınının cari ekran olaraq təyin etdiyi dəyişənə əsaslanaraq çıxışı təyin edəcək.

Məsafə vəziyyəti maşını

Bu dövlət maşını hər bir saat dövrünü yerinə yetirir və istifadəçinin getdiyi ümumi məsafəni təyin edir və sıfırlama düyməsinə basıldıqda, gedilən cari məsafəni sıfırlayacaq.

Yer dövlət maşını:

Bu dövlət maşını, GPS modulunun istifadəçi haqqında qaytardığı koordinatları istifadə edərək istifadəçinin cari yerini qaytarır. Bu dövlət maşını istifadəçilərin internet bağlantısından asılıdır.

Addım 7: GPS sistemimizi tətbiq edək

GPS modulumuz Raspberry Pi -yə məlumat göndərdikdən və bu barədə məlumat göstərən LCD ekrandan sonra GPS sistemimizi proqramlaşdırmağa başlaya bilərik. GPS sistemimizi kodlaşdırmaq üçün əvvəlki addımın sonlu vəziyyət maşınlarından istifadə edəcəyəm

## Naviqasiya sistemi üçün əsas fayl # # # #

# Şəkillər çəkmək üçün kitabxanalar

PIL idxalından PIL idxalından ImageDraw PIL idxal ImageFontdan

# ST7737 nəzarətçi üçün kitabxana

ST7735 -i TFT olaraq idxal edin

Raspberry Pi üçün GPIO üçün # Kitabxana

Adafruit_GPIO -nu GPIO olaraq idxal edin Adafruit_GPIO. SPI -ni SPI olaraq idxal edin

GPS üçün # Kitabxana

gps3 -dən gpsd -i idxal edin

Vaxt üçün # kitabxana

idxal vaxtı

# İki nöqtə arasındakı məsafəni tapmaq üçün kitabxana

riyaziyyatdan idxal günah, cos, sqrt, atan2, radian

Menyuları dəyişdirmək və sıfırlamaq üçün düymələrdən istifadə etmək üçün # Rpi kitabxanasını idxal edin

# RPi. GPIO -nu bGPIO olaraq idxal edin

# Düymələr üçün sancaqlar qurun

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)

# Geocoding üçün idxal geopy kitabxanası

Bunun işləməsi üçün # # İnternet bağlantısı lazımdır

geopy.geocoders idxal Nominatim

geolokator = Nominatim ()

# Sistem üçün sabitlər

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

Eni = 128

Hündürlük = 160 SPEED_HZ = 4000000

# Raspberry Pi konfiqurasiya sancaqları

TFT ekranında DC = 24 # A0 RST = 25 # TFT ekranında pin sıfırlayın SPI_PORT = 0 # moruq pi üzərində SPI portu, SPI0 SPI_DEVICE = 0 # Rapsberry pi -də qul seçimi, CE0

# TFT LCD ekran obyekti yaradın

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

# Ekranı işə salın

disp.begin ()

# Arxa plan yaşıl olaraq təyin ediləcək

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

# Ekranı ağdan təmizləyin və göstərin

#disp.clear ((255, 255, 255)) draw = disp.draw () #draw.dörtgen ((0, 10, 127, 150), kontur = (255, 0, 0), doldur = (0, 0, 255)) #disp.display ()

# Sürət, Enlem, Boylam yerləşdirmə dəyişənləri

#currentS = "Mövcud Sürət:" # Sürət xətti #totalDis = "Ümumi Məsafə:" # Məsafə xətti #currentLoc = "Cari Yer:" # Yer sətri

# X və y məsafələrinin koordinatları

distX = 10 distY = 20

pointsList =

# Sürət x və y koordinatları

sürətX = 10 sürətY = 20

# Yer x və y coordiantes

locX = 10 locY = 20

# M/s -dən mil/saata çevirir

dönüşümVal = 2.24

# Sürət yeniləmə funksiyası, simli qaytarır

SpeedVar = 0

def speedFunc (): qlobal 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

yer = geolocator.reverse (reverseString)

geri qayıt (ünvan. ünvan)

# Latitude yeniləmə funksiyası, float dəyərini qaytarır

def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == "n/a"): 0 başqa qayıt: qayıt float (dəyirmi (Enlem, 4))

# Boylam yeniləmə funksiyası simli qaytarır

def lonFunc (): Boylam = data_stream. TPV ['lon'] if (Boylam == "n/a"): 0 başqa qayıt: qayıt float (yuvarlaq (Boylam, 4))

# Məsafə funksiyası TOTAL gediş məsafəsini qaytarır

totalDistance = 0

def distFunc ():

qlobal totalDistance newLat = latFunc () newLon = lonFunc () if (newLat == 0 və ya newLon == 0): totalDistance = totalDistance # return (totalDistance) başqa: pointsList.append ((newLat, newLon)) last = len (pointsList) -1 əgər (son == 0): başqa qayıdın: totalDistance += coorDistance (balList [son-1], xalList [son]) # qaytarılma ümumiDistance

# Ümumi məsafəni sıfırlayır

def resDistance ():

qlobal totalDistance totalDistance = 0

# İki koordinat arasındakı məsafəni tapmaq üçün istifadə olunan funksiya

# tapmaq üçün Haversine düsturundan istifadə edir. # Giriş nöqtələri bir tuple

def coorDistance (nöqtə1, nöqtə2):

# Yerin kilometrlərdəki təxmini radiusuRadius = 6373.0

lat1 = nöqtə1 [0]

lon1 = nöqtə1 [1]

lat2 = nöqtə2 [0]

lon2 = nöqtə2 [1]

məsafəLon = lon2 - lon1

məsafəLat = lat2 - lat1

# Haversine a

a = sin (məsafəLat/2) ** 2 + cos (lat1)*cos (lat2)*sin (məsafəLon/2) ** 2

# Haversine c

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

# Km -i Milə çevirin

məsafə = (earthRadius * c) * 0.62137

əgər (məsafə <= 0.01): 0.00 qayıtmaq başqa: geri dönmə (məsafə, 3)

# Sürəti ekranda göstərmək funksiyası

def dispSpeed ():

qlobal SpeedVar # Məsafəni ekrandakı dəyişənə qoyun draw.text ((speedX, speedY), str (SpeedVar), font = ImageFont.truetype ("Lato-Medium.ttf", 72))

# Ekranda məsafəni göstərmək funksiyası

def dispDistance ():

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

# Ekrandakı ti ekran funksiyası, işləməsi üçün internet tələb edir

def dispLocation ():

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

# Keçid ifadələrini təqlid etmək üçün lüğətdən istifadə

dispOptions = {

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

# Ekran çıxışı funksiyası

def çıxışı ():

# DisplayIndex qlobal displayIndex üçün qlobal dəyişəndən istifadə # Ekran silinməsi və background disp.clear ((255, 255, 255)) draw.rectangle ((0, 10, 127, 150), kontur = (255, 0, 0), doldur = (255, 0, 0))

# DisplayIndex dəyərindən asılı olaraq zənglər funksiyası

dispOptions [displayIndex] ()

# Başqa bir üsul işləyərsə silinəcək

# məsafə dəyişənini ekranda yerləşdirin

#draw.text ((distX, distY), str (distFunc ()), font = ImageFont.load_default ()) #ekranda sürət dəyişənini yerləşdir #draw.text ((speedX, speedY), speedFunc (), font = ImageFont.load_default ()) # Ekran disp.display () yeniləmələrini göstərin

displayButton = 18 # BCM Moruq pi üzərində pin

resetButton = 23 # BCM Moruq pi üzərində pin

düyməsini basın = Yanlış

def checkDisplay ():

qlobal düyməni basın qlobal displayIndex əgər (bGPIO.input (displayButton) və düyməni basmayın): displayIndex += 1 düyməsini basın = True (əgər displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) və buttonPress): print (" Hələ də basıldı ") başqa: buttonPress = False

# GPS qurun

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

timerPeriod =.5

DisplayIndex = 0 göstərmə indeksi dəyəri: gps_socket -də yeni_datalar üçün: əgər yeni_data: data_stream.unpack (yeni_data) əgər data_stream. TPV ['lat']! = 'Yox/': çap edin (data_stream. TPV ['sürət' ')], data_stream. TPV ['lat'], data_stream. TPV ['lon']) distFunc () speedFunc () output () checkDisplay () if (bGPIO.input (resetButton)) if: resDistance () else: output () checkDisplay () if (bGPIO.input (resetButton)): resDistance () çap ('GPS hələ bağlı deyil') vaxt.yuxu (.1) vaxt.yuxu (.8) KeyboardInterrupt istisna olmaqla: gps_socket.close () print (') nCtrl+c 'istifadəçisi tərəfindən müəyyən edilmişdir)

Yuxarıdakı kod sistemimizi necə kodlaşdıracağımıza dair yalnız bir nümunədir və bu sistemin necə işlədiyinə dair bir video yerləşdirmişəm.

Tövsiyə: