Mục lục:

FinduCar: Chìa khóa ô tô thông minh Hướng dẫn mọi người đến vị trí đỗ xe: 11 bước (có hình ảnh)
FinduCar: Chìa khóa ô tô thông minh Hướng dẫn mọi người đến vị trí đỗ xe: 11 bước (có hình ảnh)

Video: FinduCar: Chìa khóa ô tô thông minh Hướng dẫn mọi người đến vị trí đỗ xe: 11 bước (có hình ảnh)

Video: FinduCar: Chìa khóa ô tô thông minh Hướng dẫn mọi người đến vị trí đỗ xe: 11 bước (có hình ảnh)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Tháng mười một
Anonim
FinduCar: Chìa khóa ô tô thông minh hướng dẫn mọi người đến nơi đỗ xe
FinduCar: Chìa khóa ô tô thông minh hướng dẫn mọi người đến nơi đỗ xe

Để giải quyết các vấn đề trên, dự án này đề xuất phát triển một chiếc chìa khóa xe thông minh có thể hướng mọi người đến nơi họ đỗ xe. Và kế hoạch của tôi là tích hợp GPS vào chìa khóa ô tô. Không cần sử dụng ứng dụng điện thoại thông minh để theo dõi xe, tất cả các hướng dẫn sẽ chỉ hiển thị trên chìa khóa xe.

Bước 1: Phác thảo giấy

Bản phác thảo giấy
Bản phác thảo giấy

Khi mọi người nhấn nút để khóa xe, thông tin vị trí có thể được tự động ghi lại trong bộ vi điều khiển. Sau đó, khi mọi người bắt đầu điều hướng đến ô tô, đèn LED khác nhau sẽ sáng lên để hướng đến vị trí của ô tô và tần số nhấp nháy hiển thị khoảng cách đến ô tô. Họ có thể dễ dàng theo dõi đèn LED nhấp nháy và nhanh chóng tìm thấy xe.

Bước 2: Danh sách phần cứng

Danh sách phần cứng
Danh sách phần cứng

Đây là những thành phần được sử dụng trong dự án này. Một số là từ bộ dụng cụ hạt (breadboard, nút, tiêu đề), một số khác được mua từ trang web chính thức của Adafruit (Adafruit Feather M0, mô-đun Adafruit Ultimate GPS, Lpoly Battery và Coin Cell Battery) và Amazon (NeoPixel Ring - 12 LED RGB).

Bước 3: Thiết kế mạch

Thiết kế mạch
Thiết kế mạch

Neopixel_LED được kết nối với mã PIN 6 của Feather M0

Button_Unlock được kết nối với mã PIN 12 của Feather M0

Button_Lock được kết nối với mã PIN 13 của Feather M0

Bước 4: Kết nối phần cứng

Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng

Hàn các tiêu đề với Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Chồng hai tấm ván lại với nhau. GPS FeatherWing cắm ngay vào bảng Feather M0 của bạn mà không cần thêm dây.

Bước 5: Thiết kế phần mềm

Thiết kế phần mềm
Thiết kế phần mềm

Các thành phần kiểm tra

Đọc KHẮC PHỤC

void setup () {

Serial.println ("Kiểm tra tiếng vọng GPS"); Serial.begin (9600); Serial1.begin (9600); // baud GPS NMEA mặc định}

void loop () {

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

Vòng LED nhấp nháy

Xem Ví dụ về Adafruit NeoPixel.

Chức năng tính toán GPS

Tính phương vị

// Tính phương vị

góc phương vị kép (vĩ độ kép, vĩ độ kép, vĩ độ kép, vĩ độ kép) {

đôi 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; trả lại d; }

Tính thời gian trên đồng hồ LED, cũng là hướng của xe

// Tính thời gian trên đồng hồ LED

int led_time (góc kép) {

cờ int = 0; if (angle = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } trả về angle_time; }

Tính khoảng cách giữa người đó và xe của anh ta

// Tính khoảng cách

khoảng cách gấp đôi (vĩ độ gấp đôi, vĩ độ gấp đôi, vĩ độ gấp đôi, vĩ độ gấp đôi) {

gấp đôi EARTH_RADIUS = 6378137.0; đôi radLat1 = (lat_a * PI / 180.0); đôi radLat2 = (lat_b * PI / 180.0); nhân đôi a = radLat1 - radLat2; double 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; trả lại s; }

Chức năng màn hình LED

Làm sáng đèn LED trong một vòng tròn cho thấy rằng nó bắt đầu điều hướng

// Đèn LED chiếu sáng từng vòng một cho thấy điều hướng bắt đầu

void colorWipe (uint32_t c, uint8_t wait) {

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

Nhận tần số LED trên cơ sở khoảng cách

// Nhận tần số LED

int tần số (khoảng cách gấp đôi) {

int f = (int) khoảng cách * 20; trả về f; }

Nhấp nháy đèn LED nhất định cho biết hướng của ô tô

// Hiển thị trên đèn LED

dải.clear ();

dải.show (); delay (tần số (xe_người_dùng)); // delay (500); dải.setPixelColor (angle_time, dải. Color (0, 0, 255)); dải.show (); delay (tần số (xe_người_dùng)); // delay (500);

// Tắt đèn LED

if (button_flag == 1 && car_woman_distance <5.0) {button_flag = 0; led_flag = 1; dải.clear (); dải.show (); }

Chủ chốt

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

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel dải = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Nút button_lock (Button_Lock_PIN); Nút button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = millis (); đôi xe_lấp, xe_lông; xe đôi chuyển_đổi kép; xe đôi; xe đôi int angle_time;

void setup () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // mặc định NMEA GPS baud strip.begin (); // bỏ ghi chú dòng này để bật RMC (khuyến nghị tối thiểu) và GGA (sửa dữ liệu) bao gồm cả độ cao GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Đặt tốc độ cập nhật GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Tốc độ cập nhật 1 Hz // Yêu cầu cập nhật trạng thái ăng-ten, bình luận để giữ im lặng // GPS.sendCommand (PGCMD_ANTENNA); trì hoãn (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); // nếu một câu được nhận, chúng ta có thể kiểm tra tổng kiểm tra, phân tích cú pháp nó… if (GPS.newNMEAreceive ()) {// một điều khó khăn ở đây là nếu chúng ta in câu NMEA, hoặc dữ liệu // cuối cùng chúng ta không nghe và bắt câu khác! // vì vậy hãy hết sức cảnh giác nếu sử dụng OUTPUT_ALLDATA và trytng để in ra dữ liệu Serial.println (GPS.lastNMEA ()); // điều này cũng đặt cờ newNMEAreceive () thành false if (! GPS.parse (GPS.lastNMEA ())) // điều này cũng đặt cờ newNMEArenition () thành false return; // chúng ta không thể phân tích cú pháp một câu trong trường hợp đó chúng ta chỉ nên đợi câu khác} // nếu millis () hoặc bộ đếm thời gian kết thúc, chúng ta sẽ chỉ đặt lại nó if (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // đặt lại bộ đếm thời gian 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 ("Ngày:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print ("/ 20"); Serial.println (GPS.year, DEC); Serial.print ("Sửa:"); Serial.print ((int) GPS.fix); Serial.print ("quality:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Vị trí:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Vị trí (tính bằng độ, hoạt động với Google Maps):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Tốc độ (hải lý):"); Serial.println (GPS.speed); Serial.print ("Góc:"); Serial.println (GPS.angle); Serial.print ("Cao độ:"); Serial.println (GPS.altitude); Serial.print ("Vệ tinh:"); Serial.println ((int) GPS.satellites); // Lưu GPS của xe if (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // để gỡ lỗi Serial.print ("carLatitude:"); Serial.println (xe_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Bắt đầu tìm xe if (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (dải. Color (0, 255, 0), 500); led_flag = 0; } if (button_flag == 1) {car_woman_distance = distance (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Tính khoảng cách // car_ person_distance = distance (100.0005, 100.0005, 100.0, 100.0); // để gỡ lỗi Serial.println (car_woman_distance); move_direction = GPS.angle; // Ghi lại hướng di chuyển (góc) // move_direction = 100.0; // Ghi lại phương vị (angle) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Tính thời gian trên đồng hồ LED car_woman_angle = car_azimuth - move_direction; angle_time = led_time (xe_mặt_mặt); // Hiển thị trên LED dải.clear (); dải.show (); // delay (tần số (xe_người_dùng)); chậm trễ (500); dải.setPixelColor (angle_time, dải. Color (0, 0, 255)); dải.show (); // delay (tần số (xe_người_dùng)); chậm trễ (500); // Tắt đèn LED if (button_flag == 1 && car_woman_distance <5.0) {button_flag = 0; led_flag = 1; dải.clear (); dải.show (); }}} //}}}

Bước 6: Gỡ lỗi trên Breadboard

Gỡ lỗi trên Breadboard
Gỡ lỗi trên Breadboard
Gỡ lỗi trên Breadboard
Gỡ lỗi trên Breadboard
Gỡ lỗi trên Breadboard
Gỡ lỗi trên Breadboard

Bước 7: Lắp ráp phần cứng

Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng
Lắp ráp phần cứng

Bước 8: Thiết kế nhà ở điện tử trong Adobe Illustrator

Thiết kế nhà ở điện tử trong Adobe Illustrator
Thiết kế nhà ở điện tử trong Adobe Illustrator

Bước 9: Nguyên mẫu bìa cứng

Nguyên mẫu bìa cứng
Nguyên mẫu bìa cứng
Nguyên mẫu bìa cứng
Nguyên mẫu bìa cứng

Bước này được sử dụng để xác nhận kích thước của vỏ và mọi phần của mô hình, đảm bảo kích thước hộp, vị trí nút và vị trí đèn LED vừa với các linh kiện điện tử đã lắp ráp.

Bước 10: Nguyên mẫu ván ép bạch dương

Nguyên mẫu ván ép bạch dương
Nguyên mẫu ván ép bạch dương
Nguyên mẫu ván ép bạch dương
Nguyên mẫu ván ép bạch dương

Đây là nguyên mẫu ban đầu. Cuối cùng, một lỗ vuông để cắm bộ sạc đã được thêm vào một trong các phần.

Bước 11: Nguyên mẫu lắp ráp cuối cùng

Đề xuất: