Isi kandungan:

FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Letak Kereta: 11 Langkah (dengan Gambar)
FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Letak Kereta: 11 Langkah (dengan Gambar)

Video: FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Letak Kereta: 11 Langkah (dengan Gambar)

Video: FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Letak Kereta: 11 Langkah (dengan Gambar)
Video: 【FULL Version】The First Son In Law EP 1-45 1080P MULTI SUB 2024, Mungkin
Anonim
FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Kereta Diparkir
FinduCar: Kunci Kereta Pintar yang Membimbing Orang ke Tempat Kereta Diparkir

Untuk menyelesaikan masalah di atas, projek ini mencadangkan untuk mengembangkan kunci kereta pintar yang dapat mengarahkan orang ke tempat mereka meletakkan kereta. Dan rancangan saya adalah memasukkan GPS ke dalam kunci kereta. Tidak perlu menggunakan aplikasi telefon pintar untuk mengesan kereta, semua panduan hanya akan ditunjukkan pada kunci kereta.

Langkah 1: Lakaran Kertas

Lakaran Kertas
Lakaran Kertas

Apabila orang menekan butang untuk mengunci kereta, maklumat lokasi dapat direkodkan dalam mikrokontroler secara automatik. Kemudian, ketika orang mula menavigasi ke kereta, LED yang berbeza dinyalakan untuk mengarahkan ke kedudukan kereta dan frekuensi berkelip menunjukkan jarak ke kereta. Mereka dapat mengikuti LED yang berkelip dan mencari kereta dengan cepat.

Langkah 2: Senarai Perkakasan

Senarai Perkakasan
Senarai Perkakasan

Ini adalah komponen yang digunakan dalam projek ini. Sebilangannya dari kit partikel (papan roti, butang, tajuk), yang lain dibeli dari laman web rasmi Adafruit (Adafruit Feather M0, modul GPS Adafruit Ultimate, Bateri Lpoly dan Bateri Sel Coin) dan Amazon (Cincin NeoPixel - LED 12 RGB).

Langkah 3: Reka Bentuk Litar

Reka Bentuk Litar
Reka Bentuk Litar

Neopixel_LED disambungkan ke PIN 6 Feather M0

Butang_Unlock disambungkan ke PIN 12 Feather M0

Button_Lock disambungkan ke PIN 13 Feather M0

Langkah 4: Sambungan Perkakasan

Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan

Selesaikan tajuk dengan Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Susun kedua papan itu bersama-sama. GPS FeatherWing menyambung tepat ke papan Feather M0 anda tanpa wayar lagi.

Langkah 5: Reka Bentuk Perisian

Reka Bentuk Perisian
Reka Bentuk Perisian

Komponen Ujian

Baca FIX

batal persediaan () {

Serial.println ("Ujian echo GPS"); Serial.begin (9600); Bersiri1.begin (9600); // bawaan GPS NMEA lalai}

gelung kosong () {

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

Cincin LED Berkelip

Lihat Contoh Adafruit NeoPixel.

Fungsi Pengiraan GPS

Hitungkan Azimuth

// Hitung Azimuth

azimut ganda (lat_a ganda, lon_a ganda, lat_b ganda, lon_b ganda) {

berganda 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; pulangan d; }

Hitung waktu pada jam LED, yang juga merupakan arah kenderaan

// Hitung masa pada jam LED

int led_time (sudut berganda) {

bendera int = 0; jika (sudut = 15) {angle_time = angle_time + 1; } jika (bendera == 1) {angle_time = 12 - angle_time; } pulangan angle_time; }

Hitung jarak antara orang itu dan kenderaannya

// Hitung Jarak

jarak berganda (double lat_a, double lon_a, double lat_b, double lon_b) {

berganda EARTH_RADIUS = 6378137.0; double radLat1 = (lat_a * PI / 180.0); double radLat2 = (lat_b * PI / 180.0); berganda a = radLat1 - radLat2; berganda 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; pulangan s; }

Fungsi Paparan LED

Nyalakan LED dalam bulatan yang menunjukkan bahawa ia mula menavigasi

// Pencahayaan cincin LED satu persatu menunjukkan bahawa navigasi bermula

void colorWipe (uint32_t c, uint8_t waiting) {

untuk (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); delay (tunggu);}}

Dapatkan frekuensi LED berdasarkan jarak

// Dapatkan Kekerapan LED

frekuensi int (jarak berganda) {

int f = (int) jarak * 20; pulangan f; }

Kelipkan LED tertentu yang menunjukkan arah kereta

// Paparan pada LED

strip.clear ();

strip.show (); kelewatan (kekerapan (jarak_penduduk kereta)); // kelewatan (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); kelewatan (kekerapan (jarak_penduduk kereta)); // kelewatan (500);

// Lumpuhkan LED

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

Utama

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

#tentukan Neopixel_LED_PIN 6

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

#tentukan GPSECHO salah

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Butang_kunci butang (Button_Lock_PIN); Butang_kunci butang (Butang_Unlock_PIN); int button_flag = 0; int led_flag = 1; pemasa uint32_t = millis (); kereta_lat berganda, kereta_lon; kereta_kembara_jarak; dua arah_pindah arah; kereta berganda_azimut; kereta berganda_person_angle; int angle_time;

batal persediaan () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // baud strip lalai NMEA GPS.begin (); // melepaskan garis ini untuk menghidupkan RMC (minimum yang disyorkan) dan GGA (memperbaiki data) termasuk ketinggian GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); // Tetapkan kadar kemas kini GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // Kadar kemas kini 1 Hz // Minta kemas kini mengenai status antena, beri komen untuk berdiam diri // GPS.sendCommand (PGCMD_ANTENNA); kelewatan (1000);}

gelung kosong () {// if (Serial.available ()) {

// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); jika (GPSECHO) jika (c) Serial.print (c); // jika ayat diterima, kita dapat memeriksa checksum, menguraikannya … jika (GPS.newNMEAreceived ()) {// perkara yang sukar di sini adalah jika kita mencetak ayat NMEA, atau data // kita akhirnya tidak mendengar dan menangkap ayat lain! // jadi berhati-hatilah jika menggunakan OUTPUT_ALLDATA dan cuba untuk mencetak data Serial.println (GPS.lastNMEA ()); // ini juga menetapkan benderaNMEAreceived () baru ke false jika (! GPS.parse (GPS.lastNMEA ())) // ini juga menetapkan benderaNMEAreceived () kepada pengembalian palsu; // kita tidak dapat menghuraikan ayat dalam keadaan yang mana kita hanya perlu menunggu yang lain} // jika milis () atau pemasa melilit, kita akan menetapkannya semula jika (timer> millis ()) timer = millis (); if (millis () - pemasa> 2000) {timer = millis (); // tetapkan semula pemasa Serial.print ("\ nWaktu:"); Serial.print (GPS.jam, DEC); Cetakan bersiri (':'); Serial.print (GPS.minute, DEC); Cetakan bersiri (':'); Serial.print (GPS.seconds, DEC); Cetakan bersiri ('.'); Serial.println (GPS.milliseconds); Cetakan bersiri ("Tarikh:"); Serial.print (GPS.day, DEC); Cetakan bersiri ('/'); Serial.print (GPS.month, DEC); Serial.print ("/ 20"); Serial.println (GPS.tahun, DEC); Serial.print ("Betulkan:"); Serial.print ((int) GPS.fix); Serial.print ("kualiti:"); Serial.println ((int) GPS.fixquality); jika (GPS.fix) {Serial.print ("Lokasi:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Cetakan bersiri (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Lokasi (dalam darjah, berfungsi dengan Peta Google):"); Serial.print (GPS.latitudeDegrees, 4); Cetakan bersiri (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Kelajuan (simpulan):"); Serial.println (GPS.speed); Serial.print ("Sudut:"); Serial.println (GPS.angle); Serial.print ("Ketinggian:"); Serial.println (GPS.altitude); Serial.print ("Satelit:"); Serial.println ((int) GPS. satelit); // Simpan GPS kenderaan jika (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // untuk debug Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Mula mencari kereta jika (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; } jika (button_flag == 1) {car_person_distance = jarak (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Hitung jarak // car_person_distance = jarak (100.0005, 100.0005, 100.0, 100.0); // untuk debug Serial.println (car_person_distance); move_direction = GPS.angle; // Catat arah bergerak (sudut) // move_direction = 100.0; // Rakam Azimuth (sudut) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Hitung masa pada jam LED car_person_angle = car_azimuth - move_direction; angle_time = led_time (kereta_person_angle); // Paparan pada jalur LED.clear (); strip.show (); // kelewatan (kekerapan (jarak_penduduk_ kereta)); kelewatan (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // kelewatan (kekerapan (jarak_penduduk kereta)); kelewatan (500); // Lumpuhkan LED jika (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

Langkah 6: Debug di Breadboard

Debug pada Breadboard
Debug pada Breadboard
Debug pada Breadboard
Debug pada Breadboard
Debug pada Breadboard
Debug pada Breadboard

Langkah 7: Pemasangan Perkakasan

Pemasangan Perkakasan
Pemasangan Perkakasan
Pemasangan Perkakasan
Pemasangan Perkakasan
Pemasangan Perkakasan
Pemasangan Perkakasan

Langkah 8: Reka Bentuk Perumahan Elektronik dalam Adobe Illustrator

Reka Bentuk Perumahan Elektronik dalam Adobe Illustrator
Reka Bentuk Perumahan Elektronik dalam Adobe Illustrator

Langkah 9: Prototaip kadbod

Prototaip kadbod
Prototaip kadbod
Prototaip kadbod
Prototaip kadbod

Langkah ini digunakan untuk mengesahkan ukuran perumahan dan setiap bagian model, memastikan ukuran kotak, dan posisi tombol, dan posisi LED sesuai dengan komponen elektronik yang dipasang.

Langkah 10: Prototaip Papan Lapis Birch

Prototaip Papan Lapis Birch
Prototaip Papan Lapis Birch
Prototaip Papan Lapis Birch
Prototaip Papan Lapis Birch

Ini adalah prototaip awal. Lubang persegi untuk memasang pengecas ditambahkan pada salah satu bahagian akhirnya.

Disyorkan: