به نام خدا
راه اندازی ماژول جی پی اس با رزبری پای
در این پروژه راه اندازی ماژول جی پی اس به وسیله رزبری پای ۳ را یاد خواهیم گرفت. هدف اصلی این پروژه دریافت مختصات از ماژول جی پی اس از طریق UART و نمایش آن روی نمایشگر ۱۶×۲ می باشد.
قطعات مورد نیاز:
- رزبری پای ۳
- ماژول GPS
- نمایشگر LCD ۱۶×۲
- منبع تغذیه برای رزبری پای
- کابل LAN
- برد بورد و سیم برد بورد
- مقاومت یا پتانسیومتر برای LCD
- کارت حافظه ۸ گیگ یا ۱۶ گیگ با Raspbian Jessie
علاوه بر این ما باید کتابخانه (GPS Daemon (GPSD و ۱۶×۲ LCD Adafruit را نصب کنیم. در اینجا از رزبری پای ۳ با سیستم عامل Raspbian Jessie استفاده شده.
ماژول GPS و طرز کار ان:
GPS مخفف سیستم موقعیت یابی جهانی (Global Positioning System) و برای پیدا کردن طول و عرض جغرافیایی به صورت دقیق است. GPS قطعه اصلی در سیستم ردیاب ماشین ها است. این ماژول در هر ثانیه مختصات را همراه با زمان و روز دریافت می کند.
ماژول GPS اطلاعات مربوط به مختصات را در هر لحظه دریافت می کند. این اطلاعات در فرمت NMEA فرستاده می شود(مانند عکس زیر) .فرمت NMEA از چندین جمله تشکیل شده که ما فقط یکی از ان ها را لازم داریم.جمله مورد نیاز ما با $GPGGA شروع می شود و شامل مختصات ، زمان و اطلاعات لازم دیگری است. GPGGA مخفف سیستم موقعیت یابی جهانی ثابت اطلاعات (Global Positioning System Fix Data) است.
بعد از پیدا کردن $GPGGA و ذخیره آن در یک آرایه، میتوانیم عرض جغرافیایی را بعد از دو کاما و طول جغرافیایی را بعد چهار کاما پیدا کنیم. با کپی کردن این اطلاعات در آرایه دیگر می توانیم در هر جایی از انها استفاده کنیم.
در زیر یک رشته $GPGGA را می بینیم:
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47
$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
Identifier |
Description |
$GPGGA |
Global Positioning system fix data |
HHMMSS.SSS |
Time in hour minute seconds and milliseconds format. |
Latitude |
(Latitude (Coordinate |
N |
Direction N=North, S=South |
Longitude |
(Longitude(Coordinate |
E |
Direction E= East, W=West |
FQ |
Fix Quality Data |
NOS |
No. of Satellites being Used |
HPD |
Horizontal Dilution of Precision |
Altitude |
Altitude from sea level |
M |
Meter |
Height |
Height |
Checksum |
Checksum Data |
آماده سازی ارتباط بین GPS و رزبری پای:
ابتدا باید UART را برای ارتباط GPS و رزبری پای اماده کنیم. این اماده سازی سخت ترین قسمت این آموزش است ممکن است چند بار دستورات گفته شده را تکرار کنید تا نتیجه دلخواه بگیرید.
رزبری پای دو واحد UART دارد یکی PL011 و دیگری mini UART.آنها با استفاده از بلوک های سخت افزای مختلف اجرا می شوند و ویژگی هایشان کمی متفاوت است. ماژول های بی سیم و بلوتوث به PLO11 UART وصل می شوند و از mini UART برای ارتباط با کنسول لینوکس استفاده می شود. در این جا ما ماژول بلوتوث را PLO11 UART جدا کرده(به وسیله کد) و از این UART برای GPS استفاده می کنیم.
مر حله ۱ : بروزرسانی رزبری پای
قبل از هر کاری رزبری پای را بروزرسانی می کنیم. دستورات زیر را اجرا کنید
sudo apt-get update sudo apt-get upgrade
سپس سیستم را به وسیله کد زیر ریبوت می کنیم:
sudo reboot
مرحله ۲:تنظیم UART
برای تنظیم UART باید در فایل /boot/config.txt تغییراتی ایجاد کنیم.دستور زیر را اجرا کنید.
sudo nano /boot/config.txt
در اخر فایل config.txt کد های زیر را اضافه کنید.
dtparam=spi=on dtoverlay=pi3-disable-bt core_freq=250 enable_uart=1 force_turbo=1
از ctrl+x برای خارج شدن و Y برای ذخیره استفاده کنید.
مطمئن شوید که هیچ اروری دریافت نکردید.
force_turbo برای فعال سازی UART در بالاترین فرکانس هسته می باشد که در اینجا ۲۵۰ است.برای این که اطلاعات دریافت شده از ماژول اشتباه نشود از این فرکانس استفاده می شود. در نظر داشته باشید که با وارد کردن force_turbo=1 ضمانت نامه رزبری پای از بین می رود اما در عوض این کار مطمئن تر است.
دستور dtoverlay=pi3-disable-bt بلوتوث را قطع می کند و به ما اجازه می دهد که از تمام قدرت UART استفاده کنیم.
سپس باید boot/cmdline.txt را تغییر دهیم، پیشنهاد می شود قبل از تغییر این فایل یک کپی از ان گرفته شود تا در آینده اگر لازم شد به حالت اولش باز گردانیم.دستورات زیر برای کپی گرفتن از فایل است.
sudo cp boot/cmdline.txt boot/cmdline_backup.txt sudo nano /boot.cmdline.txt
خطوط زیر را جایگزین خطوط فایل cmdline.txt کنید
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
فایل را ذخیره کنید و خارج شوید. سپس ریستارت کنید (sudo reboot)
مرحله ۳ : غیر فعال کردن سریال Getty رزبری پای
sudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service
دستورات زیر برای فعال سازی مجدد این سرویس در صورت نیاز است
sudo systemctl enable serial-getty@ttyS0.service sudo systemctl start serial-getty@ttyS0.service
مرحله ۴: فعال سازی ttyAMAO
این کد ttyAMAO را فعال می کند
sudo systemctl enable serial-getty@ttyAMA0.service
مرحله۵: نصب Minicom و pynmea2
ما به وسیله Minicom به ماژول GPS وصل می شویم. همچنین GPS را با Minicom تست می کنیم.
sudo apt-get install minicom
برای جدا سازی اطلاعات از کتابخانه pynmea2 استفاده می کنیم دستورات زیر برای نصب pynmea2 است.
sudo pip install pynmea2
لینک pynmea2 کتابخانه
مرحله ۶: نصب کتابخانه LCD
در این اموزش از کتابخانه AdaFruit برای LCD استفاده شده است،دستور زیر را اجرا کنید.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
سپس دستورات زیر را اجرا کنید.
cd ./Adafruit_Python_CharLCD sudo python setup.py install
در اخر پیشنهاد می شود سیستم را ریبوت کنید سپس قطعات را به یکدیگر متصل کنید.
اتصالات بین رزبری پای و GPS:
اتصالات بین رزبری پای و GPS را در زیر می بینید.
تست مدار:
قبل از اجرای دستورات python بهتر است تا ماژول GPS را با minicom تست کنیم.
sudo minicom -D/dev/ttyAMA0 -b9600
sudo cat /dev/ttyAMA0
در بالا جملات NMEA را که قبلا در باره شان صحبت شد دیده می شود.
کد های پایتون را در اخر پست می بینید.
بعد از انجام تمام کارهای گفته شده، وقت آن رسیده که همه سیستم را تست کنیم.
دانلود کد راه اندازی ماژول جی پی اس با رزبری پای:
دانلود فایلimport time import serial import string import pynmea2 import RPi GPIO as gpio #to add the LCD library import Adafruit_CharLCD as LCD gpio.setmode(gpio.BCM) #declaring LCD pins lcd_rs = 17 lcd_en = 18 lcd_d4 = 27 lcd_d5 = 22 lcd_d6 = 23 lcd_d7 = 10 lcd_backlight = 2 lcd_columns = 16 #Lcd column lcd_rows = 2 #number of LCD rows lcd = LCD.Adafruit_CharLCD(lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) port = "/dev/ttyAMA0" # the serial port to which the pi is connected. #create a serial object ser = serial.Serial(port, baudrate = 9600, timeout = 0.5) while 1: try: data = ser.readline() except: print("loading") #wait for the serial port to churn out data if data[0:6] == '$GPGGA': # the long and lat data are always contained in the GPGGA string of the NMEA data msg = pynmea2.parse(data) #parse the latitude and print latval = msg.lat concatlat = "lat:" + str(latval) print concatlat lcd.set_cursor(0,0) lcd.message(concatlat) #parse the longitude and print longval = msg.lon concatlong = "long:"+ str(longval) print concatlong lcd.set_cursor(0,1) lcd.message(concatlong) time.sleep(0.5)#wait a little before picking the next data.
دیدگاهها (0)