Mundarija:

FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti: 11 qadam (rasmlar bilan)
FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti: 11 qadam (rasmlar bilan)

Video: FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti: 11 qadam (rasmlar bilan)

Video: FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti: 11 qadam (rasmlar bilan)
Video: Белгородская черта. Огонь, Белгородская область / Belgorod trait. Fire, Belgorod region (Russia) 2024, Noyabr
Anonim
FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti
FinduCar: odamlarni mashina turgan joyga yo'naltiruvchi aqlli avtomobil kaliti

Yuqoridagi muammolarni hal qilish uchun ushbu loyiha odamlarni mashinani to'xtagan joyiga yo'naltiradigan aqlli avtomobil kalitini yaratishni taklif qiladi. Mening rejam - GPS kalitini avtomobil kalitiga qo'shish. Avtomobilni kuzatish uchun smartfon ilovasidan foydalanishning hojati yo'q, barcha ko'rsatmalar faqat avtomobil kalitida ko'rsatiladi.

1 -qadam: qog'oz eskiz

Qog'oz eskiz
Qog'oz eskiz

Odamlar mashinani qulflash uchun tugmachani bosganlarida, joylashuv ma'lumoti mikrokontrollerda avtomatik tarzda qayd etilishi mumkin edi. Keyin, odamlar mashinaga borishni boshlaganda, turli xil LEDlar yonadi, ular mashinaning holatiga to'g'ri keladi va miltillovchi chastota mashinaga masofani ko'rsatadi. Ular miltillovchi LEDni osongina kuzatib, mashinani tezda topa oladilar.

2 -qadam: Uskuna ro'yxati

Uskunalar ro'yxati
Uskunalar ro'yxati

Bu loyihada ishlatiladigan komponentlar. Ba'zilar zarrachalar to'plamidan (non paneli, tugma, sarlavhalar), boshqalari Adafruit rasmiy veb -saytidan (Adafruit Feather M0, Adafruit Ultimate GPS moduli, Lpoly Battery and Coin Cell Battery) va Amazon (NeoPixel Ring - 12 RGB LED) dan sotib olinadi.

3 -qadam: O'chirish dizayni

O'chirish dizayni
O'chirish dizayni

Neopixel_LED Feather M0 PIN 6 ga ulangan

Button_Unlock Feather M0 PIN 12 kodiga ulangan

Button_Lock Feather M0 ning PIN -kodi 13 ga ulangan

4 -qadam: Uskuna ulanishi

Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi
Uskuna ulanishi

Sarlavhalarni Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing bilan lehimlang. Ikkita taxtani bir -biriga yopishtiring. GPS FeatherWing Feather M0 kartasiga simsiz ulanadi.

5 -qadam: dasturiy ta'minotni loyihalash

Dasturiy ta'minot dizayni
Dasturiy ta'minot dizayni

Sinov komponentlari

FIX o'qing

bo'sh o'rnatish () {

Serial.println ("GPS echo testi"); Serial.begin (9600); Seriya 1. boshlanishi (9600); // standart NMEA GPS uzatmasi}

void loop () {

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

Blink LED halqasi

Adafruit NeoPixel misollariga qarang.

GPS hisoblash funktsiyalari

Azimutni hisoblang

// Azimutni hisoblang

er -xotin azimut (er -xotin lat_a, juft lon_a, juft lat_b, juft lon_b) {

er -xotin 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 = kvadrat (1-d*d); d = cos (lat_b)*sin (lon_b-lon_a)/d; d = asin (d)*180/PI; qaytish d; }

LED soatidagi vaqtni hisoblang, bu ham avtomobil yo'nalishi

// LED soatidagi vaqtni hisoblang

int led_time (ikki burchakli) {

int bayrog'i = 0; agar (burchak = 15) {burchak_ vaqti = burchak_ vaqti + 1; } agar (bayroq == 1) {burchak_ vaqti = 12 - burchak_ vaqti; } qaytarish burchagi_vaqt; }

Odam va uning mashinasi orasidagi masofani hisoblang

// Masofani hisoblang

er -xotin masofa (er -xotin lat_a, er -xotin uzunlik, er -xotin lat

er -xotin EARTH_RADIUS = 6378137.0; er -xotin radLat1 = (lat_a * PI / 180.0); er -xotin radLat2 = (lat_b * PI / 180.0); er -xotin a = radLat1 - radLat2; er -xotin b = (lon_a - lon_b) * PI / 180.0; er -xotin s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; qaytish s; }

LED displey funktsiyalari

LEDlar aylana bo'ylab yonadi, ular harakatlana boshlaganini ko'rsatadi

// LED halqali yorug'lik birin -ketin navigatsiya boshlanishini ko'rsatadi

void colorWipe (uint32_t c, uint8_t kuting) {

uchun (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); kechiktirish (kutish);}}

LED chastotasini masofaga qarab oling

// LED chastotasini oling

int chastotasi (ikki masofali) {

int f = (int) masofa * 20; qaytish f; }

Mashinaning yo'nalishini ko'rsatadigan LEDni o'chiring

// LED displeyi

strip.clear ();

strip.show (); kechikish (chastota (car_person_distance)); // kechikish (500); strip.setPixelColor (burchak_ vaqti, chiziq. Color (0, 0, 255)); strip.show (); kechikish (chastota (car_person_distance)); // kechikish (500);

// LEDni o'chiring

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

Asosiy

#qo'shish Adafruit_GPS.h #o'z ichiga Adafruit_NeoPixel.h #HardwareSerial.h qo'shish #tugmasini qo'shish.h #matematikani qo'shish

#aniqlang Neopixel_LED_PIN 6

#aniqlang Neopixel_LED_NUM 12 #belgilash tugmasi_Lock_PIN 13 #belgilash tugmasi_Unlock_PIN 12 #aniqlang GPSSerial Serial1

#GPSECHO yolg'onini aniqlang

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Tugma qulfi (Button_Lock_PIN); Tugma tugmachalarini ochish (Button_Unlock_PIN); int tugmasi_flag = 0; int led_flag = 1; uint32_t taymer = millis (); er -xotin car_lat, car_lon; ikki kishilik avtomobil masofasi; ikki tomonlama harakatlanish yo'nalishi; ikki kar_azimut; ikki kishilik avtomobil burchagi; int burchak_ vaqti;

bo'sh o'rnatish () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // standart NMEA GPS baud strip.begin (); // RMC (tavsiya etilgan minimal) va GGA (ma'lumotlarni tuzatish) balandligini, shu jumladan GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) ni yoqish uchun bu qatorga izoh qoldirmang; // GPS.sendCommand yangilanish tezligini o'rnating (PMTK_SET_NMEA_UPDATE_1HZ); // 1 gigagertsli yangilanish tezligi // antenna holati bo'yicha yangilanishlarni so'rang, jim turish uchun izoh qoldiring // GPS.sendCommand (PGCMD_ANTENNA); kechikish (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); // agar jumla qabul qilinsa, biz nazorat summasini tekshirib ko'rishimiz, uni tahlil qilishimiz mumkin … agar (GPS.newNMEAreceived ()) {// bu erda biz NMEA jumlasini yoki ma'lumotni chop etsak // biz eshitmay qolamiz va boshqa jumlalarni toping! // agar OUTPUT_ALLDATA dan foydalansangiz va Serial.println (GPS.lastNMEA ()) ma'lumotlarini chop etishga harakat qilsangiz, juda ehtiyot bo'ling; // bu, shuningdek, yangi! // biz jumlani tahlil qila olmaymiz, bunda boshqasini kutish kerak // // agar milis () yoki taymer aylansa, biz uni faqat sozlaymiz, agar (taymer> millis ()) taymer = millis (); if (millis () - taymer> 2000) {taymer = millis (); // taymerni qayta o'rnatish Serial.print ("\ nTime:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.sekund, DEC); Serial.print ('.'); Serial.println (GPS.millisekundlari); Serial.print ("Sana:"); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.oy, DEC); Serial.print ("/20"); Serial.println (GPS.yil, DEC); Serial.print ("Tuzatish:"); Serial.print ((int) GPS.fix); Serial.print ("sifat:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Manzil:"); Serial.print (GPS.davlat, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS. Uzunlik, 4); Serial.println (GPS.lon); Serial.print ("Joylashuv (darajalarda, Google Xaritalar bilan ishlaydi):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Tezlik (tugunlar):"); Serial.println (GPS tezligi); Serial.print ("Burchak:"); Serial.println (GPS.angle); Serial.print ("Balandlik:"); Serial.println (GPS. balandligi); Serial.print ("Sun'iy yo'ldoshlar:"); Serial.println ((int) GPS.satellites); // Avtomobilning GPS -ni saqlang, agar (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // Serial.print ("carLatitude:") disk raskadrovka uchun; Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (car_lon); } // Mashinani topishni boshlang, agar (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 = masofa (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Masofani hisoblang // car_person_distance = masofa (100.0005, 100.0005, 100.0, 100.0); // disk raskadrovka uchun Serial.println (car_person_distance); move_direction = GPS.angle; // harakatlanuvchi yo'nalishni (burchakni) yozib olish // move_direction = 100.0; // Azimutni yozing (burchak) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimut (100.0005, 100.0005, 100.0, 100.0); // LED soatidagi vaqtni hisoblang car_person_angle = car_azimuth - move_direction; burchak_vaqti = LED_ vaqti (mashina_kishi_burchagi); // LED tasmasidagi displey.clear (); strip.show (); // kechikish (chastota (car_person_distance)); kechikish (500); strip.setPixelColor (burchak_ vaqti, chiziq. Color (0, 0, 255)); strip.show (); // kechikish (chastota (car_person_distance)); kechikish (500); // LEDni o'chiring, agar (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

6 -qadam: Breadboard -da disk raskadrovka

Breadboard -da disk raskadrovka
Breadboard -da disk raskadrovka
Breadboard -da disk raskadrovka
Breadboard -da disk raskadrovka
Breadboard -da disk raskadrovka
Breadboard -da disk raskadrovka

7 -qadam: Uskuna yig'ish

Uskuna yig'ish
Uskuna yig'ish
Uskuna yig'ish
Uskuna yig'ish
Uskuna yig'ish
Uskuna yig'ish

8 -qadam: Adobe Illustrator -da elektron uy -joy dizayni

Adobe Illustrator -da elektron uy -joy dizayni
Adobe Illustrator -da elektron uy -joy dizayni

9 -qadam: karton prototipi

Karton prototipi
Karton prototipi
Karton prototipi
Karton prototipi

Bu qadam korpusning o'lchamini va modelning har bir qismini tasdiqlash uchun ishlatiladi, bunda qutining o'lchami, tugmachaning joylashuvi va LED pozitsiyasi yig'ilgan elektron komponentalarga mos keladi.

10 -qadam: kontrplak kontrplakining prototipi

Birch kontrplak prototipi
Birch kontrplak prototipi
Birch kontrplak prototipi
Birch kontrplak prototipi

Bu dastlabki prototip edi. Oxir -oqibat bo'laklardan biriga zaryadlovchini ulash uchun to'rtburchaklar teshik qo'shildi.

11 -qadam: yakuniy yig'ilish prototipi

Tavsiya: