Indholdsfortegnelse:
- Trin 1: Papirskitse
- Trin 2: Hardwareliste
- Trin 3: Kredsløbsdesign
- Trin 4: Hardwareforbindelse
- Trin 5: Software Design
- Trin 6: Debug på Breadboard
- Trin 7: Hardware -samling
- Trin 8: Elektronikhusdesign i Adobe Illustrator
- Trin 9: Kartonprototype
- Trin 10: Prototype af birkekrydsfiner
Video: FinduCar: en smart bilnøgle, der guider folk til, hvor bilen står: 11 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
For at løse problemerne ovenfor foreslår dette projekt at udvikle en smart bilnøgle, der kan lede folk til, hvor de parkerede bilen. Og min plan er at integrere en GPS i bilnøglen. Det er ikke nødvendigt at bruge smartphone -appen til at spore bilen, al vejledning vises bare på bilnøglen.
Trin 1: Papirskitse
Når folk trykker på knappen for at låse bilen, kan placeringsoplysningerne automatisk registreres i mikrokontrolleren. Når folk derefter begynder at navigere til bilen, tændes den forskellige LED for at direkte til bilens position, og blinkende frekvens viser afstanden til bilen. De kan let følge den blinkende LED og hurtigt finde bilen.
Trin 2: Hardwareliste
Dette er de komponenter, der bruges i dette projekt. Nogle er fra partikelsættene (brødbræt, knap, overskrifter), andre er købt fra Adafruit officielle hjemmeside (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly batteri og møntcellebatteri) og Amazon (NeoPixel Ring - 12 RGB LED).
Trin 3: Kredsløbsdesign
Neopixel_LED er forbundet til PIN 6 på Feather M0
Button_Unlock er forbundet til PIN 12 på Feather M0
Button_Lock er forbundet til PIN 13 på Feather M0
Trin 4: Hardwareforbindelse
Lodde overskrifterne med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stak de to brædder sammen. GPS FeatherWing tilsluttes direkte til dit Feather M0 -kort uden flere ledninger.
Trin 5: Software Design
Testkomponenter
Læs et FIX
ugyldig opsætning () {
Serial.println ("GPS -ekkotest"); Serial.begin (9600); Seriel1.begyndt (9600); // standard NMEA GPS baud}
void loop () {
hvis (Serial.available ()) {char c = Serial.read (); Seriel1.skrive (c); } hvis (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Blink LED -ring
Se Adafruit NeoPixel -eksempler.
GPS -beregningsfunktioner
Beregn Azimuth
// Beregn Azimuth
dobbelt azimut (dobbelt lat_a, dobbelt lon_a, dobbelt lat_b, dobbelt lon_b) {
dobbelt 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; returnere d; }
Beregn tiden på LED -uret, som også er køretøjets retning
// Beregn tiden på LED -uret
int led_time (dobbelt vinkel) {
int flag = 0; hvis (vinkel = 15) {vinkel_tid = vinkel_tid + 1; } hvis (flag == 1) {vinkel_tid = 12 - vinkel_tid; } returvinkel_tid; }
Beregn afstanden mellem personen og hans køretøj
// Beregn afstanden
dobbelt afstand (dobbelt lat_a, dobbelt lon_a, dobbelt lat_b, dobbelt lon_b) {
dobbelt EARTH_RADIUS = 6378137,0; dobbelt radLat1 = (lat_a * PI / 180,0); dobbelt radLat2 = (lat_b * PI / 180,0); dobbelt a = radLat1 - radLat2; dobbelt b = (lon_a - lon_b) * PI / 180,0; dobbelt s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; vender tilbage; }
LED Display funktioner
Tænd lysdioder i en cirkel, der viser, at den begynder at navigere
// LED -ringbelysning en efter en viser, at navigationen begynder
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å grundlag af afstanden
// Få LED -frekvens
int frekvens (dobbelt afstand) {
int f = (int) afstand * 20; returnere f; }
Blink den bestemte LED, der angiver bilens retning
// Display på LED
strip.clear ();
strip.show (); forsinkelse (frekvens (bil_person_distance)); // forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); forsinkelse (frekvens (bil_person_distance)); // forsinkelse (500);
// Deaktiver LED
hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Main
#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 #definer 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 (); dobbelt bil_lat, bil_lon; dobbelt bil_person_distance; dobbelt move_direction; dobbelt bil_azimuth; dobbelt bil_person_angel; int vinkel_tid;
ugyldig opsætning () {
Serial.begin (115200); // Seriel1.begyndt (9600); GPS.begyndt (9600); // standard NMEA GPS baud strip.begin (); // kommenter denne linje for at tænde RMC (anbefalet minimum) og GGA (fix data) inklusive højde GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Indstil opdateringshastigheden GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz opdateringshastighed // Anmod om opdateringer om antennestatus, kommenter ud for at tie stille // GPS.sendCommand (PGCMD_ANTENNA); forsinkelse (1000);}
void loop () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (c); //} // hvis (Serial1.available ()) {char c = GPS.read (); hvis (GPSECHO) if (c) Serial.print (c); // hvis der modtages en sætning, kan vi kontrollere kontrolsummen, analysere den … hvis (GPS.newNMEAreceived ()) {// en vanskelig ting her er, hvis vi udskriver NMEA -sætningen, eller data // vi ender med ikke at lytte og fange andre sætninger! // så vær meget forsigtig, hvis du bruger OUTPUT_ALLDATA og prøver at udskrive data Serial.println (GPS.lastNMEA ()); // dette sætter også det nyeNMEAreceived () flag til falsk, hvis (! GPS.parse (GPS.lastNMEA ())) // dette også sætter det nyeNMEAreceived () flag til falsk retur; // vi kan undlade at analysere en sætning, i så fald skal vi bare vente på en anden} // hvis millis () eller timer vikles rundt, vi nulstiller den bare hvis (timer> millis ()) timer = millis (); hvis (millis () - timer> 2000) {timer = millis (); // nulstil timeren Serial.print ("\ nTid:"); Seriel.print (GPS.time, 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); hvis (GPS.fix) {Serial.print ("Location:"); Seriel.print (GPS.breddegrad, 4); Seriel.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Placering (i grader, fungerer med Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Hastighed (knob):"); Serial.println (GPS.hastighed); Serial.print ("Vinkel:"); Serial.println (GPS.angle); Serial.print ("Højde:"); Serial.println (GPS.altitude); Serial.print ("Satellitter:"); Serial.println ((int) GPS.satellites); // Gem køretøjets GPS, hvis (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // til fejlfinding Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (bil_lon); } // Start med at finde bilen, hvis (button_flag == 0) {button_flag = button_unlock.read (); } hvis (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_flag = 0; } hvis (button_flag == 1) {car_person_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Beregn afstanden // bil_person_distance = afstand (100.0005, 100.0005, 100.0, 100.0); // til fejlfinding Serial.println (bil_person_distance); move_direction = GPS.angle; // Optag bevægelsesretningen (vinkel) // move_direction = 100,0; // Optag 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 -uret car_person_angle = car_azimuth - move_direction; vinkel_tid = led_tid (bil_person_vinkel); // Display på LED strip.clear (); strip.show (); // forsinkelse (frekvens (bil_person_distance)); forsinkelse (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // forsinkelse (frekvens (bil_person_distance)); forsinkelse (500); // Deaktiver LED, hvis (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Trin 6: Debug på Breadboard
Trin 7: Hardware -samling
Trin 8: Elektronikhusdesign i Adobe Illustrator
Trin 9: Kartonprototype
Dette trin bruges til at bekræfte størrelsen på huset og hvert stykke af modellen, hvilket sikrer, at boksens størrelse, og knapposition og LED -position passer til de samlede elektroniske komponenter.
Trin 10: Prototype af birkekrydsfiner
Dette var den første prototype. Et firkantet hul til tilslutning til en oplader blev endelig tilføjet til et af stykkerne.
Anbefalede:
Hat ikke hat - en hat til folk, der ikke virkelig har hatte på, men gerne vil have en hatoplevelse: 8 trin
Hat ikke hat - en hat til folk, der ikke virkelig bærer hatte, men gerne vil have en hatoplevelse: Jeg har altid ønsket, at jeg kunne være en hatperson, men har aldrig nogensinde fundet en hat, der fungerer for mig. Denne " Hat Not Hat, " eller fascinator, som det kaldes, er en øvre crusty løsning på mit hatproblem, hvor jeg måske deltager i Kentucky Derby, vakuum
Gem mit barn: det smarte sæde, der sender tekstbeskeder, hvis du glemmer barnet i bilen: 8 trin
Gem mit barn: det smarte sæde, der sender tekstbeskeder, hvis du glemmer barnet i bilen: Det er installeret i biler, og takket være en detektor placeret på barnesædet advarer det os - via SMS eller telefonopkald - hvis vi får væk uden at tage barnet med
Ambilight -system til hver input, der er sluttet til dit tv. WS2812B Arduino UNO Raspberry Pi HDMI (opdateret 12.2019): 12 trin (med billeder)
Ambilight -system til hver input, der er sluttet til dit tv. WS2812B Arduino UNO Raspberry Pi HDMI (opdateret 12.2019): Jeg har altid ønsket at tilføje ambilight til mit tv. Det ser så fedt ud! Det gjorde jeg endelig, og jeg blev ikke skuffet! Jeg har set mange videoer og mange tutorials om oprettelse af et Ambilight -system til dit fjernsyn, men jeg har aldrig fundet en komplet tutorial til mit nøjagtige navn
Se eller lyt til dine medier hvor som helst med en internetforbindelse: 5 trin
Se eller lyt til dine medier hvor som helst med en internetforbindelse: Denne vejledning viser dig, hvordan du opretter en mp3 -server og et websted, der huser Flash -videoer (FLV'er) Ligesom dem, du ser på Youtube.com
I hemmelighed se, hvad der sker, uanset hvor du er: 4 trin
Hemmeligt se, hvad der sker, uanset hvor du er: Denne instruktør viser dig, hvordan du bruger iphone/ipod touch -appen "iCam" og din computer til at se, hvad der sker ved hjælp af dit webcam, uanset hvor du er. Dette er min første instruerbare, så vær venlig, ingen hård kritik. Jeg har ikke noget imod nogen feedback du h