Obsah:

FinduCar: Kľúč inteligentného auta, ktorý ľudí zavedie na miesto, kde stojí auto: 11 krokov (s obrázkami)
FinduCar: Kľúč inteligentného auta, ktorý ľudí zavedie na miesto, kde stojí auto: 11 krokov (s obrázkami)

Video: FinduCar: Kľúč inteligentného auta, ktorý ľudí zavedie na miesto, kde stojí auto: 11 krokov (s obrázkami)

Video: FinduCar: Kľúč inteligentného auta, ktorý ľudí zavedie na miesto, kde stojí auto: 11 krokov (s obrázkami)
Video: 🎬 Horizon Zero Dawn Complete Edition русский 🎬 Игровой фильм HD Story Катсцены [ 1440p 60frps ] 2024, Júl
Anonim
FinduCar: Inteligentný kľúč od auta, ktorý ľudí zavedie na miesto, kde stojí auto
FinduCar: Inteligentný kľúč od auta, ktorý ľudí zavedie na miesto, kde stojí auto

Aby sa vyriešili vyššie uvedené problémy, tento projekt navrhuje vyvinúť inteligentný kľúč od auta, ktorý by mohol ľudí nasmerovať tam, kde zaparkovali auto. A môj plán je integrovať GPS do kľúča od auta. Na sledovanie auta nie je potrebné používať aplikáciu pre smartfóny, všetky pokyny sa zobrazia iba na kľúči od auta.

Krok 1: Skica papiera

Skica papiera
Skica papiera

Keď ľudia stlačením tlačidla uzamknú auto, informácie o polohe sa môžu automaticky zaznamenať do mikrokontroléra. Potom, keď ľudia začnú navigovať k autu, rozsvietia sa rôzne LED diódy, aby nasmerovali do polohy auta a frekvencia blikania ukazuje vzdialenosť od auta. Môžu ľahko sledovať blikajúcu LED a rýchlo nájsť auto.

Krok 2: Zoznam hardvéru

Zoznam hardvéru
Zoznam hardvéru

Toto sú komponenty použité v tomto projekte. Niektoré sú zo súprav častíc (nepájivá doska, tlačidlo, záhlavia), iné sú zakúpené na oficiálnych webových stránkach spoločnosti Adafruit (Adafruit Feather M0, modul Adafruit Ultimate GPS, batéria Lpoly a gombíková batéria) a Amazon (prstenec NeoPixel - 12 RGB LED).

Krok 3: Návrh obvodu

Návrh obvodu
Návrh obvodu

Neopixel_LED je pripojený k PIN 6 zariadenia Feather M0

Button_Unlock je spojený s PIN 12 Feather M0

Button_Lock je pripojený k PIN 13 zariadenia Feather M0

Krok 4: Hardvérové pripojenie

Hardvérové pripojenie
Hardvérové pripojenie
Hardvérové pripojenie
Hardvérové pripojenie
Hardvérové pripojenie
Hardvérové pripojenie

Spájkujte záhlavia s perím Adafruit M0, Adafruit Ultimate GPS Featherwing. Zložte dve dosky dohromady. GPS FeatherWing sa pripája priamo k vašej doske Feather M0 bez ďalších káblov.

Krok 5: Návrh softvéru

Softvérový dizajn
Softvérový dizajn

Testujte komponenty

Prečítajte si OPRAVU

neplatné nastavenie () {

Serial.println („test ozveny GPS“); Serial.begin (9600); Serial1.begin (9600); // predvolená prenosová rýchlosť NMEA GPS}

prázdna slučka () {

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

Blikajúci LED krúžok

Pozrite si príklady Adafruit NeoPixel.

Funkcie výpočtu GPS

Vypočítajte azimut

// Vypočítajte azimut

dvojitý azimut (double lat_a, double lon_a, double lat_b, double lon_b) {

dvojité 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 = asín (d)*180/PI; návrat d; }

Vypočítajte čas na LED hodinách, ktorým je zároveň smer vozidla

// Vypočítajte čas na LED hodinách

int led_time (dvojitý uhol) {

int príznak = 0; if (uhol = 15) {angle_time = uhol_času + 1; } if (flag == 1) {angle_time = 12 - angle_time; } uhol uhla návratu; }

Vypočítajte vzdialenosť medzi osobou a jej vozidlom

// Vypočítajte vzdialenosť

dvojnásobná vzdialenosť (double lat_a, double lon_a, double lat_b, double lon_b) {

dvojitý EARTH_RADIUS = 6378137,0; double radLat1 = (lat_a * PI / 180,0); dvojitý radLat2 = (lat_b * PI / 180,0); double a = radLat1 - radLat2; dvojité b = (lon_a - lon_b) * PI / 180,0; double s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * ZEMNÝ ROZSAH / 10000000; návrat s; }

Funkcie LED displeja

Rozsvieťte diódy LED v kruhu a ukážte, že sa začína navigovať

// LED kruhové osvetlenie jeden po druhom ukazuje, že navigácia sa začína

void colorWipe (uint32_t c, uint8_t počkajte) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (wait);}}

Získajte frekvenciu LED na základe vzdialenosti

// Získajte frekvenciu LED

vnútorná frekvencia (dvojnásobná vzdialenosť) {

int f = (int) vzdialenosť * 20; návrat f; }

Blikajte určitou LED diódou indikujúcou smer auta

// Displej na LED

strip.clear ();

strip.show (); oneskorenie (frekvencia (car_person_distance)); // zdržanie (500); strip.setPixelColor (uhol_času, strip. Color (0, 0, 255)); strip.show (); oneskorenie (frekvencia (car_person_distance)); // zdržanie (500);

// Vypnite LED

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

Hlavná

#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); Tlačidlo button_lock (Button_Lock_PIN); Tlačidlo button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t časovač = milis (); dvojitý car_lat, car_lon; dvojité auto_osoba_vzdialenosť; double move_direction; dvojité auto_azimuth; dvojitý car_person_angle; int uhol_cas;

neplatné nastavenie () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // default NMEA GPS baud strip.begin (); // odkomentovaním tohto riadka zapnete RMC (odporúčané minimum) a GGA (opravné údaje) vrátane nadmorskej výšky GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Nastavenie rýchlosti aktualizácie GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Frekvencia aktualizácie 1 Hz // Žiadosť o aktualizáciu stavu antény, komentáre, aby ste boli ticho // GPS.sendCommand (PGCMD_ANTENNA); oneskorenie (1 000);}

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); // ak je prijatá veta, môžeme skontrolovať kontrolný súčet, analyzovať ju … ak (GPS.newNMEAreceived ()) {// zložitá vec je, ak vytlačíme vetu NMEA alebo údaje // nakoniec nepočúvame a chytanie ďalších viet! // preto buďte veľmi opatrní, ak používate OUTPUT_ALLDATA a pokúšate sa vytlačiť údaje Serial.println (GPS.lastNMEA ()); // tým sa tiež nastaví príznak newNMEAreceived () na false if (! GPS.parse (GPS.lastNMEA ())) // // tým sa tiež nastaví príznak newNMEAreceived () na false return; // nemôžeme analyzovať vetu, v takom prípade by sme mali počkať na ďalšiu} // ak sa milis () alebo časovač zalomí, resetujeme ho, ak (časovač> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // reset časovača Serial.print ("\ nČas:"); Serial.print (GPS.hodina, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.sekundy, DEC); Serial.print ('.'); Serial.println (GPS.millisekundy); Serial.print („Dátum:“); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.mesiac, DEC); Serial.print ("/20"); Serial.println (GPS.rok, DEC); Serial.print ("Oprava:"); Serial.print ((int) GPS.fix); Serial.print ("kvalita:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Poloha:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Poloha (v stupňoch, funguje s Mapami Google):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Rýchlosť (uzly):"); Serial.println (GPS.speed); Serial.print ("Uhol:"); Serial.println (GPS.angle); Serial.print ("Nadmorská výška:"); Serial.println (GPS.altitude); Serial.print („Satelity:“); Serial.println ((int) GPS.satelity); // Uložte GPS vozidla, ak (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // pre ladenie Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Začnite hľadať auto, ak (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); // Vypočítajte vzdialenosť // car_person_distance = vzdialenosť (100 0005, 100 0005, 100,0, 100,0); // pre ladenie Serial.println (car_person_distance); move_direction = GPS.angle; // Zaznamenajte smer pohybu (uhol) // move_direction = 100,0; // Zaznamenajte azimut (uhol) car_azimuth = azimut (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100 0005, 100 0005, 100,0, 100,0); // Vypočítajte čas na LED hodinách car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Zobrazenie na páse LED.clear (); strip.show (); // oneskorenie (frekvencia (car_person_distance)); oneskorenie (500); strip.setPixelColor (uhol_času, strip. Color (0, 0, 255)); strip.show (); // oneskorenie (frekvencia (car_person_distance)); oneskorenie (500); // Vypnite LED, ak (button_flag == 1 && car_person_distance <5,0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Krok 6: Ladenie na Breadboard

Ladenie na Breadboarde
Ladenie na Breadboarde
Ladenie na Breadboarde
Ladenie na Breadboarde
Ladenie na Breadboarde
Ladenie na Breadboarde

Krok 7: Zostava hardvéru

Zostava hardvéru
Zostava hardvéru
Zostava hardvéru
Zostava hardvéru
Zostava hardvéru
Zostava hardvéru

Krok 8: Návrh krytu elektroniky v programe Adobe Illustrator

Návrh krytu elektroniky v programe Adobe Illustrator
Návrh krytu elektroniky v programe Adobe Illustrator

Krok 9: Kartónový prototyp

Kartónový prototyp
Kartónový prototyp
Kartónový prototyp
Kartónový prototyp

Tento krok sa používa na potvrdenie veľkosti puzdra a každého kusu modelu, pričom sa uistite, že veľkosť škatule, poloha tlačidiel a poloha LED zodpovedajú zostaveným elektronickým komponentom.

Krok 10: Prototyp brezovej preglejky

Prototyp brezovej preglejky
Prototyp brezovej preglejky
Prototyp brezovej preglejky
Prototyp brezovej preglejky

Toto bol prvotný prototyp. K jednému z dielov bol nakoniec pridaný štvorcový otvor na zapojenie do nabíjačky.

Krok 11: Prototyp konečného zhromaždenia

Odporúča: