فهرست مطالب:
- مرحله 1: نحوه ارسال دستورات به Stereo را بیابید
- مرحله 2: مکان اتصال به گذرگاه CAN را بیابید
- مرحله 3: مهندسی معکوس پیام های CAN
- مرحله 4: نمونه اولیه سخت افزار
- مرحله 5: برنامه نویسی فیوز
- مرحله 6: نرم افزار
- مرحله 7: سخت افزار نهایی
- مرحله 8: نصب ماشین
- مرحله 9: پیشرفت های آینده
تصویری: آردوینو سفارشی برای نگه داشتن دکمه های فرمان CAN با استریو ماشین جدید: 9 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
تصمیم گرفتم استریوی اصلی ماشین را در ولوو V70 -02 خود با استریوی جدید جایگزین کنم تا بتوانم از مواردی مانند mp3 ، بلوتوث و هندزفری لذت ببرم.
ماشین من دارای کنترل فرمان برای استریو است که دوست دارم هنوز بتوانم از آنها استفاده کنم. من انتظار نداشتم که مشکلی ایجاد شود زیرا چندین آداپتور در بازار وجود دارد که قرار است با ماشین من سازگار باشد. با این حال به زودی فهمیدم که نیستند! (به نظر می رسد آداپتورهای V70 ممکن است به دلیل پروتکل CAN کمی متفاوت با اتومبیل -02 مشکل داشته باشند.)
پس چه باید کرد؟ استریو قدیمی را حفظ کنید؟ با دکمه های بدون کار زندگی کنید؟ البته که نه! اگر هیچ آداپتور کار کننده ای در بازار وجود ندارد ، ما مجبور به ساخت یک آداپتور هستیم!
این دستورالعمل را می توان (با برخی تغییرات) در خودروهایی که دکمه های فرمان از طریق گذرگاه CAN با هم ارتباط دارند ، استفاده کرد.
مرحله 1: نحوه ارسال دستورات به Stereo را بیابید
اولین کاری که باید انجام دهید این است که دریابید استریو از چه نوع ورودی از راه دور انتظار دارد. معمولاً سازندگان این را به شما نمی گویند و احتمالاً برای مهندسی معکوس نیز به کنترل از راه دور کار نمی کنید.
استریوی جدید من (کنوود) از یک سیم واحد تشکیل شده است و من نتوانستم اطلاعاتی در مورد نحوه کار آن پیدا کنم. اما دارای جک 3.5 میلی متری برای ورودی از راه دور است. من هم نتوانستم در این باره چیزی بیابم. اما برخی اطلاعات در مورد جک 3.5 میلی متری برای سایر مارک ها وجود دارد که نشان می دهد دستورات مختلف با اعمال مقاومت ویژه بین نوک و آستین (و به صورت اختیاری بین حلقه و آستین) مشخص می شوند. به عنوان مثال. https://forum.arduino.cc/index.php؟topic=230068.0. بنابراین تصمیم گرفتم آن را امتحان کنم ، مجهز به تخته نان ، یک دسته مقاومت و یک پریز 3.5 میلی متری که به استریو متصل شده و به تخته نان متصل شده است. در ابتدا چیزی تشخیص داده نشد ، اما استریو دارای منوی "حالت یادگیری" است و در آنجا می توان دستورات را با استفاده از مقاومت های مختلف با موفقیت تنظیم کرد. موفقیت!
با این حال بعداً متوجه شدم که در اینجا اشتباه کرده ام: همه دستوراتی که به نظر می رسید استریو یاد گرفته است واقعاً کار نمی کند. به عنوان مثال. 30 کیلو اهم در حالت یادگیری یافت شد اما بعداً کار نکرد و برای برخی از دستوراتی که من تنظیم کردم تفاوت مقاومت آنقدر کوچک بود که بعداً فرمان اشتباه ایجاد شد.
بنابراین من توصیه می کنم که برای همه دستورات از راه دور که می خواهید کنترل کنید از یک تخته نان با مقاومت و دکمه های سوئیچ استفاده کنید و در واقع آزمایش کنید که همه آنها کار می کنند.
اگر استریوی اتومبیل شما نمی تواند ورودی را به همان شیوه دریافت کند ، باید نحوه عملکرد آن را بفهمید تا بتوانید این راه حل را تطبیق دهید. اگر اصلاً نمی توانید بفهمید ، پس مشکلی دارید.
مرحله 2: مکان اتصال به گذرگاه CAN را بیابید
برای اتصال به گذرگاه CAN باید مکان مناسبی را پیدا کنید. از آنجا که در حال جایگزینی یک استریوی قدیمی هستید که از طریق CAN ارتباط برقرار می کند ، باید بتوانید آن را در پشت استریو پیدا کنید. گذرگاه CAN از یک جفت سیم پیچ خورده (CAN-L و CAN_H) تشکیل شده است. برای اطمینان از نمودار سیم کشی خودرو خود مشورت کنید.
مرحله 3: مهندسی معکوس پیام های CAN
مگر اینکه گوگل به شما بگوید باید به چه پیامهای CAN گوش دهید ، باید به گذرگاه CAN متصل شوید و مهندسی معکوس انجام دهید. من از آردوینو اونو و سپر CAN استفاده کردم. (شما واقعاً نیازی به سپر CAN ندارید ، زیرا بعداً خواهید دید به جای آن می توانید از برخی اجزای ارزان قیمت روی تخته نان استفاده کنید.)
با Google مشورت کنید تا دریابید که هنگام اتصال به خودرو از چه نرخ بادی استفاده کنید. (معمولاً متوجه خواهید شد که یک شبکه CAN با سرعت بالا و سرعت پایین وجود دارد. شما در حال اتصال به شبکه کم سرعت هستید.)
همچنین باید Arduino را طوری برنامه ریزی کنید که همه پیام های CAN را از طریق رابط سریال وارد کند تا بتوانید آنها را در یک فایل log در رایانه خود ذخیره کنید. استاندارد Arduino IDE داده ها را در یک فایل log ذخیره نمی کند ، اما می توانید از بجای آن بتونه
قبل از شروع به نوشتن برنامه خود ، باید کتابخانه CAN_BUS_Shield را نصب کنید.
در اینجا چند کد شبه وجود دارد که به شما در شروع برنامه کمک می کند:
برپایی()
{init serial connector init CAN library} حلقه () {در صورت دریافت پیام CAN {خواندن فرمت CAN پیام ورود به سیستم ورود نوشتن گزارش ورود به سریال}}
نکات:
برای دسترسی به عملکرد کتابخانه CAN از نمونه ای از کلاس MCP_CAN استفاده خواهید کرد:
MCP_CAN m_can؛
Init CAN:
در حالی که (m_can.begin ()! = CAN_OK)
{تاخیر (1000) ؛ }
پیامهای CAN را بررسی کرده و بخوانید:
در حالی که (m_can.checkReceive () == CAN_MSGAVAIL)
{// دریافت شناسه CAN ، طول پیام و داده های پیام m_can.readMsgBufID (& m_canId ، & m_msgLen ، m_msgBuf) ؛ // با داده های پیام در اینجا کاری انجام دهید}
اگر به کمک بیشتری نیاز دارید ، می توانید پیوندی به برنامه من در مرحله بعد پیدا کنید. کتابخانه CAN shield نیز شامل یک مثال است. یا دستورالعمل mviljoen2 را که شامل یک مرحله مشابه است بررسی کنید.
ابتدا به یک فایل مرجع برای کمک به فیلتر کردن داده ها نیاز دارید. جرقه زنی را به حالت رادیویی تغییر دهید و همه چیز را برای چند دقیقه بدون لمس هیچ دکمه ای وارد کنید.
سپس برای هر یک از دکمه ها ، ورود به سیستم را شروع کنید ، دکمه را فشار دهید و ورود به سیستم را متوقف کنید.
پس از اتمام کار ، باید همه مواردی را که در گزارش مرجع شما وجود دارد از روی دکمه های دکمه خود فیلتر کنید تا نامزدهای خود را پیدا کنید. من متوجه شدم که هنوز پیامهای زیادی باقی مانده است ، بنابراین من گزارشات بیشتری ایجاد کردم و سپس خواستم که "نامزدهای فرمان A باید در همه فایلهای دکمه A و در هیچ یک از فایلهای مرجع" باشند. این تنها چند فرصت برای من باقی گذاشت تا امتحان کنم.
گزارش ها حاوی پیام های زیادی هستند بنابراین باید برای این کار برنامه بنویسید یا احتمالاً از Excel استفاده کنید. (من از برنامه ای با شرایط بسیار سخت برای نیازهایم استفاده کردم ، بنابراین می ترسم نتوانم برنامه ای را که می توانید استفاده کنید ارائه دهم.)
یک کلمه هشداردهنده: نمی توانید مطمئن باشید که یک دکمه همیشه یک پیام یکسان تولید می کند. برخی از بیت ها ممکن است دارای شمارنده های افزایشی و غیره باشند.
اگر تصادفاً از Volvo V70 -02 استفاده می کنید ، به دنبال آن هستید:
- شناسه پیام: 0x0400066 بیت 0: 0x00 ، 0x40 ، 0x80 یا 0xc0 (اهمیتی نمی دهد)
- بایت 1: 0x00 (مهم نیست)
- Byte2: 0x00 (مهم نیست)
- Byte3: 0x00-0x07 (مهم نیست)
- Byte4: 0x1f (اهمیت ندهید)
- Byte5: 0x40 (مهم نیست)
- Byte6: 0x40 (اهمیتی نمی دهم)
- Byte7: شناسه دکمه: 0x77 = افزایش صدا ، 0x7b = کاهش حجم ، 0x7d = آهنگ بعدی ، 0x7e = آهنگ قبلی.
وقتی باور می کنید که دستورات را پیدا کرده اید ، ممکن است ایده خوبی باشد که برنامه را طوری تغییر دهید که فقط پیامهای جالب را ثبت کند. در حالی که دکمه ها را فشار می دهید به پنجره گزارش سریال نگاه کنید تا مطمئن شوید پیام های صحیح را شناسایی کرده اید.
مرحله 4: نمونه اولیه سخت افزار
سخت افزار شما باید بتواند:
- دستورات دریافت شده در گذرگاه CAN را مشخص کنید
- دستورات را با فرمت دیگر به استریو ارسال کنید
اگر فضای کافی دارید می توانید برای قسمت اول از آردوینو و سپر CAN استفاده کنید و برای قسمت دوم کمی سخت افزار اضافی وصل کنید. اما معایبی وجود دارد:
- هزینه سپر CAN
- اندازه
- منبع تغذیه آردوینو اگر مستقیماً به خودروهای 12 ولت شما متصل شود ، خوشحال نخواهد شد (احتمالاً کار می کند ، اما عمر آن به احتمال زیاد کوتاه می شود).
بنابراین در عوض از موارد زیر استفاده کردم:
- Atmega 328 ، "مغز آردوینو". (انواع مختلفی وجود دارد ، یکی را که مشابه Arduino Uno است تهیه کنید. می توانید آن را با بوت لودر Arduino یا بدون آن خریداری کنید.)
- کریستال 16 مگاهرتز + خازن برای سیگنال ساعت.
- فرستنده گیرنده MCP2551 CAN.
- کنترل کننده MCP2515 CAN
- TSR1-2450 ، 6.5-36V را به 5V تبدیل می کند. (در نمونه اولیه استفاده نمی شود زیرا نرم افزار به منبع تغذیه اهمیت نمی دهد.)
- سوئیچ CD4066B که هنگام ارسال دستورات به استریو استفاده می شود.
- چند تا مقاومت (مقادیر را می توان در شمایل عقاب در مرحله بعد یافت.)
یک ویژگی خوب در این پیکربندی این است که کاملاً با Arduino و کتابخانه CAN shield سازگار است.
اگر می خواهید بیش از چهار دکمه را اداره کنید ، ممکن است بخواهید از چیزی غیر از CD4066B استفاده کنید. CD4066B را می توان به عنوان چهار سوئیچ در یک مورد توصیف کرد که هر کدام توسط یکی از پین های Atmegas GPIO کنترل می شوند. به هر سوئیچ یک مقاومت متصل شده است که می تواند برای کنترل مقاومت استفاده شده به عنوان ورودی استریو استفاده شود. بنابراین می توان به راحتی از آن برای ارسال چهار دستور مختلف استفاده کرد. اگر آنها ترکیب شوند ، مقادیر مقاومت اضافی را می توان بدست آورد. این جایی است که اشتباهی که قبلاً ذکر کردم وارد می شود. من چهار دکمه دارم ، اما قصد داشتم دو تا از آنها را به مدت طولانی و کوتاه فشار دهم تا شش دستور مختلف به من داده شود. اما در نهایت متوجه شدم که نمی توانم ترکیبی از مقاومت ها را پیدا کنم که به من 6 ترکیب کار بدهد. احتمالاً می توان سیگنال خروجی آنالوگ را به استریو (نوک 3.5 میلی متری) متصل کرد. (توجه داشته باشید که Atmega پین های آنالوگ واقعی ندارد بنابراین برخی سخت افزارهای اضافی مورد نیاز است.)
برای آزمایش ، من همچنین یک شبیه ساز ساده "ماشین و استریو" برای اتصال به نمونه اولیه خود ساختم. این اشکال زدایی را آسان تر می کند و مگر اینکه از نشستن در ماشین و برنامه خود لذت ببرید ، می توانم آن را توصیه کنم.
نمونه اولیه با تخته نان پایین در تصویر نشان داده شده است. برای منبع تغذیه ، برنامه نویسی و ثبت سریال به یک Arduino Uno متصل می شود که در آن تراشه Atmega حذف شده است.
تخته بالایی شبیه ساز ماشین + استریو است که برای آزمایش اولیه نمونه اولیه استفاده می شود.
نمونه اولیه + شبیه ساز در نظر گرفته شده است که به این شکل عمل کند:
- یکی از دکمه های سوئیچ روی برد شبیه ساز را فشار دهید. (اینها دکمه های فرمان شما هستند.)
- هنگامی که برنامه شبیه ساز یک دکمه را فشار می دهد ، تا زمانی که دکمه فشار داده شود ، هر 70 میلی ثانیه پیام CAN مربوطه را ارسال می کند. (از آنجا که سیاهههای مربوط که قبلاً گرفته بودم نشان می داد که در ماشین من چگونه کار می کند.) همچنین بسیاری از پیامهای "ناخواسته" CAN را برای شبیه سازی سایر ترافیک در اتوبوس ارسال می کند.
- پیام های CAN در گذرگاه CAN ارسال می شود.
- پیام های CAN توسط نمونه اولیه دریافت می شود.
- MCP2515 تمام پیام های غیر مرتبط را بر اساس شناسه پیام ارسال می کند.
- هنگامی که MCP2515 پیامی را دریافت می کند که باید مدیریت شود ، نشان می دهد که پیامی در دستور خود قرار دارد.
- Atmega پیام را می خواند و تصمیم می گیرد که کدام دکمه باید فعال تلقی شود.
- Atmega همچنین آخرین زمان دریافت پیام را پیگیری می کند ، پس از مدتی مشخص می شود که دکمه آزاد شده تلقی می شود. (پیام های CAN فقط نشان می دهد که یک دکمه خاموش است ، نه اینکه فشار داده شود یا رها شود.)
- اگر یک دکمه فعال تلقی شود ، یک یا چند کلید در CD4066B فعال می شود.
- شبیه ساز (که اکنون به عنوان استریوی شما عمل می کند) تشخیص می دهد که بین نوک و آستین یک مقاومت اعمال می شود. (نوک به 3.3 ولت و از طریق مقاومت به پین ورودی آنالوگ متصل می شود. وقتی هیچ فرمان فعال نباشد این پین 3.3 ولت را می خواند ، هنگامی که یک فرمان فعال است مقدار پایین تر می آید و فرمان را شناسایی می کند.
- در حالی که یک فرمان فعال است ، لید مربوطه نیز فعال می شود. (شش چراغ وجود دارد زیرا قصد داشتم از فشار طولانی یا کوتاه مختلف برای دو دکمه خود استفاده کنم.)
برای کسب اطلاعات بیشتر در مورد سخت افزار اولیه ، در مرحله بعد به نمودارهای Eagle مراجعه کنید.
جزئیات بیشتر در مورد سخت افزار برد شبیه ساز:
- کریستال 16 مگاهرتز
- 22 خازن pF
- مقاومت های LED باید بر اساس ویژگی های LED انتخاب شوند
- مقاومت متصل به A7 و 3.3V ، به عنوان مثال را انتخاب کنید. 2 کیلو اهم (بحرانی نیست)
- مقاومتهای متصل به MCP2551 و MCP2515 بصورت کشش و کشش هستند. به عنوان مثال انتخاب کنید 10 کیلو اهم
(یا در صورت تمایل می توانید از سپر CAN برای "قسمت CAN" شبیه ساز استفاده کنید.)
هنگام طراحی سخت افزار ، باید بدانید که چگونه پین های Atmega به پین های Arduino ترسیم می شوند.
. بسیار ارزان هستند.)
مرحله 5: برنامه نویسی فیوز
شاید در مرحله قبل متوجه شده باشید که نمونه اولیه هیچ مولفه جداگانه ای برای تولید سیگنال ساعت به MCP2515 ندارد. این به این دلیل است که در حال حاضر یک کریستال 16 مگاهرتز به عنوان سیگنال ساعت Atmega استفاده شده است که می توانیم از آن استفاده کنیم. اما ما نمی توانیم آن را مستقیماً به MCP2515 وصل کنیم و به طور پیش فرض هیچ سیگنال خاموش شدن ساعت در Atmega وجود ندارد.
(اگر ترجیح می دهید می توانید این مرحله را رد کرده و به جای آن سخت افزار ساعت اضافی را اضافه کنید.)
با این حال ، ما می توانیم از چیزی به نام "برنامه نویسی فیوز" برای فعال کردن سیگنال خاموش شدن ساعت در یکی از پین های GPIO استفاده کنیم.
ابتدا باید فایلی با نام "boards.txt" که توسط Arduino IDE استفاده می شود را پیدا کنید. باید ورودی 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.bootloaderer.xxxxxx = 0xde.bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000l clkuno.build.kkunobuild.build = cl.
##############################################################
توجه داشته باشید که ساعت خاموش با تنظیم بیت کنترل آن روی 0 فعال می شود.
هنگامی که برد جدید را در فایل پیکربندی بردها ایجاد کردید ، باید یک بوت لودر جدید را در Atmega بسوزانید. روش های مختلفی برای انجام این کار وجود دارد ، من از روشی که در https://www.arduino.cc/fa/Tutorial/ArduinoToBreadboard توضیح داده شده استفاده کردم.
پس از انجام این کار ، به یاد داشته باشید که هنگام بارگذاری برنامه ای در Atmega ، نوع برد جدید خود را انتخاب کنید و نه Arduino Uno.
مرحله 6: نرم افزار
وقت آن رسیده که سخت افزار گنگ را با افزودن برخی نرم افزارها هوشمند کنید.
در اینجا چند کد شبه برای نمونه اولیه آورده شده است:
lastReceivedTime = 0
lastReceivedCmd = هیچ cmdTimeout = 100 setup () {فعال کردن watchdog پیکربندی پین های D4-D7 به عنوان پین های خروجی init CAN setup CAN filter} حلقه () {تنظیم مجدد watchdog if (پیام CAN دریافت می شود) {برای هر فرمان دکمه {اگر پیام CAN متعلق باشد فرمان دکمه {lastReceivedTime = now lastReceivedCmd = cmd}}} if now> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} برای هر فرمان دکمه {if lastReceivedCmd فرمان دکمه است {تنظیم خروجی پین فرمان = روشن} دیگری {تنظیم پین خروجی فرمان = خاموش }}}
cmdTimeout تصمیم می گیرد که چقدر باید منتظر بمانیم تا آخرین دکمه فعال شده را در نظر بگیریم. از آنجا که دکمه می تواند دستورات پیام CAN را تقریباً 70 میلی ثانیه ارسال کند ، باید با مقداری حاشیه بزرگتر از آن باشد. اما اگر بزرگ باشد ، تجربه تأخیر وجود خواهد داشت. بنابراین 100 میلی ثانیه به نظر می رسد یک نامزد خوب است.
اما دیده بان چیست؟ این یک ویژگی سخت افزاری مفید است که می تواند در صورت تصادف ما را نجات دهد. تصور کنید که ما یک اشکال داریم که باعث می شود برنامه در حالی که فرمان افزایش صدا فعال است ، خراب شود. سپس ما با استریو روی حداکثر صدا کار می کنیم! اما اگر نگهبان برای مدت زمان مشخص تنظیم مجدد نشود ، تصمیم می گیرد که اتفاق غیر منتظره ای رخ داده است و به سادگی تنظیم مجدد را انجام می دهد.
void setup ()
{// اجازه حداکثر 250 میلی ثانیه برای حلقه wdt_enable (WDTO_250MS) ؛ // چیزهای دیگر init} حلقه void () {wdt_reset ()؛ // انجام کارها}
آیا می توان فیلتر کرد؟ خوب ، می توانید کنترلر CAN را طوری پیکربندی کنید که همه پیام هایی را که با فیلتر مطابقت ندارند دور بیندازد تا نرم افزار مجبور نباشد وقت خود را برای پیام هایی که برای ما اهمیتی ندارند هدر دهد.
ماسک بلند بدون علامت = 0x1fffffff؛ // همه 29 بیت هدر را در ماسک قرار دهید
فیلتر طولانی بدون علامت ID = 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 setup () {پین A0-A5 را به عنوان پین خروجی پیکربندی کنید پین D4-D7 را به عنوان پین ورودی با کشش داخلی پیکربندی کنید. init CAN} loop () {send "junk" can msg set activeButton = هیچکدام برای هر دکمه {اگر دکمه فشار داده شود {set activeButton = button}} if activeButton! = هیچکدام {if now> lastSentTime + minDelayTime {فرمان ارسال دکمه می تواند پیام ارسال کند } set lastSentTime = now} inval = خواندن پین A7 foreach (cmd) {if (min <inval <max) {led on} else {led off}} منتظر 1 ms}
با این کار پیغام های CAN "ناخواسته" تقریباً در هر میلی ثانیه ارسال می شود و در حالی که یک دکمه به هر 70 میلی ثانیه فرمان مربوطه را فشار می دهد.
ممکن است لازم باشد هنگام فشار دادن دکمه های مختلف ، ورودی را روی پین A7 وارد کنید تا مقادیر مناسب برای متغیرهای حداقل و حداکثر متعلق به هر دکمه را بیابید. (یا می توانید آن را محاسبه کنید ، اما در واقع خواندن ورودی مقادیر دقیق تری به شما می دهد.)
هنگام برنامه نویسی حالت های پین باید کمی مراقب باشید. اگر به طور تصادفی پین هایی را که قصد استفاده از pullup داخلی را دارند به عنوان پین های خروجی تنظیم کنید ، یک میانبر بالقوه ایجاد می کنید که هنگام تنظیم خروجی بالا به Arduino شما آسیب می رساند.
اگر می خواهید برنامه های من را بررسی کنید ، می توانید آنها را در اینجا بارگیری کنید:
- برنامه ثبت پیام CAN
- برنامه ای برای برد شبیه ساز
- برنامه ای برای نمونه اولیه / تخته نهایی
باید توجه داشته باشید که این برنامه ها در واقع با شبه کد مطابقت ندارند ، آنها حاوی موارد اضافی زیادی هستند که واقعاً مورد نیاز نیستند و اگر با برنامه نویسی شی گرا آشنایی ندارید ، خواندن آن شاید کمی دشوار باشد. به
مرحله 7: سخت افزار نهایی
هنگامی که از برنامه خود راضی هستید (به یاد داشته باشید که نمونه اولیه را پس از آزمایش نهایی با برد شبیه ساز در خودرو آزمایش کنید) زمان ساخت سخت افزار واقعی فرا رسیده است.
در اینجا شما سه گزینه دارید:
- سریع و کثیف - اجسام را روی تخته نمونه اولیه PCB لحیم کنید.
- Hardcore DIY - PCB خود را حک کنید.
- راه تنبل - یک PCB حرفه ای سفارش دهید تا قطعات را لحیم کند.
اگر عجله ندارید می توانم آخرین گزینه را پیشنهاد کنم. اگر فقط به یک PCB کوچک مانند این نیاز دارید ، سفارش آن از چین بسیار ارزان است. (و سپس احتمالاً ده قطعه دریافت خواهید کرد تا بتوانید برخی از اشتباهات لحیم کاری را بپردازید.)
برای سفارش PCB شما باید طرح خود را در قالب Gerber ارسال کنید. نرم افزارهای مختلفی برای این کار وجود دارد. من از Eagle استفاده کردم که میتونم توصیه کنم. برای یادگیری آن می توانید چند ساعت انتظار داشته باشید اما پس از آن خوب کار می کند. برای تخته های کوچک مانند این می توانید از آن به صورت رایگان استفاده کنید.
هنگام طراحی ، مراقب باشید. شما نمی خواهید چهار هفته برای زایمان منتظر بمانید تا متوجه شوید کار اشتباهی انجام داده اید.
(اگر مهارت لحیم کاری خوبی دارید می توانید برای اجزای نصب شده روی سطح طراحی کنید و یک آداپتور واقعا کوچک تهیه کنید. من این کار را نکردم.)
سپس سفارش دهید به عنوان مثال 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 را با چیز دیگری (احتمالاً پتانسیومتر دیجیتال) برای انعطاف پذیری بیشتر جایگزین می کنم.
همچنین بسیاری کارهای دیگر وجود دارد که می توانید انجام دهید. به عنوان مثال. یک ماژول بلوتوث اضافه کنید و یک برنامه کنترل از راه دور برای تلفن خود بسازید. یا یک ماژول GPS ، هنگامی که به خانه نزدیک هستید ، می توانید به طور خودکار صدا را افزایش داده و پیام CAN "پنجره های پایین" را ارسال کنید تا همه همسایگان شما بتوانند از موسیقی فوق العاده شما لذت ببرند.
توصیه شده:
خنک نگه داشتن کودک در تابستان - کنترل هواداران گنگ با چیزهای هوشمند !: 6 مرحله (همراه با تصاویر)
خنک نگه داشتن کودک شما در تابستان امسال - کنترل هواداران گنگ با چیزهای هوشمند !: از دو هفته پیش در زمان نوشتن این مطلب ، من پدر یک پسر بچه باورنکردنی شدم! با تغییر فصل ، افزایش روزها و گرم شدن دمای هوا ، من فکر کردم خوب است که در شمال شرق مانیتوری داشته باشیم
سنسور مسدود کردن نور آردوینو (ماژول قطع کننده عکس) - ایمن نگه داشتن کارت های خود (نمونه اولیه): 4 مرحله
سنسور مسدود کردن نور آردوینو (ماژول قطع کننده عکس) - ایمن نگه داشتن کارت های شما (نمونه اولیه): این پروژه یک نمونه اولیه است و در این پروژه من در مورد نحوه نگهداری کارت های شما - مانند کارت های اعتباری ، کارت های نقدی ، کارت های هدیه - بحث خواهم کرد. بی خطر. برای مشاهده نحوه عملکرد این پروژه به تصاویر بالا نگاه کنید. اجازه دهید نگاهی اجمالی به شما داشته باشم
روشی جدید برای کنترل آردوینو ماشین RC: 7 مرحله (همراه با تصاویر)
روشی جدید برای کنترل آردوینو روی ماشین RC: من کارهایی را با خودروهای کنترل شده با آردوینو انجام داده ام ، اما آنهایی که روی آنها کار کرده ام همیشه کند و روشمند بوده اند. این هنگام یادگیری آردوینو عالی است ، اما من چیزی بیشتر سرگرم کننده می خواستم. وارد ماشین RC شوید. اتومبیل های RC به معنای واقعی کلمه به گونه ای طراحی شده اند که
سیستم فرمان هوشمند برای ماشین های ربات با استفاده از استپر موتور فلاپی قدیمی/سی دی درایو: 8 مرحله (همراه با تصاویر)
سیستم فرمان هوشمند برای ماشین های ربات با استفاده از استپر موتور قدیمی فلاپی/سی دی درایو: سیستم فرمان هوشمند برای خودروهای رباتیک آیا نگران ساختن یک سیستم فرمان خوب برای ماشین ربات خود هستید؟ در اینجا یک راه حل عالی فقط با استفاده از درایوهای فلاپی/ CD/ DVD قدیمی شما آمده است. مراقب آن باشید و از آن ایده بگیرید دیدن از georgeraveen.blogspot.com
12 روش برای نگه داشتن سلول های سکه ای: 13 مرحله (همراه با تصاویر)
12 روش برای نگه داشتن سلول های سکه ای خود: مجموعه ای از روش های مختلف برای ذخیره باتری های سکه ای (CR2032). هر مرحله روش متفاوتی را در تصاویر نشان می دهد و پیوندی به اسناد بیشتر در صورت لزوم وجود دارد