INHOUDSOPGAWE:
- Stap 1: Papierskets
- Stap 2: Hardeware lys
- Stap 3: Kringontwerp
- Stap 4: Hardewareverbinding
- Stap 5: Sagteware -ontwerp
- Stap 6: Ontfout op Breadboard
- Stap 7: Hardeware -samestelling
- Stap 8: Ontwerp van elektroniese behuising in Adobe Illustrator
- Stap 9: Karton prototipe
- Stap 10: Prototipe van berkhouthout
Video: FinduCar: 'n slim motorsleutel wat mense lei na waar die motor geparkeer is: 11 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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
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
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
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
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
Stap 7: Hardeware -samestelling
Stap 8: Ontwerp van elektroniese behuising in Adobe Illustrator
Stap 9: 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
Dit was die aanvanklike prototipe. Uiteindelik is 'n vierkantige gat om in 'n laaier aan te sluit, by een van die stukke gevoeg.
Aanbeveel:
Framboos Pi DIY slim deurklokkie wat mense, motors, ens kan opspoor: 5 stappe
Raspberry Pi DIY Slimme deurbel wat mense, motors, ens kan opspoor: Hierdie ontwerp met steampunk-tema kan integreer met die huisassistent en ons klankstelsel met meer kamers om met die res van ons selfgemaakte slimhuis te kommunikeer. Nest, of een van die ander mededingers) Ek het ons eie slim deurbalk gebou
Skaam masker wat stilmaak as dit mense sien: 9 stappe (met foto's)
Skaam masker wat stil word as dit mense sien: Dit is hartseer dat ons gesigmaskers moet dra weens Covid -19. Dit is nie 'n baie aangename ervaring nie, dit maak jou warm, sweet, senuweeagtig en natuurlik moeiliker om asem te haal. Daar is dorstige tye dat u die masker wil verwyder, maar u is bang om dit te doen. Wat ek
Red my kind: die slim sitplek wat teksboodskappe stuur as u die kind in die motor vergeet: 8 stappe
Save My Child: die slim sitplek wat teksboodskappe stuur as u die kind in die motor vergeet: dit is in motors geïnstalleer, en danksy 'n detektor wat op die kinderstoel geplaas is, waarsku dit ons - via SMS of telefoonoproep - as ons kry weg sonder om die kind saam te bring
Slim motor wat deur die vinger beweeg: 7 stappe (met foto's)
Slim motor werk deur die beweging van die vinger: dit is my projek: 'n slim motor, dit werk nie met 'n mobiele of normale afstandsbediening nie, dit werk met 'n handskoen, sodat die afstandsbediening my vinger beweeg
N Regtig eenvoudige/maklike/nie ingewikkelde manier om mense/mense/diere/robotte te laat lyk asof hulle 'n baie koel/helder hittevisie het (kleur van u keuse) deur GIMP te gebruik: 4 stappe
N Regtig eenvoudige/maklike/nie ingewikkelde manier om mense/mense/diere/robotte te laat lyk asof hulle 'n koel/helder hittevisie het (kleur van u keuse) deur GIMP te gebruik: Lees … die … titel