جدول المحتويات:
- الخطوة 1: رسم ورقي
- الخطوة 2: قائمة الأجهزة
- الخطوة 3: تصميم الدوائر
- الخطوة 4: توصيل الأجهزة
- الخطوة الخامسة: تصميم البرمجيات
- الخطوة 6: التصحيح على اللوح
- الخطوة 7: تجميع الأجهزة
- الخطوة 8: تصميم مسكن الإلكترونيات في Adobe Illustrator
- الخطوة 9: نموذج من الورق المقوى
- الخطوة 10: نموذج خشب البتولا الرقائقي
فيديو: FinduCar: مفتاح سيارة ذكي يوجه الناس إلى مكان وقوف السيارة: 11 خطوة (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
من أجل حل المشكلات المذكورة أعلاه ، يقترح هذا المشروع تطوير مفتاح سيارة ذكي يمكن أن يوجه الأشخاص إلى المكان الذي أوقفوا فيه السيارة. وخطتي هي دمج GPS في مفتاح السيارة. ليست هناك حاجة لاستخدام تطبيق الهاتف الذكي لتتبع السيارة ، كل الإرشادات ستظهر فقط على مفتاح السيارة.
الخطوة 1: رسم ورقي
عندما يضغط الأشخاص على الزر لقفل السيارة ، يمكن تسجيل معلومات الموقع في وحدة التحكم الدقيقة تلقائيًا. بعد ذلك ، عندما يبدأ الأشخاص في التنقل إلى السيارة ، يضيء مؤشر LED المختلف للتوجيه إلى موضع السيارة ويظهر التردد الوامض المسافة إلى السيارة. يمكنهم بسهولة متابعة مؤشر LED الوامض والعثور على السيارة بسرعة.
الخطوة 2: قائمة الأجهزة
هذه هي المكونات المستخدمة في هذا المشروع. بعضها من مجموعات الجسيمات (اللوح ، الزر ، الرؤوس) ، والبعض الآخر يتم شراؤه من موقع Adafruit الرسمي (Adafruit Feather M0 ، Adafruit Ultimate GPS module ، Lpoly Battery و Coin Cell Battery) و Amazon (NeoPixel Ring - 12 RGB LED).
الخطوة 3: تصميم الدوائر
Neopixel_LED متصل برقم التعريف الشخصي 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 الخاصة بك دون أي أسلاك أخرى.
الخطوة الخامسة: تصميم البرمجيات
مكونات الاختبار
اقرأ فيكس
الإعداد باطل() {
Serial.println ("اختبار صدى GPS") ؛ Serial.begin (9600) ؛ Serial1.begin (9600) ؛ // البث بالباود الافتراضي NMEA GPS}
حلقة فارغة() {
إذا (Serial.available ()) {char c = Serial.read () ؛ Serial1.write (ج) ؛ } if (Serial1.available ()) {char c = Serial1.read ()؛ Serial.write (ج) ؛ }}
وميض حلقة LED
انظر أمثلة Adafruit NeoPixel.
وظائف حساب 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) ؛ د = الجذر التربيعي (1-د * د) ؛ d = cos (lat_b) * sin (lon_b-lon_a) / د ؛ د = أسين (د) * 180 / بي ؛ عودة د ؛ }
احسب الوقت على ساعة LED ، وهو أيضًا اتجاه السيارة
// احسب الوقت على ساعة LED
int led_time (زاوية مزدوجة) {
علم int = 0 ؛ إذا (الزاوية = 15) {angle_time = angle_time + 1 ؛ } if (flag == 1) {angle_time = 12 - angle_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) ؛ ضعف a = radLat1 - radLat2 ؛ مزدوج ب = (lon_a - lon_b) * PI / 180.0 ؛ مزدوج s = 2 * asin (sqrt (pow (sin (a / 2)، 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2)، 2))) ؛ ق = ق * EARTH_RADIUS / 10000000 ؛ عائدات؛ }
وظائف شاشة LED
تضيء مصابيح LED في دائرة توضح أنها تبدأ في التنقل
// إضاءة حلقة LED واحدة تلو الأخرى توضح أن التنقل يبدأ
void colorWipe (uint32_t c، uint8_t wait) {
لـ (uint16_t i = 0؛ i strip.setPixelColor (i، c)؛ strip.show ()؛ delay (wait)؛}}
احصل على تردد LED على أساس المسافة
// احصل على تردد LED
تردد int (مسافة مزدوجة) {
int f = مسافة (int) * 20 ؛ العودة و ؛ }
وميض مؤشر LED محدد يشير إلى اتجاه السيارة
// العرض على LED
strip.clear () ؛
عرض الشريط()؛ التأخير (التردد (السيارة_المسافة_المسافة)) ؛ // تأخير (500) ؛ strip.setPixelColor (angle_time ، strip. Color (0 ، 0 ، 255)) ؛ عرض الشريط()؛ التأخير (التردد (السيارة_المسافة_المسافة)) ؛ // تأخير (500) ؛
// تعطيل الصمام
إذا (button_flag == 1 && car_person_distance <5.0) {button_flag = 0 ؛ led_flag = 1 ؛ strip.clear () ؛ عرض الشريط()؛ }
الأساسية
# تضمين Adafruit_GPS.h # تتضمن Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h
#define Neopixel_LED_PIN 6
#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1
#define GPSECHO خطأ
Adafruit_GPS GPS (& GPSSerial) ؛ شريط Adafruit_NeoPixel = Adafruit_NeoPixel (Neopixel_LED_NUM و Neopixel_LED_PIN و NEO_GRB + NEO_KHZ800) ؛ زر button_lock (Button_Lock_PIN) ؛ زر button_unlock (Button_Unlock_PIN) ؛ int button_flag = 0 ؛ int led_flag = 1 ؛ uint32_t timer = مللي () ؛ car_lat مزدوج ، car_lon ؛ سيارة - شخص - مسافة مزدوجة ؛ حركة مزدوجة مزدوج car_azimuth. مزدوج car_person_angle ؛ زاوية_وقت كثافة العمليات ؛
الإعداد باطل() {
Serial.begin (115200) ؛ // Serial1.begin (9600) ؛ GPS.begin (9600) ؛ // الافتراضي NMEA GPS بالباود strip.begin () ؛ // uncomment هذا الخط لتشغيل 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 () ؛ إذا (GPSECHO) إذا (ج) Serial.print (c) ؛ // إذا تم استلام جملة ، فيمكننا التحقق من المجموع الاختباري ، وتحليله … اصطياد الجمل الأخرى! // لذا كن حذرًا جدًا عند استخدام OUTPUT_ALLDATA وحاول طباعة البيانات Serial.println (GPS.lastNMEA ()) ؛ // يقوم هذا أيضًا بتعيين علامة NMEAreceived () الجديدة إلى false إذا (! GPS.parse (GPS.lastNMEA ())) // وهذا أيضًا يعين علامة NMEAreceived () الجديدة إلى إرجاع خاطئ ؛ // يمكننا أن نفشل في تحليل جملة وفي هذه الحالة يجب علينا فقط انتظار آخر} // إذا كان الميلي () أو المؤقت يلتف حوله ، فسنقوم بإعادة تعيينه إذا (timer> millis ()) timer = millis ()؛ if (millis () - timer> 2000) {timer = millis () ؛ // إعادة تعيين المؤقت Serial.print ("\ nTime:") ؛ Serial.print (GPS.hour ، DEC) ؛ Serial.print (':') ؛ Serial.print (GPS.minute ، DEC) ؛ Serial.print (':') ؛ Serial.print (GPS.seconds ، DEC) ؛ Serial.print (".") ؛ Serial.println (GPS.milliseconds) ؛ 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 ("Location:") ؛ Serial.print (GPS.latitude، 4) ؛ Serial.print (GPS.lat) ؛ Serial.print ("،") ؛ Serial.print (GPS.longitude، 4) ؛ Serial.println (GPS.lon) ؛ Serial.print ("الموقع (بالدرجات ، يعمل مع خرائط Google):") ؛ Serial.print (GPS.latitudeDegrees، 4) ؛ Serial.print ("،") ؛ Serial.println (GPS.longitudeDegrees، 4) ؛ Serial.print ("السرعة (عقدة):") ؛ Serial.println (GPS.speed) ؛ Serial.print ("Angle:") ؛ 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.longitudeDegrees ؛ // من أجل التصحيح 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 = مسافة (GPS.latitudeDegrees، GPS.longitudeDegrees، car_lat، car_lon)؛ // احسب المسافة // car_person_distance = المسافة (100.0005 ، 100.0005 ، 100.0 ، 100.0) ؛ // من أجل تصحيح Serial.println (car_person_distance) ؛ move_direction = GPS.angle ؛ // سجل الاتجاه المتحرك (الزاوية) // move_direction = 100.0 ؛ // سجل السمت (الزاوية) car_azimuth = السمت (GPS.latitudeDegrees ، GPS.longitudeDegrees ، car_lat ، car_lon) ؛ // car_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 واضح () ؛ عرض الشريط()؛ // التأخير (التردد (السيارة_المسافة_المسافة)) ؛ تأخير (500) ؛ strip.setPixelColor (angle_time ، strip. Color (0 ، 0 ، 255)) ؛ عرض الشريط()؛ // التأخير (التردد (السيارة_المسافة_المسافة)) ؛ تأخير (500) ؛ // تعطيل LED إذا (button_flag == 1 && car_person_distance <5.0) {button_flag = 0 ؛ led_flag = 1 ؛ strip.clear () ؛ عرض الشريط()؛ }}} //}}}
الخطوة 6: التصحيح على اللوح
الخطوة 7: تجميع الأجهزة
الخطوة 8: تصميم مسكن الإلكترونيات في Adobe Illustrator
الخطوة 9: نموذج من الورق المقوى
تُستخدم هذه الخطوة لتأكيد حجم الهيكل وكل قطعة من النموذج ، والتأكد من أن حجم الصندوق وموضع الزر وموضع LED يناسب المكونات الإلكترونية المجمعة.
الخطوة 10: نموذج خشب البتولا الرقائقي
كان هذا هو النموذج الأولي. تمت إضافة فتحة مربعة للتوصيل بالشاحن إلى إحدى القطع أخيرًا.
موصى به:
نظام اردوينو لتنبيه وقوف السيارة عند الرجوع للخلف - خطوات خطوة: 4 خطوات
نظام اردوينو لتنبيه وقوف السيارة عند الرجوع للخلف | خطوات بخطوة: في هذا المشروع ، سأصمم دائرة مستشعر لعكس مواقف السيارات من Arduino باستخدام مستشعر الموجات فوق الصوتية Arduino UNO و HC-SR04. يمكن استخدام نظام التنبيه العكسي للسيارة المستند إلى Arduino للتنقل الذاتي ومجموعة الروبوتات وغيرها من النطاقات
دخول السيارة البيومترية - سيارة بدون مفتاح حقيقية: 4 خطوات
الدخول البيومتري للسيارة - سيارة بدون مفتاح حقيقية: قبل بضعة أشهر سألتني ابنتي ، لماذا لا تكون السيارات الحديثة مجهزة بنظام الدخول المتري الحيوي ، حتى مع وجود الهاتف الخلوي به. منذ ذلك الحين كان يعمل على تطبيقه وتمكن أخيرًا من تثبيت واختبار شيء ما على T
كيفية بناء جهاز استشعار وقوف السيارة لحل ألم العثور على مكان مجاني: 12 خطوة
كيفية بناء جهاز استشعار وقوف السيارة لحل ألم العثور على مكان مجاني: في هذا المشروع ، سنقوم ببناء جهاز استشعار بسيط لوقوف السيارات باستخدام Raspberry Pi. اتضح أنه يتعين علي مواجهة هذا السؤال كل صباح: هل مكان وقوف السيارات الوحيد الموجود أمام مكتبي مأخوذ بالفعل؟ لأنه عندما يكون الأمر كذلك بالفعل ، يجب أن أتجول في
كيفية التحكم في مفتاح Sonoff الأساسي الذكي المستند إلى ESP8266 بهاتف ذكي: 4 خطوات (بالصور)
كيفية التحكم في ESP8266 القائم على Sonoff Basic Smart Switch بهاتف ذكي: Sonoff هو عبارة عن خط جهاز للمنزل الذكي تم تطويره بواسطة ITEAD. يعد Sonoff Basic أحد أكثر الأجهزة مرونة ورخيصة من هذا الخط. إنه مفتاح يعمل بتقنية Wi-Fi يعتمد على شريحة رائعة ، ESP8266. توضح هذه المقالة كيفية إعداد Cl
السيارة البعيدة التي يمكن أن تذهب إلى أي مكان: 6 خطوات
السيارة البعيدة التي يمكن أن تذهب إلى أي مكان: هذه سيارة يمكنها الذهاب إلى أي مكان تريده بالماء والأرض والعديد من الأماكن الأخرى !! لجعل هذه السيارة الأشياء التي ستحتاجها هي: - 1.سيارة قديمة بها محرك من العجلات الخلفية ومحرك دوران أمامي 2. تحتاج بطاريتين من 9 فولت 3.2 أو 1