Мазмуну:
- 1 -кадам: Кагаз эскиз
- 2 -кадам: Аппараттык тизме
- 3 -кадам: Райондук дизайн
- 4 -кадам: Аппараттык туташуу
- 5 -кадам: Программалык камсыздоонун дизайны
- 6 -кадам: Нан тактасында мүчүлүштүктөрдү оңдоо
- 7 -кадам: Аппараттык жыйын
- 8 -кадам: Adobe Illustratorдо Электроника Корпусунун Дизайны
- 9 -кадам: Картон прототипи
- 10 -кадам: Берч фанерасынын прототиби
Video: FinduCar: Акылдуу унаа ачкычы Элди унаа токтоп турган жерге жетелейт: 11 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Жогорудагы көйгөйлөрдү чечүү үчүн, бул долбоор адамдарды машинаны токтоткон жерге багыттоочу акылдуу машинанын ачкычын иштеп чыгууну сунуштайт. Ал эми менин планым - 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до Электроника Корпусунун Дизайны
9 -кадам: Картон прототипи
Бул кадам корпустун көлөмүн жана моделдин ар бир бөлүгүн ырастоо үчүн колдонулат, бул кутучанын өлчөмүн, баскычтын ордун жана LED позициясын чогултулган электрондук компоненттерге туура келет.
10 -кадам: Берч фанерасынын прототиби
Бул алгачкы прототип болчу. Акыры бөлүктөрдүн бирине заряддагычты туташтыруу үчүн төрт бурчтуу тешик кошулду.
Сунушталууда:
3D басылган эгиз калак Cw ачкычы (566гр.): 21 кадам (сүрөттөр менен)
3D басып чыгарылган эгиз калак Cw ачкычы (566гр.): Азырынча так, жумшак жана оор жүктөлгөн эгиз калак ачкычка ээ болуу көп акчаны сарптоону билдирет. Бул ачкычты иштеп чыгууда менин ниетим калак жасоо болчу: а)- Арзан --- Бул стандарттык 3d принтери бар пластмассадан жасалган б)- Бышык --- Мен топту колдонгом
Ардуино паркинг жардамчысы - Ар дайым машинаңызды туура жерге токтотуңуз: 5 кадам (сүрөттөр менен)
Ардуино паркинг жардамчысы - Ар дайым машинаңызды туура жерге токтотуңуз: Бул долбоордо мен сизге Арудинонун жардамы менен өзүңүздүн унаа токтотуучу жардамчыңызды кантип курууну көрсөтөм. Бул паркинг жардамчысы машинаңызга чейинки аралыкты өлчөйт жана LCD дисплейинин окуусун жана LEDди колдонуп, аны туура жерге токтотууга багыт берет
Велосипед коопсуздугу үчүн башка RFID ачкычы: 7 кадам (сүрөттөр менен)
Велосипед коопсуздугу үчүн башка RFID ачкычы: Велосипед коопсуздугу үчүн күйгүзүү кулпусу гана бар. Жана аны ууру оңой эле бузуп алат. Бул жерде мен DIY үчүн чечим менен келдим. Бул арзан жана куруу оңой. Бул велосипед коопсуздугу үчүн башка RFID ачкычы. Келгиле
Акылдуу ойготкуч саат: Raspberry Pi менен жасалган акылдуу ойготкуч саат: 10 кадам (сүрөттөр менен)
Smart Alarm Clock: Raspberry Pi менен жасалган акылдуу ойготкуч: Сиз качандыр бир убакта акылдуу саатты кааладыңыз беле? Андай болсо, бул сиз үчүн чечим! Мен Smart Alarm Clock жасадым, бул веб -сайтка ылайык ойготкуч убактысын өзгөртө турган саат. Ойготкуч өчкөндө, үн чыгат (зумбул) жана 2 жарык күйөт
Бармактын кыймылы менен иштеген акылдуу унаа: 7 кадам (сүрөттөр менен)
Акылдуу унаа манжанын кыймылы менен иштейт: Бул менин проектим акылдуу унаа, ал мобилдик же кадимки алыстан башкаруу пульту менен иштебейт Ал мээлей менен иштейт, ошондуктан пульт манжамдын кыймылы