Indholdsfortegnelse:

FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står: 11 trin (med billeder)
FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står: 11 trin (med billeder)

Video: FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står: 11 trin (med billeder)

Video: FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står: 11 trin (med billeder)
Video: НАША ЖИЗНЬ ИЗМЕНИЛАСЬ ПОСЛЕ ПОЯВЛЕНИЯ ............ 2024, Juli
Anonim
FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står
FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står

For at løse problemerne ovenfor foreslår dette projekt at udvikle en smart bilnøgle, der kan lede folk til, hvor de parkerede bilen. Og min plan er at integrere en GPS i bilnøglen. Det er ikke nødvendigt at bruge smartphone -appen til at spore bilen, al vejledning vises bare på bilnøglen.

Trin 1: Papirskitse

Papirskitse
Papirskitse

Når folk trykker på knappen for at låse bilen, kan placeringsoplysningerne automatisk registreres i mikrokontrolleren. Når folk derefter begynder at navigere til bilen, tændes den forskellige LED for at direkte til bilens position, og blinkende frekvens viser afstanden til bilen. De kan let følge den blinkende LED og hurtigt finde bilen.

Trin 2: Hardwareliste

Hardware liste
Hardware liste

Dette er de komponenter, der bruges i dette projekt. Nogle er fra partikelsættene (brødbræt, knap, overskrifter), andre er købt fra Adafruit officielle hjemmeside (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly batteri og møntcellebatteri) og Amazon (NeoPixel Ring - 12 RGB LED).

Trin 3: Kredsløbsdesign

Kredsløbsdesign
Kredsløbsdesign

Neopixel_LED er forbundet til PIN 6 på Feather M0

Button_Unlock er forbundet til PIN 12 på Feather M0

Button_Lock er forbundet til PIN 13 på Feather M0

Trin 4: Hardwareforbindelse

Hardwareforbindelse
Hardwareforbindelse
Hardwareforbindelse
Hardwareforbindelse
Hardwareforbindelse
Hardwareforbindelse

Lodde overskrifterne med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stak de to brædder sammen. GPS FeatherWing tilsluttes direkte til dit Feather M0 -kort uden flere ledninger.

Trin 5: Software Design

Software Design
Software Design

Testkomponenter

Læs et FIX

ugyldig opsætning () {

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

void loop () {

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

Blink LED -ring

Se Adafruit NeoPixel -eksempler.

GPS -beregningsfunktioner

Beregn Azimuth

// Beregn Azimuth

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

dobbelt 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; returnere d; }

Beregn tiden på LED -uret, som også er køretøjets retning

// Beregn tiden på LED -uret

int led_time (dobbelt vinkel) {

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

Beregn afstanden mellem personen og hans køretøj

// Beregn afstanden

dobbelt afstand (dobbelt lat_a, dobbelt lon_a, dobbelt lat_b, dobbelt lon_b) {

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

LED Display funktioner

Tænd lysdioder i en cirkel, der viser, at den begynder at navigere

// LED -ringbelysning en efter en viser, at navigationen begynder

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å grundlag af afstanden

// Få LED -frekvens

int frekvens (dobbelt afstand) {

int f = (int) afstand * 20; returnere f; }

Blink den bestemte LED, der angiver bilens retning

// Display på LED

strip.clear ();

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

// Deaktiver LED

hvis (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 #definer 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 (); dobbelt bil_lat, bil_lon; dobbelt bil_person_distance; dobbelt move_direction; dobbelt bil_azimuth; dobbelt bil_person_angel; int vinkel_tid;

ugyldig opsætning () {

Serial.begin (115200); // Seriel1.begyndt (9600); GPS.begyndt (9600); // standard NMEA GPS baud strip.begin (); // kommenter denne linje for at tænde RMC (anbefalet minimum) og GGA (fix data) inklusive højde GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Indstil opdateringshastigheden GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz opdateringshastighed // Anmod om opdateringer om antennestatus, kommenter ud for at tie stille // GPS.sendCommand (PGCMD_ANTENNA); forsinkelse (1000);}

void loop () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // hvis (Serial1.available ()) {char c = GPS.read (); hvis (GPSECHO) if (c) Serial.print (c); // hvis der modtages en sætning, kan vi kontrollere kontrolsummen, analysere den … hvis (GPS.newNMEAreceived ()) {// en vanskelig ting her er, hvis vi udskriver NMEA -sætningen, eller data // vi ender med ikke at lytte og fange andre sætninger! // så vær meget forsigtig, hvis du bruger OUTPUT_ALLDATA og prøver at udskrive data Serial.println (GPS.lastNMEA ()); // dette sætter også det nyeNMEAreceived () flag til falsk, hvis (! GPS.parse (GPS.lastNMEA ())) // dette også sætter det nyeNMEAreceived () flag til falsk retur; // vi kan undlade at analysere en sætning, i så fald skal vi bare vente på en anden} // hvis millis () eller timer vikles rundt, vi nulstiller den bare hvis (timer> millis ()) timer = millis (); hvis (millis () - timer> 2000) {timer = millis (); // nulstil timeren Serial.print ("\ nTid:"); Seriel.print (GPS.time, 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); hvis (GPS.fix) {Serial.print ("Location:"); Seriel.print (GPS.breddegrad, 4); Seriel.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Placering (i grader, fungerer med Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Hastighed (knob):"); Serial.println (GPS.hastighed); Serial.print ("Vinkel:"); Serial.println (GPS.angle); Serial.print ("Højde:"); Serial.println (GPS.altitude); Serial.print ("Satellitter:"); Serial.println ((int) GPS.satellites); // Gem køretøjets GPS, hvis (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // til fejlfinding Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (bil_lon); } // Start med at finde bilen, hvis (button_flag == 0) {button_flag = button_unlock.read (); } hvis (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_flag = 0; } hvis (button_flag == 1) {car_person_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Beregn afstanden // bil_person_distance = afstand (100.0005, 100.0005, 100.0, 100.0); // til fejlfinding Serial.println (bil_person_distance); move_direction = GPS.angle; // Optag bevægelsesretningen (vinkel) // move_direction = 100,0; // Optag 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 -uret car_person_angle = car_azimuth - move_direction; vinkel_tid = led_tid (bil_person_vinkel); // Display på LED strip.clear (); strip.show (); // forsinkelse (frekvens (bil_person_distance)); forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // forsinkelse (frekvens (bil_person_distance)); forsinkelse (500); // Deaktiver LED, hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Trin 6: Debug på Breadboard

Debug på brødbræt
Debug på brødbræt
Debug på brødbræt
Debug på brødbræt
Debug på brødbræt
Debug på brødbræt

Trin 7: Hardware -samling

Hardware samling
Hardware samling
Hardware samling
Hardware samling
Hardware samling
Hardware samling

Trin 8: Elektronikhusdesign i Adobe Illustrator

Elektronikhusdesign i Adobe Illustrator
Elektronikhusdesign i Adobe Illustrator

Trin 9: Kartonprototype

Pap prototype
Pap prototype
Pap prototype
Pap prototype

Dette trin bruges til at bekræfte størrelsen på huset og hvert stykke af modellen, hvilket sikrer, at boksens størrelse, og knapposition og LED -position passer til de samlede elektroniske komponenter.

Trin 10: Prototype af birkekrydsfiner

Birk krydsfiner prototype
Birk krydsfiner prototype
Birk krydsfiner prototype
Birk krydsfiner prototype

Dette var den første prototype. Et firkantet hul til tilslutning til en oplader blev endelig tilføjet til et af stykkerne.

Anbefalede: