Innholdsfortegnelse:
- Trinn 1: Papirskisse
- Trinn 2: Maskinvareliste
- Trinn 3: Kretsdesign
- Trinn 4: Maskinvaretilkobling
- Trinn 5: Programvaredesign
- Trinn 6: Debug på Breadboard
- Trinn 7: Maskinvaremontasje
- Trinn 8: Elektronikkhusdesign i Adobe Illustrator
- Trinn 9: Kartongprototype
- Trinn 10: Prototype av bjørkfiner
Video: FinduCar: en smart bilnøkkel som leder folk til hvor bilen står: 11 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
For å løse problemene ovenfor foreslår dette prosjektet å utvikle en smart bilnøkkel som kan lede folk dit de parkerte bilen. Og planen min er å integrere en GPS i bilnøkkelen. Det er ikke nødvendig å bruke smarttelefonappen for å spore bilen, all veiledning vil bare vises på bilnøkkelen.
Trinn 1: Papirskisse
Når folk trykker på knappen for å låse bilen, kan posisjonsinformasjonen registreres i mikrokontrolleren automatisk. Når folk begynner å navigere til bilen, lyser den forskjellige LED -en for å direkte til posisjonen til bilen, og blinkende frekvens viser avstanden til bilen. De kan enkelt følge den blinkende LED -en og raskt finne bilen.
Trinn 2: Maskinvareliste
Dette er komponentene som brukes i dette prosjektet. Noen er fra partikkelsettene (brødbrett, knapp, overskrifter), andre er kjøpt fra Adafruit offisielle nettsted (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly batteri og myntcellebatteri) og Amazon (NeoPixel Ring - 12 RGB LED).
Trinn 3: Kretsdesign
Neopixel_LED er koblet til PIN 6 til Feather M0
Button_Unlock er koblet til PIN 12 til Feather M0
Button_Lock er koblet til PIN 13 til Feather M0
Trinn 4: Maskinvaretilkobling
Lodde hodene med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stabel de to brettene sammen. GPS FeatherWing kobles direkte til Feather M0 -kortet uten flere ledninger.
Trinn 5: Programvaredesign
Testkomponenter
Les en FIX
ugyldig oppsett () {
Serial.println ("GPS -ekkotest"); Serial.begin (9600); Serial1.begin (9600); // standard NMEA GPS -baud}
void loop () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } hvis (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Blinkende LED -ring
Se Adafruit NeoPixel -eksempler.
GPS -beregningsfunksjoner
Beregn Azimuth
// Beregn Azimuth
dobbel asimut (dobbel lat_a, dobbel lon_a, dobbel lat_b, dobbel lon_b) {
dobbel 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; retur d; }
Beregn tiden på LED -klokken, som også er kjøretøyets retning
// Beregn tiden på LED -klokken
int led_time (dobbel vinkel) {
int flagg = 0; hvis (vinkel = 15) {vinkel_tid = vinkel_tid + 1; } hvis (flagg == 1) {vinkel_tid = 12 - vinkel_tid; } returvinkel_tid; }
Beregn avstanden mellom personen og bilen hans
// Beregn avstanden
dobbel avstand (dobbel lat_a, dobbel lon_a, dobbel lat_b, dobbel lon_b) {
dobbelt EARTH_RADIUS = 6378137,0; dobbel radLat1 = (lat_a * PI / 180,0); dobbel radLat2 = (lat_b * PI / 180,0); dobbelt a = radLat1 - radLat2; dobbelt b = (lon_a - lon_b) * PI / 180,0; dobbel s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; retur s; }
LED -skjermfunksjoner
Lys opp lysdioder i en sirkel som viser at den begynner å navigere
// LED -ringbelysning en etter en viser at navigasjonen begynner
void colorWipe (uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); forsinkelse (vent);}}
Få LED -frekvensen på grunnlag av avstanden
// Få LED -frekvens
int frekvens (dobbel avstand) {
int f = (int) avstand * 20; retur f; }
Blink den bestemte LED -en som indikerer bilens retning
// Display på LED
strip.clear ();
strip.show (); forsinkelse (frekvens (bil_person_avstand)); // forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); forsinkelse (frekvens (bil_person_avstand)); // forsinkelse (500);
// Deaktiver LED
hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Hoved
#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); Button button_lock (Button_Lock_PIN); Button button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dobbel bil_lat, bil_lon; dobbel bil_person_avstand; dobbel move_direction; dobbel bil_azimuth; dobbelt car_person_angle; int vinkel_tid;
ugyldig oppsett () {
Serial.begin (115200); // Serial1.begin (9600); GPS.begynner (9600); // standard NMEA GPS baud strip.begin (); // kommenter denne linjen for å slå på RMC (anbefalt minimum) og GGA (fikse data) inkludert høyde GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Angi oppdateringshastigheten GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz oppdateringshastighet // Be om oppdateringer om antennestatus, kommenter for å holde stille // GPS.sendCommand (PGCMD_ANTENNA); forsinkelse (1000);}
void loop () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // hvis en setning mottas, kan vi sjekke kontrollsummen, analysere den … hvis (GPS.newNMEAreceived ()) {// en vanskelig ting her er hvis vi skriver ut NMEA -setningen, eller data // vi ender opp med å ikke lytte og fange andre setninger! // så vær veldig forsiktig hvis du bruker OUTPUT_ALLDATA og prøver å skrive ut data Serial.println (GPS.lastNMEA ()); // dette setter også det nyeNMEAreceived () flagget til false hvis (! GPS.parse (GPS.lastNMEA ())) // dette setter også det nyeNMEAreceived () flagget til falsk retur; // vi klarer ikke å analysere en setning. I så fall bør vi bare vente på en annen} // hvis millis () eller tidtaker brytes rundt, vi vil bare tilbakestille den hvis (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // tilbakestill timeren Serial.print ("\ nTid:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisekunder); Serial.print ("Dato:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/20"); Serial.println (GPS.år, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("kvalitet:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Location:"); Serial.print (GPS.breddegrad, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Plassering (i grader, fungerer med Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Hastighet (knop):"); Serial.println (GPS.speed); Serial.print ("Vinkel:"); Serial.println (GPS.angle); Serial.print ("Høyde:"); Serial.println (GPS.altitude); Serial.print ("Satellitter:"); Serial.println ((int) GPS.satellites); // Lagre bilens GPS hvis (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // for feilsøking Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Begynn å finne bilen hvis (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); // Beregn avstanden // bil_person_distans = avstand (100.0005, 100.0005, 100.0, 100.0); // for feilsøking Serial.println (car_person_distance); move_direction = GPS.angle; // Registrer bevegelsesretningen (vinkel) // move_direction = 100.0; // Registrer Azimuth (vinkel) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Beregn tiden på LED -klokken car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Display på LED strip.clear (); strip.show (); // forsinkelse (frekvens (bil_person_avstand)); forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // forsinkelse (frekvens (bil_person_avstand)); forsinkelse (500); // Deaktiver LED hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Trinn 6: Debug på Breadboard
Trinn 7: Maskinvaremontasje
Trinn 8: Elektronikkhusdesign i Adobe Illustrator
Trinn 9: Kartongprototype
Dette trinnet brukes til å bekrefte størrelsen på huset og hvert stykke av modellen, og sørg for at boksens størrelse, knappestilling og LED -posisjon passer til de monterte elektroniske komponentene.
Trinn 10: Prototype av bjørkfiner
Dette var den første prototypen. Et firkantet hull for tilkobling til en lader ble til slutt lagt til en av delene.
Anbefalt:
Trygg tilgang til din Pi fra hvor som helst i verden: 7 trinn
Trygg tilgang til din Pi fra hvor som helst i verden: Jeg har få programmer som kjører døgnet rundt på Pi. Hver gang jeg kom ut av huset mitt, ble det veldig vanskelig å sjekke om Pi -helse og status. Jeg overvant deretter den mindre hindringen ved å bruke ngrok. Å få tilgang til enheten utenfra gir
Autonom bil som holder bilen ved hjelp av Raspberry Pi og OpenCV: 7 trinn (med bilder)
Autonom kjørebane ved bruk av Raspberry Pi og OpenCV: I denne instruksen vil en autonom kjørefeltrobot bli implementert og gå gjennom følgende trinn: Samle deler Installere programvare forutsetninger Maskinvare montering Første test Oppdage kjørefeltlinjer og vise veiledningen
En liten og billig lommecomputer som kan programmeres hvor som helst: 5 trinn
En liten og billig lommecomputer som kan programmeres hvor som helst.: Du kan gjøre CardKB til en lommedatamaskin! Komplett lommecomputer for CardKB ved hjelp av ArduinoBaisc, CardKB, I2C OLED -skjerm. Siden BASIC bruker ArduinoBasic (https://github.com/robinhedwards/ArduinoBASIC), støtter den nesten alle normale funksjoner som
Se eller lytt til mediene dine hvor som helst med en Internett -tilkobling: 5 trinn
Se eller lytt til mediene dine hvor som helst med en Internett -tilkobling: Denne opplæringen viser deg hvordan du lager en mp3 -server og et nettsted som inneholder Flash -videoer (FLV -er) Som de du ser på Youtube.com
Slik får du tilgang til musikken din hvor som helst med Mac Mini: 5 trinn
Slik får du tilgang til musikken din hvor som helst med Mac Mini: Denne instruksjonen gjør datamaskinen til en privat delingsserver. Det vil være vert for musikken din, slik at bare du kan komme til den. Men forutsatt at internettforbindelsen din er rask nok, vil du kunne få tilgang til den fra hele verden. Hvor kult er det