Sisällysluettelo:
- Vaihe 1: Paperiluonnos
- Vaihe 2: Laitelista
- Vaihe 3: Piirin suunnittelu
- Vaihe 4: Laitteistoyhteys
- Vaihe 5: Ohjelmistosuunnittelu
- Vaihe 6: Virheenkorjaus Breadboardilla
- Vaihe 7: Laitteiston kokoaminen
- Vaihe 8: Elektroniikan kotelosuunnittelu Adobe Illustratorissa
- Vaihe 9: Pahviprototyyppi
- Vaihe 10: Koivuvanerin prototyyppi
Video: FinduCar: älykäs autonavain, joka ohjaa ihmisiä pysäköintipaikkaan: 11 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Edellä mainittujen ongelmien ratkaisemiseksi tässä projektissa ehdotetaan älykkään auton avaimen kehittämistä, joka voisi ohjata ihmiset sinne, missä he pysäköivät auton. Suunnitelmani on integroida GPS auton avaimeen. Sinun ei tarvitse käyttää älypuhelinsovellusta auton seuraamiseen, kaikki ohjeet näkyvät vain auton avaimessa.
Vaihe 1: Paperiluonnos
Kun ihmiset lukitsevat auton painamalla painiketta, sijaintitiedot voidaan tallentaa mikrokontrolleriin automaattisesti. Kun ihmiset alkavat navigoida autoon, eri LED -valot syttyvät suoraan auton asentoon ja vilkkuva taajuus näyttää etäisyyden autoon. He voivat helposti seurata vilkkuvaa LED -valoa ja löytää auton nopeasti.
Vaihe 2: Laitelista
Näitä komponentteja käytetään tässä projektissa. Jotkut ovat partikkelipakkauksista (leipälevy, painike, otsikot), toiset ostetaan Adafruitin virallisilta verkkosivuilta (Adafruit Feather M0, Adafruit Ultimate GPS -moduuli, Lpoly -akku ja nappiparisto) ja Amazonilta (NeoPixel Ring - 12 RGB LED).
Vaihe 3: Piirin suunnittelu
Neopixel_LED on yhdistetty Feather M0: n PIN -koodiin 6
Button_Unlock on yhdistetty Feather M0: n PIN -koodiin 12
Button_Lock on yhdistetty Feather M0: n PIN -koodiin 13
Vaihe 4: Laitteistoyhteys
Juotos otsikot Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing avulla. Pinoa kaksi lautaa yhteen. GPS FeatherWing liitetään suoraan Feather M0 -levyyn ilman johtoja.
Vaihe 5: Ohjelmistosuunnittelu
Testikomponentit
Lue KORJAUS
void setup () {
Serial.println ("GPS -kaiku -testi"); Sarja.alku (9600); Sarja1.alku (9600); // NMEA -oletus GPS -baud}
void loop () {
if (Serial.available ()) {char c = Serial.read (); Sarja1. Kirjoita (c); } jos (Sarja1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Vilkkuva LED -rengas
Katso esimerkkejä Adafruit NeoPixelistä.
GPS -laskutoiminnot
Laske atsimuutti
// Laske atsimuutti
kaksinkertainen atsimuutti (double lat_a, double lon_a, double lat_b, double lon_b) {
kaksinkertainen 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 = syn (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; paluu d; }
Laske LED -kellon aika, joka on myös ajoneuvon suunta
// Laske aika LED -kellolla
int led_time (kaksoiskulma) {
int lippu = 0; jos (kulma = 15) {kulma -aika = kulma -aika + 1; } if (lippu == 1) {kulma -aika = 12 - kulma -aika; } paluukulma_aika; }
Laske etäisyys henkilön ja hänen ajoneuvonsa välillä
// Laske etäisyys
kaksinkertainen etäisyys (double lat_a, double lon_a, double lat_b, double lon_b) {
kaksinkertainen EARTH_RADIUS = 6378137,0; kaksinkertainen radLat1 = (lat_a * PI / 180.0); kaksinkertainen radLat2 = (lat_b * PI / 180.0); kaksinkertainen a = radLat1 - radLat2; kaksinkertainen b = (lon_a - lon_b) * PI / 180,0; kaksinkertainen s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; paluu s; }
LED -näytön toiminnot
Sytytä ympyrän LED -valot, jotka osoittavat, että se alkaa navigoida
// LED -rengasvalot yksitellen osoittavat, että navigointi alkaa
void colorWipe (uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (wait);}}
Hae LED -taajuus etäisyyden perusteella
// Hae LED -taajuus
int taajuus (kaksinkertainen etäisyys) {
int f = (int) etäisyys * 20; paluu f; }
Vilkkuu tietty LED, joka osoittaa auton suunnan
// Näyttö LED -valolla
strip.clear ();
strip.show (); viive (taajuus (auton_henkilön_matka)); // viive (500); strip.setPixelColor (kulma -aika, strip. Color (0, 0, 255)); strip.show (); viive (taajuus (auton_henkilön_matka)); // viive (500);
// Poista LED käytöstä
if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Pääasiallinen
#sisällytä Adafruit_GPS.h #sisällytä Adafruit_NeoPixel.h #sisällytä HardwareSerial.h #sisällytä painike.h #sisällytä matematiikka.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 -painike_lippu = 0; int led_flag = 1; uint32_t ajastin = millis (); double car_lat, car_lon; kaksinkertainen auton_henkilö_matka; double move_direction; double car_azimuth; kaksinkertainen auto_henkilökulma; int kulma -aika;
void setup () {
Sarja.alku (115200); // Sarja1.alku (9600); GPS.alku (9600); // oletus NMEA GPS -baudiliuska.begin (); // poista tämän rivin komento ottaaksesi RMC (suositeltu minimi) ja GGA (korjaustiedot) käyttöön, mukaan lukien korkeus GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Aseta päivitysnopeus GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz päivitystaajuus // Pyydä päivityksiä antennin tilasta, kommentoi ollaksesi hiljaa // GPS.sendCommand (PGCMD_ANTENNA); viive (1000);}
void loop () {// if (Serial.available ()) {
// char c = Serial.read (); // Sarja1. Kirjoita (c); //} // if (Serial1.available ()) {char c = GPS.read (); jos (GPSECHO) jos (c) sarjajälki (c); // jos lause vastaanotetaan, voimme tarkistaa tarkistussumman, jäsentää sen… jos (GPS.newNMEAreceived ()) {// tässä on hankala asia, jos tulostamme NMEA -lauseen tai dataa // emme lopulta kuuntele ja muista lauseista kiinni! // joten ole erittäin varovainen, jos tulostat OUTPUT_ALLDATA ja yrität tulostaa tietoja Serial.println (GPS.lastNMEA ()); // tämä asettaa myös newNMEAreceived () -lipun arvoksi false, jos (! GPS.parse (GPS.lastNMEA ()))) // tämä asettaa myös newNMEAreceived () -lipun väärään paluuseen; // lauseen jäsentäminen voi epäonnistua, jolloin meidän pitäisi vain odottaa toista} // jos millis () tai ajastin kääntyy ympäri, nollaamme sen vain, jos (timer> millis ()) timer = millis (); if (millis () - ajastin> 2000) {timer = millis (); // nollaa ajastin Serial.print ("\ nAika:"); Sarjajälki (GPS.tunti, DEC); Serial.print (':'); Sarjajälki (GPS.minute, DEC); Serial.print (':'); Sarjajälki (GPS.sekuntia, DEC); Serial.print ('.'); Serial.println (GPS.millisekuntia); Serial.print ("Päivämäärä:"); Sarjajälki (GPS -päivä, DEC); Serial.print ('/'); Sarjajälki (GPS.kuukausi, DEC); Sarjanjälki ("/20"); Serial.println (GPS -vuosi, DEC); Serial.print ("Korjaus:"); Serial.print ((int) GPS.fix); Serial.print ("laatu:"); Serial.println ((int) GPS.filaatu); if (GPS.fix) {Serial.print ("Sijainti:"); Sarjajälki (GPS. Leveysaste, 4); Sarjajälki (GPS.lat); Serial.print (","); Sarjajälki (GPS.pituusaste, 4); Serial.println (GPS.lon); Serial.print ("Sijainti (asteina, toimii Google Mapsin kanssa):"); Sarjajälki (GPS.latitudeDegrees, 4); Serial.print (","); Sarjajulkaisu (GPS.pituusaste, 4); Serial.print ("Nopeus (solmua):"); Serial.println (GPS.speed); Serial.print ("Kulma:"); Serial.println (GPS.angle); Serial.print ("Korkeus:"); Serial.println (GPS.altitude); Serial.print ("Satelliitit:"); Serial.println ((int) GPS.satellites); // Tallenna ajoneuvon GPS, jos (button_lock.read ()) {car_lat = GPS.latitudeDegrees; auto_lon = GPS.pituusaste; // debug Serial.print ("carLatitude:"); Sarja.println (auto_lat); Serial.print ("carLongitude:"); Sarja.println (auto_lon); } // Aloita auton etsiminen, jos (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 = etäisyys (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Laske etäisyys // auton_henkilö_matka = etäisyys (100.0005, 100.0005, 100.0, 100.0); // debug Serial.println (auton_henkilön_matka); move_direction = GPS.angle; // Tallenna liikesuunta (kulma) // move_direction = 100.0; // Tallenna atsimuutti (kulma) car_azimuth = atsimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = atsimuutti (100.0005, 100.0005, 100.0, 100.0); // Laske aika LED -kellolla car_person_angle = car_azimuth - move_direction; kulma -aika = led -aika (auton_henkilökulmio); // Näyttö LED -nauhalla.clear (); strip.show (); // viive (taajuus (auton_henkilön_matka)); viive (500); strip.setPixelColor (kulma -aika, strip. Color (0, 0, 255)); strip.show (); // viive (taajuus (auton_henkilön_matka)); viive (500); // Poista LED käytöstä, jos (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Vaihe 6: Virheenkorjaus Breadboardilla
Vaihe 7: Laitteiston kokoaminen
Vaihe 8: Elektroniikan kotelosuunnittelu Adobe Illustratorissa
Vaihe 9: Pahviprototyyppi
Tätä vaihetta käytetään vahvistamaan kotelon ja mallin kaikkien osien koko varmistaen, että laatikon koko, painikkeen sijainti ja LED -paikka sopivat koottuihin elektronisiin komponentteihin.
Vaihe 10: Koivuvanerin prototyyppi
Tämä oli alkuperäinen prototyyppi. Lopuksi yhteen kappaleeseen lisättiin neliömäinen reikä laturiin kytkemistä varten.
Suositeltava:
Ujo naamio, joka sammuu nähdessään ihmisiä: 9 vaihetta (kuvilla)
Ujo naamio, joka sulkeutuu, kun se näkee ihmiset: On surullista, että meidän on käytettävä kasvonaamioita Covid -19 -taudin vuoksi. Se ei ole kovin miellyttävä kokemus, se kuumottaa, hikoilee, hermostuttaa ja tietysti vaikeuttaa hengittämistä. On janoisia aikoja, kun kehotat naamaria poistamaan, mutta pelkäät sitä. Mitä minä
Kuinka tehdä Wifi -järjestelmä, joka ohjaa akvaarion valaistusta ja lämmitystä: 5 vaihetta
Kuinka tehdä akvaarion valaistusta ja lämmitystä ohjaava Wifi -järjestelmä: Mitä se tekee? Järjestelmä, joka kytkee akvaarion päälle / pois automaattisesti aikataulun mukaan tai manuaalisesti painikkeella tai Internet -pyynnöllä. Järjestelmä, joka valvoo veden lämpötilaa ja lähettää sähköpostia ja hälytyksiä, jos
Älykäs herätyskello: Älykäs herätyskello, joka on valmistettu Raspberry Pi: llä: 10 vaihetta (kuvilla)
Älykäs herätyskello: älykäs herätyskello, joka on valmistettu Raspberry Pi: llä: Oletko koskaan halunnut älykkään kellon? Jos näin on, tämä on ratkaisu sinulle! Tein Smart Alarm Clockin, tämä on kello, jolla voit muuttaa herätysaikaa verkkosivuston mukaan. Kun hälytys soi, kuuluu ääni (summeri) ja 2 valoa
Arduino LED -painike, joka ohjaa käsittelyanimaatioita: 36 vaihetta (kuvilla)
Arduino LED -näppäimistö, joka ohjaa käsittelyanimaatioita: Tämä painike on valmistettu käyttämällä piirilevyä ja muita Sparkfunin valmistamia komponentteja. Sitä ohjaa Arduino Mega. Jokainen painike on mukava ja likainen ja miellyttävä painaa, ja sen sisällä on RGB -LED! Olen käyttänyt sitä animaatioiden ohjaamiseen
IoT -painike, joka ohjaa sovellustasi: 6 vaihetta
IoT -painike, joka ohjaa sovellustasi: Yksi niistä asioista, joista pidän eniten mikrokontrollereissa, on mahdollisuus käyttää niitä syöttölaitteena, esimerkiksi Arduino Micro voidaan käyttää HID -laitteena (human interface device), mikä tarkoittaa jonkin verran koodausta ja osaat tehdä itse avaimenperän