Kazalo:

FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: 11 korakov (s slikami)
FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: 11 korakov (s slikami)

Video: FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: 11 korakov (s slikami)

Video: FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: 11 korakov (s slikami)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Julij
Anonim
FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila
FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila

Za rešitev zgornjih težav ta projekt predlaga razvoj pametnega avtomobilskega ključa, ki bi ljudi lahko usmeril tja, kjer so parkirali avto. In moj načrt je vključiti GPS v avtomobilski ključ. Za sledenje avtomobilu ni treba uporabljati aplikacije za pametni telefon, vse smernice bodo prikazane le na ključu avtomobila.

1. korak: Skica papirja

Skica papirja
Skica papirja

Ko ljudje pritisnejo gumb za zaklepanje avtomobila, se lahko podatki o lokaciji samodejno zabeležijo v mikrokrmilnik. Ko se ljudje začnejo premikati do avtomobila, zasveti druga LED, ki usmerja v položaj avtomobila, utripajoča frekvenca pa prikazuje razdaljo do avtomobila. Z lahkoto sledijo utripajoči LED in hitro najdejo avto.

2. korak: Seznam strojne opreme

Seznam strojne opreme
Seznam strojne opreme

To so komponente, uporabljene v tem projektu. Nekateri so iz kompletov delcev (plošča, gumb, glave), drugi so kupljeni na uradni spletni strani Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS modul, Lpoly Battery in Coin Cell Battery) in Amazon (NeoPixel Ring - 12 RGB LED).

3. korak: Oblikovanje vezja

Oblikovanje vezja
Oblikovanje vezja

Neopixel_LED je povezan s kodo PIN 6 perja M0

Button_Unlock je povezan s kodo PIN 12 perja M0

Button_Lock je povezan s PIN -om 13 Feather M0

4. korak: Povezava strojne opreme

Povezava strojne opreme
Povezava strojne opreme
Povezava strojne opreme
Povezava strojne opreme
Povezava strojne opreme
Povezava strojne opreme

Spajite glave z Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Zložite obe plošči skupaj. GPS FeatherWing se priključi neposredno na vašo ploščo Feather M0 brez več žic.

5. korak: Oblikovanje programske opreme

Oblikovanje programske opreme
Oblikovanje programske opreme

Preskusne komponente

Preberite POPRAVEK

void setup () {

Serial.println ("GPS odmevni test"); Serial.begin (9600); Serial1.begin (9600); // privzeti NMEA GPS baud}

void loop () {

if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}

Utripajoči LED obroč

Glejte primere Adapruit NeoPixel.

Funkcije izračuna GPS

Izračunajte azimut

// Izračunaj azimut

dvojni azimut (dvojni lat_a, dvojni lon_a, dvojni lat_b, dvojni lon_b) {

dvojni 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 = asin (d)*180/PI; vrnitev d; }

Izračunajte čas na LED -uri, ki je tudi smer vozila

// Izračunajte čas LED ure

int led_time (dvojni kot) {

int zastava = 0; če (kot = 15) {kot_čas = kot_čas + +1; } if (flag == 1) {angle_time = 12 - angle_time; } povratni kot_čas; }

Izračunajte razdaljo med osebo in njenim vozilom

// Izračunajte razdaljo

dvojna razdalja (dvojni lat_a, dvojni lon_a, dvojni lat_b, dvojni lon_b) {

dvojni EARTH_RADIUS = 6378137,0; dvojni radLat1 = (lat_a * PI / 180,0); dvojni radLat2 = (lat_b * PI / 180.0); dvojni a = radLat1 - radLat2; dvojni b = (lon_a - lon_b) * PI / 180,0; dvojno s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; vrnitev s; }

Funkcije LED zaslona

Prižgite LED v krogu, ki kaže, da se začne krmariti

// LED osvetlitev obroča ena za drugo kaže, da se navigacija začne

void colorWipe (uint32_t c, uint8_t čakanje) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); zakasnitev (čakanje);}}

Dobite frekvenco LED na podlagi razdalje

// Pridobite frekvenco LED

int frekvenca (dvojna razdalja) {

int f = (int) razdalja * 20; vrnitev f; }

Utripa določena LED, ki označuje smer avtomobila

// Zaslon na LED

strip.clear ();

strip.show (); zamuda (frekvenca (razdalja_oseb_oseb)); // zakasnitev (500); strip.setPixelColor (kot_časov, trak. Barva (0, 0, 255)); strip.show (); zamuda (frekvenca (razdalja_oseb_oseb)); // zakasnitev (500);

// Onemogoči LED

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }

Glavni

#include Adafruit_GPS.h #include 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 false

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Gumb button_lock (Button_Lock_PIN); Gumb button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dvojni car_lat, car_lon; dvojna razdalja med osebnimi in avtomobilskimi razdaljami; dvojni premik_smer; dvojni car_azimut; dvojni car_person_angle; int kot_časov;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.začetek (9600); // privzeti NMEA GPS baud strip.begin (); // odkomentirajte to vrstico, da vklopite RMC (priporočeni minimum) in GGA (popravljeni podatki), vključno z nadmorsko višino GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Nastavite stopnjo posodobitve GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz hitrost posodobitve // Zahtevajte posodobitve o stanju antene, komentirajte, da molčite // GPS.sendCommand (PGCMD_ANTENNA); zamuda (1000);}

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

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // če je stavek prejet, lahko preverimo kontrolno vsoto, jo razčlenimo … if (GPS.newNMEAreceived ()) {// tukaj je težavno, če natisnemo stavek NMEA ali podatke // na koncu ne poslušamo in ujeti druge stavke! // zato bodite zelo previdni, če uporabljate OUTPUT_ALLDATA in poskušate natisniti podatke Serial.println (GPS.lastNMEA ()); // to tudi zastavico newNMEAreceived () nastavi na false, če (! GPS.parse (GPS.lastNMEA ())) // to tudi zastavico newNMEAreceived () postavi na false return; // ne moremo razčleniti stavka, v tem primeru bi morali počakati na drugega} // če se milis () ali časovnik ovije, ga ponastavimo, če (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // ponastavimo časovnik Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serijski.tisk (GPS.sekunde, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Datum:"); Serijski.tisk (GPS.dan, DEC); Serial.print ('/'); Serijski.tisk (GPS.mesec, DEC); Serial.print ("/20"); Serial.println (GPS. leto, DEC); Serial.print ("Popravi:"); Serial.print ((int) GPS.fix); Serial.print ("kakovost:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Lokacija:"); Serial.print (GPS. Latitude, 4); Serijski.tisk (GPS.lat); Serial.print (","); Serial.print (GPS. longitude, 4); Serial.println (GPS.lon); Serial.print ("Lokacija (v stopinjah, deluje z Google Zemljevidi):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Hitrost (vozli):"); Serial.println (GPS.speed); Serial.print ("Kot:"); Serial.println (GPS.angle); Serial.print ("Nadmorska višina:"); Serial.println (GPS.višina); Serial.print ("Sateliti:"); Serial.println ((int) GPS.sateliti); // Shranite GPS vozila, če (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // za odpravljanje napak Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Začnite iskati avto, če (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.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Izračunaj razdaljo // car_person_distance = distance (100.0005, 100.0005, 100.0, 100.0); // za odpravljanje napak Serial.println (car_person_distance); move_direction = GPS.angle; // Zabeležite smer premikanja (kot) // move_direction = 100.0; // Zapisovanje azimuta (kot) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Izračunajte čas na LED uri car_person_angle = car_azimuth - move_direction; kot_čas = čas vodenja LED (avtomobilski_okotnik); // Prikaz na LED traku.clear (); strip.show (); // zakasnitev (frekvenca (car_person_distance)); zamuda (500); strip.setPixelColor (kot_časov, trak. Barva (0, 0, 255)); strip.show (); // zakasnitev (frekvenca (car_person_distance)); zamuda (500); // Onemogoči LED, če (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

6. korak: Odpravljanje napak na plošči

Odpravljanje napak na deski
Odpravljanje napak na deski
Odpravljanje napak na deski
Odpravljanje napak na deski
Odpravljanje napak na deski
Odpravljanje napak na deski

7. korak: Sestavljanje strojne opreme

Sestavljanje strojne opreme
Sestavljanje strojne opreme
Sestavljanje strojne opreme
Sestavljanje strojne opreme
Sestavljanje strojne opreme
Sestavljanje strojne opreme

8. korak: Oblikovanje ohišja elektronike v Adobe Illustratorju

Oblikovanje ohišja elektronike v Adobe Illustratorju
Oblikovanje ohišja elektronike v Adobe Illustratorju

9. korak: Prototip iz kartona

Kartonski prototip
Kartonski prototip
Kartonski prototip
Kartonski prototip

Ta korak se uporablja za potrditev velikosti ohišja in vsakega kosa modela, pri čemer se prepričajte, da velikost škatle, položaj gumba in položaj LED ustrezajo sestavljenim elektronskim komponentam.

10. korak: Prototip vezanega lesa iz breze

Prototip vezanega lesa iz breze
Prototip vezanega lesa iz breze
Prototip vezanega lesa iz breze
Prototip vezanega lesa iz breze

To je bil začetni prototip. Enemu izmed kosov je bila na koncu dodana kvadratna luknja za priključitev na polnilnik.

11. korak: Prototip končne montaže

Priporočena: