Სარჩევი:

FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს სად არის მანქანა გაჩერებული: 11 ნაბიჯი (სურათებით)
FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს სად არის მანქანა გაჩერებული: 11 ნაბიჯი (სურათებით)

ვიდეო: FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს სად არის მანქანა გაჩერებული: 11 ნაბიჯი (სურათებით)

ვიდეო: FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს სად არის მანქანა გაჩერებული: 11 ნაბიჯი (სურათებით)
ვიდეო: За двумя зайцами (1961) фильм 2024, ივლისი
Anonim
FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს იქ, სადაც მანქანა გაჩერებულია
FinduCar: ჭკვიანი მანქანის გასაღები, რომელიც უძღვება ხალხს იქ, სადაც მანქანა გაჩერებულია

ზემოაღნიშნული პრობლემების გადასაჭრელად, ეს პროექტი გვთავაზობს ჭკვიანი მანქანის გასაღების შემუშავებას, რომელიც შეძლებს ხალხს მიაწოდოს იქ, სადაც მათ გააჩერეს მანქანა. და ჩემი გეგმა არის GPS– ის ინტეგრირება მანქანის გასაღებში. არ არის საჭირო სმარტფონის აპლიკაციის გამოყენება მანქანის თვალყურის დევნებისთვის, ყველა მითითება მხოლოდ მანქანის გასაღებზე იქნება ნაჩვენები.

ნაბიჯი 1: ქაღალდის ესკიზი

ქაღალდის ესკიზი
ქაღალდის ესკიზი

როდესაც ხალხი აჭერს ღილაკს მანქანის დასაკეტად, ადგილმდებარეობის ინფორმაცია შეიძლება ავტომატურად ჩაიწეროს მიკროკონტროლერში. შემდეგ, როდესაც ხალხი იწყებს ნავიგაციას მანქანაზე, სხვადასხვა LED ნათდება მანქანის პოზიციის პირდაპირ და მოციმციმე სიხშირე აჩვენებს მანძილს მანქანამდე. მათ შეუძლიათ ადვილად მიჰყვეს მოციმციმე LED- ს და სწრაფად იპოვონ მანქანა.

ნაბიჯი 2: აპარატურის სია

აპარატურის სია
აპარატურის სია

ეს არის ის კომპონენტები, რომლებიც გამოიყენება ამ პროექტში. ზოგი ნაწილაკების ნაკრებიდან (პურის დაფა, ღილაკი, სათაურები), ზოგი შეძენილია ადაფრუტის ოფიციალურ ვებგვერდზე (Adafruit Feather M0, Adafruit Ultimate GPS მოდული, Lpoly ბატარეა და მონეტის უჯრედის ბატარეა) და Amazon (NeoPixel Ring - 12 RGB LED).

ნაბიჯი 3: სქემის დიზაინი

წრიული დიზაინი
წრიული დიზაინი

Neopixel_LED დაკავშირებულია ბუმბულის M0- ის PIN 6 -თან

Button_Unlock დაკავშირებულია ბუმბულის M0- ის PIN 12 -თან

Button_Lock დაკავშირებულია ბუმბულის M0- ის PIN 13 -თან

ნაბიჯი 4: აპარატურის კავშირი

აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი
აპარატურის კავშირი

ჩასვით სათაურები Adafruit M0 ბუმბულით, Adafruit Ultimate GPS Featherwing. დააწყვეთ ორი დაფა ერთად. GPS FeatherWing მიერთებულია პირდაპირ თქვენს ბუმბულის M0 დაფაზე, მავთულის გარეშე.

ნაბიჯი 5: პროგრამული უზრუნველყოფის დიზაინი

პროგრამული უზრუნველყოფის დიზაინი
პროგრამული უზრუნველყოფის დიზაინი

სატესტო კომპონენტები

წაიკითხეთ FIX

void setup () {

Serial.println ("GPS ექოს ტესტი"); სერიული.დაწყება (9600); Serial1. დასაწყისი (9600); // ნაგულისხმევი NMEA GPS baud}

ბათილი მარყუჟი () {

if (Serial.available ()) {char c = Serial.read (); Serial1.write (გ); } if (Serial1.available ()) {char c = Serial1.read (); სერიული. დაწერეთ (გ); }}

მოციმციმე LED ბეჭედი

იხილეთ Adafruit NeoPixel მაგალითები.

GPS გამოთვლის ფუნქციები

გამოთვალეთ აზიმუთი

// აზიმუტის გამოთვლა

ორმაგი აზიმუთი (ორმაგი lat_a, ორმაგი lon_a, ორმაგი lat_b, ორმაგი lon_b) {

ორმაგი 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 (lat_b)*sin (lon_b-lon_a)/d; დ = ასინი (დ)*180/PI; დაბრუნება დ; }

გამოთვალეთ დრო LED საათზე, რომელიც ასევე არის ავტომობილის მიმართულება

// გამოთვალეთ დრო LED საათზე

int led_time (ორმაგი კუთხე) {

int დროშა = 0; if (კუთხე = 15) {angle_time = angle_time + 1; } if (დროშა == 1) {angle_time = 12 - angle_time; } დაბრუნების კუთხე_დრო; }

გამოთვალეთ მანძილი ადამიანსა და მის მანქანას შორის

// გამოთვალეთ მანძილი

ორმაგი მანძილი (ორმაგი lat_a, ორმაგი lon_a, ორმაგი lat_b, ორმაგი lon_b) {

ორმაგი 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 ბეჭდის განათება სათითაოდ გვიჩვენებს, რომ ნავიგაცია იწყება

ბათილი ფერი Wipe (uint32_t c, uint8_t ლოდინი) {

for (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); დაგვიანებით (ლოდინი);}}

მიიღეთ LED სიხშირე მანძილის საფუძველზე

// მიიღეთ LED სიხშირე

int სიხშირე (ორმაგი მანძილი) {

int f = (int) მანძილი * 20; დაბრუნება ვ; }

დახუჭეთ გარკვეული LED, რომელიც მიუთითებს მანქანის მიმართულებას

// ჩვენება LED- ზე

ზოლები. ნათელი ();

ზოლები. ჩვენება (); შეფერხება (სიხშირე (მანქანის_ პერსონალის_ მანძილი)); // დაგვიანება (500); strip.setPixelColor (კუთხის დრო, ზოლები. ფერი (0, 0, 255)); ზოლები. ჩვენება (); შეფერხება (სიხშირე (მანქანის_ პერსონალის_ მანძილი)); // დაგვიანება (500);

// გამორთეთ LED

თუ (button_flag == 1 && მანქანის_პერსონალის მანძილი <5.0) {button_flag = 0; led_flag = 1; ზოლები. ნათელი (); ზოლები. ჩვენება (); }

მთავარი

#მოიცავს Adafruit_GPS.h #მოიცავს Adafruit_NeoPixel.h #მოიცავს HardwareSerial.h #მოიცავს ღილაკს.ჰ #მოიცავს მათემატიკას.ჰ

#განსაზღვრეთ ნეოპიქსელი_LED_PIN 6

#განსაზღვრეთ Neopixel_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_Lock_PIN); ღილაკის ღილაკი_ განბლოკვა (ღილაკი_ განბლოკვა_PIN); int ღილაკი_ფლაგმა = 0; int led_flag = 1; uint32_t ქრონომეტრი = მილი (); ორმაგი მანქანა_ლათი, მანქანის_ლონი; ორმაგი მანქანის_პიროვნული_ მანძილი; ორმაგი გადაადგილება_ მიმართულება; ორმაგი მანქანა_აზიმუთი; ორმაგი ავტომობილის_ პიროვნების_კუთხედი; int კუთხე_ დრო;

void setup () {

Serial.begin (115200); // Serial1.begin (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 Hz განახლების მაჩვენებელი // მოითხოვეთ განახლებები ანტენის სტატუსზე, გააკეთეთ კომენტარი გაჩუმების მიზნით // GPS.sendCommand (PGCMD_ANTENNA); დაგვიანება (1000);}

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

// char c = Serial.read (); // Serial1.write (გ); //} // if (Serial1.available ()) {char c = GPS.read (); თუ (GPSECHO) თუ (გ) სერიული. ბეჭდვა (გ); // თუ წინადადება მიღებულია, ჩვენ შეგვიძლია შევამოწმოთ ჩეკუსი, გავაანალიზოთ იგი … თუ (GPS.nNNEAEAceived ()) {// სახიფათო რამ არის თუ ჩვენ ვბეჭდავთ NMEA წინადადებას, ან მონაცემებს // ჩვენ საბოლოოდ არ ვუსმენთ და სხვა წინადადებების დაჭერა! // ასე რომ ფრთხილად იყავით, თუ იყენებთ OUTPUT_ALLDATA- ს და ცდილობთ მონაცემების ამობეჭდვას Serial.println (GPS.lastNMEA ()); // ეს ასევე ადგენს newNMEAreceived () დროშას ყალბად თუ (! GPS.parse (GPS.lastNMEA ())) // ეს ასევე ახდენს newNMEAreceived () დროშას ცრუ დაბრუნებაზე; // ჩვენ არ შეგვიძლია გავაანალიზოთ წინადადება, ამ შემთხვევაში ჩვენ უბრალოდ უნდა ველოდოთ სხვა} // თუ millis () ან ტაიმერი შემოიფარგლება, ჩვენ უბრალოდ აღვადგენთ მას თუ (ტაიმერი> millis ()) ტაიმერი = millis (); if (millis () - ქრონომეტრი> 2000) {timer = millis (); // გადატვირთეთ ქრონომეტრი Serial.print ("\ n დრო:"); Serial.print (GPS.hour, DEC); Serial.print (':'); Serial.print (GPS.minute, DEC); Serial.print (':'); Serial.print (GPS. წამი, DEC); სერიული. ბეჭდვა ('.'); Serial.println (GPS. მილიწამები); 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 ("მდებარეობა:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS. სიგრძე, 4); Serial.println (GPS.lon); Serial.print ("მდებარეობა (გრადუსში, მუშაობს Google Maps- თან):"); Serial.print (GPS.latitudeDerees, 4); Serial.print (","); Serial.println (GPS.longitudeDerees, 4); Serial.print ("სიჩქარე (კვანძები):"); Serial.println (GPS.speed); Serial.print ("კუთხე:"); Serial.println (GPS.anggle); Serial.print ("სიმაღლე:"); Serial.println (GPS.altitude); Serial.print ("თანამგზავრები:"); Serial.println ((int) GPS. სატელიტები); // შეინახეთ ავტომობილის GPS, თუ (button_lock.read ()) {car_lat = GPS.latitudeDerees; მანქანის_ლონი = GPS.longitudeDerees // გამართვისთვის Serial.print ("carLatitude:"); Serial.println (car_lat); Serial.print ("carLongitude:"); Serial.println (მანქანის_ლონი); } // დაიწყეთ მანქანის პოვნა, თუ (button_flag == 0) {button_flag = button_unlock.read (); } if (button_flag == 1 && led_flag == 1) {colorWipe (ზოლები. ფერი (0, 255, 0), 500); led_flag = 0; } if (button_flag == 1) {car_person_distance = distance (GPS.latitudeDerees, GPS.longitudeDerees, car_lat, car_lon); // გამოთვალეთ მანძილი // მანქანის_სიმცილის მანძილი = მანძილი (100.0005, 100.0005, 100.0, 100.0); // გამართვისთვის Serial.println (ავტომობილის_ პერსონალის_ მანძილი); move_direction = GPS.angle; // ჩაწერეთ მოძრაობის მიმართულება (კუთხე) // move_direction = 100.0; // ჩაწერეთ აზიმუთი (კუთხე) car_azimuth = აზიმუთი (GPS.latitudeDerees, GPS.longitudeDerees, car_lat, car_lon); // მანქანის_აზიმუთი = აზიმუტი (100.0005, 100.0005, 100.0, 100.0); // გამოთვალეთ დრო LED საათზე car_person_angle = car_azimuth - move_direction; angle_time = led_time (მანქანის_ პერსონალის_კუთხედი); // ეკრანის ჩვენება LED strip.clear (); ზოლები. ჩვენება (); // დაყოვნება (სიხშირე (ავტომობილის_ პერსონალის_ მანძილი)); დაგვიანება (500); strip.setPixelColor (კუთხის დრო, ზოლები. ფერი (0, 0, 255)); ზოლები. ჩვენება (); // დაყოვნება (სიხშირე (ავტომობილის_ პერსონალის_ მანძილი)); დაგვიანება (500); // გამორთეთ LED თუ (ღილაკი_ფლაგმა == 1 && მანქანის_პერსონალის მანძილი <5.0) {ღილაკი_ფლაგმა = 0; led_flag = 1; ზოლები. ნათელი (); ზოლები. ჩვენება (); }}} //}}}

ნაბიჯი 6: გამართვა Breadboard- ზე

გამართვა Breadboard- ზე
გამართვა Breadboard- ზე
გამართვა Breadboard- ზე
გამართვა Breadboard- ზე
გამართვა Breadboard- ზე
გამართვა Breadboard- ზე

ნაბიჯი 7: აპარატურის შეკრება

აპარატურის შეკრება
აპარატურის შეკრება
აპარატურის შეკრება
აპარატურის შეკრება
აპარატურის შეკრება
აპარატურის შეკრება

ნაბიჯი 8: ელექტრონიკის საბინაო დიზაინი Adobe Illustrator– ში

ელექტრონიკის საბინაო დიზაინი Adobe Illustrator– ში
ელექტრონიკის საბინაო დიზაინი Adobe Illustrator– ში

ნაბიჯი 9: მუყაოს პროტოტიპი

მუყაოს პროტოტიპი
მუყაოს პროტოტიპი
მუყაოს პროტოტიპი
მუყაოს პროტოტიპი

ეს ნაბიჯი გამოიყენება კორპუსის ზომისა და მოდელის თითოეული ნაწილის დასადასტურებლად, დარწმუნდით, რომ ყუთის ზომა, ღილაკის პოზიცია და LED პოზიცია შეესაბამება აწყობილ ელექტრონულ კომპონენტებს.

ნაბიჯი 10: არყის პლაივუდის პროტოტიპი

არყის პლაივუდის პროტოტიპი
არყის პლაივუდის პროტოტიპი
არყის პლაივუდის პროტოტიპი
არყის პლაივუდის პროტოტიპი

ეს იყო საწყისი პროტოტიპი. საბოლოოდ ერთ -ერთ ნაწილს დაემატა კვადრატული ხვრელი დამტენზე ჩასართავად.

გირჩევთ: