فهرست مطالب:
- مرحله 1: شروع به کار
- مرحله 2: ماژول GPS را به Raspberry Pi متصل کنید
- مرحله 3: دریافت اطلاعات از ماژول گیرنده GPS
- مرحله 4: Display را به Raspberry Pi متصل کنید
- مرحله 5: تنظیم صفحه نمایش برای کار با رزبری پای
- مرحله 6: دستگاههای حالت را برای نمایش اطلاعات GPS روی صفحه تنظیم کنید
- مرحله 7: اجازه دهید سیستم GPS خود را پیاده سازی کنیم
تصویری: سیستم GPS: 7 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
سازنده پروژه: کارلوس گومز
داشتن یک سیستم ناوبری قابل اعتماد برای هر کسی که قصد سفر و کاوش در جهان را دارد بسیار مهم است.
مهمترین جنبه ای که به سیستم ناوبری اجازه می دهد کار کند ، قابلیت 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 ما باید پین های Tx و Rx را از ماژول GPS به پین GPIO 14 و 15 در رزبری پای متصل کنید. پین Tx گیرنده GPS به پین Rx Pi و پین Rx گیرنده GPS به پین Tx رزبری پای می رود.
گیرنده GPS نشان داده شده در تصاویر به 3.3 ولت نیاز دارد تا بتوانید پین های 3.3 ولت را به ولتاژ صحیح وصل کنید ، در حالی که پایه زمین را به زمین وصل می کنید.
مرحله 3: دریافت اطلاعات از ماژول گیرنده 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 متصل کنید
هنگامی که گیرنده 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 روی صفحه تنظیم کنید
ما از 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 ')
کد بالا فقط یک مثال در مورد نحوه کدگذاری سیستم ما است و من یک ویدیو در مورد نحوه عملکرد این سیستم جاسازی کرده ام.
توصیه شده:
سیستم هشدار تصادف با استفاده از GSM ، GPS و شتاب سنج: 5 مرحله (همراه با تصاویر)
سیستم هشدار تصادف با استفاده از GSM ، GPS و شتاب سنج: لطفاً برای مسابقه به من رای دهید لطفاً برای مسابقه رای دهید من امروزه بسیاری از مردم در جاده ها بر اثر تصادف جان خود را از دست می دهند ، علت اصلی آن "تاخیر در نجات" است. این مشکل در کشورهای در حال توسعه بسیار بزرگ است ، بنابراین من این پروژه را برای نجات
سیستم ردیابی امنیت GPS SMS خود را ایجاد کنید: 5 مرحله (همراه با تصاویر)
سیستم ردیابی امنیت پیام کوتاه GPS خود را بسازید: در این پروژه به شما نشان خواهم داد که چگونه یک ماژول SIM5320 3G را با یک آردوینو و یک مبدل پیزوالکتریک به عنوان یک سنسور شوک ترکیب کنید تا یک سیستم ردیابی امنیتی ایجاد کنید که موقعیت مکانی شما را برای شما ارسال می کند. وسیله نقلیه گرانبها از طریق پیامک هنگام
PCB: سیستم ردیابی خودرو بر اساس GPS و GSM: 3 مرحله
PCB: سیستم ردیابی خودرو بر اساس GPS و GSM: سیستم ردیابی خودرو بر اساس GPS و GSM 30 ژوئن 2016 ، پروژه های مهندسی پروژه سیستم ردیابی خودرو بر اساس GPS و GSM از سیستم موقعیت یابی جهانی (GPS) و سیستم جهانی ارتباطات تلفن همراه (GSM) استفاده می کند ، که این پروژه را بیشتر
سیستم مرتب سازی رنگ: سیستم مبتنی بر آردوینو با دو کمربند: 8 مرحله
سیستم مرتب سازی رنگ: سیستم مبتنی بر آردوینو با دو کمربند: حمل و/یا بسته بندی محصولات و اقلام در زمینه صنعتی با استفاده از خطوط ساخته شده با استفاده از تسمه نقاله انجام می شود. این کمربندها به جابجایی مورد از نقطه ای به نقطه دیگر با سرعت خاصی کمک می کند. برخی از وظایف پردازش یا شناسایی ممکن است
نحوه صحیح اتصال و راه اندازی سیستم قفسه مینی HiFi (سیستم صوتی): 8 مرحله (همراه با تصاویر)
نحوه صحیح اتصال و راه اندازی سیستم قفسه مینی HiFi (سیستم صوتی): من فردی هستم که از یادگیری مهندسی برق لذت می برم. من دبیرستانی در مدرسه رهبران زن جوان آن ریچاردز هستم. من این کار را برای کمک به هرکسی که می خواهد از موسیقی خود در Mini LG HiFi Shelf Syste Syste لذت ببرد ، کمک می کنم