תוכן עניינים:
- שלב 1: רישום נייר
- שלב 2: רשימת חומרה
- שלב 3: עיצוב מעגלים
- שלב 4: חיבור חומרה
- שלב 5: עיצוב תוכנה
- שלב 6: איתור באגים בלוח הלוח
- שלב 7: הרכבת חומרה
- שלב 8: עיצוב דיור אלקטרוניקה ב- Adobe Illustrator
- שלב 9: אב טיפוס מקרטון
- שלב 10: אב טיפוס של דיקט ליבנה
וִידֵאוֹ: FinduCar: מפתח לרכב חכם המוביל אנשים לאן המכונית חונה: 11 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:16
על מנת לפתור את הבעיות לעיל, פרויקט זה מציע לפתח מפתח לרכב חכם שיכול לכוון אנשים למקום בו החנו את המכונית. והתוכנית שלי היא שילוב GPS במפתח הרכב. אין צורך להשתמש באפליקציית הסמארטפון כדי לעקוב אחר המכונית, כל ההנחיות יופיעו רק על מפתח הרכב.
שלב 1: רישום נייר
כאשר אנשים לוחצים על הכפתור כדי לנעול את המכונית, ניתן לרשום את פרטי המיקום באופן אוטומטי בבקר המיקרו. לאחר מכן, כאשר אנשים מתחילים לנווט אל המכונית, נורית ה- LED השניה מוארת כדי לכוון למיקום המכונית והתדר המהבהב מראה את המרחק למכונית. הם יכולים לעקוב בקלות אחר הנורית המהבהבת ולמצוא במהירות את המכונית.
שלב 2: רשימת חומרה
אלה המרכיבים המשמשים בפרויקט זה. חלקם מגיעים מתוך ערכות החלקיקים (קרש לחם, כפתור, כותרות), אחרים נרכשים מהאתר הרשמי של Adafruit (Adafruit Feather M0, מודול GPS של Adafruit Ultimate, סוללת Lpoly וסוללות מטבעות) ואמזון (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
הגדרת בטל () {
Serial.println ("בדיקת הד GPS"); Serial.begin (9600); Serial1.begin (9600); // ברירת מחדל ל- NMEA GPS baud}
לולאת חלל () {
if (Serial.available ()) {char c = Serial.read (); Serial1.write (ג); } אם (Serial1.available ()) {char c = Serial1.read (); Serial.write (ג); }}
טבעת LED מהבהבת
עיין בדוגמאות NeoPixel של Adafruit.
פונקציות חישוב 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
int led_time (זווית כפולה) {
int flag = 0; אם (זווית = 15) {זווית_זמן = זווית_זמן + 1; } אם (דגל == 1) {זווית_זמן = 12 - זווית_זמן; } זמן החזרה זווית; }
חשב את המרחק בין האדם לרכבו
// חשב את המרחק
מרחק כפול (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; החזרות; }
פונקציות תצוגת LED
הדליקו נוריות LED במעגל המראות שהוא מתחיל לנווט
// תאורת טבעת LED אחת אחת מראה שהניווט מתחיל
void colorWipe (uint32_t c, uint8_t wait) {
עבור (uint16_t i = 0; i strip.setPixelColor (i, c); strip.show (); עיכוב (המתן);}}
קבל את תדר ה- LED על בסיס המרחק
// קבל תדר LED
תדר int (מרחק כפול) {
int f = (int) מרחק * 20; החזר f; }
מהבהב את הנורית המסויימת המצביעה על כיוון המכונית
// תצוגה על LED
strip.clear ();
strip.show (); עיכוב (תדירות (car_person_distance)); // עיכוב (500); strip.setPixelColor (זווית_זמן, 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
#הגדר Neopixel_LED_PIN 6
#define Neopixel_LED_NUM 12 #Define Button_Lock_PIN 13 #Define Button_Unlock_PIN 12 #define GPS Serial serial1
#define GPSECHO שקר
Adafruit_GPS GPS (& GPSSerial); Adafruit_NeoPixel strip = Adafruit_NeoPixel (Neopixel_LED_NUM, Neopixel_LED_PIN, NEO_GRB + NEO_KHZ800); נעילת כפתור כפתור (Button_Lock_PIN); כפתור כפתור_הנעילה (Button_Unlock_PIN); int button_flag = 0; int led_flag = 1; טיימר uint32_t = מיליס (); car_lat כפול, car_lon; מרחק כפול_אדם_אדם; 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 () {// if (Serial.available ()) {
// char c = Serial.read (); // Serial1.write (ג); //} // if (Serial1.available ()) {char c = GPS.read (); if (GPSECHO) if (c) Serial.print (c); // אם מתקבל משפט, נוכל לבדוק את סכום הבידוק, לנתח אותו … אם (GPS.newNMEAreceived ()) {// דבר מסובך כאן הוא אם נדפיס את המשפט NMEA, או נתונים // בסופו של דבר לא נקשיב לתפוס משפטים אחרים! // לכן היזהר מאוד אם אתה משתמש ב- OUTPUT_ALLDATA ונסה להדפיס נתונים Serial.println (GPS.lastNMEA ()); // זה גם מגדיר את הדגל newNMEAreceived () ל- false אם (! GPS.parse (GPS.lastNMEA ())) // זה גם מגדיר את הדגל newNMEAreceived () להחזרה שווא; // אנחנו לא מצליחים לנתח משפט ובמקרה זה עלינו לחכות לעוד}} אם אם מיליס () או טיימר עוטף, פשוט נאפס אותו אם (טיימר> מילי ()) טיימר = מילי (); if (millis () - טיימר> 2000) {timer = millis (); // אפס את הטיימר 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 ("תאריך:"); 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.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; } אם (button_flag == 1) {car_person_distance = 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 = אזימוט (100.0005, 100.0005, 100.0, 100.0); // חשב את הזמן על שעון LED car_person_angle = car_azimuth - move_direction; time_time = led_time (car_person_angle); // תצוגה ב- strip strip.clear (); strip.show (); // עיכוב (תדירות (car_person_distance)); עיכוב (500); strip.setPixelColor (זווית_זמן, 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: אב טיפוס של דיקט ליבנה
זה היה אב הטיפוס הראשוני. לבסוף נוסף לאחד החלקים חור מרובע לחיבור למטען.
מוּמלָץ:
פעמון דלת חכם מסוג Raspberry Pi DIY שיכול לזהות אנשים, מכוניות וכו ': 5 שלבים
פעמון דלת חכם מסוג Raspberry Pi שיכול לזהות אנשים, מכוניות וכו ': עיצוב זה מסוג Steampunk משתלב עם עוזר הבית ומערכת השמע מרובת החדרים שלנו כדי לתקשר עם שאר הבית החכם שלנו. במקום לקנות פעמון טבעת (או קן, או אחד המתחרים האחרים) בניתי את הדלת החכמה שלנו
כניסה לרכב ביומטרי - מכונית אמיתית ללא מפתח: 4 שלבים
כניסה לרכב ביומטרי - מכונית אמיתית ללא מפתח: לפני כמה חודשים הבת שלי שאלה אותי, מדוע מכוניות מודרניות אינן מצוידות במערכת כניסה ביו -מטרית, כאשר אפילו טלפון סלולרי מחזיק אותה. מאז עבדתי על יישום אותו ולבסוף הצליח להתקין ולבדוק משהו ב- T שלי
בניין אזעקה לרכב ללא מפתח: 3 שלבים
בניית אזעקה לרכב ללא מפתח: רוב הרכבים המודרניים המתקדמים מגיעים עם אזעקה לרכב ללא מפתח או PKE: כפי שהשם אומר במכונית פחות מכונית אתה לא צריך להשתמש בכל מפתח כדי לפתוח/לנעול את הדלתות וגם לא להניע את מנוע הרכב. או לנעול את הדלתות הנהג פשוט לוחץ על הסמארטפון
אנטנת מפתח פורד מפתח: 3 שלבים
אנטנת פורד מפתח: מכיוון שפורד זולה לחלוטין או רשלנית הדלתות שלי ממשיכות להקפיא סגורות או פתוחות. 3 נסיעות לא מוצלחות לסוחר לעבודה מאוחר יותר. החלטתי לנקוט צעדים כדי להפחית את התסכול שלי בתקופה הזו בין הזמן לבין כשהם עולים עם
מעמד לרכב לרכב אייפון לאייפון או למגע iPod: 14 שלבים
Iphone Car Stand Doc לאייפון או ל- iPod touch: מערכת ריסון לאייפון או iPod Touch לרכב. משתמש בפריטים שיש לך בבית, קנה רק סקוטש ($ 3), מושג ירוק! לאחר שלא מצאתי תמיכה דיסקרטית בשוק הספציפי לאייפון, החלטתי להכין כזה בעצמי. (מידע נוסף