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: Miletov cuveni pad sa bicikla. :D 2024, Novembar
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č od automobila. Nema potrebe koristiti aplikaciju pametnog telefona za praćenje automobila, sve će se smjernice prikazati samo na ključu automobila.

Korak 1: Skica papira

Paper Sketch
Paper Sketch

Kada ljudi pritisnu dugme za zaključavanje automobila, informacije o lokaciji mogu se automatski snimiti u mikrokontroler. Zatim, kada ljudi počnu navigirati do automobila, druga LED lampica svijetli kako bi usmjerila prema položaju automobila, a frekvencija treptanja prikazuje udaljenost do automobila. Lako mogu pratiti trepćuću LED diodu i brzo pronaći automobil.

Korak 2: Lista hardvera

Lista hardvera
Lista hardvera

Ovo su komponente korištene u ovom projektu. Neki su iz kompleta čestica (ploča, gumb, zaglavlja), drugi su kupljeni 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 kola

Dizajn kola
Dizajn kola

Neopixel_LED je povezan s PIN -om 6 perja M0

Button_Unlock je povezan sa PIN -om 12 perja M0

Button_Lock je povezan sa PIN -om 13 perja M0

Korak 4: Povezivanje hardvera

Hardverska veza
Hardverska veza
Hardverska veza
Hardverska veza
Hardverska veza
Hardverska veza

Lemljenje zaglavlja s Adafruit M0 perjem, Adafruit Ultimate GPS Featherwing. Složite dvije ploče zajedno. GPS FeatherWing se priključuje direktno 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 prijenos u bazu}

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

dupli azimut (dupli lat_a, dupli lon_a, dupli lat_b, dupli 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; return d; }

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

// Izračunajte vrijeme na LED satu

int led_time (dvostruki ugao) {

int flag = 0; if (angle = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } return angle_time; }

Izračunajte udaljenost između osobe i njenog vozila

// Izračunajte udaljenost

dvostruka udaljenost (dvostruka širina_a, dvostruka dužina_a, dvostruka širina_b, dvostruka dužina_b) {

dvostruki EARTH_RADIUS = 6378137.0; dvostruki radLat1 = (lat_a * PI / 180.0); dvostruki radLat2 = (lat_b * PI / 180.0); double 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; return s; }

Funkcije LED ekrana

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

// 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 (wait);}}

Dobijte LED frekvenciju na osnovu udaljenosti

// Dobijte LED frekvenciju

int frekvencija (dvostruka udaljenost) {

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

Treperi određena LED dioda koja pokazuje smjer automobila

// Prikaz na LED -u

strip.clear ();

strip.show (); kašnjenje (frekvencija (car_person_distance)); // kašnjenje (500); strip.setPixelColor (ugao_vreme, strip. Color (0, 0, 255)); strip.show (); kašnjenje (frekvencija (car_person_distance)); // kašnjenje (500);

// Onemogući LED

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

Main

#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); Taster button_lock (Button_Lock_PIN); Taster button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dvostruki car_lat, car_lon; dvostruka car_person_distance; dvostruki move_direction; dvostruki car_azimut; dvostruki car_person_angle; int angle_time;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.početak (9600); // zadani NMEA GPS baud strip.begin (); // raskomentirajte ovu liniju da biste uključili RMC (preporučeni minimum) i GGA (fiksni 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 od 1 Hz // Zatražite ažuriranje statusa antene, komentirajte kako biste šutjeli // GPS.sendCommand (PGCMD_ANTENNA); kašnjenje (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) Serial.print (c); // ako je rečenica primljena, možemo provjeriti kontrolni zbroj, raščlaniti je … if (GPS.newNMEAreceived ()) {// ovo 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 analizirati rečenicu, u tom slučaju trebamo samo čekati drugu} // ako millis () ili timer premotaju, jednostavno ćemo ga resetirati if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // resetiranje tajmera Serial.print ("\ nTime:"); Serijski.print (GPS.sat, DEC); Serial.print (':'); Serijski.print (GPS.minuta, DEC); Serial.print (':'); Serijski.print (GPS.sekunde, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Datum:"); Serijski.print (GPS.dan, DEC); Serial.print ('/'); Serijski.print (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.fixquality); if (GPS.fix) {Serial.print ("Lokacija:"); Serial.print (GPS.latitude, 4); Serijski.print (GPS.lat); Serial.print (","); Serial.print (GPS. Longitude, 4); Serial.println (GPS.lon); Serial.print ("Lokacija (u stepenima, radi sa Google mapama):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Brzina (čvorovi):"); Serial.println (GPS.speed); Serial.print ("Ugao:"); Serial.println (GPS.ugao); 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.longitudeDegrees; // za ispravljanje grešaka Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Počnite tražiti 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 greš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 (ugao_vreme, strip. Color (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 greške na Breadboard -u

Otklanjanje grešaka na Breadboard -u
Otklanjanje grešaka na Breadboard -u
Otklanjanje grešaka na Breadboard -u
Otklanjanje grešaka na Breadboard -u
Otklanjanje grešaka na Breadboard -u
Otklanjanje greš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 korak se koristi za potvrdu veličine kućišta i svakog komada modela, provjeravajući da li veličina kutije, položaj dugmeta 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čna rupa za uključivanje u punjač konačno je dodana jednom od komada.

Preporučuje se: