Агуулгын хүснэгт:
- Алхам 1: Цаасан ноорог
- Алхам 2: Тоног төхөөрөмжийн жагсаалт
- Алхам 3: Хэлхээний дизайн
- Алхам 4: Тоног төхөөрөмжийн холболт
- Алхам 5: Програм хангамжийн дизайн
- Алхам 6: Breadboard дээр дибаг хийх
- Алхам 7: Тоног төхөөрөмжийн угсралт
- Алхам 8: Adobe Illustrator дахь электроникийн орон сууцны дизайн
- Алхам 9: Картон прототип
- Алхам 10: Хусан фанерын прототип
Видео: FinduCar: Ухаалаг машины түлхүүр нь хүмүүсийг машинаа хаана байрлуулахыг зааж өгдөг: 11 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Дээрх асуудлыг шийдвэрлэхийн тулд энэхүү төсөл нь хүмүүсийг машинаа тавьсан газар руу нь чиглүүлэх ухаалаг машины түлхүүрийг бүтээхийг санал болгож байна. Миний төлөвлөгөө бол 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 дээр дибаг хийх
Алхам 7: Тоног төхөөрөмжийн угсралт
Алхам 8: Adobe Illustrator дахь электроникийн орон сууцны дизайн
Алхам 9: Картон прототип
Энэ алхам нь хайрцагны хэмжээ, товчлуурын байршил, LED байрлалыг угсарсан электрон эд ангиудтай нийцэж байгаа эсэхийг шалгахын тулд орон сууцны хэмжээ, загвар бүрийг баталгаажуулахад хэрэглэгддэг.
Алхам 10: Хусан фанерын прототип
Энэ бол анхны прототип байв. Цэнэглэгчийг залгах зориулалттай дөрвөлжин нүхийг эцэст нь нэг хэсэгт нэмж оруулав.
Зөвлөмж болгож буй:
Машины стерео адаптерийн жолооны хүрдний түлхүүр (CAN Bus -> Key1): 6 алхам
Машины стерео адаптерийн жолооны хүрдний түлхүүр (CAN Bus -> Key1): Хуучин машин худалдаж авснаас хойш хэд хоногийн дараа би машиныхаа стерео дамжуулалтаар утсаараа хөгжим тоглож чадахгүй байгаагаа олж мэдсэн. Машин нь Bluetooth -тэй байсан ч зөвхөн дуут дуудлага хийхийг зөвшөөрдөг байсан нь хөгжим биш харин ч илүү бухимдуулдаг байв. Энэ нь Windows Phone USB порттой байсан боловч би
Хүмүүсийг хараад дуугаа хураадаг ичимхий маск: 9 алхам (зурагтай)
Хүмүүсийг хараад дуугаа хураадаг ичимхий маск: Ковид -19 -ийн улмаас бид нүүрний маск зүүх болсон нь харамсалтай байна. Энэ нь тийм ч таатай туршлага биш бөгөөд таныг халууцуулж, хөлрүүлж, сандарч, амьсгалахад хэцүү болгодог. Та маскаа тайлахыг шаардаж байгаа ч хийхээс цааргалах үе цангаж байна. Би юу
DIY ухаалаг робот хянах машины иж бүрдэл Машины гэрэл мэдрэмтгий байдлыг хянах: 7 алхам
DIY ухаалаг робот хянах машины иж бүрдэл Машины гэрэл мэдрэмтгий байдлыг хянах: SINONING ROBOT -ийн загвараар та робот машиныг онлайнаар худалдаж авах боломжтой TheoryLM393 чип нь хоёр фоторезисторыг харьцуулж үзээрэй. эргэх, ингэснээр
Дуут удирдлагатай ухаалаг түлхүүр эзэмшигч: 3 алхам (зурагтай)
Дуут удирдлагатай ухаалаг түлхүүр эзэмшигч: Та товчлуур удирдах чадвар муутай хүн мөн үү, түлхүүр бүрийг өөр цоож бүрт туршиж үзэх хэрэгтэй юу? Санаа зоволтгүй, өөрийн санаагаа шинэчлэхийн тулд бага зэрэг сэдэл, бүтээгч хэрэгслийг аваарай. маш өөрийн дуу хоолойгоор удирддаг ухаалаг түлхүүр эзэмшигч
Наранцэцгийн эсрэг - Таны харанхуйг зааж байна!: 6 алхам (зурагтай)
Наранцэцгийн эсрэг - Таны харанхуйг зааж байна !: Би багаасаа л электрон төхөөрөмж дээр гараа туршиж үзэхийг хүсдэг байсан. Саяхан би Arduino худалдаж аваад түүнийгээ судалж эхлэв. Энэ явцад би Гэрэл хамааралтай эсэргүүцэл (LDR) -ийн талаар илүү ихийг мэдэж авсан. Үндсэндээ энэ нь