Innehållsförteckning:
- Steg 1: Papperskiss
- Steg 2: Hårdvarulista
- Steg 3: Kretsdesign
- Steg 4: Maskinvaruanslutning
- Steg 5: Programvarudesign
- Steg 6: Debug på Breadboard
- Steg 7: Hårdvarumontage
- Steg 8: Elektronikhusdesign i Adobe Illustrator
- Steg 9: Kartongprototyp
- Steg 10: Prototyp av björkplywood
- Steg 11: Slutmonteringsprototyp
Video: FinduCar: en smart bilnyckel som guidar människor till var bilen står parkerad: 11 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
För att lösa problemen ovan föreslår detta projekt att utveckla en smart bilnyckel som kan leda människor dit de parkerade bilen. Och min plan är att integrera en GPS i bilnyckeln. Det finns ingen anledning att använda smartphone -appen för att spåra bilen, all vägledning visas bara på bilnyckeln.
Steg 1: Papperskiss
När folk trycker på knappen för att låsa bilen kan platsinformationen registreras i mikrokontrollen automatiskt. När folk sedan börjar navigera till bilen tänds de olika lysdioderna för att rikta till bilens position och blinkande frekvens visar avståndet till bilen. De kan enkelt följa den blinkande lysdioden och snabbt hitta bilen.
Steg 2: Hårdvarulista
Det här är komponenterna som används i detta projekt. Vissa är från partikelsatser (brödbräda, knapp, rubriker), andra köps från Adafruit officiella webbplats (Adafruit Feather M0, Adafruit Ultimate GPS -modul, Lpoly Battery och Coin Cell Battery) och Amazon (NeoPixel Ring - 12 RGB LED).
Steg 3: Kretsdesign
Neopixel_LED är ansluten till PIN 6 för Feather M0
Button_Unlock är ansluten till PIN 12 för Feather M0
Button_Lock är ansluten till PIN 13 för Feather M0
Steg 4: Maskinvaruanslutning
Löd huvudet med Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stapla ihop de två brädorna. GPS FeatherWing ansluts direkt till ditt Feather M0 -kort utan några fler ledningar.
Steg 5: Programvarudesign
Testkomponenter
Läs en FIX
void setup () {
Serial.println ("GPS -ekotest"); Serial.begin (9600); Serial1.start (9600); // standard NMEA GPS -baud}
void loop () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Blinkande LED -ring
Se Adafruit NeoPixel Exempel.
GPS -beräkningsfunktioner
Beräkna Azimuth
// Beräkna Azimuth
dubbel azimut (dubbel lat_a, dubbel lon_a, dubbel lat_b, dubbel lon_b) {
dubbel 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; }
Beräkna tiden på LED -klockan, som också är fordonets riktning
// Beräkna tiden på LED -klockan
int led_time (dubbel vinkel) {
int flagga = 0; om (vinkel = 15) {vinkel_tid = vinkel_tid + 1; } om (flagga == 1) {vinkel_tid = 12 - vinkel_tid; } returvinkel_tid; }
Beräkna avståndet mellan personen och hans fordon
// Beräkna avståndet
dubbel distans (dubbel lat_a, dubbel lon_a, dubbel lat_b, dubbel lon_b) {
dubbel EARTH_RADIUS = 6378137,0; dubbel radLat1 = (lat_a * PI / 180,0); dubbel radLat2 = (lat_b * PI / 180,0); dubbel a = radLat1 - radLat2; dubbel b = (lon_a - lon_b) * PI / 180,0; dubbel 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 -displayfunktioner
Tänd lysdioder i en cirkel som visar att den börjar navigera
// LED -ringbelysning en efter en visar att navigeringen börjar
void colorWipe (uint32_t c, uint8_t wait) {
för (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); fördröjning (vänta);}}
Få LED -frekvensen baserat på avståndet
// Få LED -frekvens
int frekvens (dubbel distans) {
int f = (int) avstånd * 20; retur f; }
Blinkar viss lysdiod som indikerar bilens riktning
// Display på LED
strip.clear ();
strip.show (); fördröjning (frekvens (bil_person_avstånd)); // fördröjning (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); fördröjning (frekvens (bil_person_avstånd)); // fördröjning (500);
// Inaktivera LED
if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flagg = 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 #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 (); dubbel bil_lat, bil_lon; dubbel bil_person_avstånd; dubbel move_direction; dubbel bil_azimut; dubbel bil_person_vinkel; int vinkel_tid;
void setup () {
Serial.begin (115200); // Serial1.begin (9600); GPS.start (9600); // standard NMEA GPS baud strip.begin (); // avmarkera den här raden för att slå på RMC (rekommenderat minimum) och GGA (fixa data) inklusive höjd GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Ställ in uppdateringshastigheten GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz uppdateringshastighet // Begär uppdateringar om antennstatus, kommentera för att hålla tyst // GPS.sendCommand (PGCMD_ANTENNA); fördröjning (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); // om en mening tas emot kan vi kontrollera kontrollsummen, analysera den … om (GPS.newNMEAreceived ()) {// en knepig sak här är om vi skriver ut NMEA -meningen, eller data // vi slutar inte lyssna och fånga andra meningar! // så var mycket försiktig om du använder OUTPUT_ALLDATA och försöker skriva ut data Serial.println (GPS.lastNMEA ()); // detta sätter också flaggan newNMEAreceived () till false om (! GPS.parse (GPS.lastNMEA ())) // detta ställer också in flaggan newNMEAreceived () till falsk retur; // vi kan misslyckas med att analysera en mening, i så fall bör vi bara vänta på en annan} // om millis () eller timer går runt, vi återställer den bara om (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // återställ timern 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 ("Datum:"); 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.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Plats (i grader, fungerar 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 ("Altitude:"); Serial.println (GPS.altitude); Serial.print ("Satelliter:"); Serial.println ((int) GPS.satellites); // Spara fordonets GPS om (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // för felsökning av Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Börja hitta bilen om (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (strip. Color (0, 255, 0), 500); led_flagg = 0; } if (button_flag == 1) {car_person_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Beräkna avståndet // bil_person_distans = avstånd (100.0005, 100.0005, 100.0, 100.0); // för felsökning av Serial.println (car_person_distance); move_direction = GPS.angle; // Spela in rörelseriktningen (vinkel) // move_direction = 100,0; // Spela in Azimuth (vinkel) car_azimuth = azimut (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // bil_azimut = azimut (100.0005, 100.0005, 100.0, 100.0); // Beräkna tiden på LED -klockan car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Display på LED strip.clear (); strip.show (); // fördröjning (frekvens (bil_person_avstånd)); fördröjning (500); strip.setPixelColor (vinkel_tid, strip. Color (0, 0, 255)); strip.show (); // fördröjning (frekvens (bil_person_avstånd)); fördröjning (500); // Inaktivera LED om (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Steg 6: Debug på Breadboard
Steg 7: Hårdvarumontage
Steg 8: Elektronikhusdesign i Adobe Illustrator
Steg 9: Kartongprototyp
Detta steg används för att bekräfta storleken på höljet och varje del av modellen, se till att lådans storlek, knappens läge och LED -läge passar de monterade elektroniska komponenterna.
Steg 10: Prototyp av björkplywood
Detta var den första prototypen. Ett fyrkantigt hål för anslutning till en laddare tillsattes slutligen i en av bitarna.
Steg 11: Slutmonteringsprototyp
Rekommenderad:
Var medveten om ATLAS - STAR WARS - Death Star II: 7 steg (med bilder)
Var medveten om ATLAS - STAR WARS - Death Star II: Byggd av Bandai Death Star II plastmodell. Viktiga funktioner inkluderar: ✅ Ljus och ljudeffekt✅MP3-spelare ✅InfraRED fjärrkontroll ✅ Temperatursensor ✅ 3 minuters timer Blogg: https://kwluk717.blogspot.com 2020/12/be-aware-of-atlas-star-wars- döds stjärna
Blyg mask som stänger av när den ser människor: 9 steg (med bilder)
Blyg mask som håller käften när den ser människor: Det är tråkigt att vi måste bära ansiktsmasker på grund av Covid -19. Det är inte en mycket trevlig upplevelse, gör dig varm, svettig, nervös och naturligtvis svårare att andas. Det finns törstiga tider när du uppmanar att ta bort masken men är rädd att göra det. Vad jag
Raspberry Pi röstnavigering som hjälper blinda människor: 7 steg (med bilder)
Raspberry Pi-röstnavigering som hjälper blinda människor: Hej I den här instruktionsboken ska vi se hur en hallonpi kan hjälpa blinda med hjälp av den användardefinierade röstinstruktionen. röstguide de blinda till att följa
Lägg till trådlös laddning till vilken telefon som helst: Använd LG-V20 som exempel: 10 steg (med bilder)
Lägg till trådlös laddning till vilken telefon som helst: Använd LG-V20 som exempel: Om du är som jag och planerar att behålla din telefon i mer än 2 år måste telefonen ha ett utbytbart batteri, eftersom batteriet bara räcker i cirka 2 år, och Och trådlös laddning så att du inte sliter ut laddningsporten. Nu är det enkelt
Ett riktigt enkelt/enkelt/inte komplicerat sätt att få människor/människor/djur/robotar att se ut som om de har riktigt cool/ljus värmevision (valfri färg) med GIMP: 4 steg
Ett riktigt enkelt/enkelt/inte komplicerat sätt att få människor/människor/djur/robotar att se ut som om de har riktigt cool/ljus värmevision (valfri färg) med GIMP: Läs … titeln