Sadržaj:
- Korak 1: Skica papira
- Korak 2: Popis hardvera
- Korak 3: Dizajn kruga
- Korak 4: Povezivanje hardvera
- Korak 5: Dizajn softvera
- Korak 6: Otklonite pogreške na oglasnoj ploči
- Korak 7: Sklapanje hardvera
- Korak 8: Dizajn kućišta elektronike u Adobe Illustratoru
- Korak 9: Prototip kartona
- Korak 10: Prototip šperploče od breze
Video: FinduCar: pametan ključ automobila koji vodi ljude do mjesta parkiranja automobila: 11 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Kako bi se riješili gore navedeni problemi, ovaj projekt predlaže razvoj pametnog ključa za automobil koji bi ljude mogao usmjeriti do mjesta gdje su parkirali automobil. I moj plan je integrirati GPS u ključ automobila. Za praćenje automobila nema potrebe koristiti aplikaciju za pametni telefon, sve će se smjernice prikazati samo na ključu automobila.
Korak 1: Skica papira
Kad ljudi pritisnu gumb za zaključavanje automobila, podaci o lokaciji mogli bi se automatski snimiti u mikrokontroler. Zatim, kad ljudi počnu navigirati do automobila, druga LED dioda zasvijetli kako bi usmjerila položaj automobila, a frekvencija treptanja prikazuje udaljenost do automobila. Lako mogu pratiti trepćuću LED diodu i brzo pronaći automobil.
Korak 2: Popis hardvera
To su komponente korištene u ovom projektu. Neki su iz kompleta čestica (ploča, gumb, zaglavlja), drugi se kupuju na službenoj web stranici Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS modul, Lpoly baterija i baterija u obliku kovanice) i Amazon (NeoPixel Ring - 12 RGB LED).
Korak 3: Dizajn kruga
Neopixel_LED je povezan s PIN -om 6 perja M0
Button_Unlock povezan je s PIN -om 12 perja M0
Button_Lock je povezan s PIN -om 13 perja M0
Korak 4: Povezivanje hardvera
Lemljenje zaglavlja s Adafruit M0 perjem, Adafruit Ultimate GPS Featherwing. Složite dvije ploče zajedno. GPS FeatherWing priključuje se izravno na vašu ploču Feather M0 bez ikakvih žica.
Korak 5: Dizajn softvera
Komponente testa
Pročitajte FIX
void setup () {
Serial.println ("GPS eho test"); Serial.begin (9600); Serial1.begin (9600); // zadani NMEA GPS baud}
void loop () {{100} {101}
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Trepćući LED prsten
Pogledajte primjere Adapruit NeoPixel.
Funkcije proračuna GPS -a
Izračunajte azimut
// Izračunajte azimut
dvostruki azimut (dvostruki lat_a, dvostruki lon_a, dvostruki lat_b, dvostruki lon_b) {
dvostruki 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; povrat d; }
Izračunajte vrijeme na LED satu, što je ujedno i smjer kretanja vozila
// Izračunajte vrijeme na LED satu
int led_time (dvostruki kut) {
int zastavica = 0; if (kut = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } povratni kut_vreme; }
Izračunajte udaljenost između osobe i njezinog vozila
// Izračunajte udaljenost
dvostruka udaljenost (dvostruki lat_a, dvostruki lon_a, dvostruki lat_b, dvostruki lon_b) {
dvostruki EARTH_RADIUS = 6378137.0; dvostruki radLat1 = (lat_a * PI / 180,0); dvostruki radLat2 = (lat_b * PI / 180.0); dvostruko a = radLat1 - radLat2; dvostruki b = (lon_a - lon_b) * PI / 180,0; dvostruki s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; povratak s; }
Funkcije LED zaslona
Upalite LED diode u krugu pokazujući da se počinje kretati
// LED svjetlo jedno po jedno pokazuje da navigacija počinje
void colorWipe (uint32_t c, uint8_t čekanje) {
for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (čekanje);}}
Dobijte LED frekvenciju na temelju udaljenosti
// Dobijte frekvenciju LED -a
int frekvencija (dvostruka udaljenost) {
int f = (int) udaljenost * 20; povrat f; }
Treperi određena LED dioda koja pokazuje smjer automobila
// Zaslon na LED -u
strip.clear ();
strip.show (); kašnjenje (frekvencija (udaljenost_osobe_automobila)); // odgoda (500); strip.setPixelColor (vrijeme_ugla, traka. Boja (0, 0, 255)); strip.show (); kašnjenje (frekvencija (udaljenost_osobe_automobila)); // odgoda (500);
// Onemogući LED
if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Glavni
#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 traka = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Gumb gumb_zaključavanje (Button_Lock_PIN); Gumb button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_znaka = 1; uint32_t timer = millis (); dvostruki car_lat, car_lon; dvostruka udaljenost_osobe_automobila; dvostruko premještanje_smjera; dvostruki car_azimut; dvostruki car_person_angle; int angle_time;
void setup () {
Serial.begin (115200); // Serial1.begin (9600); GPS.početi (9600); // zadana NMEA GPS baud strip.begin (); // raskomentirajte ovaj redak da biste uključili RMC (preporučeni minimum) i GGA (popravljeni podaci) uključujući nadmorsku visinu GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Postavljanje brzine ažuriranja GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Brzina ažuriranja 1 Hz // Zatražite ažuriranja o statusu antene, komentirajte kako biste šutjeli // GPS.sendCommand (PGCMD_ANTENNA); odgoda (1000);}
void loop () {// if (Serial.available ()) {{100} {101}
// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serijski.tisak (c); // ako je rečenica primljena, možemo provjeriti kontrolni zbroj, raščlaniti je … if (GPS.newNMEAreceived ()) {// ovdje je škakljiva stvar ako ispišemo rečenicu NMEA ili podatke // na kraju ne slušamo i hvatanje drugih rečenica! // stoga budite vrlo oprezni ako koristite OUTPUT_ALLDATA i pokušate ispisati podatke Serial.println (GPS.lastNMEA ()); // ovo također postavlja oznaku newNMEAreceived () na false ako (! GPS.parse (GPS.lastNMEA ())) // ovo također postavlja oznaku newNMEAreceived () na false return; // ne možemo uspjeti raščlaniti rečenicu u tom slučaju trebamo samo pričekati drugu} // ako se millis () ili timer preokrene, samo ćemo ga poništiti if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // resetiranje timera Serial.print ("\ nTime:"); Serijski.ispis (GPS.sat, DEC); Serial.print (':'); Serijski.ispis (GPS.minuta, DEC); Serial.print (':'); Serijski.ispis (GPS.sekunde, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Datum:"); Serijski.ispis (GPS.dan, DEC); Serial.print ('/'); Serijski.ispis (GPS.mjesec, DEC); Serial.print ("/20"); Serijski.println (GPS.godina, DEC); Serial.print ("Popravi:"); Serial.print ((int) GPS.fix); Serial.print ("kvaliteta:"); Serial.println ((int) GPS.fiks kvaliteta); if (GPS.fix) {Serial.print ("Lokacija:"); Serijski.ispis (GPS.šifra, 4); Serijski.ispis (GPS.lat); Serial.print (","); Serijski.ispis (GPS.duljina, 4); Serial.println (GPS.lon); Serial.print ("Lokacija (u stupnjevima, radi s Google kartama):"); Serijski.ispis (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Brzina (čvorovi):"); Serial.println (GPS.speed); Serial.print ("Kut:"); Serial.println (GPS.kut); Serial.print ("Visina:"); Serial.println (GPS.visina); Serial.print ("Sateliti:"); Serial.println ((int) GPS.sateliti); // Spremanje GPS -a vozila if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.dužina stupnjeva; // za ispravljanje pogrešaka Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (auto_lon); } // Počni pronaći automobil ako (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 = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Izračunajte udaljenost // car_person_distance = distance (100.0005, 100.0005, 100.0, 100.0); // za ispravljanje pogrešaka Serial.println (car_person_distance); move_direction = GPS.angle; // Snimite smjer kretanja (kut) // move_direction = 100.0; // Snimimo Azimut (kut) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Izračunajte vrijeme na LED satu car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Prikaz na LED traci.clear (); strip.show (); // kašnjenje (frekvencija (car_person_distance)); kašnjenje (500); strip.setPixelColor (vrijeme_ugla, traka. Boja (0, 0, 255)); strip.show (); // kašnjenje (frekvencija (car_person_distance)); kašnjenje (500); // Onemogući LED ako (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Korak 6: Otklonite pogreške na oglasnoj ploči
Korak 7: Sklapanje hardvera
Korak 8: Dizajn kućišta elektronike u Adobe Illustratoru
Korak 9: Prototip kartona
Ovaj se korak koristi za potvrdu veličine kućišta i svakog dijela modela, pazeći da veličina kutije, položaj gumba i LED položaj odgovaraju montiranim elektroničkim komponentama.
Korak 10: Prototip šperploče od breze
Ovo je bio početni prototip. Konačno je jednom od komada dodana četvrtasta rupa za uključivanje u punjač.
Preporučeni:
Pametni sustav parkiranja temeljen na IoT -u koji koristi NodeMCU ESP8266: 5 koraka
Sustav pametnog parkiranja temeljen na IoT -u koji koristi NodeMCU ESP8266: Danas je pronalaženje parkirališta u prometnim područjima vrlo teško i ne postoji sustav za dobivanje pojedinosti o dostupnosti parkiranja na mreži. Zamislite da možete dobiti informacije o dostupnosti parkirnih mjesta na svom telefonu, a nemate lutanje da provjerite
Šešir nije šešir - šešir za ljude koji stvarno ne nose šešire, ali bi htjeli iskustvo šešira: 8 koraka
Šešir, a ne šešir - šešir za ljude koji zaista ne nose šešire, ali bi voljeli iskustvo šešira: Uvijek sam želio da mogu biti osoba sa šeširom, ali nikada nisam pronašao šešir koji bi mi odgovarao. Ovaj " šešir nije šešir, " ili fascinator kako se zove rješenje je gornjeg kora za moj problem sa šeširom u kojem bih mogao prisustvovati derbiju u Kentuckyju, vakuum
DIY pametni robotski alati za praćenje automobila Kompleti za praćenje automobila Fotoosjetljivi: 7 koraka
DIY Pametni roboti za praćenje automobila Kompleti za praćenje Automobil Fotoosjetljivi: Dizajn SINONING ROBOT -a Možete kupiti od robota za praćenje Robotski čip TheoryLM393 usporedite dva fotootpornika, kada LED dioda s jednog bočnog fotootpornika na BIJELOJ strani motora odmah će se zaustaviti, s druge strane motora okreni se pa
Pretvaranje bilo kojeg R/C automobila u Bluetooth aplikaciju za kontrolu R/C automobila: 9 koraka
Pretvaranje bilo kojeg R/C automobila u Bluetooth aplikaciju za upravljanje R/C automobilom: Ovaj projekt prikazuje korake za promjenu običnog automobila na daljinsko upravljanje u Bluetooth (BLE) upravljački automobil s robotskom pločom Wombatics SAM01, aplikacijom Blynk i MIT App Inventor. mnogi su jeftini RC automobili s puno značajki poput LED prednjih svjetala i
Rotacijski sustav parkiranja automobila: 18 koraka
Rotacijski sustav za parkiranje automobila: Jednostavan je za rukovanje s parkiranjem vozača i ostavljanjem vozila u sustavu na razini tla. Nakon što vozač napusti ugrađenu sigurnosnu zonu, vozilo se automatski parkira tako da se sustav rotira kako bi podignuo parkirani automobil dalje od