پروژه سرعت سنج GPS با آردوینو و نمایشگر OLED
محتویات
از سرعت سنج ها برای اندازه گیری سرعت حرکت یک وسیله نقلیه استفاده می شود. ما قبلاً از سنسور مادون قرمز و سنسور هال برای ساخت سرعت سنج آنالوگ و سرعت سنج دیجیتال استفاده کردیم. امروز ما از GPS برای اندازه گیری سرعت یک وسیله نقلیه در حال حرکت استفاده خواهیم کرد. سرعت سنج های GPS از سرعت سنجهای استاندارد دقیق تر هستند زیرا می توانند به طور مداوم وسیله نقلیه را پیدا کنند و سرعت را نیز محاسبه کنند. از فناوری GPS به طور گسترده ای در تلفن های هوشمند و وسایل نقلیه برای هشدارهای ناوبری و ترافیکی استفاده می شود.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند. در اینجا ما از سرعت سنج تلفن همراه برای بررسی صحت داده های نمایش داده شده استفاده میکنیم.
در این پروژه آردوینو ، ما یک سرعت سنج GPS آردوینو با استفاده از ماژول GPS NEO6M با نمایشگر OLED SH1106 خواهیم ساخت.
شماتیک سرعت سنج GPS با آردوینو
شماتیک مدار برای پروژه سرعت سنج GPS آردوینو با استفاده از OLED در زیر آورده شده است.
قطعات مورد نیاز
- برد آردوینو نانو
- ماژول GPS NEO6M
- صفحه نمایش 1.3 اینچ OLED I2C SH1106
ماژول GPS Neo-6M
Neo 6M یک ماژول GPS سریال است که جزئیات مکان را از طریق ارتباط سریال ارائه می دهد. این ماژول جی پی اس دارای چهار پین است. توضیحات پین های این ماژول را در جدول زیر مشاهده میکنید.
پین | توضیح |
Vcc | منبع تغذیه 2.7 تا 5 ولت |
Gnd | GND |
TXD | ارسال اطلاعات |
RXD | دریافت اطلاعات |
ماژول GPS داده ها را در چند رشته با نرخ 9600 Baud Rate منتقل می کند. اگر از ارتباط UART با نرخ 9600 Baud استفاده کنیم ، می توانیم داده های دریافت شده توسط GPS را ببینیم.
ماژول GPS داده های موقعیت ردیابی را با فرمت NMEA ارسال می کند. فرمت NMEA شامل چند جمله است که در زیر چهار جمله مهم آن آورده شده است.
- $ GPGGA : داده های ثابت سیستم موقعیت یابی جهانی
- $ GPGSV : ماهواره های GPS در نمای
- $ GPGSA : ماهواره های فعال و GPS DOP
- $ GPRMC : حداقل داده های خاص GPS / Transit ویژه توصیه شده
ماژول GPS داده های مربوط به موقعیت را در به صورت لحظه ای می فرستد، و داده های زیادی را با فرمت NMEA می فرستد (تصویر زیر). فرمت NMEA شامل چند جمله است که ما در آن فقط به یک جمله نیاز داریم. این جمله از $ GPGGA شروع می شود و حاوی مختصات ، زمان و سایر اطلاعات مفید است.
می توانیم با شمارش کاما (,) در رشته ، مختصات را از رشته $ GPGGA استخراج کنیم.
فرمت NMEA چیست ؟
در زیر یک رشته 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
واحد | توضیح |
$GPGGA | فرمت اطلاعات موقعیت جهانی |
HHMMSS.SSS | زمان بر حسب ساعت ، دقیقه ، ثانیه و میلی ثانیه |
Latitude | عرض جغرافیایی |
N | جهت N= شمال و S= جنوب |
Longitude | عرض جغرافیایی |
E | جهت E= شرق و W= غرب |
FQ | کیفیت اطلاعات |
NOS | شماره ماهواره های استفاده شده |
HDP | دقت افقی |
Altitude | ارتفاع بر حسب متر از سطح دریا |
M | متر |
Height | ارتفاع |
Checksum | چک کردن اطلاعات |
صفحه نمایش OLED I2C 1.3 اینچی
اصطلاح OLED به معنای “Organic Light emitting diode” است ، از همان فناوری استفاده می کند که در بیشتر تلویزیون های ما استفاده می شود اما پیکسل کمتری نسبت به آنها دارد. ارتباط نمایشگر های OLED با آردوینو همیشه جذاب بوده است. در این پروژه ما از یک صفحه نمایش OLED مجهز به 4 پین SH1106 OLED 1.28 استفاده می کنیم. این نمایشگر فقط با حالت I2C می تواند کار کند. مشخصات نمایشگر OLED SH1106 را بخوانید.
کد پروژه سرعت سنج با آردوینو
کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
اول از همه ، همه کتابخانه ها را فرخوانی میکنیم. در اینجا از کتابخانه TinyGPS ++ .h برای بدست آوردن مختصات GPS با استفاده از ماژول گیرنده GPS و Adafruit_SH1106.h برای OLED استفاده می شود.
#include <TinyGPS++.h> #include <SoftwareSerial.h> #include <Wire.h> #include <Adafruit_SH1106.h>
سپس ، آدرس OLED I2C را تعریف میکنیم که می تواند OX3C یا OX3D باشد ، در اینجا OX3C برای ماژول من است. همچنین ، پین ریست نمایشگر باید مشخص شود. برای من، پین ریست -1 است.
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display(OLED_RESET);
در مرحله بعد ، اشیا for مربوط به کلاس TinyGPSPlus و Softwolutionial به شرح زیر مشخص شده اند. کلاس سریال نرم افزار به پین شماره آردوینو نیاز دارد. برای ارتباط سریال که در اینجا 2 و 3 تعریف شده است.
int RX = 2, TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft(RX, TX);
در داخل setup()
، مقداردهی اولیه برای ارتباطات سریال و OLED انجام می شود. نرخ پیش فرض baud برای ارتباط سریال نرم افزار 9600 تعریف شده است. در اینجا SH1106_SWITCHCAPVCC
برای تامین ولتاژ نمایشگر از 3.3V داخلی و از تابع display.begin
برای مقداردهی اولیه صفحه استفاده می شود.
void setup() { Serial.begin(9600); gpssoft.begin(9600); display.begin(SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay(); }
اگر سیگنالهای معتبری از GPS دریافت شده باشد ، displayspeed()
برای نمایش سرعت در نمایشگر استفاده میشود.
while (gpssoft.available() > 0) if (gps.encode(gpssoft.read())) displayspeed();
در داخل displayspeed()
، داده ها از ماژول GPS با استفاده از تابع gps.speed.isValid ()
بررسی می شود و اگر مقدارصحیح باشد ، مقدار سرعت در صفحه نمایش OLED نمایش داده می شود. در اینجا اندازه متن در OLED با استفاده از تابع display.setTextSize
و موقعیت متن با استفاده از تابع display.setCursor
تعریف می شود. داده های سرعت از ماژول GPS با استفاده از تابع gps.speed.kmph ()
رمزگشایی می شود و در نهایت با استفاده از display.display ()
نمایش داده می شود.
if (gps.speed.isValid()) { display.setTextSize(2); display.setCursor(40, 40); display.print(gps.speed.kmph()); display.display(); }
فیلم عملکرد
در آخر ، کد را در Arduino بارگذاری کنید و مدار را در وسیله نقلیه در حال حرکت قرار دهید ، و می توانید سرعت را بر روی صفحه نمایش OLED مشاهده کنید همانطور که در تصویر زیر نشان داده شده است.
موارد موجود در فایل : سورس کامل ، شماتیک کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام مجدد
موقع پروگرام کردن این خطا رو میده مشکل از کجاست؟
An error occurred while uploading the sketch
avrdude: ser_open(): can’t open device “\\.\COM6”: Access is denied.
سلام عزیز
سریال مانیتور را ببندید و دوباره آپلود را انجام دهید
سلام خسته نباشید
من قطعاتش رو جور کردم و برای پروگرام کردن به مشکل تشخیص ندادن آردوینو مواجه شدم!و با نصب کتابخانه هم رفع نشد
سلام عزیز
تشخیص ندادن برد آردوینو به کتابخانه ربطی نداره، باید درایور بردتون رو نصب کنید