Съдържание:

FinduCar: ключ за интелигентна кола, който води хората до мястото, където е паркирана колата: 11 стъпки (със снимки)
FinduCar: ключ за интелигентна кола, който води хората до мястото, където е паркирана колата: 11 стъпки (със снимки)

Видео: FinduCar: ключ за интелигентна кола, който води хората до мястото, където е паркирана колата: 11 стъпки (със снимки)

Видео: FinduCar: ключ за интелигентна кола, който води хората до мястото, където е паркирана колата: 11 стъпки (със снимки)
Видео: 30 товаров для автомобиля с Алиэкспресс, автотовары №22 2024, Юли
Anonim
FinduCar: интелигентен ключ за кола, който води хората до мястото, където е паркирана колата
FinduCar: интелигентен ключ за кола, който води хората до мястото, където е паркирана колата

За да се разрешат горепосочените проблеми, този проект предлага да се разработи интелигентен ключ за кола, който да насочва хората до мястото, където са паркирали колата. И моят план е да интегрирам GPS в ключа на колата. Няма нужда да използвате приложението за смартфон за проследяване на колата, всички указания ще се показват само на ключа на колата.

Стъпка 1: Хартиена скица

Хартиена скица
Хартиена скица

Когато хората натиснат бутона, за да заключат колата, информацията за местоположението може да бъде записана автоматично в микроконтролера. След това, когато хората започнат да се ориентират към колата, различният светодиод светва, за да насочи към позицията на колата и мигащата честота показва разстоянието до колата. Те могат лесно да следват мигащия светодиод и бързо да намерят колата.

Стъпка 2: Списък на хардуера

Списък на хардуера
Списък на хардуера

Това са компонентите, използвани в този проект. Някои от тях са от комплектите за частици (макет, бутон, заглавки), други са закупени от официалния уебсайт на Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS модул, Lpoly батерия и Coin Cell батерия) и Amazon (NeoPixel Ring - 12 RGB LED).

Стъпка 3: Дизайн на верига

Дизайн на вериги
Дизайн на вериги

Neopixel_LED е свързан с PIN 6 на Feather M0

Button_Unlock е свързан с PIN 12 на Feather M0

Button_Lock е свързан с PIN 13 на Feather M0

Стъпка 4: Хардуерна връзка

Хардуерна връзка
Хардуерна връзка
Хардуерна връзка
Хардуерна връзка
Хардуерна връзка
Хардуерна връзка

Запоявайте хедерите с пера Adafruit M0, Adafruit Ultimate GPS Featherwing. Подредете двете дъски заедно. GPS FeatherWing се включва директно във вашата платка Feather M0 без повече кабели.

Стъпка 5: Проектиране на софтуер

Софтуерен дизайн
Софтуерен дизайн

Тестови компоненти

Прочетете КОРЕКС

void setup () {

Serial.println ("GPS ехо тест"); Serial.begin (9600); Serial1.begin (9600); // по подразбиране NMEA GPS бод}

void loop () {

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

Мигащ LED пръстен

Вижте Примери за Adapruit NeoPixel.

Функции за изчисляване на GPS

Изчислете азимута

// Изчисляване на азимута

двоен азимут (двоен lat_a, двоен lon_a, двоен lat_b, двоен lon_b) {

двойно 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 = азин (d)*180/PI; връщане d; }

Изчислете времето на LED часовника, което е и посоката на превозното средство

// Изчисляване на времето на LED часовника

int led_time (двоен ъгъл) {

int флаг = 0; if (ъгъл = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } ъгъл на връщане_ време; }

Изчислете разстоянието между лицето и неговото превозно средство

// Изчисляване на разстоянието

двойно разстояние (двойно lat_a, двойно lon_a, двойно lat_b, двойно lon_b) {

двойно EARTH_RADIUS = 6378137.0; двоен radLat1 = (lat_a * PI / 180.0); двоен radLat2 = (lat_b * PI / 180.0); двойно a = radLat1 - radLat2; двойно b = (lon_a - lon_b) * PI / 180.0; двойно s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; се завръща; }

Функции на LED дисплея

Запалете светодиоди в кръг, показващи, че той започва да се движи

// LED пръстеновото осветление едно по едно показва, че навигацията започва

void colorWipe (uint32_t c, uint8_t чакане) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); забавяне (изчакване);}}

Вземете светодиодната честота въз основа на разстоянието

// Вземете LED честота

int честота (двойно разстояние) {

int f = (int) разстояние * 20; връщане f; }

Мигайте с определен светодиод, посочващ посоката на колата

// Дисплей на LED

strip.clear ();

strip.show (); забавяне (честота (car_person_distance)); // забавяне (500); strip.setPixelColor (ъгъл_време, strip. Color (0, 0, 255)); strip.show (); забавяне (честота (car_person_distance)); // забавяне (500);

// Деактивиране на светодиода

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

Основен

#include Adafruit_GPS.h #include Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h

#дефинирайте Neopixel_LED_PIN 6

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

#define GPSECHO false

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Бутон button_lock (Button_Lock_PIN); Бутон button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t таймер = millis (); двойна car_lat, car_lon; двойна car_person_distance; двойно move_direction; двоен car_azimuth; двойна car_person_angle; int ъгъл_ време;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.бегин (9600); // по подразбиране NMEA GPS baud strip.begin (); // разкоментирайте този ред, за да включите RMC (препоръчителен минимум) и GGA (фиксиране на данни), включително GPS.sendCommand за надморска височина (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Задайте скоростта на актуализация GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Скорост на актуализация 1 Hz // Изискване на актуализации за състоянието на антената, коментар за мълчание // GPS.sendCommand (PGCMD_ANTENNA); забавяне (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); // ако е получено изречение, можем да проверим контролната сума, да го анализираме … if (GPS.newNMEAreceived ()) {// сложно нещо е тук, ако отпечатаме изречението NMEA или данни // в крайна сметка не слушаме и улавяне на други изречения! // така че бъдете много предпазливи, ако използвате OUTPUT_ALLDATA и се опитвате да отпечатате данни Serial.println (GPS.lastNMEA ()); // това също задава флага newNMEAreceived () на false, ако (! GPS.parse (GPS.lastNMEA ())) // това също задава флага newNMEAreceived () на false return; // можем да пропуснем синтактичния анализ на изречение, в който случай просто трябва да изчакаме друго} // ако millis () или таймерът се завърта, просто ще го нулираме if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // нулиране на таймера Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print ("Дата:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.месец, DEC); Serial.print ("/20"); Serial.println (GPS.година, DEC); Serial.print ("Fix:"); Serial.print ((int) GPS.fix); Serial.print ("качество:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Местоположение:"); Serial.print (GPS. Latitude, 4); Serial.print (GPS.lat); Serial.print (","); Сериен.принт (GPS.дължина, 4); Serial.println (GPS.lon); Serial.print ("Местоположение (в градуси, работи с Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Скорост (възли):"); Serial.println (GPS.speed); Serial.print ("ъгъл:"); Serial.println (GPS.ъгъл); Serial.print ("Надморска височина:"); Serial.println (GPS.вътрешна височина); Serial.print ("Сателити:"); Serial.println ((int) GPS.сателити); // Запазване на GPS на автомобила if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // за отстраняване на грешки Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Започнете да намирате колата, ако (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 = разстояние (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Изчисляване на разстоянието // car_person_distance = разстояние (100.0005, 100.0005, 100.0, 100.0); // за отстраняване на грешки Serial.println (car_person_distance); move_direction = GPS.angle; // Запишете посоката на движение (ъгъл) // move_direction = 100.0; // Записване на азимута (ъгъл) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = азимут (100.0005, 100.0005, 100.0, 100.0); // Изчисляване на времето на LED часовника car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // Показване на LED лента.clear (); strip.show (); // забавяне (честота (car_person_distance)); забавяне (500); strip.setPixelColor (ъгъл_време, strip. Color (0, 0, 255)); strip.show (); // забавяне (честота (car_person_distance)); забавяне (500); // Деактивиране на светодиода if (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Стъпка 6: Отстраняване на грешки в дъската

Отстраняване на грешки в Breadboard
Отстраняване на грешки в Breadboard
Отстраняване на грешки в Breadboard
Отстраняване на грешки в Breadboard
Отстраняване на грешки в Breadboard
Отстраняване на грешки в Breadboard

Стъпка 7: Сглобяване на хардуер

Хардуерен монтаж
Хардуерен монтаж
Хардуерен монтаж
Хардуерен монтаж
Хардуерен монтаж
Хардуерен монтаж

Стъпка 8: Дизайн на корпуси за електроника в Adobe Illustrator

Дизайн на корпуси за електроника в Adobe Illustrator
Дизайн на корпуси за електроника в Adobe Illustrator

Стъпка 9: Прототип от картон

Картонен прототип
Картонен прототип
Картонен прототип
Картонен прототип

Тази стъпка се използва за потвърждаване на размера на корпуса и на всяка част от модела, като се уверите, че размерът на кутията, позицията на бутона и позицията на LED съответстват на сглобените електронни компоненти.

Стъпка 10: Прототип на брезов шперплат

Прототип на брезов шперплат
Прототип на брезов шперплат
Прототип на брезов шперплат
Прототип на брезов шперплат

Това беше първоначалният прототип. Към едно от парчетата накрая беше добавен квадратен отвор за включване в зарядно устройство.

Препоръчано: