Daftar Isi:

FinduCar: Kunci Mobil Pintar Memandu Orang Ke Tempat Parkir Mobil: 11 Langkah (dengan Gambar)
FinduCar: Kunci Mobil Pintar Memandu Orang Ke Tempat Parkir Mobil: 11 Langkah (dengan Gambar)

Video: FinduCar: Kunci Mobil Pintar Memandu Orang Ke Tempat Parkir Mobil: 11 Langkah (dengan Gambar)

Video: FinduCar: Kunci Mobil Pintar Memandu Orang Ke Tempat Parkir Mobil: 11 Langkah (dengan Gambar)
Video: Угрюм-река (1969) (1 серия) фильм 2024, November
Anonim
FinduCar: Kunci Mobil Pintar yang Memandu Orang ke Tempat Mobil Diparkir
FinduCar: Kunci Mobil Pintar yang Memandu Orang ke Tempat Mobil Diparkir

Untuk mengatasi masalah di atas, proyek ini mengusulkan untuk mengembangkan kunci mobil pintar yang dapat mengarahkan orang ke tempat mereka memarkir mobil. Dan rencana saya adalah mengintegrasikan GPS ke dalam kunci mobil. Tidak perlu menggunakan aplikasi smartphone untuk melacak mobil, semua panduan hanya akan ditampilkan di kunci mobil.

Langkah 1: Sketsa Kertas

Sketsa Kertas
Sketsa Kertas

Ketika orang menekan tombol untuk mengunci mobil, informasi lokasi dapat direkam di mikrokontroler secara otomatis. Kemudian, ketika orang mulai menavigasi ke mobil, LED yang berbeda menyala untuk mengarahkan ke posisi mobil dan frekuensi berkedip menunjukkan jarak ke mobil. Mereka dapat dengan mudah mengikuti LED yang berkedip dan dengan cepat menemukan mobil.

Langkah 2: Daftar Perangkat Keras

Daftar Perangkat Keras
Daftar Perangkat Keras

Ini adalah komponen yang digunakan dalam proyek ini. Beberapa dari kit partikel (papan tempat memotong roti, tombol, header), yang lain dibeli dari situs web resmi Adafruit (Adafruit Feather M0, modul Adafruit Ultimate GPS, Baterai Lpoly dan Baterai Sel Koin) dan Amazon (NeoPixel Ring - 12 LED RGB).

Langkah 3: Desain Sirkuit

Desain Sirkuit
Desain Sirkuit

Neopixel_LED terhubung ke PIN 6 dari Feather M0

Button_Unlock terhubung ke PIN 12 Feather M0

Button_Lock terhubung ke PIN 13 dari Feather M0

Langkah 4: Koneksi Perangkat Keras

Koneksi Perangkat Keras
Koneksi Perangkat Keras
Koneksi Perangkat Keras
Koneksi Perangkat Keras
Koneksi Perangkat Keras
Koneksi Perangkat Keras

Solder header dengan Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing. Tumpuk kedua papan bersama-sama. GPS FeatherWing terhubung langsung ke papan Feather M0 Anda tanpa kabel lagi.

Langkah 5: Desain Perangkat Lunak

Desain perangkat lunak
Desain perangkat lunak

Komponen Uji

Baca FIX

batalkan pengaturan() {

Serial.println("Tes gema GPS"); Serial.begin(9600); Serial1.begin(9600); // default NMEA GPS baud }

lingkaran kosong() {

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

Cincin LED Berkedip

Lihat Contoh Adafruit NeoPixel.

Fungsi Perhitungan GPS

Hitung Azimuth

// Hitung Azimuth

double azimuth(double lat_a, double lon_a, double lat_b, double lon_b) {

ganda 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 = kuadrat(1-d*d); d = cos(lat_b)*sin(lon_b-lon_a)/d; d = asin(d)*180/PI; kembali d; }

Hitung waktu pada jam LED, yang juga merupakan arah kendaraan

// Hitung waktu pada jam LED

int led_time(sudut ganda){

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

Hitung jarak antara orang dan kendaraannya

// Hitung Jarak

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

ganda EARTH_RADIUS = 6378137.0; double radLat1 = (lat_a * PI / 180,0); double radLat2 = (lat_b * PI / 180,0); ganda a = radLat1 - radLat2; double b = (lon_a - lon_b) * PI / 180,0; double s = 2 * asin(kuadrat(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2))); s = s * EARTH_RADIUS / 10000000; kembali s; }

Fungsi Tampilan LED

Nyalakan LED dalam lingkaran yang menunjukkan bahwa ia mulai bernavigasi

// Lampu cincin LED satu per satu menunjukkan bahwa navigasi dimulai

void colorWipe(uint32_t c, uint8_t tunggu) {

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

Dapatkan frekuensi LED berdasarkan jarak

// Dapatkan Frekuensi LED

int frekuensi(jarak ganda){

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

Kedipkan LED tertentu yang menunjukkan arah mobil

//Tampilan pada LED

strip.bersih();

strip.tampilkan(); delay(frekuensi(jar_orang_mobil)); // tunda(500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.tampilkan(); delay(frekuensi(jar_orang_mobil)); // tunda(500);

//Nonaktifkan LED

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

Utama

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

Adafruit_GPS GPS(&GPSSerial);Adafruit_NeoPixel strip = Adafruit_NeoPixel(Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Tombol button_lock(Button_Lock_PIN); Tombol button_unlock(Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t timer = milis(); double car_lat, car_lon; jarak_orang_mobil ganda; gerakan_arah ganda; mobil_azimuth ganda; mobil_person_angle ganda; int sudut_waktu;

batalkan pengaturan() {

Serial.begin(115200); // Serial1.begin(9600); GPS.begin(9600); // default NMEA GPS baud strip.begin(); // batalkan komentar pada baris ini untuk mengaktifkan RMC (minimal yang disarankan) dan GGA (memperbaiki data) termasuk ketinggian GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // Setel kecepatan pembaruan GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // Kecepatan pembaruan 1 Hz // Meminta pembaruan tentang status antena, berkomentar untuk tetap diam // GPS.sendCommand(PGCMD_ANTENNA); penundaan(1000);}

void loop() {// if (Serial.available()) {

// char c = Serial.read(); // Serial1.tulis(c); // } // if (Serial1.available()) { char c = GPS.read(); jika (GPSECHO) jika (c) Serial.print(c); // jika sebuah kalimat diterima, kita dapat memeriksa checksum, mengurainya… if (GPS.newNMEAreceived()) { // hal yang rumit di sini adalah jika kita mencetak kalimat NMEA, atau data // kita akhirnya tidak mendengarkan dan menangkap kalimat lain! // jadi berhati-hatilah jika menggunakan OUTPUT_ALLDATA dan mencoba mencetak data Serial.println(GPS.lastNMEA()); // ini juga menyetel flag newNMEAreceived() ke false if (!GPS.parse(GPS.lastNMEA())) // ini juga menyetel flag newNMEAreceived() ke false return; // kita bisa gagal mengurai sebuah kalimat dalam hal ini kita harus menunggu yang lain } // jika millis() atau timer berputar, kita hanya akan meresetnya if (timer > millis()) timer = millis(); if (milis() - pengatur waktu > 2000) { pengatur waktu = milis(); // reset timer Serial.print("\nWaktu: "); Serial.print(GPS.hour, DEC); Serial.print(':'); Serial.print(GPS.minute, DEC); Serial.print(':'); Serial.print(GPS.detik, DEC); Serial.print('.'); Serial.println(GPS.milidetik); Serial.print("Tanggal: "); Serial.print(GPS.day, DEC); Serial.print('/'); Serial.print(GPS.bulan, DES); Serial.print("/20"); Serial.println(GPS.year, DEC); Serial.print("Perbaiki: "); Serial.print((int)GPS.fix); Serial.print("kualitas: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Lokasi: "); Serial.print(GPS.latitude, 4); Serial.print(GPS.lat); Serial.print(", "); Serial.print(GPS.longitude, 4); Serial.println(GPS.lon); Serial.print("Lokasi (dalam derajat, bekerja dengan Google Maps): "); Serial.print(GPS.latitudeDegrees, 4); Serial.print(", "); Serial.println(GPS.longitudeDegrees, 4); Serial.print("Kecepatan (knot): "); 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 kendaraan jika (button_lock.read()) { car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; //untuk debug Serial.print("carLatitude: "); Serial.println(car_lat); Serial.print("Bujur mobil: "); Serial.println(mobil_lon); } // Mulai cari mobil 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); //Menghitung jarak //car_person_distance = distance(100.0005, 100.0005, 100.0, 100.0); //untuk debug Serial.println(jar_orang_mobil); move_direction = GPS.angle;//Rekam arah bergerak(angle) //move_direction = 100.0; // Catat Azimuth(angle) car_azimuth = azimuth(GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); //car_azimuth = azimuth(100.0005, 100.0005, 100.0, 100.0); // Hitung waktu pada jam LED car_person_angle = car_azimuth - move_direction; angle_time = led_time(sudut_orang_mobil); //Tampilan pada strip LED.clear(); strip.tampilkan(); // delay(frekuensi(jarak_orang_mobil)); penundaan (500); strip.setPixelColor(angle_time, strip. Color(0, 0, 255)); strip.tampilkan(); // delay(frekuensi(jarak_orang_mobil)); penundaan (500); //Nonaktifkan LED if (button_flag == 1 && car_person_distance < 5.0){ button_flag = 0; led_flag = 1; strip.bersih(); strip.tampilkan(); } } } // } } }

Langkah 6: Debug di Breadboard

Debug di papan tempat memotong roti
Debug di papan tempat memotong roti
Debug di papan tempat memotong roti
Debug di papan tempat memotong roti
Debug di papan tempat memotong roti
Debug di papan tempat memotong roti

Langkah 7: Perakitan Perangkat Keras

Perakitan Perangkat Keras
Perakitan Perangkat Keras
Perakitan Perangkat Keras
Perakitan Perangkat Keras
Perakitan Perangkat Keras
Perakitan Perangkat Keras

Langkah 8: Desain Perumahan Elektronik di Adobe Illustrator

Desain Perumahan Elektronik di Adobe Illustrator
Desain Perumahan Elektronik di Adobe Illustrator

Langkah 9: Prototipe Karton

Prototipe Karton
Prototipe Karton
Prototipe Karton
Prototipe Karton

Langkah ini digunakan untuk mengkonfirmasi ukuran rumah dan setiap bagian dari model, memastikan ukuran kotak, dan posisi tombol, dan posisi LED sesuai dengan komponen elektronik yang dirakit.

Langkah 10: Prototipe Kayu Lapis Birch

Prototipe Kayu Lapis Birch
Prototipe Kayu Lapis Birch
Prototipe Kayu Lapis Birch
Prototipe Kayu Lapis Birch

Ini adalah prototipe awal. Lubang persegi untuk mencolokkan pengisi daya akhirnya ditambahkan ke salah satu bagian.

Direkomendasikan: