Мазмуну:

FinduCar: Акылдуу унаа ачкычы Элди унаа токтоп турган жерге жетелейт: 11 кадам (Сүрөттөр менен)
FinduCar: Акылдуу унаа ачкычы Элди унаа токтоп турган жерге жетелейт: 11 кадам (Сүрөттөр менен)

Video: FinduCar: Акылдуу унаа ачкычы Элди унаа токтоп турган жерге жетелейт: 11 кадам (Сүрөттөр менен)

Video: FinduCar: Акылдуу унаа ачкычы Элди унаа токтоп турган жерге жетелейт: 11 кадам (Сүрөттөр менен)
Video: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, Ноябрь
Anonim
FinduCar: Адамдарды унаа токтоп турган жерге алып баруучу акылдуу унаа ачкычы
FinduCar: Адамдарды унаа токтоп турган жерге алып баруучу акылдуу унаа ачкычы

Жогорудагы көйгөйлөрдү чечүү үчүн, бул долбоор адамдарды машинаны токтоткон жерге багыттоочу акылдуу машинанын ачкычын иштеп чыгууну сунуштайт. Ал эми менин планым - GPS ачкычын машинанын ачкычына киргизүү. Унааны көзөмөлдөө үчүн смартфондун колдонмосун колдонуунун кажети жок, бардык жетекчилик жөн гана машинанын ачкычында көрсөтүлөт.

1 -кадам: Кагаз эскиз

Кагаз эскиз
Кагаз эскиз

Адамдар машинаны кулпулоо үчүн баскычты басканда, жайгашкан жер тууралуу маалымат автоматтык түрдө микроконтроллерге жазылышы мүмкүн. Андан кийин, адамдар машинага карай чуркай баштаганда, ар кандай светодиод күйгүзүлүп, машинанын абалына багытталат жана жыпылықтап турган жыштык машинага чейинки аралыкты көрсөтөт. Алар жаркыраган 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дун PIN 13үнө туташкан

4 -кадам: Аппараттык туташуу

Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу
Аппараттык туташуу

Adafruit M0 Feather, Adafruit Ultimate GPS Featherwing менен баштарды ээрчиңиз. Эки тактаны бириктирип коюңуз. GPS FeatherWing сиздин Feather M0 тактаңызга башка зымдарсыз туташтырылат.

5 -кадам: Программалык камсыздоонун дизайны

Программалык камсыздоонун дизайны
Программалык камсыздоонун дизайны

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

FIXти окуу

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

Serial.println ("GPS echo test"); Serial.begin (9600); Serial1.bin (9600); // демейки NMEA GPS baud}

void loop () {

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

Blink LED Ring

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

Убакытты эсептөө LED убактысы, бул дагы унаанын багыты

// LED саатындагы убакытты эсептөө

int led_time (кош бурч) {

int flag = 0; if (angle = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } return 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; return s; }

LED дисплейинин функциялары

Жарык диоддорду тегеректеп күйгүзүңүз, ал чабыттай баштаганын көрсөтөт

// LED шакеги жарыктандыруу бирден -бир чабыттоо башталганын көрсөтөт

Void colorWipe (uint32_t c, uint8_t күтө туруңуз) {

үчүн (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); кечигүү (күтүү);}}

Алыстыктын негизинде LED жыштыгын алыңыз

// LED Жыштыгын алыңыз

int жыштыгы (эки аралык) {

int f = (int) аралык * 20; return f; }

Унаанын багытын көрсөткөн белгилүү бир LEDди күйгүзүңүз

// LED дисплейи

strip.clear ();

strip.show (); кечигүү (жыштык (car_person_distance)); // кечиктирүү (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); кечигүү (жыштык (car_person_distance)); // кечиктирүү (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.h #кошуу баскычы.h #математиканы кошуу

#Define Neopixel_LED_PIN 6

#depine Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1

#аныктоо 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 button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t таймер = миллис (); кош car_lat, car_lon; кош автоунаа_арасы; double move_direction; кош car_azimuth; кош car_person_angle; int angle_time;

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

Serial.begin (115200); // Serial1.begin (9600); GPS.begin (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 (); // 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 ("\ nTime:"); 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 ("Date:"); 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 ("Жайгашкан жери:"); Serial.print (GPS.жакындык, 4); Serial.print (GPS.lat); Serial.print (","); 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.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); // LED саатындагы убакытты эсептеңиз car_person_angle = car_azimuth - move_direction; angle_time = led_time (car_person_angle); // LED тилкесиндеги дисплей.clear (); strip.show (); // кечигүү (жыштык (car_person_distance)); кечигүү (500); strip.setPixelColor (angle_time, strip. Color (0, 0, 255)); strip.show (); // кечигүү (жыштык (car_person_distance)); кечигүү (500); // LEDди өчүрүү, эгерде (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }}} //}}}

6 -кадам: Нан тактасында мүчүлүштүктөрдү оңдоо

Нан тактасында мүчүлүштүктөрдү оңдоо
Нан тактасында мүчүлүштүктөрдү оңдоо
Нан тактасында мүчүлүштүктөрдү оңдоо
Нан тактасында мүчүлүштүктөрдү оңдоо
Нан тактасында мүчүлүштүктөрдү оңдоо
Нан тактасында мүчүлүштүктөрдү оңдоо

7 -кадам: Аппараттык жыйын

Аппараттык жыйын
Аппараттык жыйын
Аппараттык жыйын
Аппараттык жыйын
Аппараттык жыйын
Аппараттык жыйын

8 -кадам: Adobe Illustratorдо Электроника Корпусунун Дизайны

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

9 -кадам: Картон прототипи

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

Бул кадам корпустун көлөмүн жана моделдин ар бир бөлүгүн ырастоо үчүн колдонулат, бул кутучанын өлчөмүн, баскычтын ордун жана LED позициясын чогултулган электрондук компоненттерге туура келет.

10 -кадам: Берч фанерасынын прототиби

Берч фанерасынын прототиби
Берч фанерасынын прототиби
Берч фанерасынын прототиби
Берч фанерасынын прототиби

Бул алгачкы прототип болчу. Акыры бөлүктөрдүн бирине заряддагычты туташтыруу үчүн төрт бурчтуу тешик кошулду.

Сунушталууда: