Мазмұны:

FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды: 11 қадам (суреттермен)
FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды: 11 қадам (суреттермен)

Бейне: FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды: 11 қадам (суреттермен)

Бейне: FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды: 11 қадам (суреттермен)
Бейне: Голубая стрела (1958) фильм 2024, Қараша
Anonim
FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды
FinduCar: Ақылды автокөлік кілті адамдарды көлік тұрған жерге бағыттайды

Жоғарыда айтылған мәселелерді шешу үшін бұл жоба адамдарды көлікті қойған жеріне бағыттай алатын ақылды автокөліктің кілтін жасауды ұсынады. Менің жоспарым - GPS кілтін көлік кілтіне енгізу. Көлікті қадағалау үшін смартфон қосымшасын пайдаланудың қажеті жоқ, барлық нұсқаулар тек көлік кілтінде көрсетіледі.

1 -қадам: Қағаз эскизі

Қағаз эскизі
Қағаз эскизі

Адамдар көлікті құлыптау үшін түймені басқанда, орналасқан жер туралы ақпарат микроконтроллерге автоматты түрде жазылуы мүмкін. Содан кейін, адамдар автокөлікке бара бастағанда, әр түрлі жарық диоды көліктің орнына қарай жанып тұрады және жыпылықтау жиілігі автомобильге дейінгі қашықтықты көрсетеді. Олар жыпылықтайтын жарықдиодты оңай қадағалап, көлікті тез таба алады.

2 -қадам: Жабдықтардың тізімі

Жабдықтар тізімі
Жабдықтар тізімі

Бұл осы жобада қолданылатын компоненттер. Кейбіреулер бөлшектер жиынтығынан (нан тақтасы, түйме, тақырыптар), басқалары Adafruit ресми сайтынан (Adafruit Feather M0, Adafruit Ultimate GPS модулі, Lpoly батареясы мен монеталық ұялы батарея) және Amazon -дан (NeoPixel Ring - 12 RGB LED) сатып алынады.

3 -қадам: схеманы жобалау

Схема дизайны
Схема дизайны

Neopixel_LED Feather M0 PIN 6 -ға қосылған

Button_Unlock Feather M0 PIN 12 -ге қосылған

Button_Lock Feather M0 PIN 13 -ке қосылған

4 -қадам: Жабдыққа қосылу

Аппараттық қосылым
Аппараттық қосылым
Аппараттық қосылым
Аппараттық қосылым
Аппараттық қосылым
Аппараттық қосылым

Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing көмегімен тақырыптарды дәнекерлеңіз. Екі тақтаны біріктіріңіз. GPS FeatherWing сымсыз Feather M0 тақтасына қосылады.

5 -қадам: Бағдарламалық жасақтама дизайны

Бағдарламалық қамтамасыз ету дизайны
Бағдарламалық қамтамасыз ету дизайны

Тест компоненттері

FIX оқу

жарамсыз орнату () {

Serial.println («GPS жаңғырық сынағы»); Serial.begin (9600); Сериялық1.баста (9600); // әдепкі NMEA GPS бады}

void loop () {

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

Жыпылықтайтын жарықдиодты сақина

Adafruit NeoPixel мысалдарын қараңыз.

GPS есептеу функциялары

Азимутты есептеңіз

// Азимутты есептеңіз

қос азимут (қос лат_а, қос лон_а, қос лат_б, қос лон_б) {

қос 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 (лат_а)*күнә (лат_б)+кос (лат_а)*кос (лат_б)*кос (лон_б-лон_а); d = sqrt (1-d*d); d = cos (лат_б)*күнә (lon_b-lon_a)/d; d = asin (d)*180/PI; қайтару d; }

Жарық диодты сағаттағы уақытты есептеңіз, ол сонымен қатар көліктің бағыты

// Жарықдиодты сағаттағы уақытты есептеңіз

int led_time (қос бұрыш) {

int жалаушасы = 0; егер (бұрыш = 15) {бұрыш_ұнақ = бұрыш_уақыт + 1; } if (flag == 1) {angle_time = 12 - angle_time; } қайтару бұрышы_ уақыты; }

Адам мен оның көлігі арасындағы қашықтықты есептеңіз

// Қашықтықты есептеңіз

қос қашықтық (қос лат_а, қос лон_а, қос лат_б, қос лон_б) {

қос EARTH_RADIUS = 6378137.0; қос radLat1 = (lat_a * PI / 180.0); қос radLat2 = (lat_b * PI / 180.0); қос a = radLat1 - radLat2; қос b = (lon_a - lon_b) * PI / 180.0; қос s = 2 * asin (sqrt (pow (sin (a / 2), 2) + cos (radLat1) * cos (radLat2) * pow (sin (b / 2), 2))); s = s * EARTH_RADIUS / 10000000; қайтару с; }

Жарықдиодты дисплейдің функциялары

Светодиодтарды шеңберге жағыңыз, ол шарлауды бастайды

// Жарықдиодты жарықдиодты жарықтандыру бірінен соң бірі шарлаудың басталатынын көрсетеді

жарамсыз colorWipe (uint32_t c, uint8_t күте тұрыңыз) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); кешіктіру (күту);}}

Жарық диодты жиілікті қашықтыққа сәйкес алыңыз

// Жарық диодты жиілікті алу

int жиілігі (қос қашықтық) {

int f = (int) қашықтық * 20; қайтару f; }

Көліктің бағытын көрсететін белгілі бір жарық диодты жыпылықтаңыз

// Жарық диодты дисплейде

strip.clear ();

strip.show (); кідіріс (жиілік (car_person_distance)); // кешіктіру (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); кідіріс (жиілік (car_person_distance)); // кешіктіру (500);

// Жарық диодты өшіру

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

Негізгі

#қосу Adafruit_GPS.h #қосу Adafruit_NeoPixel.h #HardwareSerial.h #қосу батырмасы.h #математиканы қосу.h

#неопиксельді_LED_PIN анықтау 6

#неопиксельді_LED_NUM 12 анықтау

#GPSECHO жалғанын анықтаңыз

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel жолағы = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Түймені құлыптау (Button_Lock_PIN); Түймені_құлыптан босату (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t таймері = миллис (); қосарланған автокөлік, автокөлік_лон; автокөлік_адамының_қашықтығы; қос қозғалыс бағыты; қосарлы автомобиль_азимут; қосарланған_адам_бұрышы; int angle_time;

жарамсыз орнату () {

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (9600); // әдепкі NMEA GPS baud strip.begin (); // GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) биіктігін қосқанда RMC (ұсынылатын минимум) мен GGA (деректерді түзету) қосу үшін осы жолға түсініктеме бермеңіз; // GPS.sendCommand жаңарту жылдамдығын орнатыңыз (PMTK_SET_NMEA_UPDATE_1HZ); // 1 Гц жаңарту жылдамдығы // Антенна күйі туралы жаңартуларды сұрау, үндемеу үшін пікір қалдырыңыз // GPS.sendCommand (PGCMD_ANTENNA); кешіктіру (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); // егер сөйлем қабылданса, біз бақылау сомасын тексере аламыз, оны талдай аламыз … if (GPS.newNMEAreceived ()) {// бұл жерде біз NMEA сөйлемін немесе деректерді басып шығарсақ, біз тыңдамаймыз. басқа сөйлемдерді есту! // сондықтан OUTPUT_ALLDATA пайдалану мен Serial.println (GPS.lastNMEA ()) деректерін басып шығаруға тырысқанда өте сақ болыңыз; // бұл сондай -ақ newNMEAreceived () жалаушасын жалғанға орнатады, егер (! GPS.parse (GPS.lastNMEA ())) // бұл сонымен қатар newNMEAreceived () жалаушасын жалған қайтаруға қояды; // біз сөйлемді талдай алмаймыз, бұл жағдайда басқасын күту керек} // // егер миллис () немесе таймер айналса, біз оны қалпына келтіреміз, егер (таймер> миллис ()) таймер = миллис (); if (миллис () - таймер> 2000) {таймер = миллис (); // Serial.print таймерін қалпына келтіру («\ nУақыт:»); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS.seconds, DEC); Serial.print ('.'); Serial.println (GPS.milliseconds); Serial.print («Күні:»); Serial.print (GPS.day, DEC); Serial.print ('/'); Serial.print (GPS.month, DEC); Serial.print («/20»); Serial.println (GPS.жыл, DEC); Serial.print («Түзету:»); Serial.print ((int) GPS.fix); Serial.print («сапасы:»); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print («Орналасқан жері:»); Serial.print (GPS.сатылым, 4); Serial.print (GPS.lat); Serial.print («,»); Serial.print (GPS. Ұзындық, 4); Serial.println (GPS.lon); Serial.print («Орналасуы (градус бойынша, Google Maps -пен жұмыс істейді):»); Serial.print (GPS.latitudeDegrees, 4); Serial.print («,»); Serial.println (GPS.longitudeDegrees, 4); Serial.print («Жылдамдық (түйіндер):»); Serial.println (GPS.speed); Serial.print («Бұрыш:»); Serial.println (GPS.angle); Serial.print («Биіктік:»); Serial.println (GPS.altitude); Serial.print («Жерсеріктер:»); Serial.println ((int) GPS.satellites); // Көліктің GPS сақтаңыз, егер (button_lock.read ()) {car_lat = GPS.latitudeDegrees; car_lon = GPS.longitudeDegrees; // Serial.print («carLatitude:») күйін келтіру үшін; Serial.println (car_lat); Serial.print («carLongitude:»); Serial.println (car_lon); } // Көлікті табуды бастаңыз, егер (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 = қашықтық (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // Қашықтықты есептеңіз // car_person_distance = қашықтық (100.0005, 100.0005, 100.0, 100.0); // Serial.println (car_person_distance) күйін келтіру үшін; move_direction = GPS.angle; // Жылжымалы бағытты (бұрышты) жазыңыз // move_direction = 100.0; // Азимутты жазыңыз (бұрыш) car_azimuth = azimuth (GPS.latitudeDegrees, GPS.longitudeDegrees, car_lat, car_lon); // car_azimuth = azimuth (100.0005, 100.0005, 100.0, 100.0); // Жарықдиодты сағаттағы уақытты есептеңіз car_person_angle = car_azimuth - move_direction; бұрыштық_уақыт = led_time (car_person_angle); // Жарық диодты жолақта дисплей.clear (); strip.show (); // кідіріс (жиілік (car_person_distance)); кешіктіру (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // кідіріс (жиілік (car_person_distance)); кешіктіру (500); // Светодиодты өшіріңіз, егер (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

6 -қадам: Breadboard -де күйін келтіру

Breadboard тақтасында жөндеу
Breadboard тақтасында жөндеу
Breadboard тақтасында жөндеу
Breadboard тақтасында жөндеу
Breadboard тақтасында жөндеу
Breadboard тақтасында жөндеу

7 -қадам: аппараттық құралдарды жинау

Аппараттық қондырғы
Аппараттық қондырғы
Аппараттық қондырғы
Аппараттық қондырғы
Аппараттық қондырғы
Аппараттық қондырғы

8 -қадам: Adobe Illustrator -да электронды корпустың дизайны

Adobe Illustrator -да электронды корпустың дизайны
Adobe Illustrator -да электронды корпустың дизайны

9 -қадам: картоннан жасалған прототип

Картоннан жасалған прототип
Картоннан жасалған прототип
Картоннан жасалған прототип
Картоннан жасалған прототип

Бұл қадам корпустың өлшемін және модельдің әрбір бөлігін растау үшін пайдаланылады, қораптың өлшемі мен түйменің орналасуы мен жарық диодты орналасуы жинақталған электронды компоненттерге сәйкес келетініне көз жеткізіңіз.

10 -қадам: қайың фанерасының прототипі

Қайың фанерасының прототипі
Қайың фанерасының прототипі
Қайың фанерасының прототипі
Қайың фанерасының прототипі

Бұл алғашқы прототип болды. Ақырында бөліктердің біріне зарядтағышты қосуға арналған төртбұрышты тесік қосылды.

Ұсынылған: