Sisällysluettelo:

FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan: 11 vaihetta (kuvilla)
FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan: 11 vaihetta (kuvilla)

Video: FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan: 11 vaihetta (kuvilla)

Video: FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan: 11 vaihetta (kuvilla)
Video: ajude seus amigos sempre ❤️ 2024, Heinäkuu
Anonim
FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan
FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan

Edellä mainittujen ongelmien ratkaisemiseksi tässä projektissa ehdotetaan älykkään auton avaimen kehittämistä, joka voisi ohjata ihmiset sinne, missä he pysäköivät auton. Suunnitelmani on integroida GPS auton avaimeen. Sinun ei tarvitse käyttää älypuhelinsovellusta auton seuraamiseen, kaikki ohjeet näkyvät vain auton avaimessa.

Vaihe 1: Paperiluonnos

Paperiluonnos
Paperiluonnos

Kun ihmiset lukitsevat auton painamalla painiketta, sijaintitiedot voidaan tallentaa mikrokontrolleriin automaattisesti. Kun ihmiset alkavat navigoida autoon, eri LED -valot syttyvät suoraan auton asentoon ja vilkkuva taajuus näyttää etäisyyden autoon. He voivat helposti seurata vilkkuvaa LED -valoa ja löytää auton nopeasti.

Vaihe 2: Laitelista

Laitteistoluettelo
Laitteistoluettelo

Näitä komponentteja käytetään tässä projektissa. Jotkut ovat partikkelipakkauksista (leipälevy, painike, otsikot), toiset ostetaan Adafruitin virallisilta verkkosivuilta (Adafruit Feather M0, Adafruit Ultimate GPS -moduuli, Lpoly -akku ja nappiparisto) ja Amazonilta (NeoPixel Ring - 12 RGB LED).

Vaihe 3: Piirin suunnittelu

Piirin suunnittelu
Piirin suunnittelu

Neopixel_LED on yhdistetty Feather M0: n PIN -koodiin 6

Button_Unlock on yhdistetty Feather M0: n PIN -koodiin 12

Button_Lock on yhdistetty Feather M0: n PIN -koodiin 13

Vaihe 4: Laitteistoyhteys

Laitteistoyhteys
Laitteistoyhteys
Laitteistoyhteys
Laitteistoyhteys
Laitteistoyhteys
Laitteistoyhteys

Juotos otsikot Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing avulla. Pinoa kaksi lautaa yhteen. GPS FeatherWing liitetään suoraan Feather M0 -levyyn ilman johtoja.

Vaihe 5: Ohjelmistosuunnittelu

Ohjelmistosuunnittelu
Ohjelmistosuunnittelu

Testikomponentit

Lue KORJAUS

void setup () {

Serial.println ("GPS -kaiku -testi"); Sarja.alku (9600); Sarja1.alku (9600); // NMEA -oletus GPS -baud}

void loop () {

if (Serial.available ()) {char c = Serial.read (); Sarja1. Kirjoita (c); } jos (Sarja1.available ()) {char c = Serial1.read (); Serial.write (c); }}

Vilkkuva LED -rengas

Katso esimerkkejä Adafruit NeoPixelistä.

GPS -laskutoiminnot

Laske atsimuutti

// Laske atsimuutti

kaksinkertainen atsimuutti (double lat_a, double lon_a, double lat_b, double lon_b) {

kaksinkertainen 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 = syn (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; paluu d; }

Laske LED -kellon aika, joka on myös ajoneuvon suunta

// Laske aika LED -kellolla

int led_time (kaksoiskulma) {

int lippu = 0; jos (kulma = 15) {kulma -aika = kulma -aika + 1; } if (lippu == 1) {kulma -aika = 12 - kulma -aika; } paluukulma_aika; }

Laske etäisyys henkilön ja hänen ajoneuvonsa välillä

// Laske etäisyys

kaksinkertainen etäisyys (double lat_a, double lon_a, double lat_b, double lon_b) {

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

LED -näytön toiminnot

Sytytä ympyrän LED -valot, jotka osoittavat, että se alkaa navigoida

// LED -rengasvalot yksitellen osoittavat, että navigointi alkaa

void colorWipe (uint32_t c, uint8_t wait) {

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

Hae LED -taajuus etäisyyden perusteella

// Hae LED -taajuus

int taajuus (kaksinkertainen etäisyys) {

int f = (int) etäisyys * 20; paluu f; }

Vilkkuu tietty LED, joka osoittaa auton suunnan

// Näyttö LED -valolla

strip.clear ();

strip.show (); viive (taajuus (auton_henkilön_matka)); // viive (500); strip.setPixelColor (kulma -aika, strip. Color (0, 0, 255)); strip.show (); viive (taajuus (auton_henkilön_matka)); // viive (500);

// Poista LED käytöstä

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

Pääasiallinen

#sisällytä Adafruit_GPS.h #sisällytä Adafruit_NeoPixel.h #sisällytä HardwareSerial.h #sisällytä painike.h #sisällytä matematiikka.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 -painike_lippu = 0; int led_flag = 1; uint32_t ajastin = millis (); double car_lat, car_lon; kaksinkertainen auton_henkilö_matka; double move_direction; double car_azimuth; kaksinkertainen auto_henkilökulma; int kulma -aika;

void setup () {

Sarja.alku (115200); // Sarja1.alku (9600); GPS.alku (9600); // oletus NMEA GPS -baudiliuska.begin (); // poista tämän rivin komento ottaaksesi RMC (suositeltu minimi) ja GGA (korjaustiedot) käyttöön, mukaan lukien korkeus GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Aseta päivitysnopeus GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz päivitystaajuus // Pyydä päivityksiä antennin tilasta, kommentoi ollaksesi hiljaa // GPS.sendCommand (PGCMD_ANTENNA); viive (1000);}

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

// char c = Serial.read (); // Sarja1. Kirjoita (c); //} // if (Serial1.available ()) {char c = GPS.read (); jos (GPSECHO) jos (c) sarjajälki (c); // jos lause vastaanotetaan, voimme tarkistaa tarkistussumman, jäsentää sen… jos (GPS.newNMEAreceived ()) {// tässä on hankala asia, jos tulostamme NMEA -lauseen tai dataa // emme lopulta kuuntele ja muista lauseista kiinni! // joten ole erittäin varovainen, jos tulostat OUTPUT_ALLDATA ja yrität tulostaa tietoja Serial.println (GPS.lastNMEA ()); // tämä asettaa myös newNMEAreceived () -lipun arvoksi false, jos (! GPS.parse (GPS.lastNMEA ()))) // tämä asettaa myös newNMEAreceived () -lipun väärään paluuseen; // lauseen jäsentäminen voi epäonnistua, jolloin meidän pitäisi vain odottaa toista} // jos millis () tai ajastin kääntyy ympäri, nollaamme sen vain, jos (timer> millis ()) timer = millis (); if (millis () - ajastin> 2000) {timer = millis (); // nollaa ajastin Serial.print ("\ nAika:"); Sarjajälki (GPS.tunti, DEC); Serial.print (':'); Sarjajälki (GPS.minute, DEC); Serial.print (':'); Sarjajälki (GPS.sekuntia, DEC); Serial.print ('.'); Serial.println (GPS.millisekuntia); Serial.print ("Päivämäärä:"); Sarjajälki (GPS -päivä, DEC); Serial.print ('/'); Sarjajälki (GPS.kuukausi, DEC); Sarjanjälki ("/20"); Serial.println (GPS -vuosi, DEC); Serial.print ("Korjaus:"); Serial.print ((int) GPS.fix); Serial.print ("laatu:"); Serial.println ((int) GPS.filaatu); if (GPS.fix) {Serial.print ("Sijainti:"); Sarjajälki (GPS. Leveysaste, 4); Sarjajälki (GPS.lat); Serial.print (","); Sarjajälki (GPS.pituusaste, 4); Serial.println (GPS.lon); Serial.print ("Sijainti (asteina, toimii Google Mapsin kanssa):"); Sarjajälki (GPS.latitudeDegrees, 4); Serial.print (","); Sarjajulkaisu (GPS.pituusaste, 4); Serial.print ("Nopeus (solmua):"); Serial.println (GPS.speed); Serial.print ("Kulma:"); Serial.println (GPS.angle); Serial.print ("Korkeus:"); Serial.println (GPS.altitude); Serial.print ("Satelliitit:"); Serial.println ((int) GPS.satellites); // Tallenna ajoneuvon GPS, jos (button_lock.read ()) {car_lat = GPS.latitudeDegrees; auto_lon = GPS.pituusaste; // debug Serial.print ("carLatitude:"); Sarja.println (auto_lat); Serial.print ("carLongitude:"); Sarja.println (auto_lon); } // Aloita auton etsiminen, jos (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 = etäisyys (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Laske etäisyys // auton_henkilö_matka = etäisyys (100.0005, 100.0005, 100.0, 100.0); // debug Serial.println (auton_henkilön_matka); move_direction = GPS.angle; // Tallenna liikesuunta (kulma) // move_direction = 100.0; // Tallenna atsimuutti (kulma) car_azimuth = atsimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = atsimuutti (100.0005, 100.0005, 100.0, 100.0); // Laske aika LED -kellolla car_person_angle = car_azimuth - move_direction; kulma -aika = led -aika (auton_henkilökulmio); // Näyttö LED -nauhalla.clear (); strip.show (); // viive (taajuus (auton_henkilön_matka)); viive (500); strip.setPixelColor (kulma -aika, strip. Color (0, 0, 255)); strip.show (); // viive (taajuus (auton_henkilön_matka)); viive (500); // Poista LED käytöstä, jos (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Vaihe 6: Virheenkorjaus Breadboardilla

Virheenkorjaus Breadboardilla
Virheenkorjaus Breadboardilla
Virheenkorjaus Breadboardilla
Virheenkorjaus Breadboardilla
Virheenkorjaus Breadboardilla
Virheenkorjaus Breadboardilla

Vaihe 7: Laitteiston kokoaminen

Laitteiston kokoonpano
Laitteiston kokoonpano
Laitteiston kokoonpano
Laitteiston kokoonpano
Laitteiston kokoonpano
Laitteiston kokoonpano

Vaihe 8: Elektroniikan kotelosuunnittelu Adobe Illustratorissa

Elektroniikan kotelosuunnittelu Adobe Illustratorissa
Elektroniikan kotelosuunnittelu Adobe Illustratorissa

Vaihe 9: Pahviprototyyppi

Pahvi prototyyppi
Pahvi prototyyppi
Pahvi prototyyppi
Pahvi prototyyppi

Tätä vaihetta käytetään vahvistamaan kotelon ja mallin kaikkien osien koko varmistaen, että laatikon koko, painikkeen sijainti ja LED -paikka sopivat koottuihin elektronisiin komponentteihin.

Vaihe 10: Koivuvanerin prototyyppi

Koivuvanerin prototyyppi
Koivuvanerin prototyyppi
Koivuvanerin prototyyppi
Koivuvanerin prototyyppi

Tämä oli alkuperäinen prototyyppi. Lopuksi yhteen kappaleeseen lisättiin neliömäinen reikä laturiin kytkemistä varten.

Suositeltava: