Mündəricat:

FinduCar: Avtomobilin park edildiyi yerə insanları yönəldən ağıllı avtomobil açarı: 11 addım (şəkillərlə)
FinduCar: Avtomobilin park edildiyi yerə insanları yönəldən ağıllı avtomobil açarı: 11 addım (şəkillərlə)

Video: FinduCar: Avtomobilin park edildiyi yerə insanları yönəldən ağıllı avtomobil açarı: 11 addım (şəkillərlə)

Video: FinduCar: Avtomobilin park edildiyi yerə insanları yönəldən ağıllı avtomobil açarı: 11 addım (şəkillərlə)
Video: НА КАКОЙ ЗАПРАВКЕ ХОТ-ДОГ ЛУЧШЕ? 2024, Noyabr
Anonim
FinduCar: İnsanları Maşının Dayandığı Yerə Yönləndirən Ağıllı Avtomobil Açarı
FinduCar: İnsanları Maşının Dayandığı Yerə Yönləndirən Ağıllı Avtomobil Açarı

Yuxarıdakı problemləri həll etmək üçün bu layihə insanları maşını saxladıqları yerə yönləndirə biləcək ağıllı bir avtomobil açarı hazırlamağı təklif edir. Planım GPS -in avtomobilin açarına inteqrasiyasıdır. Maşını izləmək üçün smartfon tətbiqindən istifadə etməyə ehtiyac yoxdur, bütün təlimatlar yalnız avtomobilin açarında göstəriləcək.

Addım 1: Kağız eskiz

Kağız eskiz
Kağız eskiz

İnsanlar maşını kilidləmək üçün düyməni basdıqda, yer məlumatları mikrokontrolördə avtomatik olaraq qeyd edilə bilər. Daha sonra insanlar maşına doğru getməyə başladıqda, fərqli LED -lər avtomobilin mövqeyinə yönəldiləcək şəkildə işıqlandırılır və yanıb -sönən tezlik avtomobilə olan məsafəni göstərir. Yanıp sönən LED -i asanlıqla izləyə və maşını tez tapa bilərlər.

Addım 2: Avadanlıq siyahısı

Avadanlıq siyahısı
Avadanlıq siyahısı

Bu layihədə istifadə olunan komponentlərdir. Bəziləri hissəcik dəstlərindəndir (çörək taxtası, düymə, başlıqlar), digərləri Adafruit rəsmi saytından (Adafruit Feather M0, Adafruit Ultimate GPS modulu, Lpoly Battery və Coin Cell Battery) və Amazondan (NeoPixel Ring - 12 RGB LED) alınır.

Addım 3: Dövrə Dizaynı

Dövrə Dizaynı
Dövrə Dizaynı

Neopixel_LED, Feather M0 -un PIN 6 -na bağlıdır

Button_Unlock, Feather M0 PIN 12 -ə bağlıdır

Button_Lock, Feather M0 -un PIN 13 -ə bağlıdır

Addım 4: Avadanlıq Bağlantısı

Avadanlıq Bağlantısı
Avadanlıq Bağlantısı
Avadanlıq Bağlantısı
Avadanlıq Bağlantısı
Avadanlıq Bağlantısı
Avadanlıq Bağlantısı

Başlıqları Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing ilə lehimləyin. İki lövhəni bir yerə yığın. GPS FeatherWing, artıq tel olmadan Feather M0 lövhənizə qoşulur.

Addım 5: Proqram Dizaynı

Proqram Dizaynı
Proqram Dizaynı

Test Komponentləri

FIX oxuyun

boş quraşdırma () {

Serial.println ("GPS echo testi"); Serial.begin (9600); Serial1.begin (9600); // standart NMEA GPS baud}

boşluq döngəsi () {

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

Blink LED Üzük

Adafruit NeoPixel Nümunələrinə baxın.

GPS hesablama funksiyaları

Azimutu hesablayın

// Azimutu hesablayın

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

ikiqat 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)*günah (lat_b)+cos (lat_a)*cos (lat_b)*cos (lon_b-lon_a); d = sqrt (1-d*d); d = cos (lat_b)*günah (lon_b-lon_a)/d; d = asin (d)*180/PI; qayıt d; }

Avtomobilin istiqaməti olan LED saatında vaxtı hesablayın

// LED saatında vaxtı hesablayın

int led_time (ikiqat bucaq) {

int bayrağı = 0; əgər (bucaq = 15) {bucaq_vaxtı = bucaq_sayı + 1; } if (bayraq == 1) {angle_time = 12 - angle_time; } dönüş açısı_vaxt; }

Şəxslə avtomobili arasındakı məsafəni hesablayın

// Məsafəni hesablayın

ikiqat məsafə (cüt lat_a, ikiqat lon_a, ikiqat lat_b, ikiqat lon_b) {

ikiqat EARTH_RADIUS = 6378137.0; ikiqat radLat1 = (lat_a * PI / 180.0); ikiqat radLat2 = (lat_b * PI / 180.0); ikiqat a = radLat1 - radLat2; ikiqat b = (lon_a - lon_b) * PI / 180.0; ikiqat s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; qayıt s; }

LED Ekran funksiyaları

Gediş etməyə başladığını göstərən LEDləri bir dairədə yandırın

// LED halqa işıqlandırması tək -tək naviqasiyanın başladığını göstərir

void colorWipe (uint32_t c, uint8_t gözləyin) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); gecikmə (gözləyin);}}

Məsafəyə əsaslanaraq LED tezliyini alın

// LED tezliyini əldə edin

int tezliyi (ikiqat məsafə) {

int f = (int) məsafə * 20; qayıt f; }

Avtomobilin istiqamətini göstərən müəyyən bir LED -i yandırın

// LED -də göstərin

strip.clear ();

strip.show (); gecikmə (tezlik (car_person_distance)); // gecikmə (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); gecikmə (tezlik (car_person_distance)); // gecikmə (500);

// LED -i deaktiv edin

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

Əsas

#Adafruit_GPS.h daxil edin #Adafruit_NeoPixel.h daxil edin #HardwareSerial.h #daxil edin Düymə.h #riyaziyyat daxil edin

#müəyyən Neopixel_LED_PIN 6

#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1

#GPSECHO yalanını təyin edin

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel şeridi = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Button_lock (Button_Lock_PIN); Düymə düyməsini açmaq (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = milis (); ikiqat car_lat, car_lon; ikiqat car_person_distance; ikiqat hərəkət_ istiqamət; ikiqat car_azimuth; ikiqat car_person_angle; int angle_time;

boş quraşdırma () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // standart NMEA GPS baud strip.begin (); // yüksəklik GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) daxil olmaqla RMC (tövsiyə olunan minimum) və GGA -nı (məlumatları düzəltmək) açmaq üçün bu xəttin şərhini yazmayın; // GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ) yeniləmə sürətini təyin edin; // 1 Hz yeniləmə dərəcəsi // Anten statusu ilə bağlı yeniləmələr istəyin, susmaq üçün şərh yazın // GPS.sendCommand (PGCMD_ANTENNA); gecikmə (1000);}

void loop () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); əgər (GPSECHO) əgər (c) Serial.print (c); // bir cümlə alınarsa, cəmi yoxlaya bilərik, təhlil edə bilərik … əgər (GPS.newNMEAreceived ()) {// burada çətin bir şey NMEA cümləsini və ya məlumatları çap etsək // dinləməyəcəyimiz və digər cümlələri tutmaq! // OUTPUT_ALLDATA istifadə edərək Serial.println (GPS.lastNMEA ()) məlumatlarını çap etməyə çalışarkən çox ehtiyatlı olun; // bu da newNMEAreceived () bayrağını false olaraq təyin edərsə (! GPS.parse (GPS.lastNMEA ())) // bu da newNMEAreceived () bayrağını saxta qaytarma olaraq təyin edir; // bir cümləni təhlil edə bilmərik, bu halda başqa birini gözləməliyik} // // milis () və ya taymer dolanırsa, onu yalnız sıfırlayacağıq əgər (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // Serial.print taymerini sıfırlayın ("\ nZaman:"); Serial. çap (GPS.hour, DEC); Serial.print (':'); Serial. çap (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS saniyələri, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Tarix:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial. çap (GPS.ay, DEC); Serial.print ("/20"); Serial.println (GPS.yıl, DEC); Serial.print ("Düzəlt:"); Serial.print ((int) GPS.fix); Serial.print ("keyfiyyət:"); Serial.println ((int) GPS.fixquality); əgər (GPS.fix) {Serial.print ("Yer:"); Serial. çap (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.çap (GPS. Uzunluq, 4); Serial.println (GPS.lon); Serial.print ("Məkan (dərəcə ilə, Google Xəritə ilə işləyir):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Sürət (düyünlər):"); Serial.println (GPS.sürəti); Serial.print ("Açı:"); Serial.println (GPS açarı); Serial.print ("Hündürlük:"); Serial.println (GPS.altitude); Serial.print ("Peyklər:"); Serial.println ((int) GPS.satellites); // Avtomobilin GPS -i saxla, əgər (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // Serial.print ("carLatitude:") ayıklama üçün; Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Maşını tapmağa başlayın, əgər (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; } əgər (button_flag == 1) {car_person_distance = məsafə (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Məsafəni hesablayın // car_person_distance = məsafə (100.0005, 100.0005, 100.0, 100.0); // Serial.println (car_person_distance) ayıklama üçün; move_direction = GPS.angle; // Hərəkət istiqamətini (bucağı) qeyd edin // move_direction = 100.0; // Azimutu qeyd edin (bucaq) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // LED saatında vaxtı hesablayın car_person_angle = car_azimuth - move_direction; bucaq_ vaxtı = led_vaxt (avtomobil_şəxsi_bucaq); // LED şeridində göstərin. Clear (); strip.show (); // gecikmə (tezlik (car_person_distance)); gecikmə (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // gecikmə (tezlik (car_person_distance)); gecikmə (500); // LED -i söndürün, əgər (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Addım 6: Çörək lövhəsində hata ayıklayın

Çörək lövhəsində debug
Çörək lövhəsində debug
Çörək lövhəsində debug
Çörək lövhəsində debug
Çörək lövhəsində debug
Çörək lövhəsində debug

Addım 7: Avadanlıq Quraşdırması

Avadanlıq Montajı
Avadanlıq Montajı
Avadanlıq Montajı
Avadanlıq Montajı
Avadanlıq Montajı
Avadanlıq Montajı

Addım 8: Adobe Illustrator -da elektronika mənzil dizaynı

Adobe Illustrator -da elektronika mənzil dizaynı
Adobe Illustrator -da elektronika mənzil dizaynı

Addım 9: Karton Prototipi

Karton Prototip
Karton Prototip
Karton Prototip
Karton Prototip

Bu addım, qutunun ölçüsünün, düymə mövqeyinin və LED mövqeyinin yığılmış elektron komponentlərə uyğun olduğundan əmin olaraq, korpusun və hər bir modelin ölçüsünü təsdiq etmək üçün istifadə olunur.

Addım 10: Ağcaqayın Kontrplak Prototipi

Ağcaqayın kontrplak prototipi
Ağcaqayın kontrplak prototipi
Ağcaqayın kontrplak prototipi
Ağcaqayın kontrplak prototipi

Bu ilkin prototip idi. Nəhayət parçalardan birinə bir şarj cihazına qoşulmaq üçün bir kvadrat çuxur əlavə edildi.

Tövsiyə: