فهرست مطالب:

کلیدهای چرخ دنده به آداپتور استریو خودرو (CAN Bus -> Key1): 6 مرحله
کلیدهای چرخ دنده به آداپتور استریو خودرو (CAN Bus -> Key1): 6 مرحله

تصویری: کلیدهای چرخ دنده به آداپتور استریو خودرو (CAN Bus -> Key1): 6 مرحله

تصویری: کلیدهای چرخ دنده به آداپتور استریو خودرو (CAN Bus -> Key1): 6 مرحله
تصویری: نه کاری که نمیدونستی گوشیت انجام میده | 9 کاربرد مخفی گوشی 2024, جولای
Anonim
CAN اتوبوس بو کشیدن
CAN اتوبوس بو کشیدن

کلید 1) "src =" https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp

ارسال دستورات به استریو
ارسال دستورات به استریو

Key1) "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'٪} ">

چند روز پس از خرید یک ماشین دست دوم ، متوجه شدم که نمی توانم موسیقی را از طریق تلفن استریو ماشین پخش کنم. ناامیدکننده تر این بود که ماشین بلوتوث داشت ، اما فقط اجازه تماس صوتی را می داد ، نه موسیقی. همچنین دارای پورت USB ویندوزفون بود ، اما بدون دانگل 60 دلاری با iPhone کار نمی کرد.

با تعویض استریو در اتومبیل های قبلی خود ، بدون فکر و تحقیق زیاد ، من یک استریو جایگزین 40 دلار از یک وب سایت معروف "ارزان" سفارش دادم. این استریو با یک دوربین معکوس ، Car Play و مجموعه ای از ویژگی های اضافی همراه بود ، که به نظر می رسید ارزش بسیار بهتری نسبت به دانگل گرانتر دارد که تنها یک کار را انجام می دهد.

پس از خرید و رنگ آمیزی یک صفحه جدید ، چاپ سه بعدی روی پایه و کارهای اضافی (که به خودی خود می تواند قابل آموزش باشد) ، به یک کشف ناخوشایند رسیدم. دستورات کلید فرمان از طریق گذرگاه CAN ارسال می شد ، اما استریو فقط ورودی Key1 داشت. من که از نیمه راه خود را رها نکردم ، یک آداپتور 60 اینچی سفارش دادم که معلوم شد کار نمی کند. در این مرحله تصمیم گرفتم خودم یک آداپتور بسازم.

من مهندس برق نیستم ، فقط دانش الکترونیک ابتدایی دارم و این برای من یک پروژه یادگیری و اکتشاف بود. توصیه من این است که ابتدا مشخصات خودرو خود را بررسی کرده و یک رادیو سازگار سفارش دهید ، اما اگر قبلاً گیر کرده اید (همانطور که من بودم) با مسئولیت خود دستورالعمل ها را دنبال کنید.

تدارکات

آداپتور (تقریباً 15 دلار)

  • Arduino Pro Mini 5V (یا یک برد سازگار)
  • ماژول گذرگاه MCP2515 CAN
  • ورق ورق 60x80 میلی متر
  • پتانسیومتر دیجیتال X9C104 100K اهم (بستگی به استریو شما دارد)
  • DC-DC تنظیم کننده LM2596S 3-40V 3A پایین آمدن
  • دارنده فیوز کابل + فیوز (100-200 اهم)
  • جعبه پروژه یا چاپگر سه بعدی برای چاپ آن
  • جک های استریو ماشین (مرد + زن)
  • لحیم کاری لوازم ، سیم و غیره

یاورهای آزمایش (به شدت مورد نیاز نیست اما آزمایش را بسیار ساده تر می کند)

  • آردوینو (هر برد 5 ولت انجام می دهد)
  • ماژول گذرگاه MCP2515 CAN
  • تخته نان + بلوز

مرحله 1: می توانید بوس اتوبوس را بویید

به جای این که یک دسته سیم در داخل ماشین شما به هم متصل شوند و مجموعه ای از سیستم ها را به هم متصل کنند ، برخی از خودروهای مدرن دارای جفت سیم به هر قسمت هستند. اطلاعات به عنوان بسته های داده دیجیتال از طریق این سیم ها ارسال می شوند و همه سیستم ها می توانند همه پیام ها را بخوانند. این شبکه CAN bus است (ممکن است چندین شبکه در ماشین شما وجود داشته باشد ، بنابراین ممکن است همه اطلاعات قابل مشاهده نباشند).

کاری که ما می خواهیم انجام دهیم این است که به شبکه گذرگاه CAN متصل شویم و ترافیک داده را "بوییم" کنیم. به این ترتیب ما می توانیم وقتی کلید فرمان را فشار می دهیم "ببینیم". هر بسته دارای یک شناسه است که نشان دهنده زیر سیستم خودرویی است که بسته را ارسال کرده است و داده هایی که نشان دهنده وضعیت سیستم است. در این مورد ما در تلاش هستیم تا شناسه زیرسیستم که پیام های کلید فرمان را ارسال می کند و نمایش داده های هر کلید را بیابیم.

اگر خوش شانس هستید ، ممکن است مقادیر مربوط به ماشین خود را در جایی آنلاین پیدا کنید و می توانید این مرحله را رد کنید.

این فرایند کمی درگیر است و قبلاً در جاهای دیگر توضیح داده شده است ، بنابراین من فقط آن را خلاصه می کنم:

  • مقادیر صحیح ارتباط CAN bus را در وسیله نقلیه خود بیابید. برای ماشین من (فیات ایده 2009) سرعت باک 50 کیلوبایت بر ثانیه و سرعت کلاک 8 مگاهرتز بود.
  • با استفاده از ماژول گذرگاه CAN و آردوینو در پیکربندی "sniffer" به شبکه CAN bus متصل شوید.
  • با استفاده از ابزاری مانند https://github.com/alexandreblin/python-can-monito… ، مقادیر گذرگاه CAN را در لپ تاپ خود بخوانید. انجام این کار بدون آن بسیار دشوار خواهد بود ، زیرا پیام های زیادی حتی زمانی که ماشین هیچ کاری انجام نمی دهد ارسال می شود.
  • دکمه فرمان را فشار دهید و تغییرات را یادداشت کنید. این ممکن است کمی پیچیده باشد زیرا پیام های زیادی ارسال می شود و شاید تشخیص این که کدام کدام است دشوار باشد.

در اینجا دو مقاله عالی وجود دارد که فرایند را به طور کامل توضیح می دهند:

  • https://medium.com/@alexandreblin/can-bus-reverse-…
  • https://www.instructables.com/id/CAN-Bus-Sniffing-…

در پایان شما باید شناسه زیرسیستم را داشته باشید که از آن برای گوش دادن به پیامهای گذرگاه فرمان CAN فرمان استفاده می کنیم و لیستی از مقادیر هگزا دسیمال برای دستورات کلیدی. در مورد من داده ها به این شکل بودند:

شناسه | شناسه شش ضلعی | بایت 0 | بایت 1 | دکمه

------------------------------------------------- 964 | 3C4 | 00 | 00 | بدون دکمه 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | تلفن 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | برنده 964 | 3C4 | 00 | 02 | بالا 964 | 3C4 | 00 | 01 | پایین 964 | 3C4 | 00 | 04 | خوب

شناسه زیر سیستم 3C4 است (در این مورد) ، که یک عدد هگزادسیمال است ، بنابراین ما باید آن را مانند 0x3C4 در طرح های آردوینو بنویسیم. ما همچنین به بایت 0 و 1 علاقه داریم (در مورد شما ممکن است تعداد بایت بیشتر باشد). اینها نیز مقادیر هگزا دسیمال هستند ، بنابراین باید با 0x اصلی نیز نوشته شوند.

اگر مقادیر را به باینری تبدیل کنید ، متوجه می شوید که بیت ها با هم همپوشانی ندارند (برای مثال + 0b10000000 و - 0b01000000) این به این ترتیب است که می توان چندین کلید را همزمان فشار داد.

من پیشنهاد می کنم که موشک را با موادی که در قسمت "راهنمای آزمایش" ذکر شده است بسازید ، بنابراین بعداً می توانید از آن برای شبیه سازی ماشین خود استفاده کنید. این امر باعث می شود شما نتوانید تمام مدت زمانی که در حال ساخت و آزمایش آداپتور هستید در ماشین خود بنشینید. می توانید از طرح ارائه شده به عنوان شبیه ساز استفاده کنید. "subsystemId" ، "data0" و "data1" را با مقادیری که کشیده اید تغییر دهید.

مرحله 2: ارسال دستورات به Stereo

ارسال دستورات به استریو
ارسال دستورات به استریو

قبل از شروع به ساخت آداپتور ، بهتر است ابتدا آزمایش کنید که آیا استریو می تواند دستورات را دریافت کند.

من باتری یدکی ماشین داشتم ، بنابراین استریو را مستقیماً به آن وصل کردم. اگر منبع تغذیه نیمکت 12 ولت دارید ، حتی بهتر. متأسفانه نتوانستم اطلاعات زیادی در مورد ورودی Key1 در واحد خود پیدا کنم ، بنابراین به آزمایش روی آوردم. من در این مرحله بیش از حد نگران سوختن استریو نبودم ، زیرا نسبتاً ارزان است ، و این آخرین تلاش من برای استفاده از آن با ماشین من بود.

استریو دارای صفحه یادگیری فرمان است ، جایی که امکان انتخاب یکی از دو مقدار مقاومت (1K و 3.3K) و مشاهده مقدار "ولتاژ" (0-255) وجود دارد. "ولتاژ" نقل شده است زیرا گمراه کننده است. من زمان زیادی را صرف اعمال ولتاژهای مختلف روی Key1 کردم بدون شانس. من همچنین سعی کردم از مقاومت های مختلف برای اعمال ولتاژ بدون شانس استفاده کنم.

این پیشرفت زمانی رخ داد که من سعی کردم سیم Key1 را به زمین باتری لمس کنم ، که منجر به کاهش "ولتاژ" به 0 شد. این در ترکیب با مقاومت های مختلف مقادیر ثابت "ولتاژ" را روی صفحه یادگیری ایجاد می کند.

اکنون که می دانم چگونه ورودی ها را به استریو ارسال کنم ، به راهی برای ارسال آنها از طریق آردوینو نیاز داشتم. در حال حاضر من در مورد مولتی پلکسرها نشنیده ام ، که همراه با برخی از مقاومت ها ، ممکن است یک راه حل سریعتر و قابل اطمینان تر باشد (هنوز مطمئن نیستم که آیا این امکان پذیر است یا خیر) ، بنابراین از پتانسیومتر دیجیتال استفاده کردم. در ابتدا با کارکردن دیگ دیجیتال مشکلاتی داشتم ، تا اینکه فهمیدم باید آن را به عنوان رئوستات سیم کشی کنم تا به عنوان یک مقاومت متغیر به جای تقسیم کننده ولتاژ عمل کند. اساساً مجبور شدم پایانه های RH و RW را وصل کنم.

علاوه بر مقاومت ، زمان بندی بسیار مهم بود. اگر افت مقاومت بسیار کوتاه باشد ، فرمان ثبت نمی شود. اگر طولانی باشد ، ممکن است چندین بار ثبت شود. افت 240 میلی ثانیه ، و 240 میلی ثانیه تاخیر به دنبال آن تا زمانی که فرمان بعدی برای استریو من کاملاً قابل اعتماد عمل کرد. در حالی که به نظر می رسد زمان بسیار کمی است ، اما این بدان معناست که ما می توانیم حداکثر 2 فرمان در ثانیه ارسال کنیم ، که اگر سعی می کنید به سرعت صدا را بالا یا پایین ببرید ، قابل توجه است. من سعی کردم با زمان بندی ها و الگوهای مختلف بازی کنم ، که سرعت را افزایش داد اما چندان قابل اعتماد نبود. اگر ایده ای در مورد نحوه بهبود این موضوع دارید ، لطفاً آنها را در نظرات بنویسید.

قبل از ادامه کار ، پیشنهاد می کنم یک نمونه اولیه بسازید تا بررسی کنید آیا استریو شما ورودی مشابهی را می پذیرد. حتی اگر ولتاژهای متفاوتی را بپذیرد ، آداپتور باید با تغییرات جزئی در سیم کشی و طرح آردوینو کار کند.

مرحله 3: ساخت آداپتور

ساخت آداپتور
ساخت آداپتور
ساخت آداپتور
ساخت آداپتور
ساخت آداپتور
ساخت آداپتور

پس از آزمایش همه اجزا به طور جداگانه ، و آزمایش آنها با هم روی یک تخته نان ، زمان آن رسیده بود که به آنها خانه دائمی تری بدهیم. این کار چند ساعت طول کشید تا قطعات و لحیم کاری انجام شود.

در بالا سمت چپ تنظیم کننده گام به گام پایین است که 12 ولت را از باتری خودرو به 5 ولت تبدیل می کند که می تواند توسط سایر قطعات مورد استفاده قرار گیرد.

در پایین سمت چپ ماژول CAN bus قرار دارد که مقادیر شبکه CAN bus خودرو را خوانده و به آردوینو هدایت می کند.

در بالا سمت راست پتانسیومتر دیجیتال (سیم کشی شده به عنوان رئوستات) است که به عنوان یک مقاومت متغیر بین زمین و ورودی Key1 استریو عمل می کند.

در پایین سمت راست Arduino قرار دارد که به عنوان مغز آداپتور عمل می کند و پیام های گذرگاه CAN را به مقاومت هایی تبدیل می کند که توسط استریو خوانده می شوند.

در ورودی 12 ولت یک فیوز 150 میلی آمپر وجود دارد که به احتمال زیاد از مدار محافظت نمی کند ، اما برای جلوگیری از آتش سوزی در صورت اتصال کوتاه وجود دارد.

مرحله 4: نرم افزار

نرم افزار
نرم افزار

پس از بارگیری ، هر سه فایل.ino را در یک پوشه قرار دهید. به این ترتیب همه بخشی از یک طرح خواهند بود و با هم به Arudino اعزام می شوند.

همچنین باید کتابخانه های مورد نیاز را به Arduino IDE اضافه کنید. برای انجام این کار ، فایل های زیر را بارگیری کنید:

github.com/autowp/arduino-mcp2515/archive/…

github.com/philbowles/Arduino-X9C/archive/…

سپس هر دو را با رفتن به Sketch> Include Library> Add. Zip Library… اضافه کنید.

CanBusStereoAdapter.ino

تنظیمات اولیه در این فایل انجام می شود.

دستور کلید مقادیر گذرگاه CAN در بالا تعریف شده است. مگر اینکه شما ماشین مشابه من داشته باشید ، به احتمال زیاد مجبور خواهید بود ارزش های خود را در نظر بگیرید. شما می توانید از مقادیر هگزا دسیمال در sniffer استفاده کنید ، من از باینری استفاده کردم ، بنابراین راحت تر می بینید که هیچ همپوشانی تصادفی در بیت ها وجود ندارد.

همه خودروها فرمان فرمان یکسانی ندارند ، بنابراین می توانید مقادیر تعریف شده را حذف ، اضافه یا ویرایش کنید.

فراموش نکنید که شناسه زیر سیستم خود را در "STEERING_ID" جایگزین کنید.

CanBus.ino

این فایل شنونده گذرگاه CAN را تنظیم می کند ، بسته ها را تفسیر می کند و مقادیر مقاومت را در یک بافر دایره ای قرار می دهد.

پیکربندی گذرگاه CAN را در عملکرد "setupCanBus" متناسب با ماشین خود تنظیم کنید.

ما از یک بافر دایره ای استفاده می کنیم زیرا همانطور که قبلاً ذکر شد ، ورودی فرمان فرمان بسیار سریعتر از ورودی استریو است. به این ترتیب در حالی که پتانسیومتر دیجیتال کار خود را انجام می دهد ، هیچ دستوری را از دست نمی دهیم. اگر دستورات زیادی وارد کنیم ، قدیمی ترین دستورها ابتدا حذف می شوند ، زیرا آنها کمترین اهمیت را دارند. این همچنین به ما این امکان را می دهد که در صورت فشردن چندین دکمه ، مورد را مدیریت کنیم ، زیرا ورودی استریو فقط یک مقدار را در یک زمان می پذیرد.

اگر هر یک از تعاریف دستور را در "CanBusStereoAdapter.ino" تغییر داده اید ، باید آنها را در عملکرد "handleMessageData" نیز به روز کنید. "handleMessageData" بررسی می کند که فریم های داده گذرگاه CAN ارائه شده دارای دستورات شناخته شده با استفاده از عملیات بیتی AND باشد.

به عنوان مثال ، اگر من >> و + را همزمان فشار داده باشم ، یک فریم داده با مقدار 0b10010000 به ما می دهد. >> (برای ماشین من) 0b00010000 به صورت دودویی ، و + 0b10000000 است.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | دستور 0b10010000 | و 0b00010000 | و 0b10000000 | و 0b00001000 نتیجه | = 0b00010000 | = 0b10000000 | = 0b00000000

در اینجا می بینیم که در صورت وجود دستور در فریم داده ، نتیجه عملیات AND بیشتر از 0 خواهد بود. بنابراین تنها کاری که باید انجام دهیم این است که برای {command frame} و {value value}> 0 ، برای هر فرمانی که تعریف کرده ایم ، بررسی کنیم.

به خاطر داشته باشید که هر فریم داده حاوی دستورات متفاوتی است ، بنابراین اگر مقادیر فرمان یکسان باشد ، اشکالی ندارد ، زیرا ما آنها را در برابر فریم های خود بررسی می کنیم. در مثال من هر دو << و ESC هر دو دارای ارزش یکسان 0b00001000 (0x08) هستند ، اما << در data0 و ESC در data1 است.

پس از تعیین اینکه یک فرمان در یک فریم وجود دارد ، مقدار قابلمه دیجیتال را به بافر دایره ای اضافه می کنیم. مقادیر از 0 تا 99 متغیر است ، اما من متوجه شده ام که "ولتاژ" خوانده شده توسط استریو خطی نیست ، بنابراین مقادیر را خودتان آزمایش کنید.

DigitalPot.ino

این فایل مقادیر را از بافر دایره ای خارج می کند و آنها را به دیجیتال دیجیتال برای اجرا ارسال می کند. در مورد من "pot.setPotMin (false)؛" مقاومت را به حداکثر افزایش می دهد ، که استریو به عنوان حداکثر "ولتاژ" خوانده می شود. استریو شما ممکن است از شما بخواهد که دیجیتال دیجیتال را روی حداقل تنظیم کنید ، بنابراین آن را آزمایش کنید.

مرحله 5: محوطه پروژه

محوطه پروژه
محوطه پروژه

من یک چاپگر سه بعدی دارم بنابراین تصمیم گرفتم یک محفظه دو قسمتی برای آداپتورم چاپ کنم. من یک فایل Fusion 360 را که می توانید ویرایش کنید ، و فایل های gcode را که در یک تخته چوبی 60x80 میلی متر قرار می گیرد ، قرار داده ام.

اگر به چاپگر سه بعدی دسترسی ندارید ، می توانید از یک پروژه آماده پروژه یا یک ظرف محکم استفاده کنید.

مرحله ششم: اندیشه های نهایی

من در ابتدا برنامه ریزی کردم که آداپتور به برق ثابت متصل شود و در برخی از پیام های اتوبوس CAN بیدار شود ، زیرا ماشین من سیم جرقه زنی در قسمت استریو ندارد. بعداً با آن مخالفت کردم زیرا نمی خواستم در صورت دور بودن از ماشین ، خطر خالی شدن باتری و نگرانی درباره آداپتور را داشته باشم. من از اسپلیتر جعبه فیوز ماشین برای راه اندازی سیم احتراق استفاده کردم و نیازی نیست که آداپتور را بیشتر پیچیده کنم.

در آزمایشات من مصرف برق 20-30 میلی آمپر است. من آن را در حالت خواب به 10 میلی آمپر رساندم و با حذف LED ها از قطعات می توانم حتی پایین تر بروم ، اما تصمیم گرفتم با آن مزاحم نشوم زیرا فقط در حالی که ماشین در حال کار است کار می کند.

من از نتیجه نهایی بسیار راضی هستم. زمان پاسخ معقول است و به ندرت دستورات را از دست می دهد.

حتی اگر سرمایه گذاری زمانی من به مراتب بیشتر از هزینه آداپتور تجاری موجود بود (که کار نمی کرد) ، دانش من بسیار ارزشمند است.

توصیه شده: