Përmbajtje:

FinduCar: Një çelës i zgjuar i makinës që i udhëzon njerëzit atje ku është parkuar makina: 11 hapa (me fotografi)
FinduCar: Një çelës i zgjuar i makinës që i udhëzon njerëzit atje ku është parkuar makina: 11 hapa (me fotografi)

Video: FinduCar: Një çelës i zgjuar i makinës që i udhëzon njerëzit atje ku është parkuar makina: 11 hapa (me fotografi)

Video: FinduCar: Një çelës i zgjuar i makinës që i udhëzon njerëzit atje ku është parkuar makina: 11 hapa (me fotografi)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Nëntor
Anonim
FinduCar: Një çelës i zgjuar i makinës që udhëzon njerëzit atje ku makina është e parkuar
FinduCar: Një çelës i zgjuar i makinës që udhëzon njerëzit atje ku makina është e parkuar

Me qëllim të zgjidhjes së problemeve të mësipërme, ky projekt propozon zhvillimin e një çelësi të zgjuar të makinës i cili mund t'i drejtojë njerëzit atje ku e kanë parkuar makinën. Dhe plani im është integrimi i një GPS në çelësin e makinës. Nuk ka nevojë të përdorni aplikacionin smartphone për të gjurmuar makinën, të gjitha udhëzimet do të shfaqen vetëm në çelësin e makinës.

Hapi 1: Skica e letrës

Skicë letre
Skicë letre

Kur njerëzit shtypin butonin për të kyçur makinën, informacioni i vendndodhjes mund të regjistrohet automatikisht në mikrokontrollues. Pastaj, kur njerëzit fillojnë të lundrojnë në makinë, LED i ndryshëm ndizet për t'u drejtuar në pozicionin e makinës dhe frekuenca e ndezjes tregon distancën nga makina. Ata lehtë mund të ndjekin dritën LED që pulson dhe të gjejnë shpejt makinën.

Hapi 2: Lista e pajisjeve

Lista e pajisjeve
Lista e pajisjeve

Këta janë përbërësit e përdorur në këtë projekt. Disa janë nga grupet e grimcave (dërrasa buke, buton, tituj), të tjerat blihen nga faqja zyrtare e Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS module, Lpoly Battery and Coin Cell Battery) dhe Amazon (NeoPixel Ring - 12 RGB LED).

Hapi 3: Dizajni i qarkut

Dizajni i Qarkut
Dizajni i Qarkut

Neopixel_LED është i lidhur me PIN 6 të Pendës M0

Button_Unlock është i lidhur me PIN 12 të Pendës M0

Button_Lock është i lidhur me PIN 13 të Pendës M0

Hapi 4: Lidhja e harduerit

Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit
Lidhja e harduerit

Ngjitini titujt me pendën Adafruit M0, Adafruit Ultimate GPS Featherwing. Vendosini të dy bordet së bashku. GPS FeatherWing futet direkt në bordin tuaj Feather M0 pa më shumë tela.

Hapi 5: Dizajni i softuerit

Projektimi i Softuerit
Projektimi i Softuerit

Komponentët e Testit

Lexoni një FIX

void setup () {

Serial.println ("GPS eko test"); Serial.filloj (9600); Serial1.fill (9600); // parazgjedhja e NMEA GPS baud}

lak void () {

if (Serial.disponueshëm ()) {char c = Serial.read (); Serial1.shkruani (c); } if (Serial1.disponueshëm ()) {char c = Serial1.read (); Serial.shkruani (c); }}

Unaza LED e ndezjes

Shihni Shembujt Adafruit NeoPixel.

Funksionet e llogaritjes GPS

Llogaritni Azimuthin

// Llogarit Azimutin

azimuth i dyfishtë (i dyfishtë lat_a, i dyfishtë lon_a, i dyfishtë lat_b, i dyfishtë lon_b) {

dyfish 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; kthimi d; }

Llogaritni kohën në orën LED, e cila është gjithashtu drejtimi i automjetit

// Llogaritni kohën në orën LED

int led_time (kënd i dyfishtë) {

int flamur = 0; nëse (këndi = 15) {koha_këndi = koha_këndi + 1; } if (flag == 1) {angle_time = 12 - angle_time; } koha_këndi i kthimit; }

Llogaritni distancën midis personit dhe automjetit të tij

// Llogarit Distancën

distancë e dyfishtë (dyshe lat_a, dyshe lon_a, dyshe lat_b, dyshe lon_b) {

dyshe EARTH_RADIUS = 6378137.0; radLat1 = (lat_a * PI / 180.0); radLat2 = (lat_b * PI / 180.0); dyfish a = radLat1 - radLat2; dyshe b = (lon_a - lon_b) * PI / 180.0; dyshe s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; kthimi s; }

Funksionet e ekranit LED

Ndizni LED -të në një rreth që tregojnë se fillon të lundrojë

// Ndriçimi i unazës LED një nga një tregon se lundrimi fillon

ngjyra e pavlefshme Fshij (uint32_t c, uint8_t prit) {

për (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); vonesë (prit);}}

Merrni frekuencën LED në bazë të distancës

// Merrni Frekuencën LED

frekuenca int (distancë e dyfishtë) {

int f = (int) distanca * 20; kthimi f; }

Mbyllni dritën LED të caktuar që tregon drejtimin e makinës

// Shfaq në LED

shirit.i qartë ();

shirit.shfaq (); vonesa (frekuenca (distanca_personi_ makinë)); // vonesë (500); strip.setPixelColor (koha_këndore, strip. Color (0, 0, 255)); shirit.shfaq (); vonesa (frekuenca (distanca_personi_ makinë)); // vonesë (500);

// Çaktivizoni LED

nëse (button_flag == 1 && distanca e makinës <5.0) {button_flag = 0; flamuri i udhëhequr = 1; shirit.i qartë (); shirit.shfaq (); }

Kryesore

#përfshi Adafruit_GPS.h #përfshi Adafruit_NeoPixel.h #përfshi HardwareSerial.h #përfshi Button.h #përfshi matematikën.h

#përcaktoni Neopixel_LED_PIN 6

#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1

#përcaktoni GPSECHO false

Adafruit_GPS GPS (& GPSSerial); Rrip Adafruit_NeoPixel = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Butoni i butonit_bllokues (Butoni_Lock_PIN); Butoni i hapjes së butonit (Butoni_Unlock_PIN); int button_flag = 0; int led_flag = 1; kohëmatësi uint32_t = millis (); makinë e dyfishtë_lat, makinë_lon; makinë_person_distanca e dyfishtë; lëvizje_drejtim i dyfishtë; makinë e dyfishtë_azimuth; dykëndësh_këndi i makinës; int angle_time;

void setup () {

Serial.fillo (115200); // Serial1.filloj (9600); GPS.filloj (9600); // default NMEA GPS baud strip.begin (); // mos komentoni këtë linjë për të aktivizuar RMC (minimumi i rekomanduar) dhe GGA (rregulloni të dhënat) përfshirë lartësinë GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Vendosni normën e përditësimit GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Shkalla e përditësimit 1 Hz // Kërkoni përditësime mbi statusin e antenës, komentoni për të heshtur // GPS.sendCommand (PGCMD_ANTENNA); vonesë (1000);}

lak void () {// if (Serial.disponueshëm ()) {

// char c = Serial.read (); // Serial1.shkruani (c); //} // nëse (Serial1.disponueshëm ()) {char c = GPS.read (); nëse (GPSECHO) nëse (c) Serial.print (c); // nëse një fjali merret, ne mund të kontrollojmë shumën e kontrollit, ta analizojmë atë … nëse (GPS.newNMEArecedived ()) {// një gjë e ndërlikuar këtu është nëse shtypim fjalinë NMEA, ose të dhënat // ne përfundojmë duke mos dëgjuar dhe kapja e fjalive të tjera! // prandaj jini shumë të kujdesshëm nëse përdorni OUTPUT_ALLDATA dhe përpiqeni të printoni të dhënat Serial.println (GPS.lastNMEA ()); // kjo gjithashtu vendos flamurin newNMEAreceived () në false nëse (! GPS.parse (GPS.lastNMEA ())) // kjo gjithashtu vendos flamurin newNMEAreceived () në kthim të rremë; // ne mund të dështojmë në analizimin e një fjalie, në të cilin rast thjesht duhet të presim për një tjetër} // nëse millis () ose kohëmatësi përfundon, thjesht do ta rivendosim nëse (timer> millis ()) timer = millis (); if (millis () - kohëmatësi> 2000) {timer = millis (); // rivendosni kohëmatësin Serial.print ("\ nOra:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.sekonda, DEC); Serial.print ('.'); Serial.println (GPS.milisekonda); Serial.print ("Data:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/20"); Serial.println (GPS.year, DEC); Serial.print ("Rregullo:"); Serial.print ((int) GPS.fix); Serial.print ("cilësia:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Vendndodhja:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.gjatësia, 4); Serial.println (GPS.lon); Serial.print ("Vendndodhja (në gradë, punon me Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.gjatësia e gradave, 4); Serial.print ("Shpejtësia (nyjet):"); Serial.println (GPS.speed); Serial.print ("Këndi:"); Serial.println (GPS.angle); Serial.print ("Lartësia:"); Serial.println (GPS.altitude); Serial.print ("Satelitë:"); Serial.println ((int) GPS.satellites); // Ruani GPS -në e automjetit nëse (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // për korrigjimin Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (makinë_lon); } // Filloni të gjeni makinën nëse (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); flamuri i udhëhequr = 0; } if (button_flag == 1) {car_person_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Njehsoni distancën // distanca e_karbonit = distanca (100.0005, 100.0005, 100.0, 100.0); // për debug Serial.println (car_person_distance); move_direction = GPS.angle; // Regjistroni drejtimin e lëvizjes (këndi) // move_direction = 100.0; // Regjistroni Azimuthin (këndin) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // makinë_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Llogarit kohën në orën LED car_person_angle = car_azimuth - move_direction; koha_këndore = koha_ udhëheqëse (këndi_person_i makinës); // Shfaq në shiritin LED. I qartë (); shirit.shfaq (); // vonesa (frekuenca (distanca_personi_ makinë)); vonesë (500); strip.setPixelColor (koha_këndore, strip. Color (0, 0, 255)); shirit.shfaq (); // vonesa (frekuenca (distanca_personi_ makinë)); vonesë (500); // Çaktivizo LED nëse (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; flamuri i udhëhequr = 1; shirit.i qartë (); shirit.shfaq (); }}} //}}}

Hapi 6: Rregulloni gabimet në Breadboard

Debug në Breadboard
Debug në Breadboard
Debug në Breadboard
Debug në Breadboard
Debug në Breadboard
Debug në Breadboard

Hapi 7: Asambleja e harduerit

Asambleja e harduerit
Asambleja e harduerit
Asambleja e harduerit
Asambleja e harduerit
Asambleja e harduerit
Asambleja e harduerit

Hapi 8: Dizajni i Strehimit Elektronik në Adobe Illustrator

Dizajni i Strehimit Elektronik në Adobe Illustrator
Dizajni i Strehimit Elektronik në Adobe Illustrator

Hapi 9: Prototip kartoni

Prototip kartoni
Prototip kartoni
Prototip kartoni
Prototip kartoni

Ky hap përdoret për të konfirmuar madhësinë e strehimit dhe çdo pjesë të modelit, duke u siguruar që madhësia e kutisë, pozicioni i butonit dhe pozicioni LED të përshtaten me përbërësit elektronikë të grumbulluar.

Hapi 10: Prototipi i kompensatës së thuprës

Prototipi i kompensatës së thuprës
Prototipi i kompensatës së thuprës
Prototipi i kompensatës së thuprës
Prototipi i kompensatës së thuprës

Ky ishte prototipi fillestar. Një vrimë katrore për t'u lidhur me një karikues u shtua në njërën prej pjesëve më në fund.

Hapi 11: Prototipi i Asamblesë Finale

Recommended: