INHOUDSOPGAWE:

FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is: 11 stappe (met foto's)
FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is: 11 stappe (met foto's)

Video: FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is: 11 stappe (met foto's)

Video: FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is: 11 stappe (met foto's)
Video: Nomadic Life: Noorbakhsh's Journey to Reclaim His Car and Property 🏡🚗🚨 2024, November
Anonim
FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is
FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is

Om die bogenoemde probleme op te los, stel hierdie projek voor om 'n slim motorsleutel te ontwikkel wat mense kan lei na waar hulle die motor geparkeer het. En my plan is om 'n GPS in die motorsleutel te integreer. Dit is nie nodig om die slimfoon -app te gebruik om die motor op te spoor nie; al die leiding sal net op die motorsleutel verskyn.

Stap 1: Papierskets

Papier skets
Papier skets

As mense op die knoppie druk om die motor te sluit, kan die liggingsinligting outomaties in die mikrokontroleerder aangeteken word. As mense dan na die motor begin navigeer, word die verskillende LED's aangesteek om na die posisie van die motor te verwys, en die flitsende frekwensie toon die afstand na die motor. Hulle kan die knipperende LED maklik volg en die motor vinnig vind.

Stap 2: Hardeware lys

Hardeware lys
Hardeware lys

Dit is die komponente wat in hierdie projek gebruik word. Sommige is afkomstig van die deeltjiestelle (broodbord, knoppie, kopstukke), ander word gekoop op die amptelike webwerf van Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS -module, Lpoly -battery en muntbattery) en Amazon (NeoPixel Ring - 12 RGB LED).

Stap 3: Kringontwerp

Kringontwerp
Kringontwerp

Neopixel_LED is gekoppel aan die PIN 6 van Feather M0

Button_Unlock is gekoppel aan die PIN 12 van Feather M0

Button_Lock is gekoppel aan die PIN 13 van Feather M0

Stap 4: Hardewareverbinding

Hardewareverbinding
Hardewareverbinding
Hardewareverbinding
Hardewareverbinding
Hardewareverbinding
Hardewareverbinding

Soldeer die koppe met Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stapel die twee borde saam. Die GPS FeatherWing kan sonder meer drade in u Feather M0 -bord aansluit.

Stap 5: Sagteware -ontwerp

Sagteware -ontwerp
Sagteware -ontwerp

Toetskomponente

Lees 'n FIX

ongeldige opstelling () {

Serial.println ("GPS eggo toets"); Serial.begin (9600); Reeks1. begin (9600); // standaard NMEA GPS baud}

leemte -lus () {

as (Serial.available ()) {char c = Serial.read (); Reeks1.skryf (c); } as (Serial1.available ()) {char c = Serial1.read (); Reeks.skryf (c); }}

Knipperende LED -ring

Sien voorbeelde van Adafruit NeoPixel.

GPS berekening funksies

Bereken die Azimut

// Bereken die Azimut

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; terugkeer d; }

Bereken die tyd op die LED -horlosie, wat ook die rigting van die voertuig is

// Bereken die tyd op die LED -horlosie

int led_time (dubbele hoek) {

int vlag = 0; as (hoek = 15) {hoektyd = hoektyd + 1; } as (vlag == 1) {hoektyd = 12 - hoektyd; } terugkeer hoek_tyd; }

Bereken die afstand tussen die persoon en sy voertuig

// Bereken die afstand

dubbele afstand (dubbel lat_a, dubbel lon_a, dubbele lat_b, dubbele 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; terugkeer s; }

LED Display funksies

Verlig LED's in 'n sirkel wat wys dat dit begin navigeer

// LED -beligting een vir een wys dat die navigasie begin

void colorWipe (uint32_t c, uint8_t wag) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); vertraag (wag);}}

Kry die LED -frekwensie op grond van die afstand

// Kry LED -frekwensie

int -frekwensie (dubbele afstand) {

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

Knipper die sekere LED wat die rigting van die motor aandui

// Vertoon op LED

strip.clear ();

strip.show (); vertraging (frekwensie (motor_persoon_afstand)); // vertraging (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); vertraging (frekwensie (motor_persoon_afstand)); // vertraging (500);

// Skakel LED uit

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

Hoof

#include Adafruit_GPS.h #include Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h

#definieer Neopixel_LED_PIN 6

#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1

#define GPSECHO vals

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Knoppie knoppieslot (Button_Lock_PIN); Knoppie knoppie_ontgrendel (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); dubbel motor_lat, motor_lon; dubbele motor_persoon_afstand; dubbele move_direction; dubbel motor_azimut; dubbele motor_persoonhoek; int hoek_tyd;

ongeldige opstelling () {

Serial.begin (115200); // Reeks1. begin (9600); GPS.begin (9600); // standaard NMEA GPS baud strip.begin (); // laai hierdie reël uit om RMC (aanbevole minimum) en GGA (herstel data), insluitend hoogte GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) aan te skakel; // Stel die opdateringsnelheid GPS.sendCommand in (PMTK_SET_NMEA_UPDATE_1HZ); // opdateringsnelheid van 1 Hz // Versoek opdaterings oor antennastatus, lewer kommentaar om stil te bly // GPS.sendCommand (PGCMD_ANTENNA); vertraging (1000);}

leegte -lus () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // as (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // as 'n sin ontvang word, kan ons die kontrolesom nagaan, ontleed … as (GPS.newNMEAreceived ()) {// 'n moeilike ding hier is as ons die NMEA -sin druk, of data // ons uiteindelik nie luister nie en vang ander sinne! // wees dus baie versigtig as u OUTPUT_ALLDATA gebruik en probeer om Serial.println (GPS.lastNMEA ()) uit te druk; // dit stel ook die newNMEAreceived () vlag op false as (! GPS.parse (GPS.lastNMEA ())) // dit stel ook die newNMEAreceived () vlag op false return; // ons kan nie 'n sin ontleed nie, in welke geval ons moet wag vir nog 'n}} as millis () of timer omloop, stel ons dit net terug as (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // stel die timer Serial.print terug ("\ nTyd:"); Reeksafdruk (GPS.uur, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisekondes); Serial.print ("Datum:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/20"); Serial.println (GPS.year, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("kwaliteit:"); Serial.println ((int) GPS.fixquality); as (GPS.fix) {Serial.print ("Location:"); Reeks.afdruk (GPS.breedte, 4); Reeksafdruk (GPS.lat); Serial.print (","); Reeks.afdruk (GPS.lengtegraad, 4); Serial.println (GPS.lon); Serial.print ("Ligging (in grade, werk met Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Spoed (knope):"); Serial.println (GPS.speed); Serial.print ("Hoek:"); Serial.println (GPS.angle); Serial.print ("Hoogte:"); Serial.println (GPS.altitude); Serial.print ("Satelliete:"); Serial.println ((int) GPS.satelliete); // Stoor die GPS van die voertuig as (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // vir ontfouting van Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Begin om die motor te vind as (button_flag == 0) {button_flag = button_unlock.read (); } as (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); // Bereken die afstand // car_person_distance = afstand (100.0005, 100.0005, 100.0, 100.0); // vir ontfouting Serial.println (car_person_distance); move_direction = GPS.angle; // Teken die bewegingsrigting (hoek) op/move_direction = 100.0; // Teken die Azimut (hoek) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon) op; // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // Bereken die tyd op LED -horlosie car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Vertoon op LED strip.clear (); strip.show (); // vertraging (frekwensie (motor_persoon_afstand)); vertraging (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // vertraging (frekwensie (motor_persoon_afstand)); vertraging (500); // Skakel LED uit as (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Stap 6: Ontfout op Breadboard

Ontfout op broodbord
Ontfout op broodbord
Ontfout op broodbord
Ontfout op broodbord
Ontfout op broodbord
Ontfout op broodbord

Stap 7: Hardeware -samestelling

Hardeware vergadering
Hardeware vergadering
Hardeware vergadering
Hardeware vergadering
Hardeware vergadering
Hardeware vergadering

Stap 8: Ontwerp van elektroniese behuising in Adobe Illustrator

Elektroniese behuisingsontwerp in Adobe Illustrator
Elektroniese behuisingsontwerp in Adobe Illustrator

Stap 9: Karton prototipe

Karton prototipe
Karton prototipe
Karton prototipe
Karton prototipe

Hierdie stap word gebruik om die grootte van die behuizing en elke stuk van die model te bevestig, om seker te maak dat die grootte van die boks, die knoppie en die LED -posisie by die elektroniese komponente pas.

Stap 10: Prototipe van berkhouthout

Birch triplex prototipe
Birch triplex prototipe
Birch triplex prototipe
Birch triplex prototipe

Dit was die aanvanklike prototipe. Uiteindelik is 'n vierkantige gat om in 'n laaier aan te sluit, by een van die stukke gevoeg.

Aanbeveel: