Innholdsfortegnelse:

FinduCar: en smart bilnøkkel som leder folk til hvor bilen står: 11 trinn (med bilder)
FinduCar: en smart bilnøkkel som leder folk til hvor bilen står: 11 trinn (med bilder)

Video: FinduCar: en smart bilnøkkel som leder folk til hvor bilen står: 11 trinn (med bilder)

Video: FinduCar: en smart bilnøkkel som leder folk til hvor bilen står: 11 trinn (med bilder)
Video: Jeg arbejder på Privatmuseet for de rige og berømte. Skrækhistorier. Rædsel. 2024, Juli
Anonim
FinduCar: en smart bilnøkkel som leder folk til hvor bilen står
FinduCar: en smart bilnøkkel som leder folk til hvor bilen står

For å løse problemene ovenfor foreslår dette prosjektet å utvikle en smart bilnøkkel som kan lede folk dit de parkerte bilen. Og planen min er å integrere en GPS i bilnøkkelen. Det er ikke nødvendig å bruke smarttelefonappen for å spore bilen, all veiledning vil bare vises på bilnøkkelen.

Trinn 1: Papirskisse

Papirskisse
Papirskisse

Når folk trykker på knappen for å låse bilen, kan posisjonsinformasjonen registreres i mikrokontrolleren automatisk. Når folk begynner å navigere til bilen, lyser den forskjellige LED -en for å direkte til posisjonen til bilen, og blinkende frekvens viser avstanden til bilen. De kan enkelt følge den blinkende LED -en og raskt finne bilen.

Trinn 2: Maskinvareliste

Maskinvare liste
Maskinvare liste

Dette er komponentene som brukes i dette prosjektet. Noen er fra partikkelsettene (brødbrett, knapp, overskrifter), andre er kjøpt fra Adafruit offisielle nettsted (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly batteri og myntcellebatteri) og Amazon (NeoPixel Ring - 12 RGB LED).

Trinn 3: Kretsdesign

Kretsdesign
Kretsdesign

Neopixel_LED er koblet til PIN 6 til Feather M0

Button_Unlock er koblet til PIN 12 til Feather M0

Button_Lock er koblet til PIN 13 til Feather M0

Trinn 4: Maskinvaretilkobling

Maskinvaretilkobling
Maskinvaretilkobling
Maskinvaretilkobling
Maskinvaretilkobling
Maskinvaretilkobling
Maskinvaretilkobling

Lodde hodene med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stabel de to brettene sammen. GPS FeatherWing kobles direkte til Feather M0 -kortet uten flere ledninger.

Trinn 5: Programvaredesign

Programvare design
Programvare design

Testkomponenter

Les en FIX

ugyldig oppsett () {

Serial.println ("GPS -ekkotest"); Serial.begin (9600); Serial1.begin (9600); // standard NMEA GPS -baud}

void loop () {

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

Blinkende LED -ring

Se Adafruit NeoPixel -eksempler.

GPS -beregningsfunksjoner

Beregn Azimuth

// Beregn Azimuth

dobbel asimut (dobbel lat_a, dobbel lon_a, dobbel lat_b, dobbel lon_b) {

dobbel 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; retur d; }

Beregn tiden på LED -klokken, som også er kjøretøyets retning

// Beregn tiden på LED -klokken

int led_time (dobbel vinkel) {

int flagg = 0; hvis (vinkel = 15) {vinkel_tid = vinkel_tid + 1; } hvis (flagg == 1) {vinkel_tid = 12 - vinkel_tid; } returvinkel_tid; }

Beregn avstanden mellom personen og bilen hans

// Beregn avstanden

dobbel avstand (dobbel lat_a, dobbel lon_a, dobbel lat_b, dobbel lon_b) {

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

LED -skjermfunksjoner

Lys opp lysdioder i en sirkel som viser at den begynner å navigere

// LED -ringbelysning en etter en viser at navigasjonen begynner

void colorWipe (uint32_t c, uint8_t wait) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); forsinkelse (vent);}}

Få LED -frekvensen på grunnlag av avstanden

// Få LED -frekvens

int frekvens (dobbel avstand) {

int f = (int) avstand * 20; retur f; }

Blink den bestemte LED -en som indikerer bilens retning

// Display på LED

strip.clear ();

strip.show (); forsinkelse (frekvens (bil_person_avstand)); // forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); forsinkelse (frekvens (bil_person_avstand)); // forsinkelse (500);

// Deaktiver LED

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

Hoved

#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); Button button_lock (Button_Lock_PIN); Button button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dobbel bil_lat, bil_lon; dobbel bil_person_avstand; dobbel move_direction; dobbel bil_azimuth; dobbelt car_person_angle; int vinkel_tid;

ugyldig oppsett () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begynner (9600); // standard NMEA GPS baud strip.begin (); // kommenter denne linjen for å slå på RMC (anbefalt minimum) og GGA (fikse data) inkludert høyde GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Angi oppdateringshastigheten GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz oppdateringshastighet // Be om oppdateringer om antennestatus, kommenter for å holde stille // GPS.sendCommand (PGCMD_ANTENNA); forsinkelse (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); // hvis en setning mottas, kan vi sjekke kontrollsummen, analysere den … hvis (GPS.newNMEAreceived ()) {// en vanskelig ting her er hvis vi skriver ut NMEA -setningen, eller data // vi ender opp med å ikke lytte og fange andre setninger! // så vær veldig forsiktig hvis du bruker OUTPUT_ALLDATA og prøver å skrive ut data Serial.println (GPS.lastNMEA ()); // dette setter også det nyeNMEAreceived () flagget til false hvis (! GPS.parse (GPS.lastNMEA ())) // dette setter også det nyeNMEAreceived () flagget til falsk retur; // vi klarer ikke å analysere en setning. I så fall bør vi bare vente på en annen} // hvis millis () eller tidtaker brytes rundt, vi vil bare tilbakestille den hvis (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // tilbakestill timeren Serial.print ("\ nTid:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisekunder); Serial.print ("Dato:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/20"); Serial.println (GPS.år, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("kvalitet:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Location:"); Serial.print (GPS.breddegrad, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Plassering (i grader, fungerer med Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Hastighet (knop):"); Serial.println (GPS.speed); Serial.print ("Vinkel:"); Serial.println (GPS.angle); Serial.print ("Høyde:"); Serial.println (GPS.altitude); Serial.print ("Satellitter:"); Serial.println ((int) GPS.satellites); // Lagre bilens GPS hvis (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // for feilsøking Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Begynn å finne bilen hvis (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); // Beregn avstanden // bil_person_distans = avstand (100.0005, 100.0005, 100.0, 100.0); // for feilsøking Serial.println (car_person_distance); move_direction = GPS.angle; // Registrer bevegelsesretningen (vinkel) // move_direction = 100.0; // Registrer Azimuth (vinkel) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Beregn tiden på LED -klokken car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Display på LED strip.clear (); strip.show (); // forsinkelse (frekvens (bil_person_avstand)); forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // forsinkelse (frekvens (bil_person_avstand)); forsinkelse (500); // Deaktiver LED hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Trinn 6: Debug på Breadboard

Debug på Breadboard
Debug på Breadboard
Debug på Breadboard
Debug på Breadboard
Feilsøk på brødbrett
Feilsøk på brødbrett

Trinn 7: Maskinvaremontasje

Maskinvare montering
Maskinvare montering
Maskinvare montering
Maskinvare montering
Maskinvare montering
Maskinvare montering

Trinn 8: Elektronikkhusdesign i Adobe Illustrator

Elektronikkhusdesign i Adobe Illustrator
Elektronikkhusdesign i Adobe Illustrator

Trinn 9: Kartongprototype

Kartongprototype
Kartongprototype
Kartongprototype
Kartongprototype

Dette trinnet brukes til å bekrefte størrelsen på huset og hvert stykke av modellen, og sørg for at boksens størrelse, knappestilling og LED -posisjon passer til de monterte elektroniske komponentene.

Trinn 10: Prototype av bjørkfiner

Bjørk kryssfiner prototype
Bjørk kryssfiner prototype
Bjørk kryssfiner prototype
Bjørk kryssfiner prototype

Dette var den første prototypen. Et firkantet hull for tilkobling til en lader ble til slutt lagt til en av delene.

Anbefalt: