Բովանդակություն:

FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է. 11 քայլ (նկարներով)
FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է. 11 քայլ (նկարներով)

Video: FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է. 11 քայլ (նկարներով)

Video: FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է. 11 քայլ (նկարներով)
Video: Угрюм-река (1969) (1 серия) фильм 2024, Նոյեմբեր
Anonim
FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է
FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է

Վերոնշյալ խնդիրները լուծելու համար այս նախագիծն առաջարկում է մշակել մեքենայի խելացի բանալին, որը կարող է մարդկանց ուղղորդել այնտեղ, որտեղ նրանք կայանել են մեքենան: Եվ իմ ծրագիրը GPS- ի ինտեգրումն է մեքենայի բանալին: Սմարթֆոնների հավելվածը մեքենան հետևելու կարիք չկա, բոլոր ուղեցույցները պարզապես կցուցադրվեն մեքենայի բանալին:

Քայլ 1: Թղթի ուրվագիծ

Թղթի ուրվագիծ
Թղթի ուրվագիծ

Երբ մարդիկ սեղմում են մեքենան կողպելու կոճակը, տեղադրության տվյալները կարող են ինքնաբերաբար գրանցվել միկրոկառավարիչի մեջ: Այնուհետև, երբ մարդիկ սկսում են նավարկվել դեպի մեքենա, տարբեր լուսադիոդներ են լուսավորվում և ուղղվում մեքենայի դիրքին, և թարթելու հաճախականությունը ցույց է տալիս մեքենայի հեռավորությունը: Նրանք հեշտությամբ կարող են հետեւել թարթող լուսադիոդին եւ արագ գտնել մեքենան:

Քայլ 2: Սարքավորումների ցուցակ

Սարքավորումների ցուցակ
Սարքավորումների ցուցակ

Սրանք այն բաղադրիչներն են, որոնք օգտագործվում են այս նախագծում: Ոմանք մասնիկների հավաքածուներից են (տախտակ, կոճակ, վերնագրեր), մյուսները գնում են Adafruit- ի պաշտոնական կայքից (Adafruit Feather M0, Adafruit Ultimate GPS մոդուլ, Lpoly մարտկոց և մետաղադրամ բջջային մարտկոց) և Amazon- ից (NeoPixel Ring - 12 RGB LED):

Քայլ 3: Շղթայի ձևավորում

Շղթայի ձևավորում
Շղթայի ձևավորում

Neopixel_LED- ը միացված է փետուր M0- ի PIN 6 -ին

Button_Unlock- ը միացված է փետուր M0- ի PIN 12 -ին

Button_Lock- ը միացված է փետուր M0- ի PIN 13 -ին

Քայլ 4: Սարքաշարի միացում

Սարքաշարի միացում
Սարքաշարի միացում
Սարքաշարի միացում
Սարքաշարի միացում
Սարքաշարի միացում
Սարքաշարի միացում

Headոդեք վերնագրերը Adafruit M0 փետուրով, Adafruit Ultimate GPS Featherwing- ով: Տեղադրեք երկու տախտակները միասին: GPS FeatherWing- ը միանում է անմիջապես ձեր Feather M0 տախտակին ՝ առանց որևէ լարերի:

Քայլ 5: Softwareրագրաշարի ձևավորում

Softwareրագրային ապահովման նախագծում
Softwareրագրային ապահովման նախագծում

Փորձարկման բաղադրիչներ

Կարդացեք 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 (); Սերիա. Գրել (գ); }}

Թարթել LED մատանին

Տես Adafruit NeoPixel- ի օրինակներ:

GPS հաշվարկման գործառույթներ

Հաշվիր ազիմուտը

// Հաշվիր ազիմուտը

կրկնակի ազիմուտ (կրկնակի lat_a, կրկնակի lon_a, կրկնակի lat_b, կրկնակի lon_b) {

կրկնակի d = 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 = ասին (դ)*180/PI; վերադարձ d; }

Հաշվարկեք LED ժամացույցի ժամանակը, որը նաև մեքենայի ուղղությունն է

// Հաշվարկեք LED ժամացույցի ժամանակը

int led_time (երկակի անկյուն) {

int դրոշ = 0; if (անկյուն = 15) {angle_time = angle_time + 1; } if (դրոշ == 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; կրկնակի b = (lon_a - lon_b) * PI / 180.0; կրկնակի s = 2 * ասին (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; վերադարձ s; }

LED ցուցադրման գործառույթներ

Լուսավորեք LED- ները շրջանագծով, որը ցույց է տալիս, որ այն սկսում է նավարկվել

// LED օղակի լուսավորությունը մեկ առ մեկ ցույց է տալիս, որ նավարկությունը սկսվում է

դատարկ գույն Սրբել (uint32_t գ, uint8_t սպասել) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); ուշացում (սպասել);}}

Ստացեք LED հաճախականությունը `ելնելով հեռավորությունից

// Ստացեք LED հաճախականություն

int հաճախականություն (կրկնակի հեռավորություն) {

int f = (int) հեռավորություն * 20; վերադարձ f; }

Թարթեք որոշակի LED- ը ՝ նշելով մեքենայի ուղղությունը

// Displayուցադրել LED- ով

strip.clear ();

strip.show (); ուշացում (հաճախականություն (մեքենայի_ձեր_հեռավորություն)); // ուշացում (500); strip.setPixelColor (անկյունային_ժամ, ժապավեն. գույն (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 (); }

Հիմնական

#ներառել Adafruit_GPS.h #ներառել Adafruit_NeoPixel.h #ներառել HardwareSerial.h #ներառել կոճակը: h #ներառել մաթեմատիկան: h

#սահմանեք Neopixel_LED_PIN 6

#սահմանել Neopixel_LED_NUM 12 #սահմանել Button_Lock_PIN 13 #սահմանել Button_Unlock_PIN 12 #սահմանել GPSSerial Serial1

#սահմանել GPSECHO կեղծ

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel շերտ = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Կոճակի կոճակի կողպում (Button_Lock_PIN); Կոճակի կոճակի բացում (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t ժամանակաչափ = millis (); կրկնակի car_lat, car_lon; կրկնակի մեքենայի_ձեր_հեռավորություն; կրկնակի շարժման_ուղղություն; կրկնակի մեքենա_ազիմուտ; կրկնակի մեքենայի_ անձնավորություն_անկյուն; int angle_time;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS. սկսել (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);}

void loop () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); եթե (GPSECHO) եթե (c) Serial.print (c); // եթե նախադասություն է ստացվում, մենք կարող ենք ստուգել ստուգման գումարը, վերլուծել այն … եթե (GPS.nNNEAEAceived ()) {// այստեղ բարդ բան է, եթե տպում ենք NMEA նախադասությունը կամ տվյալները // մենք վերջում չենք լսում և բռնել այլ նախադասություններ: // այնպես որ շատ զգույշ եղեք, եթե օգտագործում եք OUTPUT_ALLDATA և փորձեք տպել տվյալները Serial.println (GPS.lastNMEA ()); // սա նաև սահմանում է newNMEAreceived () դրոշը կեղծ, եթե (! GPS.parse (GPS.lastNMEA ())) // սա նաև newNMEAreceived () դրոշը դնում է կեղծ վերադարձի; // մենք չենք կարող վերլուծել մի նախադասություն, որի դեպքում մենք պետք է սպասենք մեկ այլ} // եթե millis () կամ ժամաչափը պտտվի, մենք պարզապես այն կվերականգնենք, եթե (timer> millis ()) timer = millis (); if (millis () - ժմչփ> 2000) {timer = millis (); // վերականգնել ժամաչափը Serial.print ("\ n:ամանակը` "); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.sconds, 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 ("Որտեղից` "); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS. երկարություն, 4); Serial.println (GPS.lon); Serial.print ("Գտնվելու վայրը (աստիճաններով, աշխատում է Google Քարտեզների հետ)."); 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.latitudeDerees; car_lon = GPS.longitudeDerees; // վրիպազերծման համար Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (մեքենայի_լոն); } // Սկսեք գտնել մեքենան, եթե (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); // Հաշվիր հեռավորությունը // մեքենայի_ձեր_հեռավորություն = հեռավորություն (100.0005, 100.0005, 100.0, 100.0); // վրիպազերծման համար Serial.println (car_person_distance); move_direction = GPS. անկյուն; // Գրանցեք շարժվող ուղղությունը (անկյունը) // move_direction = 100.0; // Գրանցեք ազիմուտը (անկյունը) car_azimuth = azimuth (GPS.latitudeDerees, GPS.longitudeDerees, car_lat, car_lon); // մեքենայի_ազիմուտ = ազիմուտ (100.0005, 100.0005, 100.0, 100.0); // Հաշվարկեք LED ժամացույցի ժամանակը car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Displayուցադրել LED շերտի վրա: հստակ (); strip.show (); // ուշացում (հաճախականություն (մեքենայի_ձեր_հեռավորություն)); ուշացում (500); strip.setPixelColor (անկյունային_ժամ, ժապավեն. գույն (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. Կեչու նրբատախտակի նախատիպը

Birch Նրբատախտակի նախատիպ
Birch Նրբատախտակի նախատիպ
Birch Նրբատախտակի նախատիպ
Birch Նրբատախտակի նախատիպ

Սա նախնական նախատիպն էր: Վերջապես կտորներից մեկին ավելացվել է լիցքավորիչին միացնելու քառակուսի անցք:

Խորհուրդ ենք տալիս: