Taula de continguts:
- Pas 1: esbós de paper
- Pas 2: llista de maquinari
- Pas 3: Disseny de circuits
- Pas 4: connexió de maquinari
- Pas 5: disseny de programari
- Pas 6: depuració a Breadboard
- Pas 7: Muntatge de maquinari
- Pas 8: disseny d'habitatges electrònics a Adobe Illustrator
- Pas 9: prototip de cartró
- Pas 10: prototip de fusta contraxapada de bedoll
Vídeo: FinduCar: una clau de cotxe intel·ligent que guia la gent cap a on està aparcat el cotxe: 11 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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
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
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
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
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
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
Pas 7: Muntatge de maquinari
Pas 8: disseny d'habitatges electrònics a Adobe Illustrator
Pas 9: 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
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:
Llum LED d'escriptori intel·ligent - Il·luminació intel·ligent amb Arduino - Espai de treball Neopixels: 10 passos (amb imatges)
Llum LED d'escriptori intel·ligent | Il·luminació intel·ligent amb Arduino | Espai de treball de Neopixels: ara passem molt de temps a casa estudiant i treballant virtualment, per què no fer que el nostre espai de treball sigui més gran amb un sistema d’il·luminació personalitzat i intel·ligent basat en els LEDs Arduino i Ws2812b. Aquí us mostro com construir el vostre Smart Llum LED d'escriptori que
Converteix un telèfon intel·ligent no utilitzat en una pantalla intel·ligent: 6 passos (amb imatges)
Converteix un telèfon intel·ligent no utilitzat en una pantalla intel·ligent: el tutorial de Deze es troba a Engels, per a la versió del clàssic espanyol. Teniu un telèfon intel·ligent (antic) sense utilitzar? Convertiu-lo en una pantalla intel·ligent amb Fulls de càlcul de Google i paper i llapis seguint aquest senzill tutorial pas a pas. Quan hagis acabat
Rellotge despertador intel·ligent: un despertador intel·ligent fabricat amb Raspberry Pi: 10 passos (amb imatges)
Rellotge despertador intel·ligent: un rellotge despertador intel·ligent fet amb Raspberry Pi: Heu volgut mai un rellotge intel·ligent? Si és així, aquesta és la solució per a vosaltres. He creat Smart Alarm Clock (Rellotge despertador intel·ligent), aquest és un rellotge que permet canviar l’hora de l’alarma segons el lloc web. Quan l’alarma s’activi, hi haurà un so (brunzidor) i 2 llums
Cotxe RC IoT amb control remot o passarel·la de làmpada intel·ligent: 8 passos (amb imatges)
Cotxe RC IoT amb control remot o passarel·la intel·ligent: per a un projecte no relacionat, havia estat escrivint algun codi Arduino per parlar amb els llums intel·ligents i els comandaments a distància de làmpades MiLight que tinc a casa. Després d’haver aconseguit interceptar ordres dels comandaments a distància sense fils, Vaig decidir fer un petit cotxe RC per provar
Com controlar l'interruptor intel·ligent bàsic Sonoff basat en ESP8266 amb un telèfon intel·ligent: 4 passos (amb imatges)
Com controlar el commutador intel·ligent bàsic de Sonoff basat en ESP8266 amb un telèfon intel·ligent: Sonoff és una línia de dispositius per a Smart Home desenvolupada per ITEAD. Un dels dispositius més flexibles i econòmics d’aquesta línia és Sonoff Basic. És un commutador habilitat per Wi-Fi basat en un gran xip, ESP8266. En aquest article es descriu com configurar el Cl