Πίνακας περιεχομένων:
- Βήμα 1: Σκίτσο χαρτιού
- Βήμα 2: Λίστα υλικού
- Βήμα 3: Σχεδιασμός κυκλωμάτων
- Βήμα 4: Σύνδεση υλικού
- Βήμα 5: Σχεδιασμός λογισμικού
- Βήμα 6: Εντοπισμός σφαλμάτων στο Breadboard
- Βήμα 7: Συναρμολόγηση υλικού
- Βήμα 8: Σχεδιασμός ηλεκτρονικών κατοικιών στο Adobe Illustrator
- Βήμα 9: Πρωτότυπο από χαρτόνι
- Βήμα 10: Πρωτότυπο κόντρα πλακέ σημύδας
Βίντεο: FinduCar: Ένα έξυπνο κλειδί αυτοκινήτου που καθοδηγεί τους ανθρώπους στο σημείο στάθμευσης του αυτοκινήτου: 11 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Προκειμένου να επιλυθούν τα παραπάνω προβλήματα, αυτό το έργο προτείνει την ανάπτυξη ενός έξυπνου κλειδιού αυτοκινήτου που θα μπορούσε να κατευθύνει τους ανθρώπους εκεί που στάθμευσαν το αυτοκίνητο. Και το σχέδιό μου είναι να ενσωματώσω ένα GPS στο κλειδί του αυτοκινήτου. Δεν χρειάζεται να χρησιμοποιήσετε την εφαρμογή smartphone για να παρακολουθείτε το αυτοκίνητο, όλες οι οδηγίες θα εμφανίζονται μόνο στο κλειδί του αυτοκινήτου.
Βήμα 1: Σκίτσο χαρτιού
Όταν οι άνθρωποι πατούν το κουμπί για να κλειδώσουν το αυτοκίνητο, οι πληροφορίες τοποθεσίας θα μπορούσαν να καταγραφούν αυτόματα στον μικροελεγκτή. Στη συνέχεια, όταν οι άνθρωποι αρχίζουν να πλοηγούνται στο αυτοκίνητο, ανάβει το διαφορετικό LED για να κατευθυνθεί στη θέση του αυτοκινήτου και η συχνότητα που αναβοσβήνει δείχνει την απόσταση από το αυτοκίνητο. Μπορούν εύκολα να ακολουθήσουν το LED που αναβοσβήνει και να βρουν γρήγορα το αυτοκίνητο.
Βήμα 2: Λίστα υλικού
Αυτά είναι τα στοιχεία που χρησιμοποιούνται σε αυτό το έργο. Ορισμένα είναι από τα σετ σωματιδίων (breadboard, κουμπί, κεφαλίδες), άλλα αγοράζονται από την επίσημη ιστοσελίδα της Adafruit (Adafruit Feather M0, Adafruit Ultimate GPS module, Lpoly Battery and Coin Cell Battery) και Amazon (NeoPixel Ring - 12 RGB LED).
Βήμα 3: Σχεδιασμός κυκλωμάτων
Το Neopixel_LED είναι συνδεδεμένο στο PIN 6 του Feather M0
Το Button_Unlock είναι συνδεδεμένο με το PIN 12 του Feather M0
Το Button_Lock είναι συνδεδεμένο με το PIN 13 του Feather M0
Βήμα 4: Σύνδεση υλικού
Συγκολλήστε τις κεφαλίδες με φτερό Adafruit M0, Adafruit Ultimate GPS Featherwing. Τοποθετήστε τους δύο πίνακες μαζί. Το GPS FeatherWing συνδέεται απευθείας στην πλακέτα Feather M0 χωρίς άλλα καλώδια.
Βήμα 5: Σχεδιασμός λογισμικού
Εξαρτήματα δοκιμής
Διαβάστε ένα FIX
void setup () {
Serial.println ("GPS echo test"); Serial.begin (9600); Serial1.begin (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); }}
Δαχτυλίδι αναβοσβήνει 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; d = asin (d)*180/PI; επιστροφή δ? }
Υπολογίστε το χρόνο στο ρολόι LED, το οποίο είναι επίσης η κατεύθυνση του οχήματος
// Υπολογίστε την ώρα στο ρολόι LED
int led_time (διπλή γωνία) {
int σημαία = 0; εάν (γωνία = 15) {angle_time = angle_time + 1; } if (flag == 1) {angle_time = 12 - angle_time; } επιστροφή 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 μία προς μία δείχνει ότι ξεκινά η πλοήγηση
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; επιστροφή 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
αν (button_flag == 1 && car_person_distance <5.0) {button_flag = 0; led_flag = 1; strip.clear (); strip.show (); }
Κύριος
#include Adafruit_GPS.h #include Adafruit_NeoPixel.h #include HardwareSerial.h #include Button.h #include math.h
#define Neopixel_LED_PIN 6
#define Neopixel_LED_NUM 12 #define Button_Lock_PIN 13 #define Button_Unlock_PIN 12 #define GPSSerial Serial1
#define GPSECHO false
Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); Κουμπί κλειδώματος (Button_Lock_PIN) Button button_unlock (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; uint32_t χρονόμετρο = millis (); διπλό car_lat, car_lon; διπλό αυτοκίνητο_προσωπική_ απόσταση? διπλή κίνηση_κατεύθυνση? διπλό αυτοκίνητο_αζιμούθιο? διπλο αυτοκινητο int angle_time;
void setup () {
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 Hz // Ζητήστε ενημερώσεις για την κατάσταση της κεραίας, σχολιάστε για να ησυχάσετε // GPS.sendCommand (PGCMD_ANTENNA); καθυστέρηση (1000);}
void loop () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (c); //} // if (Serial1.available ()) {char c = GPS.read (); εάν (GPSECHO) εάν (γ) Serial.print (γ)? // εάν ληφθεί μια πρόταση, μπορούμε να ελέγξουμε το άθροισμα ελέγχου, να το αναλύσουμε… αν (GPS.newNMEAreceived ()) {// ένα δύσκολο πράγμα εδώ είναι αν εκτυπώσουμε την πρόταση NMEA ή τα δεδομένα // καταλήγουμε να μην ακούμε και αλιεύοντας άλλες προτάσεις! // γι 'αυτό να είστε πολύ προσεκτικοί εάν χρησιμοποιείτε το OUTPUT_ALLDATA και προσπαθείτε να εκτυπώσετε δεδομένα Serial.println (GPS.lastNMEA ()). // αυτό ορίζει επίσης τη σημαία newNMEAreceived () σε false εάν (! GPS.parse (GPS.lastNMEA ())) // αυτό θέτει επίσης τη σημαία newNMEAreceived () σε ψευδή επιστροφή. // μπορούμε να αποτύχουμε να αναλύσουμε μια πρόταση, οπότε πρέπει απλά να περιμένουμε μια άλλη} // αν millis () ή χρονόμετρο τελειώσει, θα την επαναφέρουμε μόνο εάν (χρονόμετρο> millis ()) χρονοδιακόπτης = millis (); if (millis () - timer> 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.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 ("Τοποθεσία:"); Serial.print (GPS.latitude, 4); Serial.print (GPS.lat); Serial.print (","); Serial.print (GPS.longitude, 4); Serial.println (GPS.lon); Serial.print ("Τοποθεσία (σε μοίρες, λειτουργεί με τους Χάρτες Google):"); Serial.print (GPS.latitudeDerees, 4); Serial.print (","); Serial.println (GPS.longitudeDerees, 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 = distance (GPS.latitudeDegrees, GPS.longitudeDerees, 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 = αζιμούθιο (GPS.latitudeDerees, GPS.longitudeDegrees, car_lat, car_lon); // car_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: Εντοπισμός σφαλμάτων στο Breadboard
Βήμα 7: Συναρμολόγηση υλικού
Βήμα 8: Σχεδιασμός ηλεκτρονικών κατοικιών στο Adobe Illustrator
Βήμα 9: Πρωτότυπο από χαρτόνι
Αυτό το βήμα χρησιμοποιείται για την επιβεβαίωση του μεγέθους του περιβλήματος και κάθε τεμαχίου του μοντέλου, διασφαλίζοντας ότι το μέγεθος του κουτιού, η θέση του κουμπιού και η θέση LED ταιριάζουν στα συναρμολογημένα ηλεκτρονικά εξαρτήματα.
Βήμα 10: Πρωτότυπο κόντρα πλακέ σημύδας
Αυτό ήταν το αρχικό πρωτότυπο. Μια τετράγωνη τρύπα για σύνδεση σε φορτιστή προστέθηκε τελικά σε ένα από τα κομμάτια.
Συνιστάται:
Raspberry Pi DIY έξυπνο κουδούνι πόρτας που μπορεί να ανιχνεύσει ανθρώπους, αυτοκίνητα κ.λπ .: 5 βήματα
Raspberry Pi DIY Smart Doorbell That Can Detect People, Cars, κ.λπ .: Αυτός ο σχεδιασμός με θέμα steampunk ενσωματώνεται με τον βοηθό σπιτιού και το ηχοσύστημα πολλαπλών δωματίων μας για να επικοινωνεί με το υπόλοιπο έξυπνο σπίτι DIY μας. Αντί να αγοράζετε κουδούνι (ή Nest, ή ένας από τους άλλους ανταγωνιστές) έχτισα τη δική μας έξυπνη πόρτα
Απλός αυτοματοποιημένος σιδηρόδρομος από σημείο σε σημείο: 10 βήματα (με εικόνες)
Απλό αυτοματοποιημένο μοντέλο σιδηροδρόμου από σημείο σε σημείο: Οι μικροελεγκτές Arduino είναι εξαιρετικοί για την αυτοματοποίηση μοντέλων σιδηροδρόμων. Η αυτοματοποίηση των διατάξεων είναι χρήσιμη για πολλούς σκοπούς, όπως η τοποθέτηση της διάταξής σας σε μια οθόνη όπου η λειτουργία διάταξης μπορεί να προγραμματιστεί για την εκτέλεση τρένων σε μια αυτοματοποιημένη ακολουθία. Το l
Αποθήκευση του παιδιού μου: το έξυπνο κάθισμα που στέλνει μηνύματα κειμένου Εάν ξεχάσετε το παιδί στο αυτοκίνητο: 8 βήματα
Αποθήκευση του παιδιού μου: Το έξυπνο κάθισμα που στέλνει μηνύματα κειμένου Εάν ξεχάσετε το παιδί στο αυτοκίνητο: Είναι εγκατεστημένο στα αυτοκίνητα και χάρη σε έναν ανιχνευτή που έχει τοποθετηθεί στο παιδικό κάθισμα, μας προειδοποιεί - μέσω SMS ή τηλεφωνικής κλήσης - εάν λάβουμε μακριά χωρίς να φέρουμε το παιδί μαζί μας
Δημιουργήστε ένα πραγματικό ρολόι που χτυπά το κουδούνι για τον υπολογιστή σας και ένα ρολόι που χτυπά πυροσβεστήρα .: 3 βήματα (με εικόνες)
Δημιουργήστε ένα πραγματικό ρολόι που χτυπά το κουδούνι για τον υπολογιστή σας και ένα ρολόι που προκαλεί πυροσβεστήρα .: Ένα κουδούνι από ορείχαλκο, ένα μικρό ρελέ μερικά ακόμη πράγματα και ένα πραγματικό κουδούνι μπορούν να χτυπήσουν τις ώρες στην επιφάνεια εργασίας σας. Αν και αυτό το έργο τρέχει σε Windows και Mac Το OS X επίσης, αποφάσισα να εγκαταστήσω το Ubuntu Linux σε έναν υπολογιστή που βρήκα στα σκουπίδια και να δουλέψω σε αυτό: Δεν είχα ποτέ
Ένας πραγματικά απλός/εύκολος/μη περίπλοκος τρόπος για να κάνετε τους ανθρώπους/ανθρώπους/ζώα/ρομπότ να μοιάζουν σαν να έχουν πραγματικά δροσερό/φωτεινό όραμα θερμότητας (χρώμα της επιλογής σας) χρησιμοποιώντας το GIMP: 4 βήματα
Ένας πραγματικά απλός/εύκολος/μη περίπλοκος τρόπος για να κάνετε τους ανθρώπους/ανθρώπους/ζώα/ρομπότ να μοιάζουν σαν να έχουν πραγματικά δροσερό/φωτεινό όραμα θερμότητας (χρώμα της επιλογής σας) Χρησιμοποιώντας το GIMP: Διαβάστε … τον … τίτλο