فهرست مطالب:

سیستم GPS: 7 مرحله
سیستم GPS: 7 مرحله

تصویری: سیستم GPS: 7 مرحله

تصویری: سیستم GPS: 7 مرحله
تصویری: GTA in Tehran! 😳😱جی تی ای در تهران 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 160 160 LCD صفحه نمایش SPI

4: 11 سیم پوند

دکمه های 5: 2

مقاومت 6: 2x 1k و 2x 10k برای کشیدن دکمه ها

7: تخته نان

این پروژه از پین های GPIO Raspberry Pi استفاده می کند و بنابراین برای توسعه پروژه ما باید همه چیز را با یک تخته نان متصل کنیم. همچنین فرض بر این است که لحیم کاری روی همه پین ها قبل از حرکت و اتصال تمام قطعات ما انجام شده و به پایان رسیده است.

مرحله 2: ماژول GPS را به Raspberry Pi متصل کنید

ماژول GPS را به Raspberry Pi متصل کنید
ماژول GPS را به Raspberry Pi متصل کنید
ماژول GPS را به Raspberry Pi متصل کنید
ماژول GPS را به Raspberry Pi متصل کنید

برای استفاده از سیستم GPS ما باید پین های Tx و Rx را از ماژول GPS به پین GPIO 14 و 15 در رزبری پای متصل کنید. پین Tx گیرنده GPS به پین Rx Pi و پین Rx گیرنده GPS به پین Tx رزبری پای می رود.

گیرنده GPS نشان داده شده در تصاویر به 3.3 ولت نیاز دارد تا بتوانید پین های 3.3 ولت را به ولتاژ صحیح وصل کنید ، در حالی که پایه زمین را به زمین وصل می کنید.

مرحله 3: دریافت اطلاعات از ماژول گیرنده GPS

دریافت اطلاعات از ماژول گیرنده GPS
دریافت اطلاعات از ماژول گیرنده GPS

برای دریافت اطلاعات از گیرنده GPS به رزبری پای ، باید اجازه دهیم سوکت های صحیح از پورت های UART خوانده شوند. خواندن داده های خام مستلزم این است که ما کتابخانه تجزیه خود را ایجاد کنیم ، اما در این سناریو می توانیم از یک شیطان GPS استفاده کنیم که در پس زمینه اجرا می شود تا از تجزیه و تحلیل داده ها و انتقال آن به Raspberry Pi استفاده کند.

به منظور انجام این کار ، می توانیم یک ترمینال در Raspberry Pi باز کنیم و کد را اجرا کنیم:

sudo apt-get update

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

حالا ما باید gemon gpsd را راه اندازی کنیم و با وارد کردن آن به پورت های UART اشاره کنیم

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

اکنون می توانیم دستور زیر را اجرا کنیم و همه داده های شناور را در خود ببینیم!

cgps -s

مرحله 4: Display را به Raspberry Pi متصل کنید

Display را به Raspberry Pi متصل کنید
Display را به Raspberry Pi متصل کنید
Display را به Raspberry Pi متصل کنید
Display را به Raspberry Pi متصل کنید

هنگامی که گیرنده GPS خود را آماده کرده و با Raspberry Pi کار می کنیم ، می توانیم صفحه نمایش را به Raspberry Pi متصل کنیم. ما از 5 سیم برای اتصال صفحه LCD خود به Raspberry Pi و 4 پین دیگر برای اتصال منبع تغذیه اصلی و LED استفاده خواهیم کرد. روی صفحه نمایش

من عکسی از صفحه TFT که استفاده می کنم قرار داده ام ، اما این باید با صفحه هایی با اندازه و ساختار مشابه کار کند.

LED- و GND را به زمین وصل کنید و LED+ و VCC را به 3.3 ولت وصل کنید.

پین RESET روی صفحه را به پین 25 روی برد Pi وصل کنید.

A0 را به پین 24 روی برد Pi وصل کنید.

پین SDA را به پین MOSI روی برد Pi وصل کنید.

پین SCK روی صفحه LCD را به برد Pi وصل کنید.

پین CS را به پایه 8 روی برد Pi وصل کنید.

مرحله 5: تنظیم صفحه نمایش برای کار با رزبری پای

تنظیم صفحه نمایش برای کار با رزبری پای
تنظیم صفحه نمایش برای کار با رزبری پای

برای راه اندازی صفحه نمایش باید از کتابخانه ST7735 موجود در این رپو استفاده کنیم:

کتابخانه صفحه نمایش Python ST7735

هنگامی که این کتابخانه نمایش را روی سیستم رزبری پای خود نصب کردیم ، می توانیم یک فایل نمونه را برای تأیید صحت سیم کشی قبلی خود تنظیم کنیم.

یک فایل با عنوان example.py ایجاد کنید و متن زیر را به همراه نمونه تصویر دلخواه در همان پوشه در آنجا وارد کنید

وارد کردن ST7735 به عنوان TFTimport Adafruit_GPIO به عنوان GPIO وارد کردن Adafruit_GPIO. SPI به عنوان SPI

عرض = 128

HEIGHT = 160 SPEED_HZ = 4000000

پیکربندی # رزبری پای.

# این پین های مورد نیاز برای اتصال LCD به رزبری پای است

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) print ('Loading image…') 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 روی صفحه تنظیم کنید

ما از 5 ماشین حالت مختلف استفاده می کنیم ، در حالی که نمودار وظیفه خود را برای راه اندازی سیستم GPS خود پیاده سازی می کنیم.

نمایش دستگاه تغییر حالت حالت:

این دستگاه حالت را بسته به ورودی دکمه ما کنترل می کند. این کار را با تغییر متغیری انجام می دهد که به پایتون اجازه می دهد از تایپ اردک استفاده کرده و تابع صحیح را بسته به تابع فراخوانی شده نمایش دهد.

دستگاه حالت سرعت:

این دستگاه حالت بسته به مکان هر فرد سرعت فعلی را اجرا می کند. با این کار هر چرخه ساعت برای سیستم GPS اجرا می شود

دستگاه حالت خروجی:

این دستگاه حالت خروجی را بر اساس متغیری که دستگاه حالت تغییر صفحه نمایش را نمایشگر فعلی تعیین می کند ، تعیین می کند.

ماشین حالت فاصله

این دستگاه حالت هر چرخه ساعت را اجرا می کند و کل مسافت طی شده توسط کاربر را تعیین می کند و پس از فشار دادن دکمه تنظیم مجدد ، مسافت پیموده شده فعلی را بازنشانی می کند.

دستگاه وضعیت مکانی:

این دستگاه حالت فعلی را با استفاده از مختصات ماژول GPS در مورد کاربر برمی گرداند. این دستگاه حالت به اتصال اینترنت کاربران وابسته است.

مرحله 7: اجازه دهید سیستم GPS خود را پیاده سازی کنیم

هنگامی که ماژول GPS ما اطلاعاتی را به Raspberry Pi ارسال می کند و صفحه LCD ما اطلاعاتی را روی آن نمایش می دهد ، می توانیم برنامه GPS سیستم خود را شروع کنیم. من از دستگاههای حالت محدود مرحله قبل برای کدگذاری سیستم GPS خود استفاده خواهم کرد

## فایل اصلی برای سیستم ناوبری # # # #

# کتابخانه برای ترسیم تصاویر

از وارد کردن PIL تصویر از وارد کردن PIL ImageDont از وارد کردن PIL ImageFont

# کتابخانه برای کنترل ST7737

ST7735 را به عنوان TFT وارد کنید

# کتابخانه برای GPIO برای رزبری پای

Adafruit_GPIO را به عنوان GPIO وارد کنید Adafruit_GPIO. SPI را به عنوان SPI وارد کنید

# کتابخانه برای GPS

#واردات gpsd از 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 برای Geocoding

# # دسترسی به اینترنت برای این کار ضروری است

از geopy.geocoders Nominatim را وارد کنید

موقعیت جغرافیایی = Nominatim ()

# ثابت برای سیستم

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

عرض = 128

HEIGHT = 160 SPEED_HZ = 4000000

# پین های پیکربندی رزبری پای

DC = 24 # A0 در صفحه TFT RST = 25 # بازنشانی پین در صفحه TFT SPI_PORT = 0 # پورت SPI در تمشک pi ، SPI0 SPI_DEVICE = 0 # انتخاب برده در raspberry pi ، CE0

# ایجاد شی صفحه نمایش 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)، outline = (255، 0، 0)، fill = (0، 0 ، 255)) #disp.display ()

متغیرهای # سرعت ، عرض جغرافیایی ، طول جغرافیایی

#currentS = "سرعت فعلی:" # رشته سرعت #totalDis = "فاصله کل:" # فاصله فاصله #currentLoc = "مکان فعلی:" # رشته مکان

# مختصات فاصله x و y

distX = 10 distY = 20

pointsList =

# مختصات سرعت x و y

speedX = 10 speedY = 20

# مکان هماهنگ x و y

locX = 10 locY = 20

# از m/s به mph تبدیل می کند

تبدیلVal = 2.24

# عملکرد به روز رسانی سرعت ، رشته را برمی گرداند

SpeedVar = 0

def speedFunc (): SpeedVar جهانی SpeedText = data_stream. TPV ['speed'] if (SpeedText! = "n/a"): SpeedText = float (SpeedText) * conversionVal SpeedVar = دور (SpeedText ، 1) # بازگشت (SpeedText)

def locationFunc ():

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

reverseString = latLoc + "،" + lonLoc

location = geolocator.reverse (reverseString)

بازگشت (location.address)

# عملکرد به روز رسانی عرض جغرافیایی ، مقدار شناور را برمی گرداند

def latFunc (): Latitude = data_stream. TPV ['lat'] if (Latitude == "n/a"): return 0 else: return float (دور (عرض جغرافیایی ، 4))

تابع # طول جغرافیایی ، رشته را برمی گرداند

def lonFunc (): طول جغرافیایی = data_stream. TPV ['lon'] if (طول == "n/a"): return 0 else: return float (دور (طول ، 4))

تابع # فاصله TOTAL مسافت طی شده را برمی گرداند

فاصله کل = 0

def distFunc ():

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

global totalDistance totalDistance = 0

# تابع برای یافتن فاصله بین دو مختصات

# از فرمول هاورسین برای پیدا کردن استفاده می کند. # نقاط ورودی یک تاپل هستند

def coor فاصله (نقطه 1 ، نقطه 2):

# شعاع تقریبی زمین در کیلومتر زمین Radius = 6373.0

lat1 = point1 [0]

lon1 = point1 [1]

lat2 = point2 [0]

lon2 = point2 [1]

distanceLon = lon2 - lon1

distanceLat = lat2 - lat1

# هاورسین a

a = sin (distanceLat/2) ** 2 + cos (lat1)*cos (lat2)*sin (distanceLon/2) ** 2

# هاورسین ج

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

# کیلومتر را به مایل تبدیل کنید

فاصله = (earthRadius * c) * 0.62137

if (فاصله <= 0.01): بازگشت 0.00 دیگری: دور برگشت (فاصله ، 3)

# عملکرد برای نمایش سرعت بر روی صفحه نمایش

def dispSpeed ():

جهانی SpeedVar # فاصله را روی متغیر روی صفحه بکشید. text ((speedX، speedY)، str (SpeedVar)، font = ImageFont.truetype ("Lato-Medium.ttf"، 72))

# عملکرد برای نمایش فاصله روی صفحه

def dispDistance ():

draw.text ((distX، distY) ، str (totalDistance) ، font = 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 display globalIndex # پاکسازی صفحه و اعمال پس زمینه disp.clear ((255، 255، 255)) draw.rectangle ((0، 10، 127، 150)، outline = (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

buttonPress = غلط

def checkDisplay ():

global button Press global displayIndex if (bGPIO.input (displayButton) و نه buttonPress): displayIndex += 1 button Press = True if (displayIndex == 2): displayIndex = 0 elif (bGPIO.input (displayButton) و buttonPress): چاپ (" هنوز ") دیگری فشار داده شده است: buttonPress = False

# راه اندازی GPS

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

timerPeriod =.5

مقدار # شاخص برای نمایش صفحه نمایش Index = 0 try: برای new_data در gps_socket: if new_data: data_stream.unpack (new_data) if data_stream. TPV ['lat']! = 'n/a': print (data_stream. TPV ['speed')]، data_stream. TPV ['lat']، data_stream. TPV ['lon']) distFunc () speedFunc () خروجی () checkDisplay () if (bGPIO.input (resetButton)): resDistance () دیگری: خروجی () checkDisplay () if (bGPIO.input (resetButton)): resDistance () print ('GPS هنوز متصل نشده است] time.sleep (.1) time.sleep (.8) به جز KeyboardIntruptrupt: gps_socket.close () print (' / n توسط کاربر ctrl+c ')

کد بالا فقط یک مثال در مورد نحوه کدگذاری سیستم ما است و من یک ویدیو در مورد نحوه عملکرد این سیستم جاسازی کرده ام.

توصیه شده: