فهرست مطالب:

FinduCar: یک کلید ماشین هوشمند مردم را به محل پارک خودرو راهنمایی می کند: 11 مرحله (همراه با تصاویر)
FinduCar: یک کلید ماشین هوشمند مردم را به محل پارک خودرو راهنمایی می کند: 11 مرحله (همراه با تصاویر)

تصویری: FinduCar: یک کلید ماشین هوشمند مردم را به محل پارک خودرو راهنمایی می کند: 11 مرحله (همراه با تصاویر)

تصویری: FinduCar: یک کلید ماشین هوشمند مردم را به محل پارک خودرو راهنمایی می کند: 11 مرحله (همراه با تصاویر)
تصویری: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, نوامبر
Anonim
FinduCar: یک کلید هوشمند خودرو که مردم را به محل پارک خودرو راهنمایی می کند
FinduCar: یک کلید هوشمند خودرو که مردم را به محل پارک خودرو راهنمایی می کند

به منظور حل مشکلات فوق ، این پروژه پیشنهاد می کند که یک کلید ماشین هوشمند ایجاد شود تا بتواند افراد را به محل پارک خودرو هدایت کند. و برنامه من ادغام GPS با کلید ماشین است. نیازی به استفاده از برنامه تلفن هوشمند برای ردیابی خودرو نیست ، تمام راهنمایی ها فقط روی کلید خودرو نشان داده می شود.

مرحله 1: طرح کاغذی

طرح کاغذی
طرح کاغذی

وقتی افراد دکمه را برای قفل کردن ماشین فشار می دهند ، اطلاعات مکان به طور خودکار در میکروکنترلر ثبت می شود. سپس ، هنگامی که افراد شروع به حرکت به سمت ماشین می کنند ، LED های مختلف روشن می شوند تا به موقعیت خودرو برسند و فرکانس چشمک زدن فاصله تا ماشین را نشان می دهد. آنها می توانند به راحتی LED چشمک زن را دنبال کرده و به سرعت ماشین را پیدا کنند.

مرحله 2: لیست سخت افزار

لیست سخت افزار
لیست سخت افزار

اینها اجزای مورد استفاده در این پروژه هستند. برخی از کیت های ذرات (تخته نرد ، دکمه ، سرصفحه) ، برخی دیگر از وب سایت رسمی Adafruit (Adafruit Feather M0 ، Adafruit Ultimate GPS module ، Lpoly Battery and Coin Cell Battery) و آمازون (NeoPixel Ring - 12 RGB LED) خریداری شده اند.

مرحله 3: طراحی مدار

طراحی مدار
طراحی مدار

Neopixel_LED به PIN 6 Feather M0 متصل است

Button_Unlock به PIN 12 Feather M0 متصل است

Button_Lock به PIN 13 Feather M0 متصل است

مرحله 4: اتصال سخت افزار

اتصال سخت افزار
اتصال سخت افزار
اتصال سخت افزار
اتصال سخت افزار
اتصال سخت افزار
اتصال سخت افزار

سرفصل ها را با Adafruit M0 Feather ، Adafruit Ultimate GPS Featherwing لحیم کنید. دو تخته را روی هم قرار دهید. GPS FeatherWing بدون نیاز به سیم دیگر مستقیماً به برد Feather M0 شما متصل می شود.

مرحله 5: طراحی نرم افزار

طراحی نرم افزار
طراحی نرم افزار

اجزای تست

FIX بخوانید

void setup () {

Serial.println ("تست اکو GPS") ؛ Serial.begin (9600)؛ Serial1.begin (9600)؛ // پیش فرض NMEA GPS baud}

حلقه خالی () {

if (Serial.available ()) {char c = Serial.read ()؛ Serial1.write (c)؛ } if (Serial1.available ()) {char c = Serial1.read ()؛ Serial.write (c)؛ }}

حلقه LED چشمک زن

به Adafruit NeoPixel Examples مراجعه کنید.

توابع محاسبه GPS

آزیموت را محاسبه کنید

// آزیموت را محاسبه کنید

دو آزیموت (دو lat_a ، دو lon_a ، دو lat_b ، دو lon_b) {

دو برابر = 0 ؛ lat_a = lat_a*PI/180 ؛ lon_a = lon_a*PI/180؛ lat_b = lat_b*PI/180 ؛ lon_b = lon_b*PI/180 ؛ d = sin (lat_a)*sin (lat_b)+cos (lat_a)*cos (lat_b)*cos (lon_b-lon_a) ؛ d = sqrt (1-d*d) ؛ d = cos (lat_b)*sin (lon_b-lon_a)/d ؛ d = asin (d)*180/PI ؛ بازگشت d؛ }

زمان روی ساعت LED را که جهت خودرو نیز است محاسبه کنید

// زمان ساعت LED را محاسبه کنید

int led_time (دو زاویه) {

int flag = 0؛ if (angle = 15) {angle_time = angle_time + 1؛ } if (flag == 1) {angle_time = 12 - angle_time؛ } angle_time time؛ }

فاصله بین شخص و وسیله نقلیه او را محاسبه کنید

// فاصله را محاسبه کنید

دو فاصله (دو lat_a ، دو lon_a ، دو lat_b ، دو lon_b) {

دو برابر EARTH_RADIUS = 6378137.0 ؛ دو radLat1 = (lat_a * PI / 180.0) ؛ دو radLat2 = (lat_b * PI / 180.0) ؛ double a = radLat1 - radLat2؛ دو برابر b = (lon_a - lon_b) * PI / 180.0 ؛ double s = 2 * asin (sqrt (pow (sin (a / 2)، 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2)، 2))) ؛ s = s * EARTH_RADIUS / 10000000 ؛ بازگشت s؛ }

عملکردهای صفحه نمایش LED

LED ها را در یک دایره روشن کنید که نشان می دهد حرکت را شروع می کند

// روشنایی حلقه LED یکی یکی نشان می دهد که ناوبری شروع می شود

void colorWipe (uint32_t c ، uint8_t wait) {

برای (uint16_t i = 0 ؛ i strip.setPixelColor (i ، c) ؛ strip.show () ؛ تاخیر (منتظر بمانید) ؛}}

فرکانس LED را بر اساس فاصله دریافت کنید

// دریافت فرکانس LED

فرکانس int (دو فاصله) {

int f = (int) فاصله * 20؛ بازگشت f؛ }

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

// نمایش روی LED

strip.clear ()؛

strip.show ()؛ تأخیر (فرکانس (فاصله شخصی_خودرو)) ؛ // تأخیر (500) ؛ strip.setPixelColor (angle_time ، strip. Color (0 ، 0 ، 255)) ؛ strip.show ()؛ تأخیر (فرکانس (فاصله شخصی_خودرو)) ؛ // تأخیر (500) ؛

// LED را غیرفعال کنید

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0؛ led_flag = 1؛ strip.clear ()؛ strip.show ()؛ }

اصلی

#شامل Adafruit_GPS.h #شامل Adafruit_NeoPixel.h #شامل HardwareSerial.h #شامل دکمه. h #شامل ریاضی. ساعت

#تعریف نئوپیکسل_LED_PIN 6

#تعریف Neopixel_LED_NUM 12 #تعریف دکمه_قفل_پین 13 #تعریف دکمه_بازکردن_پین 12 #تعریف GPS سریال سریال 1

#تعریف GPSECHO نادرست

GPS Adafruit_GPS (& GPSSerial) ؛ نوار Adafruit_NeoPixel = Adafruit_NeoPixel (Neopixel_LED_NUM ، Neopixel_LED_PIN ، NEO_GRB + NEO_KHZ800) ؛ دکمه_قفل (Button_Lock_PIN) ؛ button_unlock (Button_Unlock_PIN)؛ int button_flag = 0؛ int led_flag = 1؛ تایمر uint32_t = millis ()؛ double car_lat، car_lon؛ ماشین_فرد_دور move_direction ؛ ماشین دوگانه_ازیموت ؛ ماشین دو نفره_قلب ؛ int angle_time؛

void setup () {

Serial.begin (115200) ؛ // Serial1.begin (9600)؛ GPS.begin (9600) ؛ // پیش فرض NMEA GPS baud strip.begin ()؛ // این خط را برای روشن کردن RMC (حداقل توصیه شده) و GGA (ثابت کردن داده ها) از جمله ارتفاع GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) کامنت نکنید. // تنظیم نرخ بروزرسانی GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ) ؛ // نرخ بروزرسانی 1 هرتز // درخواست به روزرسانی وضعیت آنتن ، برای سکوت نظر دهید // GPS.sendCommand (PGCMD_ANTENNA) ؛ تأخیر (1000) ؛}

حلقه خالی () {// if (Serial.available ()) {

// char c = Serial.read ()؛ // Serial1.write (c)؛ //} // if (Serial1.available ()) {char c = GPS.read ()؛ if (GPSECHO) if (c) Serial.print (c) ؛ // اگر جمله ای دریافت شد ، می توانیم چک چک را بررسی کنیم ، آن را تجزیه کنیم … اگر (GPS.newNMEAreceived ()) {// یک چیز پیچیده در اینجا این است که اگر جمله NMEA یا داده ها را چاپ کنیم // در نهایت گوش نمی دهیم و گرفتن جملات دیگر! // بنابراین در صورت استفاده از OUTPUT_ALLDATA و تلاش برای چاپ داده ها Serial.println (GPS.lastNMEA ()) بسیار محتاط باشید. // این همچنین پرچم newNMEAreceived () را بر روی false تنظیم می کند اگر (! GPS.parse (GPS.lastNMEA ())) // این نیز پرچم newNMEAreceived () را به بازگشت کاذب تنظیم می کند ؛ // ما نمی توانیم جمله ای را تجزیه کنیم که در این صورت فقط باید منتظر جمله دیگری باشیم} // اگر millis () یا تایمر به هم نزدیک شود ، فقط اگر (timer> millis ()) timer = millis () آن را بازنشانی می کنیم. if (millis () - timer> 2000) {timer = millis ()؛ // تنظیم زمان سنج Serial.print ("\ n زمان:") ؛ Serial.print (GPS.hour، DEC)؛ Serial.print (':')؛ Serial.print (GPS.minute، DEC)؛ Serial.print (':')؛ Serial.print (GPS.seconds ، DEC) ؛ Serial.print ('.')؛ Serial.println (GPS. میلی ثانیه) ؛ Serial.print ("تاریخ:") ؛ Serial.print (GPS.day، DEC)؛ Serial.print ('/')؛ Serial.print (GPS.month، DEC)؛ Serial.print ("/20") ؛ Serial.println (GPS.year، DEC)؛ Serial.print ("رفع:")؛ Serial.print ((int) GPS.fix) ؛ Serial.print ("کیفیت:") ؛ Serial.println ((int) GPS.fixquality)؛ if (GPS.fix) {Serial.print ("مکان:") ؛ Serial.print (GPS.latitude ، 4) ؛ Serial.print (GPS.lat) ؛ Serial.print ("،") ؛ Serial.print (GPS طول ، 4) ؛ Serial.println (GPS.lon) ؛ Serial.print ("مکان (در درجه ، با Google Maps کار می کند):") ؛ Serial.print (GPS.latitudeDerees، 4) ؛ Serial.print ("،") ؛ Serial.println (GPS.longitudeDerees، 4) ؛ Serial.print ("سرعت (گره):") ؛ Serial.println (GPS.speed) ؛ Serial.print ("زاویه:") ؛ Serial.println (GPS.angle) ؛ Serial.print ("ارتفاع:")؛ Serial.println (GPS.altitude) ؛ Serial.print ("ماهواره ها:")؛ Serial.println ((int) GPS.satellites)؛ // ذخیره GPS وسیله نقلیه اگر (button_lock.read ()) {car_lat = GPS.latitudeDegrees؛ car_lon = GPS.longitudeDerees // برای اشکال زدایی Serial.print ("carLatitude:") ؛ Serial.println (car_lat)؛ Serial.print ("carLongitude:")؛ Serial.println (car_lon) ؛ } // شروع به پیدا کردن ماشین کنید اگر (button_flag == 0) {button_flag = button_unlock.read ()؛ } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0، 255، 0)، 500)؛ led_flag = 0؛ } if (button_flag == 1) {car_person_distance = distance (GPS.latitudeDerees، GPS.longitudeDerees، car_lat، car_lon)؛ // محاسبه فاصله // car_person_distance = distance (100.0005 ، 100.0005 ، 100.0 ، 100.0) ؛ // برای اشکال زدایی Serial.println (car_person_distance) ؛ move_direction = GPS.angle ؛ // جهت حرکت (زاویه) را ثبت کنید // move_direction = 100.0 ؛ // ثبت آزیموت (زاویه) car_azimuth = azimuth (GPS.latitudeDerees، GPS.longitudeDerees، car_lat، car_lon)؛ // car_azimuth = azimuth (100.0005 ، 100.0005 ، 100.0 ، 100.0) ؛ // محاسبه زمان در ساعت LED car_person_angle = car_azimuth - move_direction؛ angle_time = led_time (car_person_angle) ؛ // نمایش روی LED strip.clear ()؛ strip.show ()؛ // تأخیر (فرکانس (فاصله خودروی شخصی)) ؛ تأخیر (500) ؛ strip.setPixelColor (angle_time ، strip. Color (0 ، 0 ، 255)) ؛ strip.show ()؛ // تأخیر (فرکانس (فاصله خودروی شخصی)) ؛ تأخیر (500) ؛ // غیر فعال کردن LED اگر (button_flag == 1 && car_person_distance <5.0) {button_flag = 0؛ led_flag = 1؛ strip.clear ()؛ strip.show ()؛ }}} //}}}

مرحله 6: اشکال زدایی در Breadboard

اشکال زدایی در Breadboard
اشکال زدایی در Breadboard
اشکال زدایی در Breadboard
اشکال زدایی در Breadboard
اشکال زدایی در Breadboard
اشکال زدایی در Breadboard

مرحله 7: مونتاژ سخت افزار

مونتاژ سخت افزار
مونتاژ سخت افزار
مونتاژ سخت افزار
مونتاژ سخت افزار
مونتاژ سخت افزار
مونتاژ سخت افزار

مرحله 8: طراحی مسکن الکترونیکی در Adobe Illustrator

طراحی مسکن الکترونیکی در Adobe Illustrator
طراحی مسکن الکترونیکی در Adobe Illustrator

مرحله 9: نمونه اولیه مقوایی

نمونه اولیه مقوایی
نمونه اولیه مقوایی
نمونه اولیه مقوایی
نمونه اولیه مقوایی

این مرحله برای تأیید اندازه محفظه و هر قطعه از مدل استفاده می شود ، و مطمئن شوید که اندازه جعبه و موقعیت دکمه و موقعیت LED متناسب با قطعات الکترونیکی مونتاژ شده است.

مرحله 10: نمونه اولیه تخته سه لا توس

نمونه اولیه تخته سه لا توس
نمونه اولیه تخته سه لا توس
نمونه اولیه تخته سه لا توس
نمونه اولیه تخته سه لا توس

این نمونه اولیه بود. در نهایت یک سوراخ مربع برای اتصال به شارژر به یکی از قطعات اضافه شد.

توصیه شده: