فهرست مطالب:
- مرحله 1: طرح کاغذی
- مرحله 2: لیست سخت افزار
- مرحله 3: طراحی مدار
- مرحله 4: اتصال سخت افزار
- مرحله 5: طراحی نرم افزار
- مرحله 6: اشکال زدایی در Breadboard
- مرحله 7: مونتاژ سخت افزار
- مرحله 8: طراحی مسکن الکترونیکی در Adobe Illustrator
- مرحله 9: نمونه اولیه مقوایی
- مرحله 10: نمونه اولیه تخته سه لا توس
تصویری: FinduCar: یک کلید ماشین هوشمند مردم را به محل پارک خودرو راهنمایی می کند: 11 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:56
به منظور حل مشکلات فوق ، این پروژه پیشنهاد می کند که یک کلید ماشین هوشمند ایجاد شود تا بتواند افراد را به محل پارک خودرو هدایت کند. و برنامه من ادغام 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
مرحله 7: مونتاژ سخت افزار
مرحله 8: طراحی مسکن الکترونیکی در Adobe Illustrator
مرحله 9: نمونه اولیه مقوایی
این مرحله برای تأیید اندازه محفظه و هر قطعه از مدل استفاده می شود ، و مطمئن شوید که اندازه جعبه و موقعیت دکمه و موقعیت LED متناسب با قطعات الکترونیکی مونتاژ شده است.
مرحله 10: نمونه اولیه تخته سه لا توس
این نمونه اولیه بود. در نهایت یک سوراخ مربع برای اتصال به شارژر به یکی از قطعات اضافه شد.
توصیه شده:
سیستم هشدار پارک معکوس خودرو آردوینو - گام به گام: 4 مرحله
سیستم هشدار پارک معکوس خودرو آردوینو | گام به گام: در این پروژه ، من یک مدار ساده سنسور پارک معکوس اتومبیل آردوینو را با استفاده از سنسور اولتراسونیک Arduino UNO و HC-SR04 طراحی می کنم. این سیستم هشدار معکوس اتومبیل مبتنی بر آردوینو می تواند برای ناوبری خودکار ، ربات رنج و سایر محدوده های دوربرد استفاده شود
دستیار پارک آردوینو - هر بار اتومبیل خود را در نقطه مناسب پارک کنید: 5 مرحله (همراه با تصاویر)
Arduino Parking Assistant - هر بار اتومبیل خود را در نقطه صحیح پارک کنید: در این پروژه ، به شما نشان خواهم داد که چگونه می توانید دستیار پارک خود را با استفاده از Arudino بسازید. این دستیار پارک با اتومبیل شما فاصله را اندازه گیری می کند و شما را راهنمایی می کند تا آن را با استفاده از یک صفحه نمایش LCD و یک LED در محل مناسب پارک کنید ، که به تدریج
سیستم هشدار پارک خودرو با استفاده از سنسور PIR- DIY: 7 مرحله (همراه با تصاویر)
سیستم هشدار پارک خودرو با استفاده از سنسور PIR- DIY: آیا تا به حال هنگام پارک برای وسیله نقلیه مانند ماشین ، کامیون ، دوچرخه یا هر وسیله دیگری با مشکل روبرو شده اید ، در این قسمت آموزشی به شما نشان خواهم داد که چگونه با استفاده از یک زنگ خطر پارک ساده خودرو بر این مشکل غلبه کنید. سیستم با استفاده از سنسور PIR در این سیستم که
ربات هوشمند DIY ردیابی ماشین ردیابی ماشین ردیابی خودرو حساس به نور: 7 مرحله
دستگاه DIY Robot Smart Tracking Car Tracking Car Photosensitive: طراحی شده توسط SINONING ROBOT شما می توانید از ربات ردیابی ماشین خرید کنید بچرخید تا
کلید کنترل از راه دور بلوتوث - اصلاح مجدد. کلید روشن هنوز کار می کند ، بدون نوشتن اضافی .: 9 مرحله (همراه با تصاویر)
کلید کنترل از راه دور بلوتوث - اصلاح مجدد. چراغ روشن هنوز کار می کند ، بدون نوشتن اضافی .: به روز رسانی 25 نوامبر 2017 - برای نسخه قدرتمند این پروژه که می تواند کیلووات بار را کنترل کند ، به Retrofit BLE Control در بارهای با قدرت بالا مراجعه کنید - بدون نیاز به نیاز اضافی به روز رسانی 15 نوامبر 2017 & ndash؛ برخی از تخته های BLE / نرم افزار پخت غذای