विषयसूची:

FinduCar: एक स्मार्ट कार की चाबी लोगों को कार पार्क करने की जगह तक ले जाती है: 11 कदम (चित्रों के साथ)
FinduCar: एक स्मार्ट कार की चाबी लोगों को कार पार्क करने की जगह तक ले जाती है: 11 कदम (चित्रों के साथ)
Anonim
FinduCar: एक स्मार्ट कार की चाबी लोगों को कार पार्क करने की जगह तक ले जाती है
FinduCar: एक स्मार्ट कार की चाबी लोगों को कार पार्क करने की जगह तक ले जाती है

उपरोक्त समस्याओं को हल करने के लिए, यह परियोजना एक स्मार्ट कार कुंजी विकसित करने का प्रस्ताव करती है जो लोगों को कार पार्क करने के लिए निर्देशित कर सकती है। और मेरी योजना कार की चाबी में जीपीएस को एकीकृत करने की है। कार को ट्रैक करने के लिए स्मार्टफोन ऐप का उपयोग करने की कोई आवश्यकता नहीं है, सारा मार्गदर्शन कार की चाबी पर ही दिखाई देगा।

चरण 1: पेपर स्केच

पेपर स्केच
पेपर स्केच

जब लोग कार को लॉक करने के लिए बटन दबाते हैं, तो स्थान की जानकारी माइक्रोकंट्रोलर में स्वचालित रूप से दर्ज की जा सकती है। फिर, जब लोग कार में नेविगेट करना शुरू करते हैं, तो कार की स्थिति को निर्देशित करने के लिए अलग-अलग एलईडी को रोशन किया जाता है और ब्लिंकिंग आवृत्ति कार की दूरी को दर्शाती है। वे आसानी से पलक झपकते एलईडी का अनुसरण कर सकते हैं और जल्दी से कार ढूंढ सकते हैं।

चरण 2: हार्डवेयर सूची

हार्डवेयर सूची
हार्डवेयर सूची

ये इस परियोजना में उपयोग किए जाने वाले घटक हैं। कुछ कण किट (ब्रेडबोर्ड, बटन, हेडर) से हैं, अन्य Adafruit की आधिकारिक वेबसाइट (Adafruit Feather M0, Adafruit Ultimate GPS मॉड्यूल, Lpoly बैटरी और कॉइन सेल बैटरी) और Amazon (NeoPixel Ring - 12 RGB LED) से खरीदे जाते हैं।

चरण 3: सर्किट डिजाइन

सर्किट डिज़ाइन
सर्किट डिज़ाइन

Neopixel_LED पंख M0. के पिन 6 से जुड़ा है

Button_Unlock पंख M0. के पिन 12 से जुड़ा है

Button_Lock पंख M0. के पिन 13 से जुड़ा है

चरण 4: हार्डवेयर कनेक्शन

हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन

हेडर्स को एडफ्रूट एम0 फेदर, एडफ्रूट अल्टीमेट जीपीएस फेदरविंग से मिलाएं। दो बोर्डों को एक साथ ढेर करें। GPS FeatherWing बिना किसी अधिक तार के आपके पंख M0 बोर्ड में सीधे प्लग करता है।

चरण 5: सॉफ्टवेयर डिजाइन

सॉफ्टवेर डिज़ाइन
सॉफ्टवेर डिज़ाइन

परीक्षण घटक

एक फिक्स पढ़ें

व्यर्थ व्यवस्था() {

Serial.println ("जीपीएस इको टेस्ट"); सीरियल.बेगिन (९६००); सीरियल1.बेगिन (९६००); // डिफ़ॉल्ट एनएमईए जीपीएस बॉड}

शून्य लूप () {

अगर (सीरियल.उपलब्ध ()) {चार सी = सीरियल.रीड (); सीरियल1.लिखें (सी); } अगर (सीरियल1.उपलब्ध ()) {चार सी = सीरियल1.रीड (); सीरियल.राइट (सी); } }

ब्लिंक एलईडी रिंग

Adafruit NeoPixel उदाहरण देखें।

जीपीएस गणना कार्य

अज़ीमुथ की गणना करें

// अज़ीमुथ की गणना करें

डबल अज़ीमुथ (डबल लैट_ए, डबल लोन_ए, डबल लैट_बी, डबल लोन_बी) {

डबल डी = 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)/d; डी = असिन (डी) * 180 / पीआई; वापसी घ; }

एलईडी घड़ी पर समय की गणना करें, जो वाहन की दिशा भी है

// एलईडी घड़ी पर समय की गणना करें

इंट एलईडी_टाइम (डबल एंगल) {

इंट फ्लैग = 0; अगर (कोण = 15) {कोण_समय = कोण_समय + 1; } अगर (ध्वज == 1) {angle_time = 12 - angle_time; } वापसी कोण_समय; }

व्यक्ति और उसके वाहन के बीच की दूरी की गणना करें

// दूरी की गणना करें

दुगनी दूरी(डबल lat_a, double lon_a, double lat_b, double lon_b) {

डबल EARTH_RADIUS = 6378137.0; डबल रेडलैट1 = (lat_a * PI / 180.0); डबल रेडलैट २ = (lat_b * PI / १८०.०); डबल ए = रेडलैट1 - रेडलाट 2; डबल बी = (लोन_ए - लोन_बी) * पीआई / १८०.०; डबल एस = 2 * असिन (वर्ग (पाउ (पाप (ए / 2), 2) + कॉस (रेडलैट 1) * कॉस (रेडलाट 2) * पाउ (पाप (बी / 2), 2))); एस = एस * EARTH_RADIUS / 10000000; वापसी एस; }

एलईडी प्रदर्शन कार्य

एक सर्कल में एल ई डी लाइट करें जो यह दर्शाता है कि यह नेविगेट करना शुरू कर देता है

// एलईडी रिंग लाइटिंग एक-एक करके दिखाती है कि नेविगेशन शुरू हो गया है

शून्य रंगवाइप (uint32_t c, uint8_t प्रतीक्षा करें) {

for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); देरी (प्रतीक्षा); }}

दूरी के आधार पर एलईडी आवृत्ति प्राप्त करें

// एलईडी आवृत्ति प्राप्त करें

इंट फ्रीक्वेंसी (डबल डिस्टेंस) {

इंट एफ = (इंट)दूरी * 20; वापसी च; }

कार की दिशा का संकेत देते हुए निश्चित एलईडी को झपकाएं

// एलईडी पर प्रदर्शित करें

स्ट्रिप.क्लियर ();

कपड़े उतारने का प्रदर्शन(); देरी (आवृत्ति (car_person_distance)); // देरी (500); स्ट्रिप.सेट पिक्सेलकलर (एंगल_टाइम, स्ट्रिप। कलर (0, 0, 255)); कपड़े उतारने का प्रदर्शन(); देरी (आवृत्ति (car_person_distance)); // देरी (500);

// एलईडी अक्षम करें

अगर (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; एलईडी_फ्लैग = 1; स्ट्रिप.क्लियर (); कपड़े उतारने का प्रदर्शन(); }

मुख्य

#include Adafruit_GPS.h#include Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h

#neopixel_LED_PIN 6 परिभाषित करें

#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1

#GPSECHO को गलत परिभाषित करें

Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel स्ट्रिप = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); बटन बटन_लॉक (बटन_लॉक_पिन); बटन बटन_अनलॉक (बटन_अनलॉक_पिन); इंट बटन_फ्लैग = 0; इंट एलईडी_फ्लैग = 1; uint32_t टाइमर = मिली (); डबल कार_लैट, कार_लॉन; डबल कार_पर्सन_डिस्टेंस; डबल चाल_दिशा; डबल कार_अज़ीमुथ; डबल कार_पर्सन_एंगल; इंट एंगल_टाइम;

व्यर्थ व्यवस्था() {

सीरियल.बेगिन (115200); // सीरियल1.बेगिन (९६००); जीपीएस.बेगिन (९६००); // डिफ़ॉल्ट NMEA GPS बॉड स्ट्रिप.बेगिन (); // ऊंचाई वाले GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) सहित RMC (अनुशंसित न्यूनतम) और GGA (डेटा ठीक करें) चालू करने के लिए इस लाइन को अनकम्मेंट करें; // अद्यतन दर GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ) सेट करें; // 1 हर्ट्ज अपडेट दर // एंटीना स्थिति पर अपडेट का अनुरोध करें, चुप रहने के लिए टिप्पणी करें // GPS.sendCommand(PGCMD_ANTENNA); देरी (1000);}

शून्य लूप () {// अगर (सीरियल उपलब्ध ()) {

// चार सी = सीरियल.रीड (); // सीरियल 1.राइट (सी); // } // अगर (सीरियल 1.उपलब्ध ()) {चार सी = जीपीएस.रीड (); अगर (जीपीएसईसीएचओ) अगर (सी) सीरियल.प्रिंट (सी); // यदि कोई वाक्य प्राप्त होता है, तो हम चेकसम की जांच कर सकते हैं, इसे पार्स कर सकते हैं … अगर (GPS.newNMEAreceived ()) {// यहां एक मुश्किल बात यह है कि अगर हम NMEA वाक्य, या डेटा प्रिंट करते हैं // हम अंत में नहीं सुनते हैं और अन्य वाक्यों को पकड़ना! // इसलिए बहुत सावधान रहें यदि OUTPUT_ALLDATA का उपयोग कर रहे हैं और डेटा Serial.println (GPS.lastNMEA ()) को प्रिंट करने का प्रयास कर रहे हैं; // यह newNMEAreceived() ध्वज को गलत पर भी सेट करता है if (!GPS.parse(GPS.lastNMEA())) // यह newNMEAreceived() ध्वज को झूठी वापसी पर भी सेट करता है; // हम एक वाक्य को पार्स करने में विफल हो सकते हैं जिस स्थिति में हमें बस एक और इंतजार करना चाहिए } // यदि मिलिस () या टाइमर चारों ओर लपेटता है, तो हम इसे बस रीसेट कर देंगे अगर (टाइमर> मिलिस ()) टाइमर = मिलिस (); अगर (मिली () - टाइमर> 2000) {टाइमर = मिली (); // टाइमर को रीसेट करें सीरियल.प्रिंट ("\ n समय:"); सीरियल.प्रिंट (GPS.hour, DEC); सीरियल.प्रिंट (':'); सीरियल.प्रिंट (जीपीएस.मिनट, डीईसी); सीरियल.प्रिंट (':'); सीरियल.प्रिंट (जीपीएस.सेकंड, डीईसी); सीरियल.प्रिंट ('।'); Serial.println(GPS.milliseconds); सीरियल.प्रिंट ("दिनांक:"); सीरियल.प्रिंट (GPS.day, DEC); सीरियल.प्रिंट ('/'); सीरियल.प्रिंट (जीपीएस.माह, डीईसी); सीरियल.प्रिंट ("/20"); Serial.println (GPS.year, DEC); सीरियल.प्रिंट ("फिक्स:"); Serial.print((int)GPS.fix); सीरियल.प्रिंट ("गुणवत्ता:"); Serial.println((int)GPS.fixquality); अगर (जीपीएस.फिक्स) { सीरियल.प्रिंट ("स्थान:"); सीरियल.प्रिंट (जीपीएस.अक्षांश, 4); सीरियल.प्रिंट (जीपीएस.लेट); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (जीपीएस। देशांतर, 4); Serial.println (GPS.lon); Serial.print ("स्थान (डिग्री में, Google मानचित्र के साथ काम करता है):"); सीरियल.प्रिंट (जीपीएस.अक्षांशडिग्री, 4); सीरियल.प्रिंट ("", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print ("गति (गांठ):"); Serial.println (GPS.speed); सीरियल.प्रिंट ("कोण:"); Serial.println (GPS.angle); सीरियल.प्रिंट ("ऊंचाई:"); Serial.println (GPS.altitude); सीरियल.प्रिंट ("उपग्रह:"); Serial.println((int)GPS.satellites); // वाहन के जीपीएस को सेव करें अगर (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // डिबग के लिए सीरियल.प्रिंट ("कारलैटिट्यूड:"); Serial.println(car_lat); सीरियल.प्रिंट ("कार लॉन्गिट्यूड:"); 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); एलईडी_फ्लैग = 0; } अगर (button_flag == 1) {car_person_distance = दूरी (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // दूरी की गणना करें //car_person_distance = दूरी(१००.०००५, १००.०००५, १००.०, १००.०); // डिबग के लिए Serial.println (car_person_distance); move_direction = GPS.angle;//चलती दिशा (कोण) रिकॉर्ड करें//move_direction = 100.0; // अज़ीमुथ (कोण) को रिकॉर्ड करें car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimuth = azimuth(१००.०००५, १००.०००५, १००.०, १००.०); // एलईडी घड़ी पर समय की गणना करें car_person_angle = car_azimuth - move_direction; एंगल_टाइम = एलईडी_टाइम (कार_पर्सन_एंगल); // एलईडी पट्टी पर प्रदर्शित करें। स्पष्ट (); कपड़े उतारने का प्रदर्शन(); // देरी (आवृत्ति (car_person_distance)); देरी (500); स्ट्रिप.सेट पिक्सेलकलर (एंगल_टाइम, स्ट्रिप। कलर (0, 0, 255)); कपड़े उतारने का प्रदर्शन(); // देरी (आवृत्ति (car_person_distance)); देरी (500); // एलईडी अक्षम करें अगर (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; एलईडी_फ्लैग = 1; स्ट्रिप.क्लियर (); कपड़े उतारने का प्रदर्शन(); } } } // } } }

चरण 6: ब्रेडबोर्ड पर डीबग करें

ब्रेडबोर्ड पर डीबग करें
ब्रेडबोर्ड पर डीबग करें
ब्रेडबोर्ड पर डीबग करें
ब्रेडबोर्ड पर डीबग करें
ब्रेडबोर्ड पर डीबग करें
ब्रेडबोर्ड पर डीबग करें

चरण 7: हार्डवेयर असेंबली

हार्डवेयर असेंबली
हार्डवेयर असेंबली
हार्डवेयर असेंबली
हार्डवेयर असेंबली
हार्डवेयर असेंबली
हार्डवेयर असेंबली

चरण 8: एडोब इलस्ट्रेटर में इलेक्ट्रॉनिक्स हाउसिंग डिज़ाइन

एडोब इलस्ट्रेटर में इलेक्ट्रॉनिक्स हाउसिंग डिज़ाइन
एडोब इलस्ट्रेटर में इलेक्ट्रॉनिक्स हाउसिंग डिज़ाइन

चरण 9: कार्डबोर्ड प्रोटोटाइप

कार्डबोर्ड प्रोटोटाइप
कार्डबोर्ड प्रोटोटाइप
कार्डबोर्ड प्रोटोटाइप
कार्डबोर्ड प्रोटोटाइप

इस कदम का उपयोग आवास के आकार और मॉडल के हर टुकड़े की पुष्टि करने के लिए किया जाता है, यह सुनिश्चित करता है कि बॉक्स का आकार, और बटन की स्थिति, और एलईडी स्थिति इकट्ठे इलेक्ट्रॉनिक घटकों में फिट हो।

चरण 10: बिर्च प्लाईवुड प्रोटोटाइप

बिर्च प्लाईवुड प्रोटोटाइप
बिर्च प्लाईवुड प्रोटोटाइप
बिर्च प्लाईवुड प्रोटोटाइप
बिर्च प्लाईवुड प्रोटोटाइप

यह प्रारंभिक प्रोटोटाइप था। चार्जर में प्लग करने के लिए एक चौकोर छेद अंत में एक टुकड़े में जोड़ा गया।

सिफारिश की: