Mundarija:
- 1 -qadam: qog'oz eskiz
- 2 -qadam: Uskuna ro'yxati
- 3 -qadam: O'chirish dizayni
- 4 -qadam: Uskuna ulanishi
- 5 -qadam: dasturiy ta'minotni loyihalash
- 6 -qadam: Breadboard -da disk raskadrovka
- 7 -qadam: Uskuna yig'ish
- 8 -qadam: Adobe Illustrator -da elektron uy -joy dizayni
- 9 -qadam: karton prototipi
- 10 -qadam: kontrplak kontrplakining prototipi
- 11 -qadam: yakuniy yig'ilish prototipi
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
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
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
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
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
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
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
7 -qadam: Uskuna yig'ish
8 -qadam: Adobe Illustrator -da elektron uy -joy dizayni
9 -qadam: 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
Bu dastlabki prototip edi. Oxir -oqibat bo'laklardan biriga zaryadlovchini ulash uchun to'rtburchaklar teshik qo'shildi.