Агуулгын хүснэгт:

GPS систем: 7 алхам
GPS систем: 7 алхам

Видео: GPS систем: 7 алхам

Видео: GPS систем: 7 алхам
Видео: How to Install a GPS Navigation Antenna (Car Stereo Accessory) | Car Audio 101 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 хэмжээтэй LCD SPI дэлгэц

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.3V -ийг ашиглах шаардлагатай бөгөөд та 3.3V -ийн зүүг зөв хүчдэлд холбож, газардуулгын зүүг газардуулж болно.

Алхам 3: GPS хүлээн авагчийн модулаас мэдээлэл авах

GPS хүлээн авагчийн модулаас өгөгдөл авах
GPS хүлээн авагчийн модулаас өгөгдөл авах

GPS хүлээн авагчаас Raspberry Pi руу мэдээлэл хүлээн авахын тулд UART портуудаас зөв залгууруудыг уншихыг зөвшөөрөх шаардлагатай. Түүхий өгөгдлийг уншихын тулд бид өөрсдийн задлан шинжлэх номын санг бий болгох шаардлагатай болно, гэхдээ энэ тохиолдолд бид өгөгдлийг задлан шинжлэх, Raspberry Pi руу дамжуулахад туслахын тулд цаана нь ажилладаг GPS демоныг ашиглаж болно.

Үүнийг хийхийн тулд бид Raspberry Pi дээр терминал нээж кодыг ажиллуулж болно.

sudo apt-get update

sudo apt-get gpsd gpsd-client python-gps суулгаарай

Энэ нь бидний татаж авах асуудлыг хариуцах ёстой.

Үүнийг дуусгасны дараа бид дараах тушаалуудыг ажиллуулж gpsd системийн үйлчилгээг идэвхгүй болгох хэрэгтэй.

sudo systemctl 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 утас, үндсэн тэжээл, LED -ийг холбохын тулд 4 зүү ашиглана. дэлгэцэн дээр.

Би ашиглаж буй TFT дэлгэцийнхээ зургийг орууллаа, гэхдээ энэ нь ижил хэмжээтэй, бүтээцтэй дэлгэцтэй ажиллах ёстой.

LED ба GND-ийг газардуулж, LED+ ба VCC-ийг 3.3V-д холбоно уу.

Дэлгэц дээрх RESET зүүг Pi самбар дээрх 25 -р зүү рүү холбоно уу.

Pi самбар дээрх 24 -р зүү рүү A0 -ийг холбоно уу.

SDA зүүг Pi самбар дээрх MOSI зүү рүү холбоно уу.

LCD дэлгэц дээрх 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 -ийн тохиргоо.

# Эдгээр нь LCD -ийг Raspberry Pi -тэй холбоход шаардлагатай зүү юм

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

# TFT LCD дэлгэцийн анги үүсгэх.

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

# Дэлгэцийг эхлүүлэх.

disp.begin () disp.reset ()

# Зураг ачаална уу.

newData = 0x42 disp.command (newData) хэвлэх ('Зургийг ачаалж байна …') image = Image.open ('cat.jpg')

# Зургийн хэмжээг өөрчилж, эргүүлэх нь дэлгэцтэй тохирч байна.

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

# Манай програм дэлгэц дээр бидний зургийг зурж байгааг терминал дээр хэвлэх болно

хэвлэх ('Зураг зурах')

# Энэ функц нь бидний зургийг дэлгэц дээр харуулах болно

disp.display (зураг)

Энэ файл нь Raspberry Pi -ийн LCD дэлгэцийн тохиргоог хийх бөгөөд номын сан нь бидний зургийг хавтсанд хөрвүүлж дэлгэц дээр харуулах болно.

Алхам 6: GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу

GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу
GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу
GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу
GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу
GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу
GPS -ийн мэдээллийг дэлгэц дээр харуулахын тулд төлөв байдлын машиныг тохируулна уу

Бид gps системийг тохируулахын тулд ажлын диаграмаа хэрэгжүүлэхдээ 5 өөр улсын машиныг ашиглах болно.

Дэлгэцийг өөрчлөх төлөвийн машин:

Энэ төлөвт машин нь бидний товчлуурын оролтоос хамаарч аль дэлгэцийг харуулахыг хянах болно. Энэ нь python -д нугас бичих давуу талыг ашиглах боломжийг олгодог хувьсагчийг өөрчилж, дуудагдсан функцээс хамааран зөв функцийг дуудах боломжийг олгодог.

Хурдны төлөв байдлын машин:

Энэхүү төрийн машин нь тухайн хүний байршлаас хамааран одоогийн хурдыг гүйцэтгэх болно. Энэ нь GPS системийн бүх цаг мөчлөгийг гүйцэтгэх болно

Гаралтын төлөвийн машин:

Энэхүү төлөвийн машин нь дэлгэцийн өөрчлөлтийн машиныг одоогийн дэлгэц гэж тодорхойлсон хувьсагч дээр үндэслэн гаралтыг тодорхойлох болно.

Зайн улсын машин

Энэхүү төлөв байдлын машин нь цаг бүрийн мөчлөг бүрийг гүйцэтгэж, хэрэглэгчийн явсан нийт зайг тодорхойлдог бөгөөд дахин тохируулах товчлуурыг дарахад одоогийн туулсан зайг дахин тохируулна.

Байршлын төлөвийн машин:

Энэхүү төлөвт машин нь GPS -ийн модулийг хэрэглэгчийн талаар буцааж өгдөг координатыг ашиглан хэрэглэгчийн одоогийн байршлыг буцаана. Энэхүү төрийн машин нь хэрэглэгчдийн интернет холболтоос хамаарна.

Алхам 7: GPS системээ хэрэгжүүлцгээе

Бид GPS модулийг Raspberry Pi руу илгээж, мэдээлэлээ харуулдаг LCD дэлгэцтэй болсны дараа бид GPS системээ програмчилж эхлэх боломжтой болно. Би GPS системээ кодлохын тулд өмнөх алхамуудын хязгаарлагдмал төлөвт байгаа машинуудыг ашиглах болно

## Навигацийн системийн үндсэн файл # # # #

# Зураг зурах номын сан

PIL импортоос PIL импортоос ImageDraw PIL импорт ImageFont -ээс

ST7737 хянагчийн # номын сан

ST7735 -ийг TFT хэлбэрээр импортлох

Raspberry Pi -д зориулсан GPIO -ийн # номын сан

Adafruit_GPIO -г GPIO болгон импортлох Adafruit_GPIO. SPI -ийг SPI хэлбэрээр импортлох

# GPS -ийн номын сан

gps3 -аас gpsd импортлох gps3

# Номын сан

импортлох хугацаа

# Хоёр цэгийн хоорондох зайг олох номын сан

математикаас импортлох sin, cos, sqrt, atan2, radians

# Цэсийг солих, дахин тохируулах товчлууруудыг ашиглахын тулд Rpi номын санг импортлох

# RPi. GPIO -ийг bGPIO болгон импортлох

# Товчлуурыг тохируулах зүү

bGPIO.setmode (bGPIO. BCM)

bGPIO. тохиргоо (18, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)

bGPIO. тохиргоо (23, bGPIO. IN, pull_up_down = bGPIO. PUD_DOWN)

Геокодлох # импортын геопи номын сан

Үүнийг ажиллуулахын тулд # # интернет холболт шаардлагатай

from geopy.geocoders Import Номинатим

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

Системийн # тогтмолууд

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

Өргөн = 128

Өндөр = 160 SPEED_HZ = 4000000

# Raspberry Pi тохиргооны голтой

TFT дэлгэц дээр DC = 24 # A0

# TFT LCD дэлгэцийн объект үүсгэх

disp = TFT. ST7735 (DC, rst = 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.rectangle ((0, 10, 127, 150), тойм = (255, 0, 0), дүүргэх = (0, 0, 255)) #disp.display ()

# Хурд, өргөрөг, уртрагийн байршлын хувьсагчид

#currentS = "Одоогийн хурд:" # Speed string #totalDis = "Нийт зай:" # Distance string #currentLoc = "Одоогийн байршил:" # Байршлын мөр

# X ба y зайны координатууд

distX = 10 distY = 20

pointsList =

# Хурд x ба y координат

хурдX = 10 хурдY = 20

# Байршил x ба y coordiantes

locX = 10 locY = 20

# M/s -ээс mph болгон хөрвүүлдэг

convertVal = 2.24

# Хурд шинэчлэх функц, мөрийг буцаана

SpeedVar = 0

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

байршил = geolocator.reverse (reverseString)

буцах (байршил. хаяг)

# Latitude шинэчлэх функц, хөвөх утгыг буцаана

def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == "n/a"): 0 -ийг буцаана: буцах хөвөгч (дугуй (Өргөрөг, 4))

# Уртраг шинэчлэх функц, мөрийг буцаана

def lonFunc (): Уртраг = data_stream. TPV ['lon'] if (Уртраг == "n/a"): буцах 0 өөр: буцах хөвөх (дугуй (Уртраг, 4))

# Зайны функц нь явсан TOTAL зайг буцаана

totalDistance = 0

def distFunc ():

global totalDistance newLat = latFunc () newLon = lonFunc () if (newLat == 0 or newLon == 0): totalDistance = totalDistance # return (totalDistance) other: 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

# Хоёр координатын хоорондох зайг олоход ашигладаг функц

# олохын тулд Haversine -ийн томъёог ашигладаг. # Оролтын цэгүүд нь багц юм

def coorDistance (цэг 1, цэг 2):

# Дэлхийн ойролцоо радиус километрээр дэлхийн радиус = 6373.0

лат1 = цэг1 [0]

lon1 = цэг1 [1]

лат2 = цэг2 [0]

lon2 = цэг2 [1]

зайLon = lon2 - lon1

зайLat = лат2 - лат1

# Хаверсин a

a = sin (зайLat/2) ** 2 + cos (lat1)*cos (lat2)*sin (зайLon/2) ** 2

# Хаверсин c

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

# Км -ийг Майл руу хөрвүүлэх

зай = (earthRadius * c) * 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 displayIndex -д глобал хувьсагч ашиглах # Дэлгэцийг цэвэрлэж, 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 ()) # Дэлгэцийн disp.display () шинэчлэлтийг харуулах

displayButton = 18 # BCM Бөөрөлзгөнө pi дээр зүү

resetButton = 23 # BCM Бөөрөлзгөнө pi дээр зүү

товчийг дарна уу = Худал

def checkDisplay ():

Глобал товчлуурыг дарна уу. ) Өөр дарагдсан хэвээр байна: buttonPress = Худал

# GPS тохируулах

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

timerPeriod =.5

DisplayIndex = 0 -ийн дэлгэцийн индексийн утга], 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 хараахан холбогдоогүй') цаг. унтах (.1) цаг. / nХэрэглэгчийн тодорхойлсон ctrl+c ')

Дээрх код бол манай системийг хэрхэн кодлох тухай ганц жишээ бөгөөд би энэ систем хэрхэн ажилладаг талаар видео оруулсан болно.

Зөвлөмж болгож буй: