Inhaltsverzeichnis:

FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist - Gunook
FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist - Gunook

Video: FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist - Gunook

Video: FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist - Gunook
Video: Найти и обезвредить (1982) фильм 2024, Juli
Anonim
FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist
FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist

Um die oben genannten Probleme zu lösen, schlägt dieses Projekt vor, einen intelligenten Autoschlüssel zu entwickeln, der die Leute dorthin führen könnte, wo sie das Auto geparkt haben. Und mein Plan ist, ein GPS in den Autoschlüssel zu integrieren. Es ist nicht erforderlich, die Smartphone-App zu verwenden, um das Auto zu verfolgen, die gesamte Führung wird nur auf dem Autoschlüssel angezeigt.

Schritt 1: Papierskizze

Papierskizze
Papierskizze

Wenn Leute den Knopf drücken, um das Auto zu verriegeln, könnten die Standortinformationen automatisch im Mikrocontroller aufgezeichnet werden. Wenn dann Personen beginnen, zum Auto zu navigieren, leuchten die verschiedenen LEDs auf, um auf die Position des Autos zu verweisen, und die Blinkfrequenz zeigt die Entfernung zum Auto an. Sie können der blinkenden LED problemlos folgen und das Auto schnell finden.

Schritt 2: Hardwareliste

Hardwareliste
Hardwareliste

Dies sind die Komponenten, die in diesem Projekt verwendet werden. Einige stammen aus den Partikel-Kits (Breadboard, Button, Header), andere werden von der offiziellen Website von Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS-Modul, Lpoly-Batterie und Knopfzellenbatterie) und Amazon (NeoPixel Ring - 12 RGB-LED) gekauft.

Schritt 3: Schaltungsdesign

Schaltungsdesign
Schaltungsdesign

Neopixel_LED ist mit PIN 6 von Feather M0 verbunden

Button_Unlock ist mit der PIN 12 von Feather M0. verbunden

Button_Lock ist mit der PIN 13 von Feather M0. verbunden

Schritt 4: Hardwareverbindung

Hardware-Verbindung
Hardware-Verbindung
Hardware-Verbindung
Hardware-Verbindung
Hardware-Verbindung
Hardware-Verbindung

Löten Sie die Header mit Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stapeln Sie die beiden Bretter zusammen. Das GPS FeatherWing wird ohne weitere Kabel direkt in Ihr Feather M0-Board eingesteckt.

Schritt 5: Softwaredesign

Software-Design
Software-Design

Testkomponenten

Lesen Sie ein FIX

Leere Einrichtung () {

Serial.println ("GPS-Echotest"); Serial.begin (9600); Serial1.begin (9600); // Standard-NMEA-GPS-Baud }

Leere Schleife () {

if (Serial.available ()) { char c = Serial.read (); Serial1.write (c); aufrechtzuerhalten. Wenn (Serial1.available ()) { char c = Serial1.read (); Serial.write (c); } }

LED-Ring blinken

Siehe Adafruit NeoPixel-Beispiele.

GPS-Berechnungsfunktionen

Berechnen Sie den Azimut

// Berechnen Sie den Azimut

doppelter Azimut (doppelter lat_a, doppelter lon_a, doppelter lat_b, doppelter lon_b) {

doppeltes 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 = Quadrat (1-d*d); d = cos(lat_b)*sin(lon_b-lon_a)/d; d = asin(d)*180/PI; zurück d; }

Berechnen Sie die Zeit auf der LED-Uhr, die auch die Richtung des Fahrzeugs ist

// Berechnen Sie die Zeit auf der LED-Uhr

int led_time (doppelter Winkel) {

int-Flag = 0; if (Winkel = 15) { angle_time = angle_time + 1; aufrechtzuerhalten. Wenn (Flag == 1) { angle_time = 12 - angle_time; } return angle_time; }

Berechnen Sie die Entfernung zwischen der Person und seinem Fahrzeug

// Berechnen Sie die Entfernung

doppelter Abstand (doppelter lat_a, doppelter lon_a, doppelter lat_b, doppelter lon_b) {

doppelter EARTH_RADIUS = 6378137.0; double radLat1 = (lat_a * PI / 180.0); doppeltes radLat2 = (lat_b * PI / 180.0); doppeltes a = radLat1 - radLat2; double b = (lon_a - lon_b) * PI / 180,0; double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2))); s = s * EARTH_RADIUS / 10000000; kehrt zurück; }

LED-Anzeigefunktionen

Leuchtende LEDs in einem Kreis zeigen an, dass die Navigation beginnt

// LED-Ringbeleuchtung nacheinander zeigt an, dass die Navigation beginnt

void colorWipe(uint32_t c, uint8_t warte) {

for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); delay(wait); } }

Holen Sie sich die LED-Frequenz auf der Grundlage der Entfernung

// LED-Frequenz abrufen

int-Frequenz (doppelter Abstand) {

int f = (int)abstand * 20; zurück f; }

Blinken Sie die bestimmte LED, die die Richtung des Autos anzeigt

//Anzeige auf LED

strip.clear();

Strip-Show(); Verzögerung (Frequenz (Auto_Person_Distanz)); // Verzögerung (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); Strip-Show(); Verzögerung (Frequenz (Auto_Person_Distanz)); // Verzögerung (500);

// LED deaktivieren

if (button_flag == 1 && car_person_distance < 5.0) { button_flag = 0; led_flag = 1; strip.clear(); Strip-Show(); }

Hauptsächlich

#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 falsch

Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel Streifen = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Schaltfläche button_lock (Button_Lock_PIN); Schaltfläche button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t-Timer = millis(); doppeltes auto_lat, auto_lon; doppelte Auto_Person_Entfernung; double move_direction; doppelter Autoazimut; doppelter auto_person_winkel; int angle_time;

Leere Einrichtung () {

Serial.begin(115200); // Serial1.begin (9600); GPS.begin(9600); // Standard-NMEA-GPS-Baud strip.begin (); // Entkommentieren Sie diese Zeile, um RMC (empfohlenes Minimum) und GGA (fixe Daten) einschließlich der Höhe GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) einzuschalten; // Stellen Sie die Aktualisierungsrate ein GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz Aktualisierungsrate // Aktualisierungen des Antennenstatus anfordern, auskommentieren, um Ruhe zu bewahren // GPS.sendCommand(PGCMD_ANTENNA); Verzögerung(1000);}

Void Schleife () {// wenn (Serial.available ()) {

// Zeichen c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) { char c = GPS.read (); wenn (GPSECHO) wenn (c) Serial.print (c); // wenn ein Satz empfangen wird, können wir die Prüfsumme überprüfen, sie parsen … if (GPS.newNMEAreceived()) { // eine knifflige Sache hier ist, wenn wir den NMEA-Satz oder die Daten drucken // wir hören am Ende nicht zu und andere Sätze fangen! // Seien Sie also sehr vorsichtig, wenn Sie OUTPUT_ALLDATA verwenden und versuchen, Daten auszudrucken Serial.println (GPS.lastNMEA ()); // dies setzt auch das newNMEAreceived() Flag auf false if (!GPS.parse(GPS.lastNMEA())) // dies setzt auch das newNMEAreceived() Flag auf false return; // wir können einen Satz nicht parsen, in diesem Fall sollten wir einfach auf einen anderen warten } // Wenn millis() oder der Timer umläuft, werden wir ihn einfach zurücksetzen if (timer > millis()) timer = millis(); if (millis() - Timer > 2000) { Timer = millis(); // den Timer zurücksetzen Serial.print ("\nTime: "); Serial.print (GPS. Stunde, DEZ); Serial.print (':'); Serial.print (GPS. Minute, DEZ); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisekunden); Serial.print ("Datum: "); Serial.print (GPS. Tag, DEZ); Serial.print ('/'); Serial.print (GPS. Monat, DEZ); Serial.print ("/20"); Serial.println (GPS. Jahr, DEZ); Serial.print("Fix:"); Serial.print ((int)GPS.fix); Serial.print ("Qualität: "); Serial.println ((int)GPS.fixquality); wenn (GPS.fix) {Serial.print ("Standort:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (", "); Serial.print (GPS. Länge, 4); Serial.println (GPS.lon); Serial.print("Standort (in Grad, funktioniert mit Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (", "); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Geschwindigkeit (Knoten):"); Serial.println (GPS.speed); Serial.print ("Winkel:"); Serial.println (GPS.angle); Serial.print ("Höhe: "); Serial.println (GPS.altitude); Serial.print ("Satelliten: "); Serial.println ((int)GPS.satellites); // GPS des Fahrzeugs speichern if (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // zum Debuggen Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Beginnen Sie mit der Suche nach dem Auto if (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); //Berechnen Sie die Entfernung //car_person_distance = distance(100.0005, 100.0005, 100.0, 100.0); // zum Debuggen Serial.println (car_person_distance); move_direction = GPS.angle; // Bewegungsrichtung (Winkel) aufzeichnen // move_direction = 100,0; // Notieren Sie den Azimut (Winkel) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimuth = azimuth(100.0005, 100.0005, 100.0, 100.0); // Berechnen Sie die Zeit auf der LED-Uhr car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Anzeige auf LED strip.clear (); Strip-Show(); // Verzögerung (Frequenz (car_person_distance)); Verzögerung (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); Strip-Show(); // Verzögerung (Frequenz (car_person_distance)); Verzögerung (500); // LED deaktivieren, wenn (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear(); Strip-Show(); } } } // } } }

Schritt 6: Debug auf Breadboard

Debug auf Breadboard
Debug auf Breadboard
Debug auf Breadboard
Debug auf Breadboard
Debug auf Breadboard
Debug auf Breadboard

Schritt 7: Hardware-Montage

Hardware-Montage
Hardware-Montage
Hardware-Montage
Hardware-Montage
Hardware-Montage
Hardware-Montage

Schritt 8: Elektronikgehäuse-Design in Adobe Illustrator

Design von Elektronikgehäusen in Adobe Illustrator
Design von Elektronikgehäusen in Adobe Illustrator

Schritt 9: Karton-Prototyp

Karton-Prototyp
Karton-Prototyp
Karton-Prototyp
Karton-Prototyp

Dieser Schritt wird verwendet, um die Größe des Gehäuses und jedes Teils des Modells zu bestätigen, um sicherzustellen, dass die Boxgröße, die Tastenposition und die LED-Position zu den zusammengebauten elektronischen Komponenten passen.

Schritt 10: Prototyp aus Birkensperrholz

Prototyp aus Birkensperrholz
Prototyp aus Birkensperrholz
Prototyp aus Birkensperrholz
Prototyp aus Birkensperrholz

Dies war der erste Prototyp. Eines der Stücke wurde schließlich mit einem quadratischen Loch zum Einstecken in ein Ladegerät versehen.

Empfohlen: