İçindekiler:

FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı: 11 Adım (Resimlerle)
FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı: 11 Adım (Resimlerle)

Video: FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı: 11 Adım (Resimlerle)

Video: FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı: 11 Adım (Resimlerle)
Video: Keşmirli Uyardı ''Savaş Bölgesindesin!'' (Keşmir'de Otostop) 🇮🇳 ~537 2024, Kasım
Anonim
FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı
FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı

Bu proje, yukarıdaki sorunları çözmek için insanları arabayı park ettikleri yere yönlendirebilecek bir akıllı araba anahtarı geliştirmeyi önermektedir. Ve planım araba anahtarına bir GPS entegre etmek. Arabayı takip etmek için akıllı telefon uygulamasını kullanmaya gerek yoktur, tüm yönlendirmeler sadece araba anahtarında gösterilir.

Adım 1: Kağıt Eskiz

Kağıt Kroki
Kağıt Kroki

İnsanlar arabayı kilitlemek için düğmeye bastığında, konum bilgisi otomatik olarak mikrodenetleyiciye kaydedilebilir. Daha sonra, insanlar araca gitmeye başladığında, aracın konumuna yönlendirmek için farklı LED yanar ve yanıp sönme frekansı araca olan mesafeyi gösterir. Yanıp sönen LED'i kolayca takip edebilir ve arabayı hızlı bir şekilde bulabilirler.

2. Adım: Donanım Listesi

Donanım Listesi
Donanım Listesi

Bunlar bu projede kullanılan bileşenlerdir. Bazıları parçacık kitlerinden (breadboard, düğme, başlıklar), diğerleri Adafruit resmi web sitesinden (Adafruit Feather M0, Adafruit Ultimate GPS modülü, Lpoly Pil ve Madeni Para Pili) ve Amazon'dan (NeoPixel Ring - 12 RGB LED) satın alınır.

Adım 3: Devre Tasarımı

Devre tasarımı
Devre tasarımı

Neopixel_LED, Feather M0'ın PIN 6'sına bağlı

Button_Unlock, Feather M0'ın PIN 12'sine bağlı

Button_Lock, Feather M0'ın PIN 13'üne bağlı

Adım 4: Donanım Bağlantısı

Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı
Donanım Bağlantısı

Başlıkları Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing ile lehimleyin. İki tahtayı birlikte istifleyin. GPS FeatherWing, daha fazla kablo olmadan Feather M0 kartınıza takılır.

Adım 5: Yazılım Tasarımı

Yazılım Tasarımı
Yazılım Tasarımı

Test Bileşenleri

Bir FIX okuyun

geçersiz kurulum() {

Serial.println("GPS yankı testi"); Seri.başla(9600); Seri1.başlangıç(9600); // varsayılan NMEA GPS baud }

boşluk döngüsü () {

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

Yanıp Sönen LED Halka

Adafruit NeoPixel Örneklerine bakın.

GPS Hesaplama Fonksiyonları

Azimutu hesaplayın

// Azimutu hesapla

çift azimut(çift lat_a, çift lon_a, çift lat_b, çift lon_b) {

çift 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 = günah(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; dönüş d; }

Aynı zamanda aracın yönü olan LED saat üzerindeki zamanı hesaplayın

// LED saatteki zamanı hesapla

int led_time(çift açı){

int bayrak = 0; if (angle = 15) { angle_time = angle_time + 1; } if (bayrak == 1){ angle_time = 12 - angle_time; } açı_zamanını döndür; }

Kişi ve aracı arasındaki mesafeyi hesaplayın

// Mesafeyi Hesapla

çift mesafe(çift lat_a, çift lon_a, çift lat_b, çift lon_b) {

çift EARTH_RADIUS = 6378137.0; çift radLat1 = (lat_a * PI / 180.0); çift radLat2 = (lat_b * PI / 180.0); çift a = radLat1 - radLat2; çift 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; İadeler; }

LED Ekran Fonksiyonları

Gezinmeye başladığını gösteren bir daire içinde LED'leri yak

// LED halka aydınlatma tek tek navigasyonun başladığını gösterir

void colorWipe(uint32_t c, uint8_t bekleyin) {

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

LED frekansını mesafeye göre alın

// LED Frekansını Al

int frekans(çift mesafe){

int f = (int)mesafe * 20; dönüş f; }

Arabanın yönünü gösteren belirli LED'i yanıp sönün

// LED'de göster

strip.clear();

şerit.göster(); gecikme(frekans(araba_kişi_mesafe)); // gecikme(500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255); şerit.göster(); gecikme(frekans(araba_kişi_mesafe)); // gecikme(500);

//LED'i devre dışı bırak

if (button_flag == 1 && car_person_mesafe < 5.0){ button_flag = 0; led_flag = 1; strip.clear(); şerit.göster(); }

Ana

#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 Seri1

#define GPSECHO yanlış

Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Button button_lock(Button_Lock_PIN); Button button_unlock(Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t zamanlayıcı = millis(); çift car_lat, car_lon; çift araba_kişi_mesafesi; çift hareket_yön; çift araba_azimut; double car_person_angle; int açı_zamanı;

geçersiz kurulum() {

Seri.başla(115200); // Seri1.begin(9600); GPS.başlangıç(9600); // varsayılan NMEA GPS baud strip.begin(); // yükseklik GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ) güncelleme hızını ayarlayın; // 1 Hz güncelleme hızı // Anten durumu hakkında güncelleme talep edin, sessiz kalmak için yorum yapın // GPS.sendCommand(PGCMD_ANTENNA); gecikme(1000);}

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

// char c = Seri.read(); // Seri1.write(c); // } // if (Serial1.available()) { char c = GPS.read(); if (GPSECHO) if (c) Serial.print(c); // eğer bir cümle alınırsa, sağlama toplamını kontrol edebilir, onu ayrıştırabiliriz… if (GPS.newNMEAreceived()) { // burada zor olan şey, NMEA cümlesini veya veriyi yazdırıp yazdırmamamızdır // sonunda dinlemez ve diğer cümleleri yakalamak! // OUTPUT_ALLDATA kullanıyorsanız ve verileri yazdırmaya çalışıyorsanız çok dikkatli olun Serial.println(GPS.lastNMEA()); // bu ayrıca newNMEAreceived() bayrağını false if (!GPS.parse(GPS.lastNMEA())) değerine ayarlar // bu ayrıca newNMEArecated() bayrağını false döndürmeye ayarlar; // bir cümleyi ayrıştırmada başarısız olabiliriz, bu durumda başka bir cümle için beklememiz gerekir } // millis() veya zamanlayıcı dolanırsa, onu sıfırlayacağız if (timer > millis()) timer = millis(); if (millis() - zamanlayıcı > 2000) { zamanlayıcı = millis(); // zamanlayıcıyı sıfırla Serial.print("\nZaman: "); Seri.print(GPS.saat, Aralık); Seri.print(':'); Seri.print(GPS.dakika, Aralık); Seri.print(':'); Seri.baskı(GPS.saniye, Aralık); Seri.print('.'); Seri.println(GPS.milisaniye); Serial.print("Tarih: "); Seri.print(GPS.day, Aralık); Seri.print('/'); Seri.print(GPS.ay, Aralık); Seri.print("/20"); Seri.println(GPS.yıl, Aralık); Serial.print("Düzeltme: "); Seri.print((int)GPS.fix); Seri.print(" kalite: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Yer: "); Seri.print(GPS.latitude, 4); Serial.print(GPS.lat); Seri.print(", "); Seri.print(GPS.boylam, 4); Seri.println(GPS.lon); Serial.print("Konum (derece olarak, Google Haritalar ile çalışır): "); Serial.print(GPS.latitudeDegrees, 4); Seri.print(", "); Serial.println(GPS.boylamDereceler, 4); Serial.print("Hız (düğüm): "); Seri.println(GPS.hız); Serial.print("Açı: "); Seri.println(GPS.açı); Serial.print("Yükseklik: "); Serial.println(GPS.altitude); Serial.print("Uydular: "); Serial.println((int)GPS.satellites); // Aracın GPS'ini kaydedin if (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDerece; //hata ayıklamak için Serial.print("carLatitude: "); Serial.println(car_lat); Serial.print("araba Boylam: "); Serial.println(car_lon); } // Arabayı bulmaya başla if (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); //Mesafeyi hesapla //car_person_mesafe = mesafe(100.0005, 100.0005, 100.0, 100.0); //hata ayıklamak için Serial.println(car_person_mesafe); move_direction = GPS.angle;//Hareket yönünü kaydedin(açı) //move_direction = 100.0; // Azimut(açı) kaydedin car_azimut = azimut(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimut = azimut(100.0005, 100.0005, 100.0, 100.0); // LED saatindeki zamanı hesapla car_person_angle = car_azimut - move_direction; angle_time = led_time(car_person_angle); //LED şeridinde göster.clear(); şerit.göster(); // gecikme(frekans(araba_kişi_mesafe)); gecikme(500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255); şerit.göster(); // gecikme(frekans(araba_kişi_mesafe)); gecikme(500); //(button_flag == 1 && car_person_distance < 5.0) ise LED'i devre dışı bırakın{ button_flag = 0; led_flag = 1; strip.clear(); şerit.göster(); } } } // } } }

6. Adım: Breadboard'da Hata Ayıklama

Breadboard'da Hata Ayıklama
Breadboard'da Hata Ayıklama
Breadboard'da Hata Ayıklama
Breadboard'da Hata Ayıklama
Breadboard'da Hata Ayıklama
Breadboard'da Hata Ayıklama

Adım 7: Donanım Montajı

Donanım Montajı
Donanım Montajı
Donanım Montajı
Donanım Montajı
Donanım Montajı
Donanım Montajı

Adım 8: Adobe Illustrator'da Elektronik Muhafaza Tasarımı

Adobe Illustrator'da Elektronik Muhafaza Tasarımı
Adobe Illustrator'da Elektronik Muhafaza Tasarımı

Adım 9: Karton Prototip

karton prototip
karton prototip
karton prototip
karton prototip

Bu adım, kutu boyutunun, düğme konumunun ve LED konumunun monte edilmiş elektronik bileşenlere uyduğundan emin olarak gövdenin boyutunu ve modelin her bir parçasını doğrulamak için kullanılır.

Adım 10: Huş Kontrplak Prototipi

Huş Kontrplak Prototip
Huş Kontrplak Prototip
Huş Kontrplak Prototip
Huş Kontrplak Prototip

Bu ilk prototipti. Son olarak parçalardan birine şarj cihazına takmak için kare bir delik eklendi.

Adım 11: Nihai Montaj Prototipi

Önerilen: