Inhaltsverzeichnis:
- Schritt 1: Papierskizze
- Schritt 2: Hardwareliste
- Schritt 3: Schaltungsdesign
- Schritt 4: Hardwareverbindung
- Schritt 5: Softwaredesign
- Schritt 6: Debug auf Breadboard
- Schritt 7: Hardware-Montage
- Schritt 8: Elektronikgehäuse-Design in Adobe Illustrator
- Schritt 9: Karton-Prototyp
- Schritt 10: Prototyp aus Birkensperrholz
Video: FinduCar: ein intelligenter Autoschlüssel, der die Leute dorthin führt, wo das Auto geparkt ist - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
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
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
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
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
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
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
Schritt 7: Hardware-Montage
Schritt 8: Elektronikgehäuse-Design in Adobe Illustrator
Schritt 9: 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
Dies war der erste Prototyp. Eines der Stücke wurde schließlich mit einem quadratischen Loch zum Einstecken in ein Ladegerät versehen.
Empfohlen:
Wie man eine professionelle Leiterplatte herstellt (ist es das wert?): 5 Schritte
Wie man eine professionelle Leiterplatte herstellt (ist es das wert?): Ich möchte meine "PCB-Erfahrungen" mit dir
Hast du ein neues Neopixel? Hier ist eine Kurzanleitung!: 5 Schritte
Hast du ein neues Neopixel? Hier ist eine Kurzanleitung!: Ich weiß, dass ich in meinem letzten instructable gesagt habe, dass ich regelmäßig sein werde, aber ich habe es nicht. Nun, ich habe es versucht, aber ich hatte keine guten Ideen: Wachsüberzogenes Streichholz: KABOOM!*Crayon Candle: Fissssssss
So bauen Sie ein Wifi-System, das die Beleuchtung und Heizung Ihres Aquariums steuert – wikiHow
So erstellen Sie ein Wifi-System, das die Beleuchtung und Heizung Ihres Aquariums steuert: Was macht es? Ein System, das Ihr Aquarium automatisch nach einem Zeitplan oder manuell mit einem Druckknopf oder einer Internetanfrage ein- / ausschaltet. Ein System, das die Wassertemperatur überwacht und E-Mails und Warnungen sendet, falls es unter
Der verlorene Ring – Was mit Ihren Trackstick-Daten zu tun ist – wikiHow
Der verlorene Ring - Was mit Ihren Trackstick-Daten zu tun ist: Sobald Sie die Trackstick-Daten auf Ihrem Computer haben, erfahren Sie in diesem Instructable, wie Sie es zu Seero bringen, damit es dann auf ihrer benutzerdefinierten Google Earth-KML-Ebene angezeigt werden kann alle anderen Trackstick-Daten: http://www.seero.com/c
So erstellen Sie ein Flash-Laufwerk, das die Benutzerdateien still und automatisch kopiert – wikiHow
So erstellen Sie ein Flash-Laufwerk, das die Benutzerdateien still und automatisch kopiert: ****** DIESE ANWEISUNG IST NUR ZU INFORMATIONSZWECKEN ES IST ILEGAL, JEMAND-DATEIEN OHNE IHRE ERLAUBNIS ZU KOPIEREN INFORMATIONEN WERDEN UNSACHGEMÄSS VERWENDET**************** Wie man ein