Satura rādītājs:

FinduCar: viedā automašīnas atslēga, kas ved cilvēkus uz automašīnu novietošanas vietu: 11 soļi (ar attēliem)
FinduCar: viedā automašīnas atslēga, kas ved cilvēkus uz automašīnu novietošanas vietu: 11 soļi (ar attēliem)

Video: FinduCar: viedā automašīnas atslēga, kas ved cilvēkus uz automašīnu novietošanas vietu: 11 soļi (ar attēliem)

Video: FinduCar: viedā automašīnas atslēga, kas ved cilvēkus uz automašīnu novietošanas vietu: 11 soļi (ar attēliem)
Video: FULL BUILD | Rebuilding A DESTROYED Porsche 911 Turbo! 2024, Jūlijs
Anonim
FinduCar: viedā automašīnas atslēga, kas palīdz cilvēkiem novietot automašīnu
FinduCar: viedā automašīnas atslēga, kas palīdz cilvēkiem novietot automašīnu

Lai atrisinātu iepriekš minētās problēmas, šis projekts piedāvā izstrādāt viedo automašīnas atslēgu, kas varētu novirzīt cilvēkus uz vietu, kur viņi novietoja automašīnu. Un mans plāns ir integrēt GPS automašīnas atslēgā. Lai izsekotu automašīnu, nav jāizmanto viedtālruņa lietotne, visi norādījumi tiks parādīti tikai automašīnas atslēgā.

1. darbība: papīra skice

Papīra skice
Papīra skice

Kad cilvēki nospiež pogu, lai bloķētu automašīnu, atrašanās vietas informāciju varētu automātiski ierakstīt mikrokontrollerī. Tad, kad cilvēki sāk virzīties uz automašīnu, iedegas dažādas gaismas diodes, lai novirzītu uz automašīnas stāvokli, un mirgošanas frekvence parāda attālumu līdz automašīnai. Viņi var viegli sekot mirgojošajai gaismas diodei un ātri atrast automašīnu.

2. darbība. Aparatūras saraksts

Aparatūras saraksts
Aparatūras saraksts

Šīs ir šajā projektā izmantotās sastāvdaļas. Daži ir no daļiņu komplektiem (maizes dēlis, poga, galvenes), citi tiek iegādāti no Adafruit oficiālās vietnes (Adafruit Feather M0, Adafruit Ultimate GPS modulis, Lpoly akumulators un monētu šūnu akumulators) un Amazon (NeoPixel Ring - 12 RGB LED).

3. solis: shēmas dizains

Ķēdes dizains
Ķēdes dizains

Neopixel_LED ir pievienots Feather M0 PIN 6

Button_Unlock ir pievienots Feather M0 PIN 12

Button_Lock ir pievienots Feather M0 PIN 13

4. darbība. Aparatūras savienojums

Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums
Aparatūras savienojums

Lodējiet galvenes ar Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Salieciet abus dēļus kopā. GPS FeatherWing tiek pievienots tieši jūsu Feather M0 plāksnei bez papildu vadiem.

5. solis: programmatūras projektēšana

Programmatūras dizains
Programmatūras dizains

Pārbaudes sastāvdaļas

Izlasiet FIX

void setup () {

Serial.println ("GPS atbalss tests"); Sērijas sākums (9600); Sērijas1.sākums (9600); // noklusējuma NMEA GPS bodu}

void loop () {

ja (Serial.available ()) {char c = Serial.read (); Sērijas1. Rakstīt (c); } ja (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}

Mirgojošs LED gredzens

Skatiet Adafruit NeoPixel piemērus.

GPS aprēķināšanas funkcijas

Aprēķiniet azimutu

// Aprēķināt azimutu

dubults azimuts (dubultā lat_a, dubultā lon_a, dubultā lat_b, dubultā lon_b) {

dubultā 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; atgriešanās d; }

Aprēķiniet laiku uz LED pulksteņa, kas ir arī transportlīdzekļa virziens

// Aprēķiniet laiku uz LED pulksteņa

int led_time (dubults leņķis) {

int karogs = 0; ja (leņķis = 15) {leņķa_laiks = leņķa_laiks + 1; } ja (karogs == 1) {leņķa_laiks = 12 - leņķa_laiks; } atgriešanās leņķis_laiks; }

Aprēķiniet attālumu starp cilvēku un viņa transportlīdzekli

// Aprēķināt attālumu

divkāršs attālums (dubultā lat_a, dubultā lon_a, dubultā lat_b, dubultā lon_b) {

dubultā ZEMES_RADIJS = 6378137,0; dubultā radLat1 = (lat_a * PI / 180.0); dubultā radLat2 = (lat_b * PI / 180.0); dubultā a = radLat1 - radLat2; dubultā b = (lon_a - lon_b) * PI / 180,0; dubults s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * ZEMES_RADIJS / 10000000; atgriezties s; }

LED displeja funkcijas

Izgaismojiet gaismas diodes aplī, norādot, ka tas sāk orientēties

// LED gredzenu apgaismojums pa vienam parāda, ka navigācija sākas

void colorWipe (uint32_t c, uint8_t gaidīt) {

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

Iegūstiet LED frekvenci, pamatojoties uz attālumu

// Iegūstiet LED frekvenci

int frekvence (divkāršs attālums) {

int f = (int) attālums * 20; atgriešanās f; }

Mirgo noteiktā gaismas diode, kas norāda automašīnas virzienu

// Displejs uz LED

sloksne.skaidrs ();

strip.show (); kavēšanās (biežums (automašīnas_personas_distance)); // kavēšanās (500); strip.setPixelColor (leņķa_laiks, sloksne. Krāsa (0, 0, 255)); strip.show (); kavēšanās (biežums (automašīnas_personas_distance)); // kavēšanās (500);

// Atspējot LED

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

Galvenais

#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); Pogas pogas bloķēšana (Button_Lock_PIN); Button button_unlock (Button_Unlock_PIN); int pogas_karogs = 0; int led_flag = 1; uint32_t taimeris = milis (); dubultā car_lat, car_lon; dubultā automašīnas_personas_distance; dubultā pārvietošanās_virziens; dubultā car_azimuth; dubultā automašīna_personas_stūris; int leņķa_laiks;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.sākt (9600); // noklusējuma NMEA GPS bodu josla.begin (); // atceliet šīs rindas komentārus, lai ieslēgtu RMC (ieteicamais minimums) un GGA (fiksētu datus), ieskaitot augstuma GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Iestatiet atjaunināšanas ātrumu GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz atjaunināšanas ātrums // Pieprasīt atjauninājumus par antenas statusu, komentēt, lai klusētu // GPS.sendCommand (PGCMD_ANTENNA); kavēšanās (1000);}

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

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); ja (GPSECHO) ja (c) Sērijas nospiedums (c); // ja tiek saņemts teikums, mēs varam pārbaudīt kontrolsummu, parsēt to … ja (GPS.newNMEAreceived ()) {// šeit ir sarežģīta lieta, ja mēs izdrukājam NMEA teikumu vai dati // mēs galu galā neklausāmies un ķer citus teikumus! // tāpēc esiet ļoti piesardzīgs, ja izmantojat OUTPUT_ALLDATA un mēģiniet izdrukāt datus Serial.println (GPS.lastNMEA ()); // tas arī novieto karogu newNMEAreceived () uz nepatiesu, ja (! GPS.parse (GPS.lastNMEA ()))) // tas arī nosaka newNMEAreceived () karogu uz nepatiesu atgriešanos; // mēs nevaram parsēt teikumu, šādā gadījumā mums vienkārši jāgaida cits} // ja milis () vai taimeris ietinās apkārt, mēs to vienkārši atiestatīsim, ja (taimeris> millis ()) taimeris = millis (); ja (milis () - taimeris> 2000) {taimeris = milis (); // atiestatīt taimeri Serial.print ("\ nLaiks:"); Sērijas nospiedums (GPS.stunda, DEC); Serial.print (':'); Sērijas nospiedums (GPS.minute, DEC); Serial.print (':'); Sērijas nospiedums (GPS.sekundes, DEC); Serial.print ('.'); Serial.println (GPS.milisekundes); Serial.print ("Datums:"); Sērijas nospiedums (GPS diena, DEC); Serial.print ('/'); Sērijas nospiedums (GPS.mēnesis, DEC); Sērijas nospiedums ("/20"); Serial.println (GPS.gads, DEC); Serial.print ("Labojums:"); Serial.print ((int) GPS.fix); Serial.print ("kvalitāte:"); Serial.println ((int) GPS.fixquality); ja (GPS.fix) {Serial.print ("Atrašanās vieta:"); Sērijas nospiedums (GPS platums, 4); Sērijas nospiedums (GPS.lat); Serial.print (","); Sērijas nospiedums (GPS.garums, 4); Serial.println (GPS.lon); Serial.print ("Atrašanās vieta (grādos, darbojas ar Google Maps):"); Sērijas nospiedums (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Ātrums (mezgli):"); Serial.println (GPS.speed); Serial.print ("Leņķis:"); Serial.println (GPS.angle); Serial.print ("Augstums:"); Serial.println (GPS.augstums); Serial.print ("Satelīti:"); Serial.println ((int) GPS.satellites); // Saglabājiet transportlīdzekļa GPS, ja (button_lock.read ()) {car_lat = GPS.latitudeDegrees; auto_lons = GPS.garuma grādi; // atkļūdošanai Serial.print ("carLatitude:"); Sērijas.println (auto_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Sāciet atrast automašīnu, ja (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 = attālums (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Aprēķināt attālumu // auto_personas_distance = attālums (100.0005, 100.0005, 100.0, 100.0); // atkļūdošanai Serial.println (auto_personas_distance); move_direction = GPS.angle; // Ierakstīt kustības virzienu (leņķi) // move_direction = 100,0; // Ierakstīt azimutu (leņķi) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // auto_azimuts = azimuts (100 0005, 100 0005, 100,0, 100,0); // Aprēķināt laiku uz LED pulksteņa car_person_angle = car_azimuth - move_direction; leņķa laiks = vadītais laiks (automašīnas_personas_stūris); // Displejs uz LED sloksnes.clear (); strip.show (); // kavēšanās (biežums (automašīnas_personas_distance)); kavēšanās (500); strip.setPixelColor (leņķa_laiks, sloksne. Krāsa (0, 0, 255)); strip.show (); // kavēšanās (biežums (automašīnas_personas_distance)); kavēšanās (500); // Atspējot LED, ja (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; sloksne.skaidrs (); strip.show (); }}} //}}}

6. darbība: atkļūdošana uz maizes dēļa

Atkļūdošana uz maizes dēļa
Atkļūdošana uz maizes dēļa
Atkļūdošana uz maizes dēļa
Atkļūdošana uz maizes dēļa
Atkļūdošana uz maizes dēļa
Atkļūdošana uz maizes dēļa

7. solis: Aparatūras montāža

Aparatūras montāža
Aparatūras montāža
Aparatūras montāža
Aparatūras montāža
Aparatūras montāža
Aparatūras montāža

8. darbība. Elektronikas korpusa dizains programmā Adobe Illustrator

Elektronikas korpusa dizains programmā Adobe Illustrator
Elektronikas korpusa dizains programmā Adobe Illustrator

9. solis: kartona prototips

Kartona prototips
Kartona prototips
Kartona prototips
Kartona prototips

Šo soli izmanto, lai apstiprinātu korpusa un katra modeļa gabala izmēru, pārliecinoties, ka kastes izmērs, pogas pozīcija un LED pozīcija atbilst samontētajām elektroniskajām sastāvdaļām.

10. solis: bērza saplākšņa prototips

Bērza saplākšņa prototips
Bērza saplākšņa prototips
Bērza saplākšņa prototips
Bērza saplākšņa prototips

Šis bija sākotnējais prototips. Visbeidzot, vienam no gabaliem tika pievienots kvadrātveida caurums, lai to pievienotu lādētājam.

Ieteicams: