Innehållsförteckning:

FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad: 11 steg (med bilder)
FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad: 11 steg (med bilder)

Video: FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad: 11 steg (med bilder)

Video: FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad: 11 steg (med bilder)
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Juli
Anonim
FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad
FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad

För att lösa problemen ovan föreslår detta projekt att utveckla en smart bilnyckel som kan leda människor dit de parkerade bilen. Och min plan är att integrera en GPS i bilnyckeln. Det finns ingen anledning att använda smartphone -appen för att spåra bilen, all vägledning visas bara på bilnyckeln.

Steg 1: Papperskiss

Papperskiss
Papperskiss

När folk trycker på knappen för att låsa bilen kan platsinformationen registreras i mikrokontrollen automatiskt. När folk sedan börjar navigera till bilen tänds de olika lysdioderna för att rikta till bilens position och blinkande frekvens visar avståndet till bilen. De kan enkelt följa den blinkande lysdioden och snabbt hitta bilen.

Steg 2: Hårdvarulista

Maskinvarulista
Maskinvarulista

Det här är komponenterna som används i detta projekt. Vissa är från partikelsatser (brödbräda, knapp, rubriker), andra köps från Adafruit officiella webbplats (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly Battery och Coin Cell Battery) och Amazon (NeoPixel Ring - 12 RGB LED).

Steg 3: Kretsdesign

Kretsdesign
Kretsdesign

Neopixel_LED är ansluten till PIN 6 för Feather M0

Button_Unlock är ansluten till PIN 12 för Feather M0

Button_Lock är ansluten till PIN 13 för Feather M0

Steg 4: Maskinvaruanslutning

Maskinvaruanslutning
Maskinvaruanslutning
Maskinvaruanslutning
Maskinvaruanslutning
Maskinvaruanslutning
Maskinvaruanslutning

Löd huvudet med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stapla ihop de två brädorna. GPS FeatherWing ansluts direkt till ditt Feather M0 -kort utan några fler ledningar.

Steg 5: Programvarudesign

Programvarudesign
Programvarudesign

Testkomponenter

Läs en FIX

void setup () {

Serial.println ("GPS -ekotest"); Serial.begin (9600); Serial1.start (9600); // standard 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); }}

Blinkande LED -ring

Se Adafruit NeoPixel Exempel.

GPS -beräkningsfunktioner

Beräkna Azimuth

// Beräkna Azimuth

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

dubbel 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; }

Beräkna tiden på LED -klockan, som också är fordonets riktning

// Beräkna tiden på LED -klockan

int led_time (dubbel vinkel) {

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

Beräkna avståndet mellan personen och hans fordon

// Beräkna avståndet

dubbel distans (dubbel lat_a, dubbel lon_a, dubbel lat_b, dubbel lon_b) {

dubbel EARTH_RADIUS = 6378137,0; dubbel radLat1 = (lat_a * PI / 180,0); dubbel radLat2 = (lat_b * PI / 180,0); dubbel a = radLat1 - radLat2; dubbel b = (lon_a - lon_b) * PI / 180,0; dubbel 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 -displayfunktioner

Tänd lysdioder i en cirkel som visar att den börjar navigera

// LED -ringbelysning en efter en visar att navigeringen börjar

void colorWipe (uint32_t c, uint8_t wait) {

för (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); fördröjning (vänta);}}

Få LED -frekvensen baserat på avståndet

// Få LED -frekvens

int frekvens (dubbel distans) {

int f = (int) avstånd * 20; retur f; }

Blinkar viss lysdiod som indikerar bilens riktning

// Display på LED

strip.clear ();

strip.show (); fördröjning (frekvens (bil_person_avstånd)); // fördröjning (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); fördröjning (frekvens (bil_person_avstånd)); // fördröjning (500);

// Inaktivera LED

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flagg = 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); Button button_lock (Button_Lock_PIN); Button button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dubbel bil_lat, bil_lon; dubbel bil_person_avstånd; dubbel move_direction; dubbel bil_azimut; dubbel bil_person_vinkel; int vinkel_tid;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.start (9600); // standard NMEA GPS baud strip.begin (); // avmarkera den här raden för att slå på RMC (rekommenderat minimum) och GGA (fixa data) inklusive höjd GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Ställ in uppdateringshastigheten GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz uppdateringshastighet // Begär uppdateringar om antennstatus, kommentera för att hålla tyst // GPS.sendCommand (PGCMD_ANTENNA); fördröjning (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); // om en mening tas emot kan vi kontrollera kontrollsummen, analysera den … om (GPS.newNMEAreceived ()) {// en knepig sak här är om vi skriver ut NMEA -meningen, eller data // vi slutar inte lyssna och fånga andra meningar! // så var mycket försiktig om du använder OUTPUT_ALLDATA och försöker skriva ut data Serial.println (GPS.lastNMEA ()); // detta sätter också flaggan newNMEAreceived () till false om (! GPS.parse (GPS.lastNMEA ())) // detta ställer också in flaggan newNMEAreceived () till falsk retur; // vi kan misslyckas med att analysera en mening, i så fall bör vi bara vänta på en annan} // om millis () eller timer går runt, vi återställer den bara om (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // återställ timern 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 ("Datum:"); 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.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Plats (i grader, fungerar 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 ("Altitude:"); Serial.println (GPS.altitude); Serial.print ("Satelliter:"); Serial.println ((int) GPS.satellites); // Spara fordonets GPS om (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // för felsökning av Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Börja hitta bilen om (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_flagg = 0; } if (button_flag == 1) {car_person_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Beräkna avståndet // bil_person_distans = avstånd (100.0005, 100.0005, 100.0, 100.0); // för felsökning av Serial.println (car_person_distance); move_direction = GPS.angle; // Spela in rörelseriktningen (vinkel) // move_direction = 100,0; // Spela in Azimuth (vinkel) car_azimuth = azimut (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // bil_azimut = azimut (100.0005, 100.0005, 100.0, 100.0); // Beräkna tiden på LED -klockan car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Display på LED strip.clear (); strip.show (); // fördröjning (frekvens (bil_person_avstånd)); fördröjning (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // fördröjning (frekvens (bil_person_avstånd)); fördröjning (500); // Inaktivera LED om (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Steg 6: Debug på Breadboard

Debug på Breadboard
Debug på Breadboard
Debug på Breadboard
Debug på Breadboard
Debug på Breadboard
Debug på Breadboard

Steg 7: Hårdvarumontage

Hårdvara Montering
Hårdvara Montering
Hårdvara Montering
Hårdvara Montering
Hårdvara Montering
Hårdvara Montering

Steg 8: Elektronikhusdesign i Adobe Illustrator

Elektronikhusdesign i Adobe Illustrator
Elektronikhusdesign i Adobe Illustrator

Steg 9: Kartongprototyp

Kartongprototyp
Kartongprototyp
Kartongprototyp
Kartongprototyp

Detta steg används för att bekräfta storleken på höljet och varje del av modellen, se till att lådans storlek, knappens läge och LED -läge passar de monterade elektroniska komponenterna.

Steg 10: Prototyp av björkplywood

Björk plywood prototyp
Björk plywood prototyp
Björk plywood prototyp
Björk plywood prototyp

Detta var den första prototypen. Ett fyrkantigt hål för anslutning till en laddare tillsattes slutligen i en av bitarna.

Steg 11: Slutmonteringsprototyp

Rekommenderad: