Turinys:

„FinduCar“: išmanusis automobilio raktas, vedantis žmones į automobilio stovėjimo vietą: 11 žingsnių (su nuotraukomis)
„FinduCar“: išmanusis automobilio raktas, vedantis žmones į automobilio stovėjimo vietą: 11 žingsnių (su nuotraukomis)

Video: „FinduCar“: išmanusis automobilio raktas, vedantis žmones į automobilio stovėjimo vietą: 11 žingsnių (su nuotraukomis)

Video: „FinduCar“: išmanusis automobilio raktas, vedantis žmones į automobilio stovėjimo vietą: 11 žingsnių (su nuotraukomis)
Video: Обязательно запомни эту хитрость! Как можно моментально вывести йод с одежды? #shorts 2024, Gruodis
Anonim
„FinduCar“: išmanusis automobilio raktas, vedantis žmones į vietą, kur automobilis stovi
„FinduCar“: išmanusis automobilio raktas, vedantis žmones į vietą, kur automobilis stovi

Siekiant išspręsti aukščiau išvardytas problemas, šiame projekte siūloma sukurti išmanųjį automobilio raktą, kuris galėtų nukreipti žmones ten, kur jie pastatė automobilį. Ir mano planas yra integruoti GPS į automobilio raktą. Automobiliui sekti nereikia naudoti išmaniojo telefono programos, visi nurodymai bus rodomi tik ant automobilio rakto.

1 žingsnis: popieriaus eskizas

Popieriaus eskizas
Popieriaus eskizas

Kai žmonės paspaudžia mygtuką, norėdami užrakinti automobilį, vietos informacija gali būti automatiškai įrašoma į mikrovaldiklį. Tada, kai žmonės pradeda naršyti prie automobilio, užsidega skirtingas šviesos diodas, kuris nukreipia į automobilio padėtį, o mirksėjimo dažnis rodo atstumą iki automobilio. Jie gali lengvai sekti mirksintį šviesos diodą ir greitai rasti automobilį.

2 žingsnis: Aparatūros sąrašas

Aparatūros sąrašas
Aparatūros sąrašas

Tai yra šiame projekte naudojami komponentai. Kai kurie yra iš dalelių rinkinių (duonos lentos, mygtukas, antraštės), kiti - iš oficialios „Adafruit“svetainės („Adafruit Feather M0“, „Adafruit Ultimate GPS“modulis, „Lpoly Battery“ir „Coin Cell Battery“) ir „Amazon“(„NeoPixel Ring“- 12 RGB LED).

3 žingsnis: grandinės projektavimas

Grandinės dizainas
Grandinės dizainas

„Neopixel_LED“prijungtas prie „Feather M0“PIN 6

„Button_Unlock“yra prijungtas prie „Feather M0“PIN 12

„Button_Lock“prijungtas prie „Feather M0“PIN 13

4 žingsnis: aparatinės įrangos prijungimas

Techninės įrangos ryšys
Techninės įrangos ryšys
Techninės įrangos ryšys
Techninės įrangos ryšys
Techninės įrangos ryšys
Techninės įrangos ryšys

Lituokite antraštes naudodami „Adafruit M0 Feather“, „Adafruit Ultimate GPS Featherwing“. Sudėkite dvi lentas kartu. „GPS FeatherWing“prijungiamas tiesiai prie „Feather M0“plokštės be jokių laidų.

5 žingsnis: programinės įrangos projektavimas

Programinės įrangos projektavimas
Programinės įrangos projektavimas

Bandymo komponentai

Skaitykite FIX

void setup () {

Serial.println („GPS aido testas“); Serial.begin (9600); Serial1.begin (9600); // numatytasis NMEA GPS baudas}

void loop () {

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

Mirksi LED žiedas

Žr. „Adafruit NeoPixel“pavyzdžius.

GPS skaičiavimo funkcijos

Apskaičiuokite azimutą

// Apskaičiuokite azimutą

dvigubas azimutas (dvigubas lat_a, dvigubas lon_a, dvigubas lat_b, dvigubas lon_b) {

dvigubas 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; grįžti d; }

Apskaičiuokite LED laikrodžio laiką, kuris taip pat yra transporto priemonės kryptis

// Apskaičiuokite laiką pagal LED laikrodį

int led_time (dvigubas kampas) {

int vėliava = 0; if (kampas = 15) {kampo_ laikas = kampo_ laikas + 1; } if (vėliava == 1) {kampo_ laikas = 12 - kampo_ laikas; } return kampas_laikas; }

Apskaičiuokite atstumą tarp žmogaus ir jo transporto priemonės

// Apskaičiuokite atstumą

dvigubas atstumas (dvigubas lat_a, dvigubas lon_a, dvigubas lat_b, dvigubas lon_b) {

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

LED ekrano funkcijos

Apskritime užsidega šviesos diodai, rodantys, kad jis pradeda naršyti

// LED žiedo apšvietimas po vieną rodo, kad navigacija prasideda

void colorWipe (uint32_t c, uint8_t palaukti) {

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

Gaukite šviesos diodų dažnį pagal atstumą

// Gaukite LED dažnį

int dažnis (dvigubas atstumas) {

int f = (int) atstumas * 20; grįžti f; }

Mirksi tam tikras šviesos diodas, rodantis automobilio kryptį

// Rodyti LED

strip.clear ();

strip.show (); vėlavimas (dažnis (automobilio_žmonės_distansas)); // uždelsimas (500); strip.setPixelColor (kampo laikas, juostelė. Spalva (0, 0, 255)); strip.show (); vėlavimas (dažnis (automobilio_žmonės_distansas)); // uždelsimas (500);

// Išjungti šviesos diodą

if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_ vėliava = 1; strip.clear (); strip.show (); }

Pagrindinis

#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 laikmatis = milis (); double car_lat, car_lon; dvigubas automobilis_žmogus_distance; double move_direction; dvigubas automobilis_azimutas; dvigubas automobilis_žmogus_kampis; int kampas_laikas;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.pradis (9600); // numatytoji NMEA GPS baudos juosta.begin (); // atšaukite komentarą iš šios eilutės, kad įjungtumėte RMC (rekomenduojamas minimumas) ir GGA (fiksuoti duomenis), įskaitant aukščio GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Nustatykite atnaujinimo greitį GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz atnaujinimo dažnis // Prašykite atnaujinti antenos būseną, pakomentuokite, kad tylėtumėte // GPS.sendCommand (PGCMD_ANTENNA); vėlavimas (1000);}

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

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); jei (GPSECHO), jei (c) serijinis atspaudas (c); // jei gautas sakinys, galime patikrinti kontrolinę sumą, ją išanalizuoti … jei (GPS.newNMEAreceived ()) {// čia sudėtinga, jei išspausdinsime NMEA sakinį arba duomenis // galiausiai neklausysime ir pagauti kitus sakinius! // todėl būkite labai atsargūs, jei naudojate OUTPUT_ALLDATA ir bandote spausdinti duomenis Serial.println (GPS.lastNMEA ()); // tai taip pat nustato newNMEAreceived () vėliavą į false, jei (! GPS.parse (GPS.lastNMEA ()))) // tai taip pat nustato newNMEAreceived () vėliavą į false return; // mes negalime išanalizuoti sakinio, tokiu atveju turėtume tiesiog laukti kito} // jei „millis“() arba laikmatis apsisuks, mes jį iš naujo nustatysime, jei (timer> millis ()) timer = millis (); if (milis () - laikmatis> 2000) {laikmatis = milis (); // iš naujo nustatyti laikmatį Serial.print ("\ nLaikas:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serijinis atspaudas (GPS minutė, DEC); Serial.print (':'); Serijinis spaudinys (GPS.sekundės, DEC); Serial.print ('.'); Serial.println (GPS.milisekundės); Serial.print ("Data:"); Serijinis atspaudas (GPS diena, DEC); Serial.print ('/'); Serijinis atspaudas (GPS mėnuo, DEC); Serijinis atspaudas ("/20"); Serial.println (GPS.metai, DEC); Serial.print („Pataisymas:“); Serial.print ((int) GPS.fix); Serial.print ("kokybė:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Vieta:"); Serijinis atspaudas (GPS platuma, 4); Serijinis atspaudas (GPS.lat); Serial.print (","); Serijinis atspaudas (GPS.ilguma, 4); Serial.println (GPS.lon); Serial.print ("Vieta (laipsniais, veikia su" Google "žemėlapiais):"); Serijinis atspaudas (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Greitis (mazgai):"); Serial.println (GPS.speed); Serial.print ("Angle:"); Serial.println (GPS.angle); Serial.print ("Aukščio aukštis:"); Serial.println (GPS.altitude); Serial.print („Palydovai:“); Serial.println ((int) GPS.satellites); // Išsaugokite transporto priemonės GPS, jei (button_lock.read ()) {car_lat = GPS.latitudeDegrees; automobilis_lonas = GPS.longitudeDegrees; // derinimui Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Pradėkite ieškoti automobilio, jei (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_ vėliava = 0; } if (button_flag == 1) {car_person_distance = atstumas (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Apskaičiuokite atstumą // automobilio_žmonės_distansas = atstumas (100.0005, 100.0005, 100.0, 100.0); // derinimui Serial.println (car_person_distance); move_direction = GPS.angle; // Įrašyti judėjimo kryptį (kampą) // move_direction = 100,0; // Įrašyti azimutą (kampą) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimutas (100.0005, 100.0005, 100.0, 100.0); // Skaičiuoti laiką ant LED laikrodžio car_person_angle = car_azimuth - move_direction; kampo laikas = šviesos diodo laikas (automobilio_žmogus_kampis); // Rodyti ant LED juostos.clear (); strip.show (); // uždelsimas (dažnis (automobilio_žmonės_distance)); vėlavimas (500); strip.setPixelColor (kampo laikas, juostelė. Spalva (0, 0, 255)); strip.show (); // uždelsimas (dažnis (automobilio_žmonės_distance)); vėlavimas (500); // Išjungti šviesos diodą, jei (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_ vėliava = 1; strip.clear (); strip.show (); }}} //}}}

6 veiksmas: derinkite „Breadboard“

Derinimas „Breadboard“
Derinimas „Breadboard“
Derinimas „Breadboard“
Derinimas „Breadboard“
Derinimas „Breadboard“
Derinimas „Breadboard“

7 žingsnis: Aparatūros surinkimas

Techninės įrangos surinkimas
Techninės įrangos surinkimas
Techninės įrangos surinkimas
Techninės įrangos surinkimas
Techninės įrangos surinkimas
Techninės įrangos surinkimas

8 veiksmas: elektronikos būsto projektavimas „Adobe Illustrator“

Elektronikos korpuso dizainas „Adobe Illustrator“
Elektronikos korpuso dizainas „Adobe Illustrator“

9 žingsnis: kartono prototipas

Kartono prototipas
Kartono prototipas
Kartono prototipas
Kartono prototipas

Šis žingsnis naudojamas patvirtinti korpuso ir kiekvieno modelio gabalo dydį, įsitikinant, kad dėžutės dydis, mygtuko padėtis ir LED padėtis atitinka surinktus elektroninius komponentus.

10 žingsnis: beržo faneros prototipas

Beržo faneros prototipas
Beržo faneros prototipas
Beržo faneros prototipas
Beržo faneros prototipas

Tai buvo pradinis prototipas. Galiausiai prie vienos iš dalių buvo pridėta kvadratinė skylė, skirta prijungti prie įkroviklio.

Rekomenduojamas: