Daftar Isi:
- Langkah 1: Sketsa Kertas
- Langkah 2: Daftar Perangkat Keras
- Langkah 3: Desain Sirkuit
- Langkah 4: Koneksi Perangkat Keras
- Langkah 5: Desain Perangkat Lunak
- Langkah 6: Debug di Breadboard
- Langkah 7: Perakitan Perangkat Keras
- Langkah 8: Desain Perumahan Elektronik di Adobe Illustrator
- Langkah 9: Prototipe Karton
- Langkah 10: Prototipe Kayu Lapis Birch
Video: FinduCar: Kunci Mobil Pintar Memandu Orang Ke Tempat Parkir Mobil: 11 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
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
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
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
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
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
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
Langkah 7: Perakitan Perangkat Keras
Langkah 8: Desain Perumahan Elektronik di Adobe Illustrator
Langkah 9: 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
Ini adalah prototipe awal. Lubang persegi untuk mencolokkan pengisi daya akhirnya ditambahkan ke salah satu bagian.
Direkomendasikan:
Tempat Sampah Pintar Dengan Mobil: 5 Langkah
Tempat Sampah Pintar Dengan Mobil: Ini adalah tempat sampah pintar dengan sensor ultrasonik, mobil, dan tombol, jadi bergerak maju saat Anda menekannya. Proyek ini terinspirasi oleh https://www.instructables.com/id/DIY-Smart-Dustbin-With-Arduino/ Berikut adalah beberapa bagian yang saya ubah: 4 roda
Pembuatan Mobil Parkir Paralel Otonom Menggunakan Arduino: 10 Langkah (Dengan Gambar)
Pembuatan Mobil Parkir Paralel Otonom Menggunakan Arduino: Dalam parkir otonom, kita perlu membuat algoritma dan sensor posisi sesuai dengan asumsi tertentu. Asumsi kita adalah sebagai berikut dalam proyek ini. Dalam skenario, sisi kiri jalan akan terdiri dari tembok dan area taman. Seperti kamu
Cara Membangun Sensor Parkir untuk Mengatasi Kesulitan Menemukan Tempat Gratis: 12 Langkah
Cara Membangun Sensor Parkir untuk Mengatasi Kesulitan Menemukan Tempat Gratis: Dalam proyek ini kita akan membangun sensor parkir sederhana menggunakan Raspberry Pi. Ternyata setiap pagi saya harus menghadapi pertanyaan ini: apakah HANYA tempat parkir di depan kantor saya sudah diambil? Karena ketika itu benar-benar terjadi, saya harus berkeliling
Tempat Parkir Cerdas Menggunakan Raspberry Pi: 5 Langkah
Tempat Parkir Cerdas Menggunakan Raspberry Pi: Dalam instruksi ini kita akan membuat sistem parkir otomatis yang terhubung ke antarmuka web. Anda akan dapat melihat spot apa yang diambil, memutuskan siapa yang masuk dan siapa yang keluar dan dilengkapi dengan sistem pencahayaan otomatis
Pengingat kunci! Perangkat Yang Membuat Anda Tidak Kehilangan Kunci!: 3 Langkah (dengan Gambar)
Pengingat kunci! Perangkat yang Membuat Anda Tidak Kehilangan Kunci!: Perangkat ini membantu Anda agar tidak kehilangan kunci! Jika Anda seperti saya maka ketika Anda pulang kerja Anda segera kehilangan kunci Anda setelah membuka kunci pintu Anda dan Anda menunggu sampai hari berikutnya tepat sebelum Anda harus pergi untuk mencarinya. Ya, Anda mungkin memiliki