Cuprins:
- Pasul 1: Schiță de hârtie
- Pasul 2: Lista hardware
- Pasul 3: Proiectarea circuitului
- Pasul 4: Conexiune hardware
- Pasul 5: Proiectare software
- Pasul 6: Depanare pe Breadboard
- Pasul 7: Asamblare hardware
- Pasul 8: Proiectarea carcasei electronice în Adobe Illustrator
- Pasul 9: Prototip de carton
- Pasul 10: Prototip de placaj de mesteacăn
Video: FinduCar: o cheie inteligentă pentru mașină care ghidează oamenii către locul unde este parcată mașina: 11 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Pentru a rezolva problemele de mai sus, acest proiect propune dezvoltarea unei chei de mașină inteligentă care ar putea direcționa oamenii către locul în care au parcat mașina. Și planul meu este integrarea unui GPS în cheia mașinii. Nu este nevoie să utilizați aplicația smartphone pentru a urmări mașina, toate indicațiile vor fi afișate doar pe cheia mașinii.
Pasul 1: Schiță de hârtie
Când oamenii apasă butonul pentru a bloca mașina, informațiile despre locație ar putea fi înregistrate automat în microcontroler. Apoi, când oamenii încep să navigheze către mașină, diferitele leduri sunt aprinse pentru a fi direcționate către poziția mașinii, iar frecvența intermitentă arată distanța față de mașină. Aceștia pot urmări cu ușurință LED-ul intermitent și pot găsi rapid mașina.
Pasul 2: Lista hardware
Acestea sunt componentele utilizate în acest proiect. Unele provin din seturile de particule (panou, buton, anteturi), altele sunt achiziționate de pe site-ul oficial Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS module, Lpoly Battery and Coin Cell Battery) și Amazon (NeoPixel Ring - 12 RGB LED).
Pasul 3: Proiectarea circuitului
Neopixel_LED este conectat la PIN-ul 6 al Feather M0
Button_Unlock este conectat la PIN-ul 12 al Feather M0
Button_Lock este conectat la PIN-ul 13 al Feather M0
Pasul 4: Conexiune hardware
Lipiți anteturile cu Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Stivați cele două scânduri împreună. GPS-ul FeatherWing se conectează direct la placa dvs. Feather M0 fără alte fire.
Pasul 5: Proiectare software
Componente de testare
Citiți un FIX
configurare nulă () {
Serial.println („test de ecou GPS”); Serial.begin (9600); Serial1.begin (9600); // implicit NMEA GPS baud}
bucla nulă () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (c); } if (Serial1.available ()) {char c = Serial1.read (); Serial.write (c); }}
Clipește inelul LED
Vezi Exemple Adafruit NeoPixel.
Funcții de calcul GPS
Calculați azimutul
// Calculați azimutul
azimut dublu (lat_a dublu, lon_a dublu, lat_b dublu, lon_b dublu) {
dublu 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; retur d; }
Calculați ora de pe ceasul cu LED, care este și direcția vehiculului
// Calculați ora pe ceasul LED
int led_time (unghi dublu) {
int flag = 0; if (angle = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } return_time angle; }
Calculați distanța dintre persoană și vehiculul său
// Calculați distanța
distanță dublă (lat_a dublă, lon_a dublă, lat_b dublă, lon_b dublă) {
dublu EARTH_RADIUS = 6378137.0; radLat1 dublu = (lat_a * PI / 180.0); radLat2 dublu = (lat_b * PI / 180.0); dublu a = radLat1 - radLat2; dublu 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; se intoarce; }
Funcții de afișare cu LED
Aprindeți LED-urile într-un cerc care arată că începe să navigheze
// Iluminarea cu inel cu LED una câte una arată că începe navigarea
void colorWipe (uint32_t c, uint8_t așteptați) {
for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (wait);}}
Obțineți frecvența LED pe baza distanței
// Obțineți frecvența cu LED-uri
frecvența int (distanță dublă) {
int f = (int) distanță * 20; retur f; }
Clipiți anumite LED-uri care indică direcția mașinii
// Afișare pe LED
strip.clear ();
strip.show (); întârziere (frecvență (distanța_persoană_car)); // întârziere (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); întârziere (frecvență (distanța_persoană_car)); // întârziere (500);
// Dezactivează LED-ul
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); Buton button_lock (Button_Lock_PIN); Buton button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); car_lat dublu, car_lon; dublă_dimensiune_persoană; dublă mișcare_direcție; double_azimuth car; double_person_angle; int angle_time;
configurare nulă () {
Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // implicit NMEA GPS baud strip.begin (); // decomentați această linie pentru a activa RMC (minim recomandat) și GGA (date de remediere), inclusiv altitudine GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Setați rata de actualizare GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Rata de actualizare 1 Hz // Solicitați actualizări privind starea antenei, comentați pentru a păstra liniștea // GPS.sendCommand (PGCMD_ANTENNA); întârziere (1000);}
bucla void () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // dacă se primește o propoziție, putem verifica suma de control, o analizăm … dacă (GPS.newNMEAreceived ()) {// un lucru dificil aici este dacă tipărim propoziția NMEA sau datele // ajungem să nu ascultăm și prinzând alte propoziții! // deci fii foarte precaut dacă folosești OUTPUT_ALLDATA și încearcă să tipărești datele Serial.println (GPS.lastNMEA ()); // aceasta setează, de asemenea, steagul newNMEAreceived () la fals dacă (! GPS.parse (GPS.lastNMEA ())) // acesta stabilește, de asemenea, steagul newNMEAreceived () la returnare falsă; // nu reușim să analizăm o propoziție, caz în care ar trebui să așteptăm altul} // dacă millis () sau timer se încheie, o vom reseta doar dacă (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // resetați temporizatorul Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milisecunde); 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 ("Remediere:"); Serial.print ((int) GPS.fix); Serial.print ("calitate:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Locație:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print („Locație (în grade, funcționează cu Google Maps):”); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Viteză (noduri):"); Serial.println (GPS.speed); Serial.print ("Unghi:"); Serial.println (GPS.angle); Serial.print ("Altitudine:"); Serial.println (GPS.altitude); Serial.print ("Sateliți:"); Serial.println ((int) GPS.satellites); // Salvați GPS-ul vehiculului dacă (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // pentru depanare Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Începeți să găsiți mașina dacă (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); // Calculați distanța // distanță_persoană_car = distanță (100.0005, 100.0005, 100.0, 100.0); // pentru depanare Serial.println (car_person_distance); move_direction = GPS.angle; // Înregistrați direcția de mișcare (unghiul) // move_direction = 100.0; // Înregistrați azimutul (unghiul) car_azimuth = azimut (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimut = azimut (100.0005, 100.0005, 100.0, 100.0); // Calculați ora pe ceasul LED car_person_angle = car_azimuth - move_direction; time_angle = led_time (car_person_angle); // Afișare pe bandă LED.clear (); strip.show (); // întârziere (frecvență (distanța_persoană_car)); întârziere (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // întârziere (frecvență (distanța_persoană_car)); întârziere (500); // Dezactivați LED-ul dacă (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}
Pasul 6: Depanare pe Breadboard
Pasul 7: Asamblare hardware
Pasul 8: Proiectarea carcasei electronice în Adobe Illustrator
Pasul 9: Prototip de carton
Acest pas este utilizat pentru a confirma dimensiunea carcasei și a fiecărei piese a modelului, asigurându-vă că dimensiunea cutiei, poziția butonului și poziția LED se potrivesc componentelor electronice asamblate.
Pasul 10: Prototip de placaj de mesteacăn
Acesta a fost prototipul inițial. În cele din urmă a fost adăugată o gaură pătrată pentru conectarea la un încărcător.
Recomandat:
Asistent de parcare Arduino - Parcați-vă mașina în locul corect de fiecare dată: 5 pași (cu imagini)
Asistent de parcare Arduino - Parcați-vă mașina în locul corect de fiecare dată: în acest proiect, vă voi arăta cum să vă construiți propriul asistent de parcare folosind un Arudino. Acest asistent de parcare măsoară distanța față de mașină și vă ghidează să o parcați în locul corect folosind un afișaj LCD și un LED, care progresiv
Mască timidă care se închide când vede oamenii: 9 pași (cu imagini)
Mască timidă care se închide când vede oamenii: Este trist că trebuie să purtăm măști de față datorită lui Covid -19. Nu este o experiență foarte plăcută, te face să fii fierbinte, să transpiri, să fii nervos și, desigur, să respiri mai greu. Există momente de sete când îndemnați să scoateți masca, dar vă este teamă să faceți acest lucru. Ce
Nike LED Swoosh! Acesta este un decor minunat pentru o cameră. Acesta este singurul proiect pe care toată lumea îl poate repeta: 5 pași
Nike LED Swoosh! Acesta este un decor minunat pentru o cameră. Acesta este singurul proiect pe care toată lumea îl poate repeta.: Instrumente -banda de măsurat-șurubelniță-fier de lipit-ferăstrău-ferăstrău-burghie electrică-șmirghel Furnizor -Banda LED (RGB) 5m-controler cu LED-Alimentare 12V 4A-cherestea 50-50-1500 2x-cherestea 20-20-3000 2x-placaj 500-1000mm-șuruburi (45mm) 150x-șuruburi (35mm) 30x-scr
10 $ cheie bazată pe cheie mai puțin control bicicletă: 7 pași (cu imagini)
10 $ Cheie bazată pe IoT Mai puțin Control bicicletă: CONTROLEAȚI BICICLETA FĂRĂ FĂRĂ CU TELEFONUL Dvs. ANDROID. FĂRĂ CHEIE, FĂRĂ TENSIUNE
O modalitate foarte simplă / ușoară / nu complicată de a face oamenii / oamenii / animalele / roboții să arate de parcă ar avea o viziune termică foarte rece / strălucitoare (culoarea la alegere) Utilizând GIMP: 4 pași
O modalitate foarte simplă / ușoară / nu complicată de a face oamenii / oamenii / animalele / roboții să arate de parcă ar avea o viziune termică foarte rece / strălucitoare (culoarea la alegere) folosind GIMP: Citiți … titlul