Tartalomjegyzék:

FinduCar: intelligens autókulcs, amely elvezeti az embereket az autó parkolási helyéhez: 11 lépés (képekkel)
FinduCar: intelligens autókulcs, amely elvezeti az embereket az autó parkolási helyéhez: 11 lépés (képekkel)

Videó: FinduCar: intelligens autókulcs, amely elvezeti az embereket az autó parkolási helyéhez: 11 lépés (képekkel)

Videó: FinduCar: intelligens autókulcs, amely elvezeti az embereket az autó parkolási helyéhez: 11 lépés (képekkel)
Videó: REVAN - THE COMPLETE STORY 2024, November
Anonim
FinduCar: intelligens autó kulcs, amely az embereket oda vezeti, ahol az autó parkol
FinduCar: intelligens autó kulcs, amely az embereket oda vezeti, ahol az autó parkol

A fenti problémák megoldása érdekében ez a projekt egy intelligens autókulcs kifejlesztését javasolja, amely az embereket oda irányíthatja, ahol parkolt. És a tervem egy GPS beépítése az autó kulcsába. Nem kell az okostelefon alkalmazást használni az autó nyomon követéséhez, minden útmutatás csak az autó kulcsán jelenik meg.

1. lépés: Papírvázlat

Papírvázlat
Papírvázlat

Amikor az emberek megnyomják a gombot az autó lezárásához, a helyadatok automatikusan rögzíthetők a mikrokontrollerben. Ezután, amikor az emberek elkezdenek navigálni az autóhoz, a különböző LED -ek felgyulladnak, hogy az autó helyzetébe irányuljanak, és a villogás gyakorisága mutatja az autótól való távolságot. Könnyen követik a villogó LED -et, és gyorsan megtalálják az autót.

2. lépés: Hardverlista

Hardverlista
Hardverlista

Ezeket az összetevőket használják ebben a projektben. Néhány a részecske -készletekből (kenyérsütő, gomb, fejlécek) származik, másokat az Adafruit hivatalos webhelyéről (Adafruit Feather M0, Adafruit Ultimate GPS modul, Lpoly akkumulátor és gombelem) és az Amazon -tól (NeoPixel Ring - 12 RGB LED) vásárolnak.

3. lépés: Áramkör tervezése

Áramkör tervezés
Áramkör tervezés

A Neopixel_LED csatlakozik a Feather M0 PIN -kódjához

A Button_Unlock a Feather M0 12 -es PIN -kódjához van csatlakoztatva

A Button_Lock csatlakozik a Feather M0 PIN 13 -as PIN -kódjához

4. lépés: Hardvercsatlakozás

Hardver kapcsolat
Hardver kapcsolat
Hardver kapcsolat
Hardver kapcsolat
Hardver kapcsolat
Hardver kapcsolat

Forrasztja a fejléceket az Adafruit M0 Feather, az Adafruit Ultimate GPS Featherwing segítségével. Rakd össze a két táblát. A GPS FeatherWing vezeték nélkül csatlakoztatható a Feather M0 kártyához.

5. lépés: Szoftvertervezés

Szoftvertervezés
Szoftvertervezés

Tesztkomponensek

Olvassa el a FIX -et

void setup () {

Serial.println ("GPS visszhang teszt"); Sorozat.kezdet (9600); Sorozat1.kezdet (9600); // alapértelmezett NMEA GPS baud}

void loop () {

if (Serial.available ()) {char c = Serial.read (); Soros1.írás (c); } if (Serial1.available ()) {char c = Serial1.read (); Soros.írás (c); }}

Villogó LED gyűrű

Lásd az Adafruit NeoPixel példákat.

GPS számítási funkciók

Számítsa ki az azimutot

// Azimut kiszámítása

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

kettős 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; visszatérés d; }

Számítsa ki az időt a LED óráján, ami egyben a jármű iránya is

// Számítsa ki az időt a LED -órán

int led_time (dupla szög) {

int zászló = 0; if (szög = 15) {szögidő = szögidő + 1; } if (zászló == 1) {szög_idő = 12 - szögidő; } visszatérési szög_idő; }

Számítsa ki a személy és a jármű közötti távolságot

// Számítsa ki a távolságot

kettős távolság (dupla lat_a, dupla lon_a, dupla lat_b, dupla lon_b) {

kettős FÖLD_RÁDIUS = 6378137,0; dupla radLat1 = (lat_a * PI / 180.0); dupla radLat2 = (lat_b * PI / 180.0); dupla a = radLat1 - radLat2; kettős b = (lon_a - lon_b) * PI / 180,0; kettős s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * FÖLD_RADIUS / 10000000; visszatérés s; }

LED kijelző funkciók

Gyújtson körbe LED -eket, jelezve, hogy elkezd navigálni

// A LED -es gyűrűk egyesével történő világítása azt jelzi, hogy a navigáció megkezdődik

void colorWipe (uint32_t c, uint8_t wait) {

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

Szerezze meg a LED frekvenciáját a távolság alapján

// LED -frekvencia lekérése

int frekvencia (kettős távolság) {

int f = (int) távolság * 20; visszatérés f; }

Villogjon az a bizonyos LED, amely jelzi az autó irányát

// Kijelző LED -en

strip.clear ();

strip.show (); késleltetés (gyakoriság (autó_ember_táv)); // késleltetés (500); strip.setPixelColor (szögidő, szalag. Szín (0, 0, 255)); strip.show (); késleltetés (gyakoriság (autó_ember_táv)); // késleltetés (500);

// LED letiltása

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_zászló = 1; strip.clear (); strip.show (); }

#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 hamis

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 gomb_zászló = 0; int led_zászló = 1; uint32_t timer = millis (); dupla autó_lat, autó_lon; dupla autó_ember_távolság; double move_direction; dupla car_azimuth; dupla autó_személy_szög; int szög_idő;

void setup () {

Sorozat.kezdet (115200); // Serial1.begin (9600); GPS.begin (9600); // alapértelmezett NMEA GPS baudsáv.begin (); // szüntesse meg a megjegyzést, ha be szeretné kapcsolni az RMC (ajánlott minimum) és a GGA (rögzített adatok) funkciót, beleértve a magasságbeli GPS.sendCommand parancsot (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Állítsa be a frissítési gyakoriságot GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz frissítési gyakoriság // Frissítés kérése az antenna állapotáról, megjegyzés a csendben // GPS.sendCommand (PGCMD_ANTENNA); késleltetés (1000);}

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

// char c = Sorozat.olvasás (); // Soros1.írás (c); //} // if (Serial1.available ()) {char c = GPS.read (); ha (GPSECHO) ha (c) Soros.nyomat (c); // ha egy mondat érkezik, akkor ellenőrizhetjük az ellenőrző összeget, elemezhetjük… ha (GPS.newNMEAreceived ()) {// itt bonyolult dolog, ha kinyomtatjuk az NMEA mondatot, vagy adatokat // végül nem hallgatunk, és más mondatok elkapása! // ezért legyen nagyon óvatos, ha OUTPUT_ALLDATA és trytng használatával nyomtat adatokat Serial.println (GPS.lastNMEA ()); // ez a newNMEAreceived () jelzőt is hamisra állítja, ha (! GPS.parse (GPS.lastNMEA ()))) // ez az newNMEAreceived () jelzőt is hamis visszatérésre állítja; // nem tudjuk elemezni a mondatot, ebben az esetben csak várni kell egy másikra. // if (millis () - időzítő> 2000) {timer = millis (); // az időzítő visszaállítása Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Soros.nyomtatás (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milliszekundum); Serial.print ("Dátum:"); Soros.nyomtatás (GPS.nap, DEC); Serial.print ('/'); Soros.nyomtatás (GPS.hónap, DEC); Soros.nyomtatás ("/20"); Serial.println (GPS.év, DEC); Serial.print ("Javítás:"); Serial.print ((int) GPS.fix); Serial.print ("minőség:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Location:"); Soros.nyomtatás (GPS.szélesség, 4); Soros.nyomtatás (GPS.lat); Serial.print (","); Soros.nyomtatás (GPS.hosszúság, 4); Serial.println (GPS.lon); Serial.print ("Hely (fokokban, a Google Térképpel működik):"); Soros.nyomtatás (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Sebesség (csomó):"); Serial.println (GPS.sebesség); Serial.print ("Szög:"); Serial.println (GPS.szög); Serial.print ("Magasság:"); Serial.println (GPS.altitude); Serial.print ("Műholdak:"); Serial.println ((int) GPS.satellites); // Mentse el a jármű GPS -jét, ha (button_lock.read ()) {car_lat = GPS.latitudeDegrees; autó_lon = GPS.hosszúságDegrees; // debug Serial.print ("carLatitude:"); Sorozat.println (autó_lat); Serial.print ("carLongitude:"); Sorozat.println (autó_lon); } // Kezdje megtalálni az autót, ha (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_zászló = 0; } if (button_flag == 1) {car_person_distance = távolság (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // A távolság kiszámítása // autó_személy_távolság = távolság (100.0005, 100.0005, 100.0, 100.0); // hibakereséshez Serial.println (autó_személy_távolság); move_direction = GPS.angle; // A mozgásirány (szög) rögzítése // move_direction = 100.0; // Az azimut (szög) rögzítése car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Az idő kiszámítása a LED -es órán car_person_angle = car_azimuth - move_direction; szögidő = led_idő (autó_személyszög); // Megjelenítés LED szalagon.clear (); strip.show (); // késleltetés (gyakoriság (autó_ember_táv)); késleltetés (500); strip.setPixelColor (szögidő, szalag. Szín (0, 0, 255)); strip.show (); // késleltetés (gyakoriság (autó_ember_táv)); késleltetés (500); // A LED kikapcsolása, ha (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_zászló = 1; strip.clear (); strip.show (); }}} //}}}

6. lépés: Hibakeresés a Breadboardon

Hibakeresés a Breadboardon
Hibakeresés a Breadboardon
Hibakeresés a Breadboardon
Hibakeresés a Breadboardon
Hibakeresés a Breadboardon
Hibakeresés a Breadboardon

7. lépés: A hardver összeszerelése

Hardver összeszerelés
Hardver összeszerelés
Hardver összeszerelés
Hardver összeszerelés
Hardver összeszerelés
Hardver összeszerelés

8. lépés: Elektronikai háztervezés az Adobe Illustrator programban

Elektronikai háztervezés az Adobe Illustrator programban
Elektronikai háztervezés az Adobe Illustrator programban

9. lépés: Karton prototípus

Karton prototípus
Karton prototípus
Karton prototípus
Karton prototípus

Ezzel a lépéssel megerősítheti a ház méretét és a modell minden egyes darabját, ügyelve arra, hogy a doboz mérete, valamint a gomb helyzete és a LED helyzet illeszkedjen az összeszerelt elektronikus alkatrészekhez.

10. lépés: Nyír rétegelt lemez prototípus

Nyír rétegelt lemez prototípus
Nyír rétegelt lemez prototípus
Nyír rétegelt lemez prototípus
Nyír rétegelt lemez prototípus

Ez volt a kezdeti prototípus. Végül az egyik darabhoz négyzet alakú lyukat töltőt csatlakoztatni.

Ajánlott: