Taula de continguts:

FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe: 11 passos (amb imatges)
FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe: 11 passos (amb imatges)

Vídeo: FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe: 11 passos (amb imatges)

Vídeo: FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe: 11 passos (amb imatges)
Vídeo: RAF CAMORA - Primo (prod. X-Plosive & RAF Camora) 2024, Desembre
Anonim
FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe
FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe

Per resoldre els problemes anteriors, aquest projecte proposa desenvolupar una clau de cotxe intel·ligent que pugui dirigir les persones cap a on estacionaven el cotxe. I el meu pla és integrar un GPS a la clau del cotxe. No cal que utilitzeu l’aplicació per a telèfons intel·ligents per fer un seguiment del cotxe, totes les indicacions només es mostraran a la tecla del cotxe.

Pas 1: esbós de paper

Esbós de paper
Esbós de paper

Quan la gent prem el botó per bloquejar el cotxe, la informació d’ubicació es podria enregistrar automàticament al microcontrolador. Aleshores, quan la gent comença a navegar cap al cotxe, els diferents LED s’encenen per dirigir-se a la posició del cotxe i la freqüència de parpelleig mostra la distància al cotxe. Poden seguir fàcilment el LED parpellejant i trobar ràpidament el cotxe.

Pas 2: llista de maquinari

Llista de maquinari
Llista de maquinari

Aquests són els components utilitzats en aquest projecte. Alguns provenen dels kits de partícules (taulers de suport, botons, capçaleres), d'altres es compren al lloc web oficial d'Adafruit (Adafruit Feather M0, mòdul Adafruit Ultimate GPS, bateria Lpoly i bateria Coin Cell) i Amazon (NeoPixel Ring - 12 RGB LED).

Pas 3: Disseny de circuits

Disseny de circuits
Disseny de circuits

Neopixel_LED està connectat al PIN 6 de Feather M0

Button_Unlock està connectat al PIN 12 de Feather M0

Button_Lock està connectat al PIN 13 de Feather M0

Pas 4: connexió de maquinari

Connexió de maquinari
Connexió de maquinari
Connexió de maquinari
Connexió de maquinari
Connexió de maquinari
Connexió de maquinari

Soldeu les capçaleres amb Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Apileu els dos taulers junts. El GPS FeatherWing es connecta directament a la vostra placa Feather M0 sense més cables.

Pas 5: disseny de programari

Disseny de programari
Disseny de programari

Components de la prova

Llegiu un FIX

configuració nul·la () {

Serial.println ("prova de ressò GPS"); Serial.begin (9600); Serial1.begin (9600); // transmissió GPS per defecte NMEA}

bucle buit () {

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

Anell LED parpellejant

Vegeu els exemples d’Adafruit NeoPixel.

Funcions de càlcul GPS

Calculeu l’azimut

// Calculeu l’azimut

doble azimut (doble lat_a, doble lon_a, doble lat_b, doble lon_b) {

doble 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; tornar d; }

Calculeu el temps del rellotge LED, que també és la direcció del vehicle

// Calculeu l'hora del rellotge LED

int led_time (doble angle) {

int flag = 0; if (angle = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } retorn angle_temps; }

Calculeu la distància entre la persona i el seu vehicle

// Calculeu la distància

doble distància (doble lat_a, doble lon_a, doble lat_b, doble lon_b) {

doble EARTH_RADIUS = 6378137,0; doble radLat1 = (lat_a * PI / 180.0); doble radLat2 = (lat_b * PI / 180.0); doble a = radLat1 - radLat2; doble b = (lon_a - lon_b) * PI / 180.0; doble s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; retorn s; }

Funcions de pantalla LED

Enceneu els LED en un cercle que demostri que comença a navegar

// La il·luminació de l'anell LED un per un mostra que comença la navegació

void colorWipe (uint32_t c, uint8_t espera) {

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

Obteniu la freqüència del LED en funció de la distància

// Obtén la freqüència del LED

freqüència int (doble distància) {

int f = (int) distància * 20; tornar f; }

Parpelleja el LED que indica la direcció del cotxe

// Visualització en LED

strip.clear ();

strip.show (); retard (freqüència (car_person_distance)); // retard (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); retard (freqüència (car_person_distance)); // retard (500);

// Desactiva el LED

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

Principal

#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); Button button_lock (Button_Lock_PIN); Botó button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t temporitzador = millis (); car_lat doble, car_lon; doble distància_persona_carro; doble moviment_direcció; doble car_azimut; doble cotxe_person_angle; int angle_time;

configuració nul·la () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // per defecte NMEA GPS baud strip.begin (); // descomenteu aquesta línia per activar RMC (mínim recomanat) i GGA (correcció de dades), inclosa l'altitud GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Estableix la velocitat d’actualització GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Velocitat d’actualització a 1 Hz // Sol·liciteu actualitzacions sobre l’estat de l’antena, feu un comentari per guardar silenci // GPS.sendCommand (PGCMD_ANTENNA); retard (1000);}

bucle buit () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // si es rep una frase, podem comprovar la suma de comprovació, analitzar-la … si (GPS.newNMEAreceived ()) {// aquí és complicat imprimir la frase NMEA o dades // acabem sense escoltar i agafant altres frases! // per tant, tingueu molta precaució si utilitzeu OUTPUT_ALLDATA i intenteu imprimir les dades Serial.println (GPS.lastNMEA ()); // això també estableix el senyal newNMEAreceived () a false si (! GPS.parse (GPS.lastNMEA ())) // també estableix el senyal newNMEAreceived () a false return; // no podem analitzar una frase; en aquest cas, només hauríem d’esperar una altra} // si millis () o temporitzador s’acaben, només el restablirem si (temporitzador> millis ()) timer = millis (); if (millis () - temporitzador> 2000) {temporitzador = millis (); // restableix el temporitzador Serial.print ("\ nHora:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.millisegons); Serial.print ("Data:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/ 20"); Serial.println (GPS.year, DEC); Serial.print ("Solució:"); Serial.print ((int) GPS.fix); Serial.print ("qualitat:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Ubicació:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Ubicació (en graus, funciona amb Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Velocitat (nusos):"); Serial.println (GPS.speed); Serial.print ("Angle:"); Serial.println (GPS.angle); Serial.print ("Altitud:"); Serial.println (GPS.altitude); Serial.print ("Satèl·lits:"); Serial.println ((int) GPS.satellites); // Deseu el GPS del vehicle si (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // per a la depuració Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Comenceu a trobar el cotxe si (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); // Calculeu la distància // distància_persona_car = distància (100.0005, 100.0005, 100.0, 100.0); // per depurar Serial.println (car_person_distance); move_direction = GPS.angle; // Grava la direcció de moviment (angle) // move_direction = 100,0; // Grava l’azimut (angle) car_azimuth = azimut (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimut = azimut (100.0005, 100.0005, 100.0, 100.0); // Calculeu l'hora del rellotge LED car_person_angle = car_azimuth - move_direction; angle_time = led_time (auto_person_angle); // Visualització al LED strip.clear (); strip.show (); // delay (freqüència (car_person_distance)); retard (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // delay (freqüència (car_person_distance)); retard (500); // Desactiva el LED si (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Pas 6: depuració a Breadboard

Depuració a Breadboard
Depuració a Breadboard
Depuració a Breadboard
Depuració a Breadboard
Depuració a Breadboard
Depuració a Breadboard

Pas 7: Muntatge de maquinari

Muntatge de maquinari
Muntatge de maquinari
Muntatge de maquinari
Muntatge de maquinari
Muntatge de maquinari
Muntatge de maquinari

Pas 8: disseny d'habitatges electrònics a Adobe Illustrator

Disseny d’habitatges electrònics a Adobe Illustrator
Disseny d’habitatges electrònics a Adobe Illustrator

Pas 9: prototip de cartró

Prototip de cartró
Prototip de cartró
Prototip de cartró
Prototip de cartró

Aquest pas s'utilitza per confirmar la mida de la carcassa i de cada peça del model, assegurant-se que la mida de la caixa, la posició del botó i la posició del LED s'adaptin als components electrònics muntats.

Pas 10: prototip de fusta contraxapada de bedoll

Prototip de fusta contraxapada de bedoll
Prototip de fusta contraxapada de bedoll
Prototip de fusta contraxapada de bedoll
Prototip de fusta contraxapada de bedoll

Aquest va ser el prototip inicial. Finalment, es va afegir a una de les peces un forat quadrat per connectar-lo a un carregador.

Recomanat: