Sadržaj:

FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila: 11 koraka (sa slikama)
FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila: 11 koraka (sa slikama)

Video: FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila: 11 koraka (sa slikama)

Video: FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila: 11 koraka (sa slikama)
Video: SIN i OTAC pijanac 2024, Srpanj
Anonim
FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila
FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila

Kako bi se riješili gore navedeni problemi, ovaj projekt predlaže razvoj pametnog ključa za automobil koji bi ljude mogao usmjeriti do mjesta gdje su parkirali automobil. I moj plan je integrirati GPS u ključ automobila. Za praćenje automobila nema potrebe koristiti aplikaciju za pametni telefon, sve će se smjernice prikazati samo na ključu automobila.

Korak 1: Skica papira

Skica papira
Skica papira

Kad ljudi pritisnu gumb za zaključavanje automobila, podaci o lokaciji mogli bi se automatski snimiti u mikrokontroler. Zatim, kad ljudi počnu navigirati do automobila, druga LED dioda zasvijetli kako bi usmjerila položaj automobila, a frekvencija treptanja prikazuje udaljenost do automobila. Lako mogu pratiti trepćuću LED diodu i brzo pronaći automobil.

Korak 2: Popis hardvera

Popis hardvera
Popis hardvera

To su komponente korištene u ovom projektu. Neki su iz kompleta čestica (ploča, gumb, zaglavlja), drugi se kupuju na službenoj web stranici Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS modul, Lpoly baterija i baterija u obliku kovanice) i Amazon (NeoPixel Ring - 12 RGB LED).

Korak 3: Dizajn kruga

Dizajn sklopa
Dizajn sklopa

Neopixel_LED je povezan s PIN -om 6 perja M0

Button_Unlock povezan je s PIN -om 12 perja M0

Button_Lock je povezan s PIN -om 13 perja M0

Korak 4: Povezivanje hardvera

Veza hardvera
Veza hardvera
Veza hardvera
Veza hardvera
Veza hardvera
Veza hardvera

Lemljenje zaglavlja s Adafruit M0 perjem, Adafruit Ultimate GPS Featherwing. Složite dvije ploče zajedno. GPS FeatherWing priključuje se izravno na vašu ploču Feather M0 bez ikakvih žica.

Korak 5: Dizajn softvera

Dizajn softvera
Dizajn softvera

Komponente testa

Pročitajte FIX

void setup () {

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

void loop () {{100} {101}

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

Trepćući LED prsten

Pogledajte primjere Adapruit NeoPixel.

Funkcije proračuna GPS -a

Izračunajte azimut

// Izračunajte azimut

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

dvostruki 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; povrat d; }

Izračunajte vrijeme na LED satu, što je ujedno i smjer kretanja vozila

// Izračunajte vrijeme na LED satu

int led_time (dvostruki kut) {

int zastavica = 0; if (kut = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } povratni kut_vreme; }

Izračunajte udaljenost između osobe i njezinog vozila

// Izračunajte udaljenost

dvostruka udaljenost (dvostruki lat_a, dvostruki lon_a, dvostruki lat_b, dvostruki lon_b) {

dvostruki EARTH_RADIUS = 6378137.0; dvostruki radLat1 = (lat_a * PI / 180,0); dvostruki radLat2 = (lat_b * PI / 180.0); dvostruko a = radLat1 - radLat2; dvostruki b = (lon_a - lon_b) * PI / 180,0; dvostruki s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; povratak s; }

Funkcije LED zaslona

Upalite LED diode u krugu pokazujući da se počinje kretati

// LED svjetlo jedno po jedno pokazuje da navigacija počinje

void colorWipe (uint32_t c, uint8_t čekanje) {

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

Dobijte LED frekvenciju na temelju udaljenosti

// Dobijte frekvenciju LED -a

int frekvencija (dvostruka udaljenost) {

int f = (int) udaljenost * 20; povrat f; }

Treperi određena LED dioda koja pokazuje smjer automobila

// Zaslon na LED -u

strip.clear ();

strip.show (); kašnjenje (frekvencija (udaljenost_osobe_automobila)); // odgoda (500); strip.setPixelColor (vrijeme_ugla, traka. Boja (0, 0, 255)); strip.show (); kašnjenje (frekvencija (udaljenost_osobe_automobila)); // odgoda (500);

// Onemoguć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 traka = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Gumb gumb_zaključavanje (Button_Lock_PIN); Gumb button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_znaka = 1; uint32_t timer = millis (); dvostruki car_lat, car_lon; dvostruka udaljenost_osobe_automobila; dvostruko premještanje_smjera; dvostruki car_azimut; dvostruki car_person_angle; int angle_time;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.početi (9600); // zadana NMEA GPS baud strip.begin (); // raskomentirajte ovaj redak da biste uključili RMC (preporučeni minimum) i GGA (popravljeni podaci) uključujući nadmorsku visinu GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Postavljanje brzine ažuriranja GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Brzina ažuriranja 1 Hz // Zatražite ažuriranja o statusu antene, komentirajte kako biste šutjeli // GPS.sendCommand (PGCMD_ANTENNA); odgoda (1000);}

void loop () {// if (Serial.available ()) {{100} {101}

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serijski.tisak (c); // ako je rečenica primljena, možemo provjeriti kontrolni zbroj, raščlaniti je … if (GPS.newNMEAreceived ()) {// ovdje je škakljiva stvar ako ispišemo rečenicu NMEA ili podatke // na kraju ne slušamo i hvatanje drugih rečenica! // stoga budite vrlo oprezni ako koristite OUTPUT_ALLDATA i pokušate ispisati podatke Serial.println (GPS.lastNMEA ()); // ovo također postavlja oznaku newNMEAreceived () na false ako (! GPS.parse (GPS.lastNMEA ())) // ovo također postavlja oznaku newNMEAreceived () na false return; // ne možemo uspjeti raščlaniti rečenicu u tom slučaju trebamo samo pričekati drugu} // ako se millis () ili timer preokrene, samo ćemo ga poništiti if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // resetiranje timera Serial.print ("\ nTime:"); Serijski.ispis (GPS.sat, DEC); Serial.print (':'); Serijski.ispis (GPS.minuta, DEC); Serial.print (':'); Serijski.ispis (GPS.sekunde, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Datum:"); Serijski.ispis (GPS.dan, DEC); Serial.print ('/'); Serijski.ispis (GPS.mjesec, DEC); Serial.print ("/20"); Serijski.println (GPS.godina, DEC); Serial.print ("Popravi:"); Serial.print ((int) GPS.fix); Serial.print ("kvaliteta:"); Serial.println ((int) GPS.fiks kvaliteta); if (GPS.fix) {Serial.print ("Lokacija:"); Serijski.ispis (GPS.šifra, 4); Serijski.ispis (GPS.lat); Serial.print (","); Serijski.ispis (GPS.duljina, 4); Serial.println (GPS.lon); Serial.print ("Lokacija (u stupnjevima, radi s Google kartama):"); Serijski.ispis (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Brzina (čvorovi):"); Serial.println (GPS.speed); Serial.print ("Kut:"); Serial.println (GPS.kut); Serial.print ("Visina:"); Serial.println (GPS.visina); Serial.print ("Sateliti:"); Serial.println ((int) GPS.sateliti); // Spremanje GPS -a vozila if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.dužina stupnjeva; // za ispravljanje pogrešaka Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (auto_lon); } // Počni pronaći automobil ako (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čunajte udaljenost // car_person_distance = distance (100.0005, 100.0005, 100.0, 100.0); // za ispravljanje pogrešaka Serial.println (car_person_distance); move_direction = GPS.angle; // Snimite smjer kretanja (kut) // move_direction = 100.0; // Snimimo Azimut (kut) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Izračunajte vrijeme na LED satu car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Prikaz na LED traci.clear (); strip.show (); // kašnjenje (frekvencija (car_person_distance)); kašnjenje (500); strip.setPixelColor (vrijeme_ugla, traka. Boja (0, 0, 255)); strip.show (); // kašnjenje (frekvencija (car_person_distance)); kašnjenje (500); // Onemogući LED ako (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Korak 6: Otklonite pogreške na oglasnoj ploči

Otklanjanje pogrešaka na Breadboard -u
Otklanjanje pogrešaka na Breadboard -u
Otklanjanje pogrešaka na Breadboard -u
Otklanjanje pogrešaka na Breadboard -u
Otklanjanje pogrešaka na Breadboard -u
Otklanjanje pogrešaka na Breadboard -u

Korak 7: Sklapanje hardvera

Sklapanje hardvera
Sklapanje hardvera
Sklapanje hardvera
Sklapanje hardvera
Sklapanje hardvera
Sklapanje hardvera

Korak 8: Dizajn kućišta elektronike u Adobe Illustratoru

Dizajn kućišta za elektroniku u Adobe Illustratoru
Dizajn kućišta za elektroniku u Adobe Illustratoru

Korak 9: Prototip kartona

Kartonski prototip
Kartonski prototip
Kartonski prototip
Kartonski prototip

Ovaj se korak koristi za potvrdu veličine kućišta i svakog dijela modela, pazeći da veličina kutije, položaj gumba i LED položaj odgovaraju montiranim elektroničkim komponentama.

Korak 10: Prototip šperploče od breze

Prototip šperploče od breze
Prototip šperploče od breze
Prototip šperploče od breze
Prototip šperploče od breze

Ovo je bio početni prototip. Konačno je jednom od komada dodana četvrtasta rupa za uključivanje u punjač.

Preporučeni: