Բովանդակություն:
- Քայլ 1: Թղթի ուրվագիծ
- Քայլ 2: Սարքավորումների ցուցակ
- Քայլ 3: Շղթայի ձևավորում
- Քայլ 4: Սարքաշարի միացում
- Քայլ 5: Softwareրագրաշարի ձևավորում
- Քայլ 6. Վրիպազերծում Breadboard- ում
- Քայլ 7: Սարքավորումների հավաքում
- Քայլ 8. Էլեկտրոնիկայի բնակարանային ձևավորում Adobe Illustrator- ում
- Քայլ 9: Ստվարաթղթե նախատիպ
- Քայլ 10. Կեչու նրբատախտակի նախատիպը
Video: FinduCar. Խելացի մեքենայի բանալին, որը մարդկանց ուղղորդում է դեպի այն վայրը, որտեղ մեքենան կայանված է. 11 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Վերոնշյալ խնդիրները լուծելու համար այս նախագիծն առաջարկում է մշակել մեքենայի խելացի բանալին, որը կարող է մարդկանց ուղղորդել այնտեղ, որտեղ նրանք կայանել են մեքենան: Եվ իմ ծրագիրը 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րագրաշարի ձևավորում
Փորձարկման բաղադրիչներ
Կարդացեք 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- ում
Քայլ 7: Սարքավորումների հավաքում
Քայլ 8. Էլեկտրոնիկայի բնակարանային ձևավորում Adobe Illustrator- ում
Քայլ 9: Ստվարաթղթե նախատիպ
Այս քայլը օգտագործվում է բնակարանի և մոդելի յուրաքանչյուր կտորի չափը հաստատելու համար ՝ համոզվելով, որ տուփի չափը, կոճակի դիրքը և LED դիրքը համապատասխանում են հավաքված էլեկտրոնային բաղադրիչներին:
Քայլ 10. Կեչու նրբատախտակի նախատիպը
Սա նախնական նախատիպն էր: Վերջապես կտորներից մեկին ավելացվել է լիցքավորիչին միացնելու քառակուսի անցք:
Խորհուրդ ենք տալիս:
Raspberry Pi DIY խելացի դռան զանգ, որը կարող է հայտնաբերել մարդկանց, մեքենաներ և այլն: 5 քայլ
Raspberry Pi DIY խելացի դռան զանգ, որը կարող է հայտնաբերել մարդկանց, մեքենաներ և այլն: Այս steampunk թեմայով դիզայնը ինտեգրվում է տնային օգնականի և մեր բազմ սենյակի աուդիո համակարգի հետ ՝ մեր DIY խելացի տան մնացածի հետ հաղորդակցվելու համար: Ավելի շուտ, քան Ring Doorbell (կամ Nest, կամ մյուս մրցակիցներից մեկը) Ես կառուցեցի մեր սեփական խելացի դռան դուռը
Ամաչկոտ դիմակ, որը փակվում է մարդկանց տեսնելիս. 9 քայլ (նկարներով)
Ամաչկոտ դիմակ, որը փակվում է, երբ մարդկանց է տեսնում. Sadավալի է, որ մենք պետք է դիմակներ կրենք Covid -19- ի պատճառով: Դա այնքան էլ հաճելի փորձ չէ, ստիպում է ձեզ տաքանալ, քրտնել, նյարդայնանալ և, իհարկե, դժվար շնչել: Կան ծարավ պահեր, երբ դուք կոչ եք անում հանել դիմակը, բայց վախենում եք դա անել: Ինչ ես
Պահպանեք իմ երեխային. Խելացի նստատեղը, որը տեքստային հաղորդագրություններ է ուղարկում, եթե մոռանաք երեխային մեքենայի մեջ. 8 քայլ
Պահպանեք իմ երեխային. Խելացի նստատեղը, որը տեքստային հաղորդագրություններ է ուղարկում, եթե մոռանաք երեխային մեքենայում. Այն տեղադրված է մեքենաներում, և երեխայի նստատեղին տեղադրված դետեկտորի շնորհիվ այն մեզ զգուշացնում է `SMS- ով կամ հեռախոսազանգով, եթե ստանանք: հեռու ՝ առանց երեխային մեզ հետ բերելու
Ձայնով կառավարվող խելացի բանալին ՝ 3 քայլ (նկարներով)
Ձայնով կառավարվող խելացի բանալիի սեփականատեր. շատ սեփական ձայնով կառավարվող խելացի բանալին
Մարդկանց/մարդկանց/կենդանիներին/ռոբոտներին իրոք պարզ/հեշտ/ոչ բարդ միջոց դարձնելու համար, կարծես նրանք իսկապես սառը/պայծառ ջերմային տեսողություն ունեն (ձեր ընտրած գույնը) GIMP- ի միջոցով. 4 քայլ
Մարդկանց/մարդկանց/կենդանիներին/ռոբոտներին իրոք պարզ/հեշտ/ոչ բարդ եղանակ դարձնելու համար նրանք իսկապես սառը/պայծառ ջերմային տեսողություն ունեն (ձեր ընտրած գույնը) GIMP- ի միջոցով. Կարդացեք … վերնագիրը