תוכן עניינים:

Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש: 9 שלבים (עם תמונות)
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש: 9 שלבים (עם תמונות)

וִידֵאוֹ: Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש: 9 שלבים (עם תמונות)

וִידֵאוֹ: Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש: 9 שלבים (עם תמונות)
וִידֵאוֹ: Как использовать SSD1306 128x32 OLED-дисплей I2C с кодом Arduino 2024, יולי
Anonim
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש
Arduino מותאם אישית לשמירה על לחצני הגה מסוג CAN עם סטריאו לרכב חדש

החלטתי להחליף את מערכת הסטריאו המקורית של וולוו V70 -02 שלי בסטריאו חדש כך שאוכל ליהנות מדברים כמו mp3, בלוטות 'ודיבורית.

לרכב שלי יש כמה פקדי הגה לסטריאו שאני עדיין רוצה להשתמש בהם. לא ציפיתי שזו תהיה בעיה מכיוון שיש מספר מתאמים בשוק שאמורים להיות תואמים לרכב שלי. אולם עד מהרה גיליתי שהם לא! (נראה כי למתאמים של V70 ייתכנו בעיות במכוניות -02 עקב פרוטוקול CAN שונה במקצת).

אז מה לעשות אז? לשמור על הסטריאו הישן? לחיות חיים עם כפתורים לא עובדים? ברור שלא! אם אין מתאם עובד בשוק אז נצטרך לבנות אחד!

ניתן ליישם את ההוראה הזו (עם כמה התאמות) למכוניות שבהן כפתורי ההגה מתקשרים באמצעות אוטובוס CAN.

שלב 1: גלה כיצד לשלוח פקודות לסטריאו

גלה כיצד לשלוח פקודות לסטריאו
גלה כיצד לשלוח פקודות לסטריאו
גלה כיצד לשלוח פקודות לסטריאו
גלה כיצד לשלוח פקודות לסטריאו

הדבר הראשון שעליך לעשות הוא לברר איזה סוג קלט מרחוק מצפה הסטריאו. בדרך כלל היצרנים לא יגידו לך את זה וכנראה גם אין לך גישה לשלטים מרחוק עובדים להנדסה לאחור.

השלט עבור הסטריאו החדש שלי (קנווד) מורכב מחוט אחד ולא הצלחתי לברר מידע על אופן פעולתו. עם זאת יש לו גם שקע 3.5 מ"מ לכניסה מרחוק. גם על זה לא הצלחתי לברר כלום. אך יש מידע על שקע 3.5 מ"מ עבור מותגים אחרים המציעים כי פקודות שונות מזוהות על ידי החלת התנגדות ספציפית בין קצה לשרוול (ואופציונאלי בין טבעת לשרוול). לְמָשָׁל. https://forum.arduino.cc/index.php?topic=230068.0. אז החלטתי לנסות את זה, מצויד בלוח לחם, חבורת נגדים ותקע 3.5 מ"מ המחובר לסטריאו ומחובר ללוח הלחם. דבר לא זוהה בהתחלה, אך למערכת הסטריאו יש תפריט "מצב למידה" ושם ניתן להגדיר את הפקודות בהצלחה תוך החלת התנגדות שונות. הַצלָחָה!

אולם מאוחר יותר גיליתי שטעיתי כאן: לא כל הפקודות שנדמה היה שהסטריאו למדו אכן יעבדו. לְמָשָׁל. 30 קאוהם נמצא במצב למידה אך לא עבד מאוחר יותר ובחלק מהפקודות שהגדרתי הפרש ההתנגדות היה כל כך קטן, כי מאוחר יותר הופעלה הפקודה הלא נכונה.

אז אני ממליץ לך להשתמש בלוח לחם עם נגדים וכפתורי מתג לכל הפקודות המרוחקות שברצונך לטפל בהם ולבדוק בעצם שכולם יעבדו.

אם מערכת הסטריאו של המכונית שלך לא יכולה לקבל קלט באותו אופן, יהיה עליך להבין כיצד היא פועלת כך שתוכל להתאים את הפתרון הזה. אם אתה לא מצליח להבין בכלל אז יש לך בעיה.

שלב 2: גלה היכן להתחבר לאוטובוס CAN

גלה היכן להתחבר לאוטובוס CAN
גלה היכן להתחבר לאוטובוס CAN

אתה צריך לאתר מקום טוב להתחבר לאוטובוס CAN. מכיוון שאתה מחליף סטריאו ישן שמתקשר באמצעות CAN, אתה אמור להיות מסוגל למצוא את זה מאחורי הסטריאו. אוטובוס CAN מורכב מצמד חוטים מעוותים (CAN-L ו- CAN_H). בדוק את תרשים החיווט של המכונית שלך כדי להיות בטוח.

שלב 3: הנדסה הפוכה של הודעות CAN

הנדסה הפוכה של הודעות CAN
הנדסה הפוכה של הודעות CAN

אלא אם כן גוגל תוכל להגיד לך לאיזה הודעות CAN עליך להקשיב, יהיה עליך להתחבר לאוטובוס CAN ולעשות הנדסה לאחור. השתמשתי באו ארדואינו ובמגן CAN. (אתה לא באמת צריך את מגן CAN, כפי שתראה מאוחר יותר תוכל להשתמש בכמה רכיבים זולים על קרש לחם.)

התייעץ עם Google כדי לברר באיזה קצב שידור עליך להשתמש בעת חיבור לרכב שלך. (בדרך כלל תגלו שיש מהירות גבוהה ורשת CAN במהירות נמוכה. אתם מתחברים לרשת במהירות נמוכה.)

יהיה עליך גם לתכנת את Arduino כדי לרשום את כל הודעות ה- CAN בממשק הטורי כך שתוכל לשמור אותן בקובץ יומן במחשב שלך. ה- Arduino IDE הסטנדרטי לא ישמור נתונים לקובץ יומן אבל אתה יכול להשתמש למשל מרק במקום.

לפני שתתחיל לכתוב את התוכנית עליך להתקין את ספריית CAN_BUS_Shield.

להלן כמה קוד פסאודו שיעזור לך להתחיל בתוכנית שלך:

להכין()

{init חיבור סידורי init CAN ספריית} לולאה () {אם מתקבלת הודעת CAN {קראו פורמט הודעת CAN כניסת ערך יומן כתיבת ערך יומן סידורי}}

רמזים:

תשתמש במופע של מחלקה MCP_CAN כדי לגשת לפונקציונליות של ספריית CAN:

MCP_CAN m_can;

CAN ראשונית:

בעוד (m_can.begin ()! = CAN_OK)

{עיכוב (1000); }

בדוק וקרא הודעות CAN:

בעוד (m_can.checkReceive () == CAN_MSGAVAIL)

{// קבל מזהה CAN, אורך ההודעה ונתוני ההודעות m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // עשו משהו עם נתוני ההודעה כאן}

אם אתה זקוק לעזרה נוספת תוכל למצוא קישור לתוכנית שלי בשלב מאוחר יותר. ספריית מגן CAN כוללת גם דוגמה. או בדוק את ההוראה של mviljoen2 הכוללת שלב דומה.

ראשית תזדקק לקובץ הפניה שיעזור לך לסנן נתונים. העבר את ההצתה למצב רדיו ותרשום הכל לכמה דקות מבלי לגעת בכפתורים.

לאחר מכן, עבור כל אחד מהכפתורים, התחל בכניסה, לחץ על הכפתור והפסק את הרישום.

כשתסיים אתה צריך לסנן את כל מה שיש ביומן ההפניות שלך מיומני הכפתורים שלך כדי למצוא את המועמדים שלך. גיליתי שעדיין נותרו הרבה הודעות אז ערכתי יותר יומנים ואז דרשתי ש"מועמדים לפקודה A חייבים להיות בכל קבצי כפתורי A ובשום קובץ ההפניה ". זה השאיר לי רק כמה אפשרויות לנסות.

היומנים יכילו הרבה הודעות, כך שתצטרך לכתוב תוכנית כלשהי לשם כך או אולי להשתמש ב- Excel. (השתמשתי בתוכנית עם תנאים מקודדים מאוד לצרכים שלי אז אני חושש שאני לא יכול להציע תוכנית שתוכל להשתמש בה.)

מילת אזהרה: אינכם יכולים להיות בטוחים שכפתור תמיד יפיק הודעה זהה. חלק מהסיביות עשויות להכיל מוני הגדלה וכו '(אתה יכול למעט שמזהה ההודעה יהיה זהה.)

אם במקרה יש לך וולוו V70 -02 זה מה שאתה מחפש:

  • מזהה הודעה: 0x0400066 בייט 0: 0x00, 0x40, 0x80 או 0xc0 (לא אכפת)
  • Byte1: 0x00 (לא אכפת)
  • Byte2: 0x00 (לא אכפת)
  • Byte3: 0x00-0x07 (לא אכפת)
  • Byte4: 0x1f (לא אכפת)
  • Byte5: 0x40 (לא אכפת)
  • Byte6: 0x40 (לא אכפת)
  • Byte7: מזהה לחצן: 0x77 = הגברת עוצמת הקול, 0x7b = עוצמת הקול, 0x7d = הרצועה הבאה, 0x7e = הרצועה הקודמת.

אם אתה מאמין שמצאת את הפקודות, ייתכן שיהיה רעיון טוב לשנות את התוכנית כך שהיא רק מתעדת את ההודעות המעניינות. תסתכל על חלון היומן הטורי בזמן שאתה לוחץ על הלחצנים כדי לוודא שזיהית את ההודעות הנכונות.

שלב 4: אב טיפוס החומרה

אב טיפוס החומרה
אב טיפוס החומרה

החומרה שלך צריכה להיות מסוגלת:

  1. זיהוי פקודות שהתקבלו באוטובוס CAN
  2. שלח פקודות בפורמט אחר לסטריאו

אם יש לך מספיק מקום, תוכל להשתמש במגוון Arduino ובמגן CAN לחלק הראשון ולצרף חומרה נוספת לשני. עם זאת ישנם כמה חסרונות:

  • עלות מגן CAN
  • גודל
  • ספק הכוח של ארדואינו לא ישמח אם הוא מחובר ישירות למכוניות שלך 12V (זה כנראה יעבוד אבל סביר להניח שהחיים שלו יתקצרו).

אז במקום זאת השתמשתי בדברים הבאים:

  • אטמגה 328, "מוח הארדואינו". (יש כמה גרסאות, קבל את זה ששווה לזה של Arduino Uno. אתה יכול לקנות אותו עם או בלי מטעין האתחול של Arduino.)
  • קבלים קריסטל + 16 מגה -הרץ לאות שעון.
  • מקלט משדר MCP2551.
  • בקר יכול MCP2515.
  • TSR1-2450, ממיר 6.5-36V ל 5V. (לא נעשה שימוש באב -הטיפוס מכיוון שלתוכנה לא יהיה אכפת מאספקת החשמל.)
  • מתג CD4066B שישמש בעת שליחת פקודות לסטריאו.
  • כמה נגדים. (ניתן למצוא את הערכים בסכימות הנשר בשלב מאוחר יותר.)

דבר טוב עם תצורה זו הוא שהיא תואמת באופן מלא את ארדואינו וספריית מגן CAN.

אם אתה רוצה להתמודד עם יותר מארבעה כפתורים, אולי כדאי שתשתמש במשהו אחר מאשר ה- CD4066B. ניתן לתאר את ה- CD4066B כארבעה מתגים באחד, כל אחד מהם נשלט על ידי אחד מפיני ה- Atmegas GPIO. לכל מתג יש נגד מחובר שיכול לשמש לשליטה בהתנגדות המשמשת כקלט לסטריאו. כך שניתן להשתמש בזה בקלות לשליחת ארבע פקודות שונות. אם הם משולבים אז ניתן להשיג ערכי התנגדות נוספים. כאן נכנסת הטעות שהזכרתי קודם לכן. יש לי ארבעה כפתורים, אבל תכננתי ליישם שניים מהם בלחיצה ארוכה וקצרה כדי לתת לי שש פקודות שונות. אבל בסופו של דבר גיליתי שאני לא יכול למצוא שילוב של נגדים שייתן לי שישה שילובי עבודה. סביר להניח שניתן יהיה לחבר אות יציאה אנלוגי לסטריאו (קצה 3.5 מ מ) במקום זאת. (שים לב של- Atmega אין סיכות יציאה אנלוגיות אמיתיות, כך שתידרש חומרה נוספת.)

למטרות בדיקה הכנתי גם סימולטור "מכונית וסטריאו" פשוט לחיבור לאב טיפוס שלי. זה מקל על איתור באגים, אלא אם כן אתה נהנה לשבת במכונית שלך ולתכנת אני יכול להמליץ על כך.

אב הטיפוס מאויר בלוח הלחם התחתון שבתמונה. לאספקת חשמל, תכנות ורישום סדרתי הוא מחובר ל- Arduino Uno שבו שבב Atmega הוסר.

לוח הלחם העליון הוא סימולטור הרכב + סטריאו שישמש לבדיקה ראשונית של אב הטיפוס.

אב טיפוס + סימולטור נועד לעבוד כך:

  • לחץ על אחד מכפתורי המתג בלוח הסימולטור. (אלה כפתורי ההגה שלך.)
  • כאשר תוכנית הסימולטור מזהה לחיצה על כפתור היא תשלח את הודעת ה- CAN המתאימה כל 70 ms כל עוד הכפתור נלחץ. (כי היומנים שצילמתי קודם ציינו שככה זה עובד במכונית שלי.) זה ישלח גם הרבה הודעות "זבל" מסוג CAN כדי לדמות תנועה אחרת באוטובוס.
  • הודעות CAN נשלחות לאוטובוס CAN.
  • הודעות CAN מתקבלות על ידי אב הטיפוס.
  • MCP2515 זורק את כל ההודעות הלא קשורות המבוססות על מזהה ההודעה.
  • כאשר ה- MCP2515 יקבל הודעה שצריך לטפל בה זה יצביע על כך שיש בה הודעה.
  • האטמגה תקרא את ההודעה ותחליט איזה כפתור צריך להיחשב פעיל.
  • האטמגה גם תעקוב אחר התקבלה ההודעה האחרונה, לאחר זמן מסוים הכפתור ייחשב כמשוחרר. (ההודעות CAN מצביעות רק על כפתור למטה, לא על כך שהוא נדחק או שוחרר.)
  • אם כפתור נחשב פעיל אז מתג אחד או יותר ב- CD4066B יופעל.
  • הסימולטור (המשמש כעת כסטריאו שלך) יזהה כי התנגדות מוחלת בין קצה לשרוול. (הקצה מחובר ל -3.3V ובאמצעות נגד לסיכת כניסה אנלוגית. כאשר אין פקודה פעילה סיכה זו תקרא 3.3V, כאשר פקודה פעילה הערך יוריד ויזהה את הפקודה.
  • בזמן שהפקודה פעילה, גם הלד המתאים יופעל. (ישנם שישה נוריות מכיוון שתכננתי להשתמש בלחיצה ארוכה / קצרה שונה לשניים מהכפתורים שלי.)

לפרטים נוספים אודות חומרת האב טיפוס, עיין בסכמות הנשר בשלב מאוחר יותר.

פרטים נוספים אודות חומרת לוח הסימולטור:

  • קריסטל 16 מגה -הרץ
  • 22 קבלים pF
  • יש לבחור נגדי LED על בסיס תכונות LED
  • הנגד המחובר ל- A7 ו- 3.3V, בחר למשל 2 קאוהם (לא קריטי).
  • נגדים המחוברים ל- MCP2551 ו- MCP2515 הם משיכה למעלה / משיכה. בחר למשל 10 קאוהם.

(או שאתה יכול להשתמש במגן CAN עבור "החלק CAN" של הסימולטור אם אתה מעדיף.)

חשוב שתדע כיצד ממפות סיכות Atmega לסיכות Arduino בעת עיצוב החומרה.

(אל תחבר אף נורית ישירות לתקליטור 4066B, הוא יכול להתמודד רק עם זרם נמוך. ניסיתי את זה כשבדקתי את הפלט לראשונה והשבב הופך להיות חסר תועלת. הדבר הטוב הוא שקניתי כמה מהם רק בגלל שהם הם כל כך זולים.)

שלב 5: תכנות נתיכים

אולי שמת לב בשלב הקודם כי לאב טיפוס אין רכיבים נפרדים ליצירת אות השעון ל- MCP2515. הסיבה לכך היא שכבר יש קריסטל של 16 מגה -הרץ המשמש כאות השעון של אטמגה שאנו יכולים להשתמש בו. אך איננו יכולים פשוט לחבר אותו ישירות ל- MCP2515 וכברירת מחדל אין אות שעון על ה- Atmega.

(אם אתה מעדיף תוכל לדלג על שלב זה ולהוסיף במקום זאת את חומרת השעון הנוספת.)

עם זאת אנו יכולים להשתמש במשהו שנקרא "תכנות נתיכים" כדי לאפשר אות יציאה מהשעון על אחד מהסיכות של GPIO.

ראשית יהיה עליך לאתר קובץ בשם "boards.txt" המשמש את IDE Arduino שלך. יהיה עליך להעתיק את הערך עבור Arduino Uno, לתת לו שם חדש ולשנות את הערך עבור low_fuses.

הלוח החדש שלי נראה כך:

################################################### #############מבוסס על Arduino Uno#שינויים:#נמוך_ נתיכים השתנו מ 0xff ל- 0xbf כדי לאפשר שעון 16 מגה -הרץ#יציאה ב- Atmega PB0/pin 14 = Arduino D8

clkuno.name = שעון החוצה (Arduino Uno)

clkuno.upload.protocol = arduino clkuno.upload.maximum_size = 32256 clkuno.upload.speed = 115200 clkuno.bootloader.low_fuses = 0xbf clkuno.bootloader.high_fuses = 0xde clkuno.bootloader.extended_fuses = 0xdot.bootloader.fotloader.fotloader.bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000 לי

##############################################################

שים לב שעון השעון מופעל על ידי הגדרת סיט הבקרה שלו ל- 0.

כאשר יצרת את הלוח החדש בקובץ התצורה של הלוחות, יהיה עליך לצרוב מטען אתחול חדש לאטמגה. ישנן דרכים שונות לעשות זאת, השתמשתי בשיטה המתוארת ב-

לאחר שתעשה זאת, זכור לבחור את סוג הלוח החדש שלך ולא את ה- Arduino Uno בעת העלאת תוכנית לאטמגה.

שלב 6: התוכנה

התוכנה
התוכנה

הגיע הזמן להפוך את החומרה המטומטמת להוספת תוכנות.

להלן כמה קוד פסבדו לאב טיפוס:

lastReceivedTime = 0

lastReceivedCmd = none cmdTimeout = 100 setup () {אפשר כלב שמירה להגדיר סיכות D4-D7 כסיכות פלט init CAN setup CAN filter} לולאה () {אפס כלב שמירה אם (מתקבלת הודעת CAN) {עבור כל פקודת כפתור {אם הודעת CAN שייכת ל- פקודת הכפתור {lastReceivedTime = now lastReceivedCmd = cmd}}} אם עכשיו> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} עבור כל פקודת כפתור {אם lastReceivedCmd היא פקודת כפתור {set command pin output = on} else {set command pin output = off }}}

cmdTimeout מחליט כמה זמן עלינו לחכות לפני שנשקול את הכפתור הפעיל האחרון ששוחרר. מכיוון שפקודות הודעת כפתור CAN נשלחות בערך כל 70 אלפיות השנייה, היא צריכה להיות גדולה מזו עם מרווח מסוים. אבל אם הוא יהיה גדול תהיה חווית פיגור. אז 100 ms נראה כמועמד טוב.

אבל מהו כלב שמירה? זוהי תכונת חומרה קטנה שימושית שיכולה להציל אותנו במקרה של התרסקות. תארו לעצמכם שיש לנו באג שגורם לתוכנית לקרוס בזמן שהפקודה להגברת עוצמת הקול פעילה. אז היינו בסופו של דבר עם הסטריאו על עוצמת הקול המרבית! אך אם כלב השמירה לא יתאפס לזמן הספציפי הוא יחליט שמשהו לא צפוי קרה ופשוט תנפיק איפוס.

הגדרת חלל ()

{// אפשר מקסימום 250 ms עבור הלולאה wdt_enable (WDTO_250MS); // דברים אחרים של init} לולאת void () {wdt_reset (); // לעשות דברים }

האם ניתן לסנן? ובכן, אתה יכול להגדיר את בקר CAN למחוק את כל ההודעות שאינן תואמות את המסנן כך שהתוכנה לא תצטרך לבזבז זמן על הודעות שלא אכפת לנו מהן.

מסכה ארוכה ללא חתימה = 0x1fffffff; // כלול את כל 29 סיביות הכותרת במסכה

filterId ארוך ללא חתום = 0x0400066; // אכפת לנו רק מזהה הודעת CAN זה m_can.init_Mask (0, CAN_EXTID, מסכה); // מסכה 0 חלה על מסנן 0-1 m_can.init_Mask (1, CAN_EXTID, מסכה); // מסכה 1 חלה על מסנן 2-5 m_can.init_Filt (0, CAN_EXTID, filterId); m_can.init_Filt (1, CAN_EXTID, filterId); m_can.init_Filt (2, CAN_EXTID, filterId); m_can.init_Filt (3, CAN_EXTID, filterId); m_can.init_Filt (4, CAN_EXTID, filterId); m_can.init_Filt (5, CAN_EXTID, filterId);

בדוק את קוד ספריית CAN ואת תיעוד בקר CAN לפרטים נוספים אודות הגדרת מסנן + מסכה.

תוכל גם להגדיר את בקר CAN להעלות הפרעה כאשר מתקבלת הודעה (שאינה מסוננת). (לא נכלל בדוגמה למעלה אבל יש לזה קוד בתוכנית שלי.) במקרה זה זה לא ממש מוסיף ערך וזה עלול לבלבל אם אינך רגיל לתכנת.

אז זו הייתה תוכנת האב טיפוס לסיכום. אך אנו זקוקים לקוד כלשהו גם ללוח הסימולטור:

lastSentTime = 0

minDelayTime = 70 הגדרות () {הגדרת סיכות A0-A5 כסיכות פלט להגדיר סיכות D4-D7 כסיכות קלט עם זרימה פנימית. init CAN} לולאה () {לשלוח "זבל" יכולה לשלוח msg set activeButton = none עבור כל כפתור {אם לוחצים על הלחצן {set activeButton = button}} אם activeButton! = none {if now> lastSentTime + minDelayTime {פקודה של לחצן שלח יכולה לשלוח הודעה } הגדר lastSentTime = now} inval = קרא סיכה A7 foreach (cmd) {if (min <inval <max) {led on} else {led off}} המתן 1 ms}

פעולה זו תשלח ללא הרף הודעות CAN "זבל" בערך כל אלפיות השנייה ותוך כדי לחיצה על כפתור, הפקודה המתאימה כל 70 אלפיות השנייה.

ייתכן שיהיה עליך לרשום את הקלט על סיכה A7 תוך לחיצה על הכפתורים השונים כדי לברר ערכים מתאימים עבור המשתנים min ו- max השייכים לכל כפתור. (או שאתה יכול לחשב את זה, אבל למעשה קריאת הקלט תעניק לך ערכים מדויקים יותר.)

אתה צריך להיות קצת זהיר כאשר אתה מתכנת את מצבי הסיכה. אם תגדיר בטעות את הפינים שנועדו להשתמש בעיצוב פנימי כסיכות יציאה במקום זאת, תיצור קיצור דרך פוטנציאלי שיפגע בארדואינו בעת הגדרת הפלט גבוה.

אם אתה רוצה לבדוק את התוכניות שלי ניתן להוריד אותן כאן:

  • תוכנית יומן הודעות CAN
  • תוכנית ללוח סימולטור
  • תוכנית לאב טיפוס / לוח סופי

עליך להיות מודע לכך שתוכניות אלה לא ממש תואמות את קוד הפסאודו כאן, הן מכילות הרבה דברים "מיותרים" שאינם נחוצים באמת ואם אינך מכיר תכנות מונחה עצמים כנראה שזה יכול להיות קצת קשה לקריאה..

שלב 7: החומרה הסופית

החומרה הסופית
החומרה הסופית
החומרה הסופית
החומרה הסופית
החומרה הסופית
החומרה הסופית

כאשר אתה מרוצה מהתוכנית שלך (זכור לבדוק את אב הטיפוס במכונית לאחר בדיקה אחרונה עם לוח הסימולטור) הגיע הזמן לבנות את החומרה האמיתית.

יש לך כאן שלוש אפשרויות:

  • מהיר ומלוכלך - הלחם את הדברים יחד על לוח אב טיפוס של PCB.
  • הארדקור DIY - חרוט PCB משלך.
  • הדרך העצלה - הזמינו PCB מקצועי להלחמת הרכיבים עליו.

אם אתה לא ממהר אני יכול להמליץ על האפשרות האחרונה. אם אתה רק צריך PCB קטן כזה זה מאוד זול להזמין אותו מסין. (ואז כנראה תקבל עשר חתיכות בערך כך שתוכל להרשות לעצמך כמה טעויות הלחמה.)

כדי להזמין PCB תצטרך לשלוח את העיצוב שלך בפורמט Gerber. ישנן תוכנות שונות לכך. השתמשתי בנשר שאני יכול להמליץ עליו. אתה יכול לצפות לכמה שעות ללמוד את זה אבל אז זה עובד מצוין. עבור לוחות קטנים כמו זה אתה יכול להשתמש בו בחינם.

היזהר כאשר אתה עושה את העיצוב. אתה לא רוצה לחכות ארבעה שבועות למשלוח רק כדי לגלות שעשית משהו לא בסדר.

(אם יש לך כישורי הלחמה טובים אתה יכול לעצב עבור רכיבים המותקנים על פני השטח ולקבל מתאם ממש קטן. לא עשיתי זאת.)

לאחר מכן הזמינו למשל https://www.seeedstudio.com/fusion_pcb.html. עקוב אחר ההוראות כיצד ליצור את קבצי Gerber מהעיצוב שלך. תוכל גם לקבל תצוגה מקדימה של התוצאה כדי לוודא שהיא תקינה.

(בסופו של דבר נאלצתי לבחור נגדים אחרים ל- R4-R7 מאשר המופיעים בתמונת הסכימות. במקום זאת השתמשתי ב- 2k, 4.7k, 6.8k ו- 14.7k.)

וזכרו - אל תבלבלו בין מספור סיכות Atmega לבין מספור סיכות Arduino!

אני ממליץ לך לא להלחם את שבב Atmega ישירות אלא להשתמש בשקע. לאחר מכן תוכל להסיר אותו בקלות למקרה שתצטרך לתכנת אותו מחדש.

שלב 8: הרכבה לרכב

הרכבה לרכב
הרכבה לרכב
הרכבה לרכב
הרכבה לרכב

עכשיו לחלק הכי כיף - הרכיבו אותו במכונית שלכם והתחילו להשתמש בו! (לאחר שיצרת / קנית מארז עבורו.)

אם כבר בדקת לגמרי את אב הטיפוס במכונית שלך הכל אמור לעבוד בצורה מושלמת.

(כפי שציינתי קודם לכן לא עשיתי זאת ולכן נאלצתי להחליף כמה נגדים ולבצע שינויים בתוכנית שלי.)

שקול גם אם עליך להרכיב אותו מאחורי הסטריאו או במקום אחר. מצאתי מקום טוב מעל תא הכפפות שלי, בו אוכל להגיע אליו מתוך תא הכפפות מבלי לפרק דבר. זה עשוי להיות שימושי אם אחליט לשדרג אותו מאוחר יותר.

סוף סוף הכפתורים שלי שוב עובדים! איך יכולתי לשרוד חודשיים בלעדיהם?

שלב 9: שיפורים עתידיים

כאמור, אם אעשה גרסה 2.0 של זה אחליף את 4066B במשהו אחר (כנראה פוטנציומטר דיגיטלי) לצורך גמישות רבה יותר.

יש גם הרבה דברים אחרים שאתה יכול לעשות. לְמָשָׁל. הוסף מודול Bluetooth ועשה אפליקציית שלט רחוק לטלפון שלך. או מודול gps, אז כשאתה קרוב לבית תוכל להעלות את עוצמת הקול באופן אוטומטי ולשלוח את הודעת ה- "windows down" כדי שכל שכניך יוכלו ליהנות מהמוזיקה הנפלאה שלך.

מוּמלָץ: