Spisu treści:
- Krok 1: Szkic papierowy
- Krok 2: Lista sprzętu
- Krok 3: Projekt obwodu
- Krok 4: Połączenie sprzętowe
- Krok 5: Projektowanie oprogramowania
- Krok 6: Debuguj na tablicy prototypowej
- Krok 7: Montaż sprzętu
- Krok 8: Projekt obudowy elektroniki w programie Adobe Illustrator
- Krok 9: Prototyp kartonu
- Krok 10: Prototyp sklejki brzozowej
Wideo: FinduCar: inteligentny kluczyk samochodowy prowadzący ludzi do miejsca zaparkowania samochodu: 11 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Aby rozwiązać powyższe problemy, w ramach tego projektu proponuje się opracowanie inteligentnego kluczyka do samochodu, który mógłby kierować ludzi do miejsca, w którym zaparkowali samochód. A mój plan to zintegrowanie GPS z kluczykiem samochodowym. Nie ma potrzeby korzystania z aplikacji na smartfona do śledzenia samochodu, wszystkie wskazówki pojawią się tylko na kluczyku samochodowym.
Krok 1: Szkic papierowy
Gdy ludzie naciskają przycisk, aby zablokować samochód, informacje o lokalizacji mogą być automatycznie rejestrowane w mikrokontrolerze. Następnie, gdy ludzie zaczynają nawigować do samochodu, zapalają się różne diody LED, aby skierować się do pozycji samochodu, a częstotliwość migania pokazuje odległość do samochodu. Mogą łatwo śledzić migającą diodę LED i szybko znaleźć samochód.
Krok 2: Lista sprzętu
To są komponenty użyte w tym projekcie. Niektóre pochodzą z zestawów cząstek (płytka do krojenia chleba, przycisk, nagłówki), inne są kupowane na oficjalnej stronie internetowej Adafruit (Adafruit Feather M0, moduł Adafruit Ultimate GPS, bateria Lpoly i bateria monetowa) oraz Amazon (pierścień NeoPixel - 12 RGB LED).
Krok 3: Projekt obwodu
Neopixel_LED jest podłączony do PIN 6 Feather M0
Button_Unlock jest połączony z PIN 12 Feather M0
Button_Lock jest połączony z PIN 13 Feather M0
Krok 4: Połączenie sprzętowe
Przylutuj nagłówki za pomocą Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Ułóż dwie deski razem. GPS FeatherWing podłącza się bezpośrednio do płyty Feather M0 bez żadnych dodatkowych przewodów.
Krok 5: Projektowanie oprogramowania
Komponenty testowe
Przeczytaj FIX
pusta konfiguracja () {
Serial.println("Test echa GPS"); Serial.początek(9600); Serial1.początek(9600); // domyślna prędkość NMEA GPS }
pusta pętla () {
if (Serial.available()) { char c = Serial.read(); Serial1.zapis(c); } if (Serial1.available()) { char c = Serial1.read(); Serial.zapis(c); } }
Migający pierścień LED
Zobacz przykłady Adafruit NeoPixel.
Funkcje obliczania GPS
Oblicz azymut
// Oblicz azymut
podwójny azymut(podwójny łat_a, podwójny lon_a, podwójny łat_b, podwójny lon_b) {
podwójne 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; powrót d; }
Oblicz czas na zegarze LED, który jest również kierunkiem pojazdu
// Oblicz czas na zegarze LED
int led_time (podwójny kąt){
flaga int = 0; if (kąt = 15) { kąt_czas = kąt_czas + 1; } if (flaga == 1){ kąt_czas = 12 - kąt_czas; } zwróć kąt_czasu; }
Oblicz odległość między osobą a jej pojazdem
// Oblicz odległość
podwójna odległość(podwójna długość_a, podwójna długość_a, podwójna długość_b, podwójna długość_b) {
podwójny EARTH_RADIUS = 6378137,0; podwójny radLat1 = (lat_a * PI / 180,0); podwójny radLat2 = (lat_b * PI / 180,0); podwójne a = radLat1 - radLat2; podwójne 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 * PROMIEŃ_ZIEMI / 10000000; zwroty; }
Funkcje wyświetlacza LED
Zapalają się diody LED w kółku pokazujące, że zaczyna nawigować
// Podświetlenie pierścienia LED jeden po drugim pokazuje, że rozpoczyna się nawigacja
void colorWipe(uint32_t c, uint8_t czekaj) {
for(uint16_t i=0; i strip.setPixelColor(i, c); strip.show(); delay(wait); } }
Uzyskaj częstotliwość LED na podstawie odległości
// Uzyskaj częstotliwość LED
częstotliwość int (podwójna odległość){
int f = (int)odległość * 20; powrót f; }
Migaj określoną diodę LED wskazującą kierunek samochodu;
//Wyświetlacz na LED
pasek.wyczyść();
strip.pokaż(); opóźnienie(częstotliwość(car_person_distance)); // opóźnienie(500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.pokaż(); opóźnienie(częstotliwość(car_person_distance)); // opóźnienie(500);
//Wyłącz diodę LED
if (flaga_przycisku == 1 && odległość_osoby_samochodu < 5.0){ flaga_przycisku = 0; led_flaga = 1; pasek.wyczyść(); strip.pokaż(); }
Główny
#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 fałszywe
Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel pasek = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Przycisk button_lock(Button_Lock_PIN); Przycisk button_unlock(Button_Unlock_PIN); int flaga_przycisku = 0; int flaga_led = 1; uint32_t timer = millis(); podwójny samochód_lat, samochód_lon; podwójny samochód_osoba_odległość; podwójny kierunek_ruchu; podwójny samochód_azymut; podwójny samochód_osoba_kąt; int kąt_czas;
pusta konfiguracja () {
Serial.początek(115200); // Serial1.begin(9600); GPS.początek (9600); // domyślna transmisja NMEA GPS strip.begin(); // odkomentuj tę linię, aby włączyć RMC (zalecane minimum) i GGA (stałe dane), w tym wysokość GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // Ustaw częstotliwość aktualizacji GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // Częstotliwość aktualizacji 1 Hz // Żądaj aktualizacji statusu anteny, skomentuj, aby zachować spokój // GPS.sendCommand(PGCMD_ANTENNA); opóźnienie(1000);}
void loop() {// if (Serial.available()) {
// char c = Serial.read(); // Serial1.write(c); // } // if (Serial1.available()) { char c = GPS.read(); if (GPSECHO) if (c) Serial.print(c); // jeśli zdanie zostanie odebrane, możemy sprawdzić sumę kontrolną, przeanalizować ją… if (GPS.newNMEAreceived()) { // trudną rzeczą jest to, że jeśli wydrukujemy zdanie lub dane NMEA // nie słuchamy i łapanie innych zdań! // więc bądź bardzo ostrożny używając OUTPUT_ALLDATA i próbując wydrukować dane Serial.println(GPS.lastNMEA()); // ustawia to również flagę newNMEAreceived() na false if (!GPS.parse(GPS.lastNMEA())) // ustawia to również flagę newNMEAreceived() na false return; // możemy nie przetworzyć zdania, w takim przypadku powinniśmy po prostu poczekać na następne } // jeśli millis() lub timer zawija, po prostu je zresetujemy if (timer > millis()) timer = millis(); if (millis() - timer > 2000) { timer = millis(); // zresetuj licznik Serial.print("\nTime: "); Serial.print(GPS.godzina, DEC); Serial.print(':'); Serial.print(GPS.minuta, DEC); Serial.print(':'); Serial.print(GPS.sekundy, DEC); Serial.print('.'); Serial.println(GPS.milisekundy); Serial.print("Data: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.miesiąc, grudzień); Serial.print("/20"); Serial.println(GPS.rok, grudzień); Serial.print("Poprawka: "); Serial.print((int)GPS.fix); Serial.print("jakość:"); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Lokalizacja: "); Serial.print(GPS.szerokość, 4); druk.seryjny(GPS.lat); Serial.print(", "); Serial.print(GPS.długość, 4); Serial.println(GPS.lon); Serial.print("Lokalizacja (w stopniach, współpracuje z Mapami Google): "); Serial.print(GPS.latitudeDegrees, 4); Serial.print(", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print("Prędkość (węzły): "); Serial.println(prędkość. GPS); Serial.print("Kąt: "); Serial.println(kąt. GPS); Serial.print("Wysokość: "); Serial.println(GPS.wysokość); Serial.print("Satelity: "); Serial.println((int)GPS.satelity); // Zapisz GPS pojazdu if (button_lock.read()) { car_lat = GPS.latitudeDegrees; samochód_lon = GPS.długośćStopnie; //dla debugowania Serial.print("carLatitude: "); Serial.println(samochód_lat); Serial.print("carLongitude: "); Serial.println(samochód_lon); } // Rozpocznij wyszukiwanie samochodu if (button_flag == 0){ button_flag = button_unlock.read(); } if(button_flag == 1 && led_flag == 1){ colorWipe(strip. Color(0, 255, 0), 500); led_flaga = 0; } if (button_flag == 1) { car_person_distance = distance(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //Oblicz odległość //car_person_distance = distance(100.0005, 100.0005, 100.0, 100.0); //dla debugowania Serial.println(car_person_distance); move_direction = GPS.angle;//Zapisz kierunek ruchu (kąt) //move_direction = 100.0; // Zapisz Azymut(kąt) car_azimuth = azymut(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //azymut_samochodu = azymut(100.0005, 100.0005, 100.0, 100.0); // Oblicz czas na zegarze LED car_person_angle = car_azimuth - move_direction; angle_time = led_time(car_person_angle); //Wyświetlacz na pasku LED.clear(); strip.pokaż(); // opóźnienie(częstotliwość(car_person_distance)); opóźnienie (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.pokaż(); // opóźnienie(częstotliwość(car_person_distance)); opóźnienie (500); //Wyłącz diodę LED, jeśli (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_flaga = 1; pasek.wyczyść(); strip.pokaż(); } } } // } } }
Krok 6: Debuguj na tablicy prototypowej
Krok 7: Montaż sprzętu
Krok 8: Projekt obudowy elektroniki w programie Adobe Illustrator
Krok 9: Prototyp kartonu
Ten krok służy do potwierdzenia rozmiaru obudowy i każdego elementu modelu, upewniając się, że rozmiar pudełka, położenie przycisku i położenie diody LED pasują do zmontowanych elementów elektronicznych.
Krok 10: Prototyp sklejki brzozowej
To był pierwszy prototyp. Ostatecznie do jednego z kawałków dodano kwadratowy otwór do podłączenia ładowarki.
Zalecana:
Raspberry Pi DIY Inteligentny dzwonek do drzwi, który wykrywa ludzi, samochody itp.: 5 kroków
Inteligentny dzwonek Raspberry Pi DIY, który może wykrywać ludzi, samochody itp.: Ten projekt w stylu steampunk integruje się z asystentem domowym i naszym wielopokojowym systemem audio, aby komunikować się z resztą naszego inteligentnego domu DIY.Zamiast kupować dzwonek do drzwi (lub Nest lub jeden z innych konkurentów) Zbudowałem własne inteligentne drzwi
AI w LEGO EV3 Robot prowadzący labirynt: 13 kroków
AI w LEGO EV3 Maze-Driving Robot: To prosty, autonomiczny robot z pewną sztuczną inteligencją. Jest przeznaczony do eksploracji labiryntu, a po umieszczeniu z powrotem przy wejściu, do przejazdu do wyjścia i uniknięcia ślepych zaułków. Jest o wiele bardziej skomplikowany niż mój poprzedni projekt, ale
Niedrogi inteligentny dom - sterowanie z dowolnego miejsca na świecie: 6 kroków
Niski koszt inteligentnego domu - sterowanie z dowolnego miejsca na świecie: AboutW dzisiejszych czasach oboje rodzice pracują nad zapewnieniem komfortowego życia rodzinie. Tak więc w naszym domu mamy wiele urządzeń RTV, takich jak grzałka, klimatyzacja, pralka itp. Po powrocie do domu powinni czuć się bardzo komfortowo między
Jak złożyć DIY Samochodowy Zestaw Samochodowy Solarny: 4 Kroki
Jak złożyć zestaw samochodzików solarnych DIY: Chcesz nauczyć swoje dziecko energii odnawialnej? Zapomnij o targach naukowych, jest to tani zestaw zabawek na baterie słoneczne, który możesz kupić za mniej niż 5 $ i nigdy nie wymaga baterii do zabawy. Za tę samą kwotę możesz kupić zbudowany model, ale teraz gdzie jest f
Kluczyk! Urządzenie, które sprawi, że nie zgubisz kluczy!: 3 kroki (ze zdjęciami)
Kluczyk! Urządzenie, które sprawi, że nie zgubisz kluczy!: To urządzenie pomoże Ci nie zgubić kluczy! Jeśli jesteś taki jak ja, to po powrocie z pracy do domu od razu po otwarciu drzwi gubisz klucze i czekasz do następnego dnia, zanim będziesz musiał ich szukać. Tak, możesz mieć