Агуулгын хүснэгт:

FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана байрлуулахыг зааж өгдөг: 11 алхам (зурагтай)
FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана байрлуулахыг зааж өгдөг: 11 алхам (зурагтай)

Видео: FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана байрлуулахыг зааж өгдөг: 11 алхам (зурагтай)

Видео: FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана байрлуулахыг зааж өгдөг: 11 алхам (зурагтай)
Видео: Пилотируйте Cessna вокруг света! 🛩🌥🌎 - Geographical Adventures GamePlay 🎮📱 🇷🇺 2024, Арванхоёрдугаар сар
Anonim
FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана зогсохыг зааж өгдөг
FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана зогсохыг зааж өгдөг

Дээрх асуудлыг шийдвэрлэхийн тулд энэхүү төсөл нь хүмүүсийг машинаа тавьсан газар руу нь чиглүүлэх ухаалаг машины түлхүүрийг бүтээхийг санал болгож байна. Миний төлөвлөгөө бол GPS -ийг машины түлхүүрт оруулах явдал юм. Машиныг хянахын тулд ухаалаг гар утасны програмыг ашиглах шаардлагагүй, бүх удирдамжийг зөвхөн машины түлхүүр дээр харуулах болно.

Алхам 1: Цаасан ноорог

Цаасан ноорог
Цаасан ноорог

Хүмүүс машин түгжихийн тулд товчлуурыг дарахад байршлын мэдээллийг микроконтроллерт автоматаар бүртгэх боломжтой байв. Дараа нь хүмүүс машин руу явж эхлэхэд өөр өөр LED гэрэл асч, машины байрлал руу шууд чиглэх бөгөөд анивчих давтамж нь машин хүртэлх зайг харуулна. Тэд анивчдаг LED -ийг хялбархан дагаж, машинаа хурдан олох боломжтой.

Алхам 2: Тоног төхөөрөмжийн жагсаалт

Тоног төхөөрөмжийн жагсаалт
Тоног төхөөрөмжийн жагсаалт

Эдгээр нь энэ төсөлд ашигласан бүрэлдэхүүн хэсгүүд юм. Заримыг бөөмийн иж бүрдэл (талх, товчлуур, толгой), бусад хэсгийг Adafruit албан ёсны вэбсайт (Adafruit Feather M0, Adafruit Ultimate GPS модуль, Lpoly Battery and Coin Cell Battery) болон Amazon (NeoPixel Ring - 12 RGB LED) дээрээс худалдаж авдаг.

Алхам 3: Хэлхээний дизайн

Хэлхээний дизайн
Хэлхээний дизайн

Neopixel_LED нь Feather M0 -ийн PIN 6 -тай холбогдсон байна

Button_Unlock нь Feather M0 -ийн PIN 12 -тэй холбогдсон байна

Button_Lock нь Feather M0 -ийн ПИН 13 -т холбогдсон байна

Алхам 4: Тоног төхөөрөмжийн холболт

Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт

Толгойг Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing ашиглан гагнана уу. Хоёр самбарыг хооронд нь овоолно. GPS FeatherWing нь ямар ч утасгүйгээр шууд таны Feather M0 самбарт залгагддаг.

Алхам 5: Програм хангамжийн дизайн

Програм хангамжийн дизайн
Програм хангамжийн дизайн

Туршилтын бүрэлдэхүүн хэсгүүд

FIX уншина уу

хүчингүй тохиргоо () {

Serial.println ("GPS цуурайны тест"); Цуваа эхлэх (9600); Цуваа 1. эхлэх (9600); // анхдагч NMEA GPS baud}

void loop () {

if (Serial.available ()) {char c = Serial.read (); Цуваа 1. бичих (c); } if (Serial1.available ()) {char c = Serial1.read (); Цуваа бичих (c); }}

LED цагираг анивчих

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 (lat_a)*sin (lat_b)+cos (lat_a)*cos (lat_b)*cos (lon_b-lon_a); d = sqrt (1-d*d); d = cos (лат_б)*нүгэл (lon_b-lon_a)/d; d = asin (d)*180/PI; буцах d; }

LED цаг дээр цагийг тооцоолох нь мөн тээврийн хэрэгслийн чиглэл юм

// LED цаг дээрх цагийг тооцоолох

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; буцах s; }

LED дэлгэцийн функцууд

LED -ийг дугуйлж асаагаарай

// LED цагираг гэрэлтүүлэг нь нэг нэгээр нь навигаци эхэлж байгааг харуулж байна

хүчингүй colorWipe (uint32_t c, uint8_t хүлээх) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); саатал (хүлээх);}}

LED давтамжийг зайны үндсэн дээр авна уу

// LED давтамж авах

int давтамж (давхар зай) {

int f = (int) зай * 20; буцах f; }

Машины чиглэлийг зааж өгсөн LED -г анивч

// LED дээрх дэлгэц

strip.clear ();

strip.show (); саатал (давтамж (машины_хүний зай)); // саатал (500); strip.setPixelColor (өнцгийн_ цаг, зурвас Өнгө (0, 0, 255)); strip.show (); саатал (давтамж (машины_хүний зай)); // саатал (500);

// LED -ийг идэвхгүй болгох

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 оруулах

#Neopixel_LED_PIN 6 -ийг тодорхойлох

#неопиксел_LED_NUM 12 -ийг тодорхойлох #товчлуурыг түгжих_PIN 13 #товчлуурыг тайлах_PIN 12 #GPS -ийг тодорхойлох Цуврал сериал1

#тодорхойлох GPSECHO худал

Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel зурвас = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Button button_lock (Button_Lock_PIN); Button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t таймер = миллис (); давхар car_lat, car_lon; давхар машины_хүний зай; давхар шилжих чиглэл; давхар car_azimuth; давхар машины_хүний_өнцөг; int angle_time;

хүчингүй тохиргоо () {

Цуваа.begin (115200); // Цуваа 1. эхлэл (9600); GPS. эхлэх (9600); // анхдагч NMEA GPS baud strip.begin (); // RMC (санал болгож буй хамгийн бага хэмжээ) ба GGA (өгөгдлийг засах) GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) зэрэг идэвхжүүлэхийн тулд энэ мөрийг тайлбарлахгүй байх; // GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ) шинэчлэлтийн хурдыг тохируулах; // 1 Гц -ийн шинэчлэлтийн хурд // Антенны төлөв байдлын талаар шинэчлэлт авах хүсэлт гаргах, чимээгүй байхын тулд коммент бичих // GPS.sendCommand (PGCMD_ANTENNA); саатал (1000);}

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

// char c = Serial.read (); // Цуваа1. бичих (c); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Цуваа.хэв (c); // хэрэв өгүүлбэр хүлээн авсан бол бид шалгалтын дүнг шалгаж, задлан шинжилж болно … if (GPS.newNMEAreceived ()) {// энд бид NMEA өгүүлбэр, эсвэл өгөгдлийг хэвлэх юм бол хэцүү юм. бусад өгүүлбэрийг барьж аваарай! // хэрэв та OUTPUT_ALLDATA -г ашиглаж, Serial.println (GPS.lastNMEA ()) өгөгдлийг хэвлэхийг оролдвол маш болгоомжтой байгаарай; // энэ нь мөн хэрэв шинэ! // бид өгүүлбэрийг задлан шинжилж чадахгүй, энэ тохиолдолд өөр нэгийг хүлээх хэрэгтэй болно // // хэрэв миллис () эсвэл цаг хэмжигч тойрон эргэлддэг бол (timer> millis ()) timer = millis (); if (millis () - timer> 2000) {timer = millis (); // таймерыг дахин тохируулах Serial.print ("\ nЦаг:"); Цуваа.хэвлэх (GPS.цаг, 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.year, DEC); Serial.print ("Засах:"); Serial.print ((int) GPS.fix); Serial.print ("чанар:"); Serial.println ((int) GPS.fixquality); if (GPS.fix) {Serial.print ("Байршил:"); Цуваа.хэв (GPS.зөвшөөрөл, 4); Serial.print (GPS.lat); Serial.print (","); Цуваа.хэв (GPS. Уртраг, 4); Serial.println (GPS.lon); Serial.print ("Байршил (зэргээр, Google Газрын зураг дээр ажилладаг):"); Serial.print (GPS.latitudeDegrees, 4); Serial.print (","); Serial.println (GPS.longitudeDegrees, 4); Serial.print ("Хурд (зангилаа):"); Serial.println (GPS. хурд); Serial.print ("Өнцөг:"); Serial.println (GPS.angle); Serial.print ("Өндөр:"); Serial.println (GPS.altitude); Serial.print ("Хиймэл дагуулууд:"); Serial.println ((int) 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); // Зайг тооцоолох // машины_хүний_зай = зай (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); // LED цагны цагийг тооцоолох car_person_angle = car_azimuth - move_direction; өнцгийн_хугацаа = удирдсан_хугацаа (машины_хүн_өнцөг); // LED зурвас дээрх дэлгэц.clear (); strip.show (); // саатал (давтамж (машины_хүний_зай))); саатал (500); strip.setPixelColor (өнцгийн_ цаг, зурвас Өнгө (0, 0, 255)); strip.show (); // саатал (давтамж (машины_хүний_зай))); саатал (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: Картон прототип

Картон прототип
Картон прототип
Картон прототип
Картон прототип

Энэ алхам нь хайрцагны хэмжээ, товчлуурын байршил, LED байрлалыг угсарсан электрон эд ангиудтай нийцэж байгаа эсэхийг шалгахын тулд орон сууцны хэмжээ, загвар бүрийг баталгаажуулахад хэрэглэгддэг.

Алхам 10: Хусан фанерын прототип

Хусан фанерын загвар
Хусан фанерын загвар
Хусан фанерын загвар
Хусан фанерын загвар

Энэ бол анхны прототип байв. Цэнэглэгчийг залгах зориулалттай дөрвөлжин нүхийг эцэст нь нэг хэсэгт нэмж оруулав.

Зөвлөмж болгож буй: