Mündəricat:
- Addım 1: Kağız eskiz
- Addım 2: Avadanlıq siyahısı
- Addım 3: Dövrə Dizaynı
- Addım 4: Avadanlıq Bağlantısı
- Addım 5: Proqram Dizaynı
- Addım 6: Çörək lövhəsində hata ayıklayın
- Addım 7: Avadanlıq Quraşdırması
- Addım 8: Adobe Illustrator -da elektronika mənzil dizaynı
- Addım 9: Karton Prototipi
- Addım 10: Ağcaqayın Kontrplak Prototipi
Video: FinduCar: Avtomobilin park edildiyi yerə insanları yönəldən ağıllı avtomobil açarı: 11 addım (şəkillərlə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
İ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ı
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ı
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ı
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ı
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
Addım 7: Avadanlıq Quraşdırması
Addım 8: Adobe Illustrator -da elektronika mənzil dizaynı
Addım 9: Karton Prototipi
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
Bu ilkin prototip idi. Nəhayət parçalardan birinə bir şarj cihazına qoşulmaq üçün bir kvadrat çuxur əlavə edildi.
Tövsiyə:
İnsanları, Avtomobilləri və s. Algılayabilen Raspberry Pi DIY Ağıllı Qapı Zəngi: 5 addım
İnsanları, Avtomobilləri və s. Algılayabilen Raspberry Pi DIY Ağıllı Qapı Zəngi: Bu steampunk temalı dizayn, DIY ağıllı evimizin qalan hissəsi ilə ünsiyyət qurmaq üçün ev köməkçisi və çox otaqlı səs sistemimizlə birləşir. Nest və ya digər rəqiblərdən biri) öz ağıllı qapı qurdum
DIY Ağıllı Robot İzləmə Avtomobil Kitləri Avtomobil Fotosensitivliyi İzləyir: 7 addım
DIY Ağıllı Robot İzləmə Avtomobil Kitləri Avtomobil Fotosensitivliyi: SINONING ROBOT tərəfindən Dizaynı izləyən robot avtomobili satın ala bilərsiniz TheoryLM393 çipi iki fotorezistoru müqayisə edin, BEYAZ bir tərəfli fotorezistor LED olduqda motorun tərəfi dərhal dayanır, motorun digər tərəfi dönmək, belə ki
Bluetooth Uzaqdan İdarə Edilən İşıq Açarı - Gücləndirmə. İşıq Açarı Hələ İşləyir, Əlavə Yazı yoxdur.: 9 Addım (Şəkillərlə)
Bluetooth Uzaqdan İdarə Edilən İşıq Açarı - Gücləndirmə. İşıq Açarı Hələ İşləyir, Əlavə Yazı yoxdur .: 25 Noyabr 2017 -ni yeniləyin - Yükün kilovatını idarə edə bilən bu layihənin Yüksək Güclü bir versiyası üçün BLE Nəzarətini Yüksək Güclü Yüklərə Baxın - Əlavə Kablolama Lazım deyil Yeniləmə 15 Noyabr 2017 - Bəzi BLE lövhələri / proqram yığınları
Tokat Açarı: Sadə, Lehimsiz Toxunma Açarı: 7 addım
Tokat Anahtarı: Sadə, Lehimsiz Toxunma Anahtarı: Tokat Açarı, Makey Makey və Scratch ilə kompüter oyunlarına fiziki oyun daxil etmək üçün Explode Controller layihəm üçün nəzərdə tutulmuş sadə müqavimət toxunma açarıdır. Layihənin toxunma açarına ehtiyacı var idi: möhkəm, çırpıla bilən
GIMP -dən istifadə edərək insanları/insanları/heyvanları/robotları həqiqətən sərin/parlaq bir istilik görmə qabiliyyətinə (seçdiyiniz rəng) bənzətməyin həqiqətən sadə/asan/çətin olmayan yolu: 4 addım
GIMP -dən istifadə edərək İnsanları/İnsanları/Heyvanları/Robotları Həqiqətən Sərin/Parlaq İstilik Görmə Sahəsinə (Seçdiyiniz Rəngə) bənzətməyin Həqiqətən Sadə/Asan/Qeyri -Mürəkkəb Yolu: Oxuyun … başlığını oxuyun