Inhoudsopgave:

FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat - Ajarnpa
FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat - Ajarnpa

Video: FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat - Ajarnpa

Video: FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat - Ajarnpa
Video: Голубая стрела (1958) фильм 2024, November
Anonim
FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat
FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat

Om bovenstaande problemen op te lossen, stelt dit project voor om een slimme autosleutel te ontwikkelen die mensen kan leiden naar waar ze de auto geparkeerd hebben. En mijn plan is om een GPS in de autosleutel te integreren. Het is niet nodig om de smartphone-app te gebruiken om de auto te volgen, alle aanwijzingen worden alleen op de autosleutel weergegeven.

Stap 1: Papierschets

Papieren schets
Papieren schets

Wanneer mensen op de knop drukken om de auto te vergrendelen, kan de locatie-informatie automatisch in de microcontroller worden vastgelegd. Wanneer mensen vervolgens naar de auto beginnen te navigeren, gaat de verschillende LED branden om naar de positie van de auto te verwijzen en de knipperfrequentie geeft de afstand tot de auto aan. Ze kunnen de knipperende LED gemakkelijk volgen en de auto snel vinden.

Stap 2: Hardwarelijst

Hardwarelijst
Hardwarelijst

Dit zijn de componenten die in dit project worden gebruikt. Sommige zijn afkomstig van de deeltjeskits (breadboard, knop, headers), andere zijn gekocht van de officiële website van Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS-module, Lpoly-batterij en knoopcelbatterij) en Amazon (NeoPixel Ring - 12 RGB LED).

Stap 3: Circuitontwerp

Circuit ontwerp
Circuit ontwerp

Neopixel_LED is verbonden met de PIN 6 van Feather M0

Button_Unlock is verbonden met de PIN 12 van Feather M0

Button_Lock is verbonden met de PIN 13 van Feather M0

Stap 4: Hardwareverbinding

Hardwareverbinding
Hardwareverbinding
Hardwareverbinding
Hardwareverbinding
Hardwareverbinding
Hardwareverbinding

Soldeer de headers met Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stapel de twee planken op elkaar. De GPS FeatherWing plugt je rechtstreeks in je Feather M0 board zonder meer draden.

Stap 5: Software-ontwerp

Software-ontwerp
Software-ontwerp

Testcomponenten

Lees een FIX

ongeldige setup() {

Serial.println ("GPS-echotest"); Serieel.begin(9600); Serial1.begin (9600); // standaard NMEA GPS-baud}

lege lus() {

if (Serial.available()) { char c = Serial.read(); Serie1.write(c); } if (Serial1.available()) { char c = Serial1.read(); Serieel.schrijven(c); } }

Knipperende LED-ring

Zie Adafruit NeoPixel-voorbeelden.

GPS-berekeningsfuncties

Bereken de Azimut

// Bereken de Azimut

dubbele azimut (dubbele lat_a, dubbele lon_a, dubbele lat_b, dubbele lon_b) {

dubbele 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; retour d; }

Bereken de tijd op de LED-klok, die ook de richting van het voertuig is

// Bereken de tijd op de LED-klok

int led_time(dubbele hoek){

int-vlag = 0; if (hoek = 15) { angle_time = angle_time + 1; } if (vlag == 1){ angle_time = 12 - angle_time; } return angle_time; }

Bereken de afstand tussen de persoon en zijn voertuig

// Bereken de afstand

dubbele afstand (dubbele lat_a, dubbele lon_a, dubbele lat_b, dubbele lon_b) {

dubbele EARTH_RADIUS = 6378137.0; dubbele radLat1 = (lat_a * PI / 180,0); dubbele radLat2 = (lat_b * PI / 180,0); dubbele a = radLat1 - radLat2; dubbele b = (lon_a - lon_b) * PI / 180,0; dubbele s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2))); s = s * AARDE_RADIUS / 10000000; geeft terug; }

LED-displayfuncties

Licht LED's in een cirkel op om aan te geven dat het begint te navigeren

// Led-ringverlichting geeft één voor één aan dat de navigatie begint

void colorWipe (uint32_t c, uint8_t wacht) {

for(uint16_t i=0; ik strip.setPixelColor(i, c); strip.show(); vertraging(wacht);}}

Verkrijg de LED-frequentie op basis van de afstand

// Krijg LED-frequentie

int frequentie (dubbele afstand){

int f = (int)afstand * 20; retour f; }

Knipper met de bepaalde LED die de richting van de auto aangeeft;

//Weergave op LED

strip.clear();

strip.show(); vertraging (frequentie (auto_persoon_afstand)); // vertraging (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show(); vertraging (frequentie (auto_persoon_afstand)); // vertraging (500);

//LED uitschakelen

if (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_vlag = 1; strip.clear(); strip.show(); }

Hoofd

#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); Knop button_lock (Button_Lock_PIN); Knop button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis(); dubbele auto_lat, auto_lon; dubbele auto_persoon_afstand; dubbele verplaatsingsrichting; dubbele car_azimut; dubbele auto_persoon_hoek; int hoek_tijd;

ongeldige setup() {

Serieel.begin(115200); // Serial1.begin (9600); GPS.begin (9600); // standaard NMEA GPS-baudstrip.begin(); // verwijder commentaar op deze regel om RMC (aanbevolen minimum) en GGA (fix-gegevens) in te schakelen, inclusief hoogte GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Stel de updatesnelheid in GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Updatesnelheid van 1 Hz // Verzoek om updates over antennestatus, commentaar om stil te blijven // GPS.sendCommand (PGCMD_ANTENNA); vertraging (1000);}

void loop() {// if (Serial.available()) {

// char c = Serial.read(); // Serial1.write (c); //} // if (Serial1.available()) {char c = GPS.read(); indien (GPSECHO) indien (c) Serial.print(c); // als een zin is ontvangen, kunnen we de controlesom controleren, deze ontleden… if (GPS.newNMEAreceived()) { // een lastige zaak is als we de NMEA-zin of gegevens afdrukken // we uiteindelijk niet luisteren en andere zinnen vangen! // dus wees erg op uw hoede als u OUTPUT_ALLDATA gebruikt en probeert om gegevens af te drukken Serial.println(GPS.lastNMEA()); // dit stelt ook de vlag newNMEAreceived() in op false if (!GPS.parse(GPS.lastNMEA())) // dit stelt ook de vlag newNMEAreceived() in op false return; // we kunnen een zin niet ontleden. In dat geval moeten we wachten op een andere } // als millis() of timer rond is, stellen we hem gewoon opnieuw in als (timer > millis()) timer = millis(); if (millis() - timer > 2000) { timer = millis(); // reset de timer Serial.print("\nTime: "); Seriële.afdruk (GPS.uur, DEC); Serieel.print(':'); Serieafdruk (GPS.minuut, DEC); Serieel.print(':'); Seriële.afdruk (GPS.seconden, DEC); Serieel.print('.'); Serial.println (GPS.milliseconden); Serial.print("Datum: "); Seriële.afdruk (GPS.dag, DEC); Serieel.print('/'); Serieafdruk (GPS.maand, DEC); Serial.print("/20"); Serial.println (GPS.jaar, DEC); Serial.print("Fix: "); Serial.print((int)GPS.fix); Serial.print(" kwaliteit: "); Serial.println((int)GPS.fixkwaliteit); if (GPS.fix) { Serial.print("Locatie: "); Serial.print (GPS.latitude, 4); Seriële.afdruk (GPS.lat); Serieel.print(", "); Serial.print (GPS.lengtegraad, 4); Serial.println(GPS.lon); Serial.print("Locatie (in graden, werkt met Google Maps): "); Serial.print (GPS.latitudeDegrees, 4); Serieel.print(", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print("Snelheid (knopen): "); Seriële.println(GPS.snelheid); Serial.print("Hoek: "); Seriële.println (GPS.hoek); Serial.print("Hoogte: "); Seriële.println(GPS.hoogte); Serial.print("Satelliet: "); Serial.println((int)GPS.satellieten); // Sla de GPS van het voertuig op als (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.lengtegraadgraden; // voor debug Serial.print ("carLatitude: "); Serial.println(car_lat); Serial.print("carLongitude: "); Serial.println(car_lon); } // Zoek de auto als (button_flag == 0){ button_flag = button_unlock.read(); } if(button_flag == 1 && led_flag == 1){ colorWipe(strip. Color (0, 255, 0), 500); led_vlag = 0; } if (button_flag == 1) { car_person_distance = afstand (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //Bereken de afstand //car_person_distance = afstand (100.0005, 100.0005, 100,0, 100,0); // voor debug Serial.println (car_person_distance); move_direction = GPS.angle;// Noteer de bewegingsrichting (hoek) // move_direction = 100.0; // Noteer de Azimuth (hoek) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimut = azimut (100.0005, 100.0005, 100,0, 100,0); // Bereken de tijd op de LED-klok car_person_angle = car_azimuth - move_direction; hoek_tijd = led_tijd (auto_persoon_hoek); //Weergave op ledstrip.clear(); strip.show(); // vertraging (frequentie (auto_person_distance)); vertraging (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show(); // vertraging (frequentie (auto_person_distance)); vertraging (500); // Schakel LED uit als (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_vlag = 1; strip.clear(); strip.show(); } } } // } } }

Stap 6: Foutopsporing op Breadboard

Foutopsporing op Breadboard
Foutopsporing op Breadboard
Foutopsporing op Breadboard
Foutopsporing op Breadboard
Foutopsporing op Breadboard
Foutopsporing op Breadboard

Stap 7: Hardwaremontage

Hardware-assemblage
Hardware-assemblage
Hardware-assemblage
Hardware-assemblage
Hardware-assemblage
Hardware-assemblage

Stap 8: Ontwerp van elektronicabehuizing in Adobe Illustrator

Elektronicabehuizingsontwerp in Adobe Illustrator
Elektronicabehuizingsontwerp in Adobe Illustrator

Stap 9: kartonnen prototype

Kartonnen prototype
Kartonnen prototype
Kartonnen prototype
Kartonnen prototype

Deze stap wordt gebruikt om de grootte van de behuizing en elk onderdeel van het model te bevestigen, om ervoor te zorgen dat de grootte van de doos, de knoppositie en de LED-positie op de geassembleerde elektronische componenten passen.

Stap 10: berken multiplex prototype

Prototype van berkenmultiplex
Prototype van berkenmultiplex
Prototype van berkenmultiplex
Prototype van berkenmultiplex

Dit was het eerste prototype. Een vierkant gat voor aansluiting op een oplader werd uiteindelijk aan een van de stukken toegevoegd.

Aanbevolen: