Talaan ng mga Nilalaman:

FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung saan Naka-park ang Kotse: 11 Hakbang (na may Mga Larawan)
FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung saan Naka-park ang Kotse: 11 Hakbang (na may Mga Larawan)

Video: FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung saan Naka-park ang Kotse: 11 Hakbang (na may Mga Larawan)

Video: FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung saan Naka-park ang Kotse: 11 Hakbang (na may Mga Larawan)
Video: STRANGE NEWS of the WEEK - 17 | Mysterious | Universe | UFOs | Paranormal 2024, Nobyembre
Anonim
FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung Saan Naka-park ang Kotse
FinduCar: isang Smart Car Key na Gumagabay sa Mga Tao sa Kung Saan Naka-park ang Kotse

Upang malutas ang mga problema sa itaas, iminungkahi ng proyektong ito na bumuo ng isang smart key ng kotse na maaaring idirekta ang mga tao sa kung saan nila ipinarada ang kotse. At ang aking plano ay pagsasama ng isang GPS sa susi ng kotse. Hindi na kailangang gamitin ang smartphone app upang subaybayan ang kotse, ipapakita lamang ang lahat ng patnubay sa susi ng kotse.

Hakbang 1: Sketch ng Papel

Papel na Sketch
Papel na Sketch

Kapag pinindot ng mga tao ang pindutan upang i-lock ang kotse, awtomatikong maitatala ang impormasyon ng lokasyon sa microcontroller. Pagkatapos, kapag ang mga tao ay nagsimulang mag-navigate sa kotse, ang iba't ibang LED ay naiilawan upang magdirekta sa posisyon ng kotse at ang dalas ng kisap-mata ay nagpapakita ng distansya sa kotse. Madali nilang masundan ang blinking LED at mabilis na mahanap ang kotse.

Hakbang 2: Listahan ng Hardware

Listahan ng Hardware
Listahan ng Hardware

Ito ang mga sangkap na ginamit sa proyektong ito. Ang ilan ay mula sa mga particle kit (breadboard, button, header), ang iba ay binili mula sa opisyal na website ng Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS module, Lpoly Battery at Coin Cell Battery) at Amazon (NeoPixel Ring - 12 RGB LED).

Hakbang 3: Disenyo ng Circuit

Disenyo ng Circuit
Disenyo ng Circuit

Ang Neopixel_LED ay konektado sa PIN 6 ng Feather M0

Ang Button_Unlock ay konektado sa PIN 12 ng Feather M0

Ang Button_Lock ay konektado sa PIN 13 ng Feather M0

Hakbang 4: Koneksyon sa Hardware

Koneksyon sa Hardware
Koneksyon sa Hardware
Koneksyon sa Hardware
Koneksyon sa Hardware
Koneksyon sa Hardware
Koneksyon sa Hardware

Paghinang ng mga header gamit ang Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. I-stack ang dalawang board nang magkasama. Ang mga GPS FeatherWing plugs mismo sa iyong board ng Feather M0 nang walang anumang mga wire.

Hakbang 5: Disenyo ng Software

Disenyo ng Software
Disenyo ng Software

Mga Sangkap ng Pagsubok

Basahin ang isang pag-aayos

walang bisa ang pag-setup () {

Serial.println ("Pagsubok sa echo ng GPS"); Serial.begin (9600); Serial1.begin (9600); // default NMEA GPS baud}

void loop () {

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

Blink LED Ring

Tingnan ang Mga Halimbawa ng Adafruit NeoPixel.

Mga Pag-andar ng Pagkalkula ng GPS

Kalkulahin ang Azimuth

// Kalkulahin ang Azimuth

dobleng azimuth (dobleng lat_a, dobleng lon_a, dobleng lat_b, dobleng lon_b) {

doble 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; bumalik d; }

Kalkulahin ang oras sa LED na orasan, na kung saan ay ang direksyon din ng sasakyan

// Kalkulahin ang oras sa LED na orasan

int led_time (dobleng anggulo) {

int flag = 0; kung (anggulo = 15) {anggulo_time = anggulo_time + 1; } kung (flag == 1) {anggulo_time = 12 - anggulo_time; } bumalik anggulo_time; }

Kalkulahin ang distansya sa pagitan ng tao at ng kanyang sasakyan

// Kalkulahin ang Distansya

dobleng distansya (dobleng lat_a, doble na lon_a, dobleng lat_b, doble na lon_b) {

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

Mga Pag-andar sa LED Display

Mga ilaw ng LED sa isang bilog na ipinapakita na nagsisimula itong mag-navigate

// Isa-isang ipinapakita ang pag-iilaw ng singsing na LED na nagsisimula ang pag-navigate

walang bisa na colorWipe (uint32_t c, uint8_t maghintay) {

para sa (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); antala (maghintay);}}

Kunin ang dalas ng LED batay sa distansya

// Kumuha ng Frequency ng LED

int frequency (dobleng distansya) {

int f = (int) distansya * 20; ibalik f; }

Blink ang tiyak na LED na nagpapahiwatig ng direksyon ng kotse

// Display sa LED

strip.clear ();

strip.show (); pagkaantala (dalas (car_person_distance)); // pagkaantala (500); strip.setPixelColor (anggulo_time, strip. Color (0, 0, 255)); strip.show (); pagkaantala (dalas (car_person_distance)); // pagkaantala (500);

// Huwag paganahin ang LED

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

Pangunahin

# isama ang Adafruit_GPS.h # isama ang Adafruit_NeoPixel.h # isama ang HardwareSerial.h #include Button.h #include math.h

# tukuyin ang Neopixel_LED_PIN 6

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

# tukuyin ang GPSECHO maling

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 timer = millis (); doble na car_lat, car_lon; dobleng car_person_distance; doble ilipat_direksyon; dobleng kotse_azimuth; dobleng car_person_angle; int anggulo_time;

walang bisa ang pag-setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // default NMEA GPS baud strip.begin (); // i-unsment ang linyang ito upang i-on ang RMC (inirekumendang minimum) at GGA (ayusin ang data) kasama ang altitude GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Itakda ang rate ng pag-update ng GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz rate ng pag-update // Humiling ng mga pag-update sa katayuan ng antena, magbigay ng puna upang manahimik // GPS.sendCommand (PGCMD_ANTENNA); antala (1000);}

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

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); kung (GPSECHO) kung (c) Serial.print (c); // kung natanggap ang isang pangungusap, maaari naming suriin ang checkum, i-parse ito … kung (GPS.newNMEAreceived ()) {// isang nakakalito na bagay dito ay kung nai-print namin ang pangungusap na NMEA, o data // natapos kaming hindi makinig at nakahahalina ng iba pang mga pangungusap! // kaya maging maingat kung gumagamit ng OUTPUT_ALLDATA at subukang i-print ang data Serial.println (GPS.lastNMEA ()); // nagtatakda din ito ng bagong // maaari nating mabigo upang mai-parse ang isang pangungusap kung saan maghihintay lamang tayo para sa isa pa} // kung ang millis () o timer ay nakabalot, ire-reset lamang namin ito kung (timer> millis ()) timer = millis (); kung (millis () - timer> 2000) {timer = millis (); // reset ang timer Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Petsa:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/ 20"); Serial.println (GPS.year, DEC); Serial.print ("Ayusin:"); Serial.print ((int) GPS.fix); Serial.print ("kalidad:"); Serial.println ((int) GPS.fixquality); kung (GPS.fix) {Serial.print ("Lokasyon:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Lokasyon (sa degree, gumagana sa Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Bilis (buhol):"); Serial.println (GPS. bilis); Serial.print ("Angle:"); Serial.println (GPS.angle); Serial.print ("Altitude:"); Serial.println (GPS.altitude); Serial.print ("Satellites:"); Serial.println ((int) GPS.satellites); // I-save ang GPS ng sasakyan kung (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // for debug Serial.print ("carLasalam:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Simulang hanapin ang kotse kung (button_flag == 0) {button_flag = button_unlock.read (); } kung (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_flag = 0; } kung (button_flag == 1) {car_person_distance = distansya (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Kalkulahin ang distansya // car_person_distance = distansya (100.0005, 100.0005, 100.0, 100.0); // for debug Serial.println (car_person_distance); move_direction = GPS.angle; // Itala ang gumagalaw na direksyon (anggulo) // move_direction = 100.0; // Record the Azimuth (anggulo) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Kalkulahin ang oras sa LED relo car_person_angle = car_azimuth - move_direction; anggulo_time = led_time (car_person_angle); // Display sa LED strip. Malinaw (); strip.show (); // pagkaantala (dalas (car_person_distance)); pagkaantala (500); strip.setPixelColor (anggulo_time, strip. Color (0, 0, 255)); strip.show (); // pagkaantala (dalas (car_person_distance)); pagkaantala (500); // Huwag paganahin ang LED kung (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Hakbang 6: Pag-debug sa Breadboard

Pag-debug sa Breadboard
Pag-debug sa Breadboard
Pag-debug sa Breadboard
Pag-debug sa Breadboard
Pag-debug sa Breadboard
Pag-debug sa Breadboard

Hakbang 7: Hardware Assembly

Hardware Assembly
Hardware Assembly
Hardware Assembly
Hardware Assembly
Hardware Assembly
Hardware Assembly

Hakbang 8: Disenyo ng Pabahay ng Electronics sa Adobe Illustrator

Disenyo ng Pabahay ng Electronics sa Adobe Illustrator
Disenyo ng Pabahay ng Electronics sa Adobe Illustrator

Hakbang 9: Prototype ng Cardboard

Cardotype Prototype
Cardotype Prototype
Cardotype Prototype
Cardotype Prototype

Ang hakbang na ito ay ginagamit upang kumpirmahing ang laki ng pabahay at bawat piraso ng modelo, na tinitiyak na ang laki ng kahon, at ang posisyon ng pindutan, at ang posisyon ng LED ay umaangkop sa naipong mga elektronikong sangkap.

Hakbang 10: Prototype ng Birch Plywood

Birch Plywood Prototype
Birch Plywood Prototype
Birch Plywood Prototype
Birch Plywood Prototype

Ito ang paunang prototype. Ang isang parisukat na butas para sa pagpasok sa isang charger ay naidagdag sa isa sa mga piraso sa wakas.

Hakbang 11: Huling Assembly Prototype

Inirerekumendang: