İçindekiler:
- Adım 1: Kağıt Eskiz
- 2. Adım: Donanım Listesi
- Adım 3: Devre Tasarımı
- Adım 4: Donanım Bağlantısı
- Adım 5: Yazılım Tasarımı
- 6. Adım: Breadboard'da Hata Ayıklama
- Adım 7: Donanım Montajı
- Adım 8: Adobe Illustrator'da Elektronik Muhafaza Tasarımı
- Adım 9: Karton Prototip
- Adım 10: Huş Kontrplak Prototipi
- Adım 11: Nihai Montaj Prototipi
Video: FinduCar: İnsanları Aracın Park Ettiği Yere Yönlendiren Akıllı Araba Anahtarı: 11 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
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
İ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
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ı
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ı
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ı
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
Adım 7: Donanım Montajı
Adım 8: Adobe Illustrator'da Elektronik Muhafaza Tasarımı
Adım 9: 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
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:
Arduino Araba Geri Geri Park Uyarı Sistemi - Adım Adım: 4 Adım
Arduino Araba Geri Geri Park Uyarı Sistemi | Adım Adım: Bu projede Arduino UNO ve HC-SR04 Ultrasonik Sensör kullanarak basit bir Arduino Araba Geri Park Sensörü Devresi tasarlayacağım. Bu Arduino tabanlı Araba Ters uyarı sistemi, Otonom Navigasyon, Robot Mesafesi ve diğer menzil r
Raspberry Pi İnsanları, Arabaları vb. Algılayabilen DIY Akıllı Kapı Zili: 5 Adım
İnsanları, Arabaları vb. Algılayabilen Raspberry Pi DIY Akıllı Kapı Zili: Bu steampunk temalı tasarım, DIY akıllı evimizin geri kalanıyla iletişim kurmak için ev asistanı ve çok odalı ses sistemimizle bütünleşir. Bir Zil Kapı Zili (veya Yuva veya diğer rakiplerden biri) Kendi akıllı kapımızı yaptım
Arduino Park Asistanı - Arabanızı Her Seferinde Doğru Yere Park Edin: 5 Adım (Resimlerle)
Arduino Park Asistanı - Arabanızı Her Zaman Doğru Yere Park Edin: Bu projede size bir Arudino kullanarak kendi park asistanınızı nasıl kuracağınızı göstereceğim. Bu park asistanı, aracınıza olan mesafeyi ölçer ve bir LCD ekran okuması ve bir LED kullanarak aracınızı doğru yere park etmeniz için size rehberlik eder
GIMP Kullanarak İnsanları/insanları/hayvanları/robotları Gerçekten Harika/parlak Isı Görüşüne Sahip (Seçtiğiniz Renk) Görünmeleri İçin Gerçekten Basit/Kolay/Karmaşık Olmayan Bir Yol: 4 Adım
GIMP Kullanarak İnsanları/insanları/hayvanları/robotları Gerçekten Harika/parlak Isı Görüşüne Sahip (Seçtiğiniz Renk) Görünmeleri İçin Gerçekten Basit/Kolay/Karmaşık Olmayan Bir Yol: Oku…başlığı
Her Yere Gidebilen Uzak Araba: 6 Adım
Her Yere Gidebilen Uzak Araba: Suya, karaya ve daha birçok yere istediğiniz yere gidebilen bir araba! Bu arabayı yapmak için ihtiyacınız olacak şeyler: - 1. arka tekerlekleri ve önden dönen motoru olan eski bir araba 2. 2 adet 9 voltluk pil 3.2 veya 1