Sisukord:

FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta: 11 sammu (piltidega)
FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta: 11 sammu (piltidega)

Video: FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta: 11 sammu (piltidega)

Video: FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta: 11 sammu (piltidega)
Video: Tourist Trophy: Closer To The Edge - Полный документальный фильм TT3D (Доступны субтитры !!) 2024, November
Anonim
FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta
FinduCar: nutikas autovõti, mis juhib inimesi auto parkimiskohta

Ülaltoodud probleemide lahendamiseks tehakse selles projektis ettepanek välja töötada nutikas autovõti, mis suunaks inimesed sinna, kuhu nad auto parkisid. Ja minu plaan on integreerida GPS autovõtmesse. Auto jälgimiseks pole vaja nutitelefoni rakendust kasutada, kõik juhised kuvatakse lihtsalt autovõtmel.

Samm: paberi visand

Paberi visand
Paberi visand

Kui inimesed vajutavad auto lukustamiseks nuppu, võidakse asukohaandmed mikrokontrollerisse automaatselt salvestada. Siis, kui inimesed hakkavad auto juurde navigeerima, süttib eri LED, et suunata auto asendisse ja vilkuv sagedus näitab kaugust autoni. Nad saavad hõlpsalt vilkuvat LED -i jälgida ja auto kiiresti üles leida.

Samm: riistvara loend

Riistvara loend
Riistvara loend

Neid komponente kasutatakse selles projektis. Mõned on osakeste komplektidest (leivaplaat, nupp, päised), teised on ostetud Adafruit'i ametlikult veebisaidilt (Adafruit Feather M0, Adafruit Ultimate GPS -moodul, Lpoly aku ja mündipatarei aku) ja Amazonist (NeoPixel Ring - 12 RGB LED).

3. samm: vooluahela kujundus

Vooluahela disain
Vooluahela disain

Neopixel_LED on ühendatud Feather M0 PIN -koodiga 6

Button_Unlock on ühendatud Feather M0 PIN -koodiga 12

Button_Lock on ühendatud Feather M0 PIN -koodiga 13

Samm: riistvaraühendus

Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus
Riistvaraühendus

Jootke päised Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing abil. Pange kaks lauda kokku. GPS FeatherWing ühendatakse otse teie Feather M0 plaadiga ilma juhtmeteta.

Samm 5: Tarkvara projekteerimine

Tarkvara disain
Tarkvara disain

Katsekomponendid

Lugege parandust

tühine seadistus () {

Serial.println ("GPS kaja test"); Seriaalne algus (9600); Seriaal1.algus (9600); // vaikimisi NMEA GPS baud}

void loop () {

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

Vilkuv LED -rõngas

Vaadake Adafruit NeoPixeli näiteid.

GPS -i arvutusfunktsioonid

Arvutage asimuut

// Asimuudi arvutamine

topeltasimuut (kahekordne lat_a, kahekordne lon_a, kahekordne lat_b, kahekordne lon_b) {

kahekordne 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; tagasitulek d; }

Arvutage LED -kellalt aeg, mis on ka sõiduki suund

// Arvutage LED -kella aeg

int led_time (topeltnurk) {

int lipp = 0; kui (nurk = 15) {nurgaaeg = nurgaaeg + 1; } if (lipp == 1) {nurgaaeg = 12 - nurgaaeg; } tagasinurga_aeg; }

Arvutage inimese ja tema sõiduki vaheline kaugus

// Arvutage kaugus

topeltkaugus (kahekordne lat_a, kahekordne lon_a, kahekordne lat_b, kahekordne lon_b) {

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

LED -ekraani funktsioonid

Sütti ringis valgusdioodid, mis näitavad, et see hakkab navigeerima

// LED -rõnga valgustus ükshaaval näitab, et navigeerimine algab

void colorWipe (uint32_t c, uint8_t wait) {

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

Hankige LED -sagedus kauguse alusel

// Hangi LED -sagedus

int sagedus (kahekordne vahemaa) {

int f = (int) kaugus * 20; tagasitulek f; }

Vilgub teatud LED, mis näitab auto suunda

// LED -ekraan

riba.selge ();

strip.show (); viivitus (sagedus (auto_isiku_distants)); // viivitus (500); strip.setPixelColor (nurga_aeg, riba. Värv (0, 0, 255)); strip.show (); viivitus (sagedus (auto_isiku_distants)); // viivitus (500);

// Keela LED

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_lipp = 1; riba.selge (); strip.show (); }

Peamine

#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 riba = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Nupp nuppude lukk (Button_Lock_PIN); Button button_unlock (Button_Unlock_PIN); int nupu_lipp = 0; int led_flag = 1; uint32_t taimer = millis (); kahekordne auto_lat, auto_lon; topelt auto_isiku_distants; double move_direction; topelt auto_asimuut; topelt auto_isiku_nurk; int nurga_aeg;

tühine seadistus () {

Seriaalne algus (115200); // Seriaal1.algus (9600); GPS.algus (9600); // vaikimisi NMEA GPS baudriba.begin (); // tühistage see rida, et lülitada sisse RMC (soovitatav miinimum) ja GGA (parandage andmed), sealhulgas kõrguse GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Määra värskenduskiirus GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz värskendussagedus // Taotlege värskendusi antenni oleku kohta, kommenteerige vaikimiseks // GPS.sendCommand (PGCMD_ANTENNA); viivitus (1000);}

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

// char c = Serial.read (); // Sarja1. Kirjutamine (c); //} // if (Serial1.available ()) {char c = GPS.read (); kui (GPSECHO) kui (c) jadatrükk (c); // kui lause on laekunud, saame kontrollida kontrollsummat, sõeluda seda… kui (GPS.newNMEAreceived ()) {// siin on keeruline asi, kui prindime NMEA lause või andmed // me lõpuks ei kuula ja püüda teisi lauseid! // seega olge väga ettevaatlik, kui kasutate andmete printimiseks OUTPUT_ALLDATA ja proovite Serial.println (GPS.lastNMEA ()); // see määrab ka lipu newNMEAreceived () väärtuseks vale, kui (! GPS.parse (GPS.lastNMEA ()))) // see määrab ka newNMEAreceived () lipu valele tagastamisele; // me ei suuda lauset parsida, sel juhul peaksime lihtsalt ootama teist} // kui millis () või taimer ümber keerleb, lähtestame selle lihtsalt, kui (timer> millis ()) timer = millis (); if (millis () - taimer> 2000) {taimer = millis (); // lähtesta taimer Serial.print ("\ nAeg:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Jadaprint (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisekundit); Serial.print ("Kuupäev:"); Serial.print (GPS.päev, DEC); Serial.print ('/'); Serial.print (GPS.kuu, DEC); Serial.print ("/20"); Serial.println (GPS.aasta, DEC); Serial.print ("Parandus:"); Serial.print ((int) GPS.fix); Serial.print ("kvaliteet:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Asukoht:"); Jadajälg (GPS.laiuskraad, 4); Serial.print (GPS.lat); Serial.print (","); Jadaprint (GPS.pikkus, 4); Serial.println (GPS.lon); Serial.print ("Asukoht (kraadides, töötab Google Mapsiga):"); Seeriaprint (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.pikkuskraadid, 4); Serial.print ("Kiirus (sõlmed):"); Serial.println (GPS.kiirus); Serial.print ("Nurk:"); Serial.println (GPS.nurk); Serial.print ("Kõrgus:"); Serial.println (GPS.altitude); Serial.print ("Satelliidid:"); Serial.println ((int) GPS.satellites); // Salvesta sõiduki GPS, kui (button_lock.read ()) {car_lat = GPS.latitudeDegrees; auto_lon = GPS.pikkuskraadid; // silumiseks Serial.print ("carLatitude:"); Serial.println (auto_lat); Serial.print ("carLongitude:"); Seeria.println (auto_lon); } // Alusta auto leidmist, kui (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_lipp = 0; } kui (nupu_lipp == 1) {auto_isiku_distants = kaugus (GPS.laiuskraadid, GPS.pikkuskraadid, auto_lat, auto_lon); // Arvuta vahemaa // auto_isik_kaugus = vahemaa (100.0005, 100.0005, 100.0, 100.0); // silumiseks Serial.println (auto_isiku_kaugus); move_direction = GPS.angle; // Salvesta liikumissuund (nurk) // move_direction = 100.0; // Salvestage asimuut (nurk) car_azimuth = asimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // auto_asimuut = asimuut (100 0005, 100 0005, 100,0, 100,0); // Arvuta aeg LED -kellal car_person_angle = car_azimuth - move_direction; nurga_aeg = led_aeg (auto_isiku_nurk); // Kuva LED -ribal.clear (); strip.show (); // viivitus (sagedus (auto_isiku_kaugus)); viivitus (500); strip.setPixelColor (nurga_aeg, riba. Värv (0, 0, 255)); strip.show (); // viivitus (sagedus (auto_isiku_kaugus)); viivitus (500); // Keela LED, kui (nupu_lipp == 1 && auto_isiku_kaugus <5,0) {nupu_lipp = 0; led_lipp = 1; riba.selge (); strip.show (); }}} //}}}

6. samm: silumine leivaplaadil

Silumine Breadboardil
Silumine Breadboardil
Silumine Breadboardil
Silumine Breadboardil
Silumine Breadboardil
Silumine Breadboardil

7. samm: riistvara kokkupanek

Riistvara kokkupanek
Riistvara kokkupanek
Riistvara kokkupanek
Riistvara kokkupanek
Riistvara kokkupanek
Riistvara kokkupanek

8. samm: elektroonika korpuse projekteerimine Adobe Illustratoris

Elektroonika korpusekujundus Adobe Illustratoris
Elektroonika korpusekujundus Adobe Illustratoris

9. samm: papist prototüüp

Papist prototüüp
Papist prototüüp
Papist prototüüp
Papist prototüüp

Seda sammu kasutatakse korpuse ja mudeli iga osa kinnitamiseks, veendudes, et karbi suurus, nuppude asukoht ja LED -asend sobivad kokku pandud elektroonikakomponentidega.

10. samm: kasevineeri prototüüp

Kasevineeri prototüüp
Kasevineeri prototüüp
Kasevineeri prototüüp
Kasevineeri prototüüp

See oli esialgne prototüüp. Lõpuks lisati ühele tükile ruudukujuline auk laadijaga ühendamiseks.

Soovitan: