Inhoudsopgave:
- Stap 1: Papierschets
- Stap 2: Hardwarelijst
- Stap 3: Circuitontwerp
- Stap 4: Hardwareverbinding
- Stap 5: Software-ontwerp
- Stap 6: Foutopsporing op Breadboard
- Stap 7: Hardwaremontage
- Stap 8: Ontwerp van elektronicabehuizing in Adobe Illustrator
- Stap 9: kartonnen prototype
- Stap 10: berken multiplex prototype
Video: FinduCar: een slimme autosleutel die mensen leidt naar waar de auto geparkeerd staat - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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
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
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
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
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
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
Stap 7: Hardwaremontage
Stap 8: Ontwerp van elektronicabehuizing in Adobe Illustrator
Stap 9: 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
Dit was het eerste prototype. Een vierkant gat voor aansluiting op een oplader werd uiteindelijk aan een van de stukken toegevoegd.
Aanbevolen:
Een multimeter uit het WW2-tijdperk in werkende staat herstellen: 3 stappen
Een multimeter uit de Tweede Wereldoorlog in werkende staat herstellen: Een aantal jaren geleden kocht ik deze vroege Simpson Electric-multimeter voor mijn verzameling. Het werd geleverd in een zwarte kunstleren etui die in uitstekende staat was gezien zijn leeftijd. De patentdatum van het US Patent Office voor het uurwerk van de meter is 1936 en
Hat Not Hat - een hoed voor mensen die niet echt hoeden dragen, maar wel een hoed willen: 8 stappen
Hat Not Hat - een hoed voor mensen die niet echt hoeden dragen, maar wel een hoed willen Ervaring: Ik heb altijd gewenst dat ik een hoedenmens kon zijn, maar ik heb nog nooit een hoed gevonden die voor mij werkt. Deze "Hoed Niet Hoed", of fascinator zoals het wordt genoemd, is een uiterst knapperige oplossing voor mijn hoedenprobleem waarbij ik de Kentucky Derby zou kunnen bijwonen, vacu
Game-saves kopiëren naar een MU van Microsoft of een derde partij op een eenvoudige manier: 9 stappen
Game Saves kopiëren naar een Microsoft of 3rd Party MU op de GEMAKKELIJKE MANIER .: Originele tutorial HIER Er zijn tal van Softmod-tutorials die er zijn en ze zijn allemaal goed, maar het is lastig om de opslagbestanden op de Xbox HDD te krijgen, ik heb een leven gemaakt cd die het eenvoudig maakt om dat te doen. Dit is geen complete softmod-tutorial, dit
Hoe je een LA Makerspace hands-on AI-workshop leidt: 10 stappen (met afbeeldingen)
Hoe een LA Makerspace Hands-on AI-workshop te leiden: Bij LA Makerspace zonder winstoogmerk richten we ons op het geven van waardevolle hands-on STEAM-educatie om de volgende generatie aan te moedigen, vooral degenen die ondervertegenwoordigd zijn en onvoldoende middelen hebben, om mondiger te worden. Makers, shapers en drivers van morgen. Wij doen dit
12v naar USB-adapter 12v naar 5v transformator (ideaal voor auto's): 6 stappen
12v naar USB-adapter 12v naar 5v-transformator (ideaal voor auto's): hier wordt uitgelegd hoe u een 12v-naar-USB (5v)-adapter maakt. Het meest voor de hand liggende gebruik hiervan is voor 12v-autoadapters, maar overal waar je 12v hebt, kun je het gebruiken! Als je 5v nodig hebt voor iets anders dan USB, sla dan gewoon de stappen over het toevoegen van de USB-poorten over