در آموزش های قبلی از سری آموزش های برد Teensy اقدام به ساخت کیبرد، MIDI ،HID، مدیا کنترلر کردیم. بعد از تمام این پروژه های پرکاربرد نوبت به ساخت ماوس با استفاده از برد های Teensy است، بله متن اشتباه تایپی نداره واقعا قد داریم با استفاده از برد های Teency یک ماوس بسازیم. یکی از قابلیت های برجسته برد های تینسی برقرای ارتباط به روش هایی جدا از سریال است که کاربر را را قادر میسازد اقدام به ساخت دستگاه های پرکاربردی کند که معمولا نمونه چنین پروژه هایی را در ویترین مغازه میبینیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد Teensy
تینسی Teensy یک برد توسعه با رابط کاربری آسان و دارای ویژگی های زیادی در یک بسته خوب ارائه شده است. هر برد Teensy همراه با یک بوت لودر از قبل فلش می شود بنابراین می توانید با استفاده از اتصال USB روی آن برنامه ریزی کنید، نیازی به برنامه نویس خارجی نیست و میتوانید با استفاده از C برای Teensy در ویرایشگر مورد علاقه خود برنامه نویسی کنید و یا میتوانید افزونه Teensyduino را برای Arduino IDE نصب کرده و با Arduino IDE را برای آن برنامه بنویسید.
پردازنده موجود در Teensy به USB نیز دسترسی دارد و میتواند هر نوع دستگاه USB مورد نیاز شما را تقلید کند و آن را برای USB-MIDI و سایر پروژه های HID آماده کار کند. پردازنده ۳۲ بیتی چند ویژگی دیگر نیز فراهم کرده است، از جمله چند کانال دسترسی مستقیم به حافظه، چند ADC با رزولوشن بالا و حتی یک رابط صوتی دیجیتال I2S. همچنین چهار تایمر جداگانه وجود دارد، به علاوه یک تایمر تأخیر. و همه پین های دیجیتال دارای قابلیت وقفه هستند و قابلیت ارائه ولتاژ سیستم ۳٫۳ ولت را تا حداکثر ۲۵۰ میلی آمپر را دارد.
نحوه کار پروژه
وسایل مورد نیاز
نصب افزونه Teensyduino
در موارد قبلی برای نصب افزونه مرجع برد هایی مانند ESP32 با استفاده از لینکی از منوی prefences اقدام به نصب افزونه برد مورد نظر برای شروع کار با برد و تشخیص توسط نرمافزار استفاده میکردیم، اما این فرآیند برای برد های Teency به لطف Teensyduino بسیار آسان تر و سریع شده. در ادامه آموزش مرحله به مرحله با هم اقدام به نصب Teensyduino خواهیم کرد. ابتدا فایل اجرایی مورد نیاز را از این لینک دانلود کنید و مراحل زیر را دنبال کنید.
- پس از اجرا کردن فایل exe. با این صفحه روبرو میشوید. بر روی Next کلیک کنید تا به مرحله بعد بروید.
- در آموزش مقدماتی مرحله به مرحله با هم اقدام به نصب Teensyduino کردهایم. برای مشاهده مراحل نصب به این آموزش مراجعه کنید.
شماتیک و اتصالات پروژه
برای تست این پروژه از پین های D7 ،D8 ،D9 ،D10 استفاده کردم، که هر کدام وظیفه حرکت دادن نشانگر ماوس در یک موحور را دارند. در ادامه پین های D2، D3 نیز با استفاده کرد میکروسوییچ هایی که قرار دادیم امکان کنترل کلیک چپ و راست را به کاربر میدهند. ابتدا مدار را با استفاده از شماتیک و جدول زیر برقرار کنید.
نکته: هر کدام از میکروسوییچ ها از یک پین به برد تینسی متصل میشوند و از طرف دیگر به پین GND متصل خواهند شد.
- شماتیک اتصالات پروژه ساخت ماوس با استفاده از برد Teensy 3.2
کد و راهاندازی پروژه
در کدهای این پروژه از کتابخانه Bounce.h استفاده شده که کتابخانه پیشفرض برای برد های تینسی بشمار میرود. در کد های این پروژه مواردی از جمله سرعت حرکت نشانگر و همچنین پین های مورد استفاده قابل تغییر هستند که در ادامه این موارد را با هم بررسی خواهیم کرد.
- در کد زیر با تغییر مقدار عددی قادر خواهیم بود مقدار جهش پوینتر ماوس به ازای هربار کلیک را تغییر دهیم، با تغییر مقدار به سمت صفر سرعت ماوس کاهش پیدا میکند.
const int moveDistance = 20;
- در کد های زیر پسن های مدنظر برای هر فانکشن تعرفی شده، فرمت معرفی پین بصورت پایه های D2 و D3 هست پسوند و شماره پایه، که در صورت نیاز قادر به تغییر آن ها خواهید بود.
Bounce button2 = Bounce(2, 10); Bounce button3 = Bounce(3, 10); Bounce button4 = Bounce(4, 10); Bounce button5 = Bounce(5, 10); Bounce button6 = Bounce(6, 10);
- مقدار زیر رزولوشن مانیتور شما است که در صورت عدم تطابق باید تنظیم شود و به شما کمک میکند، در نهایت یک ماوس دقیق در اختیار داشته باشید.
Mouse.screenSize(1920, 1080);
کد های کامل پروژه ساخت ماوس با استفاده از برد Teensy 3.2
#include <Bounce.h> const int moveDistance = 20; Bounce button2 = Bounce(2, 10); Bounce button3 = Bounce(3, 10); Bounce button4 = Bounce(4, 10); Bounce button5 = Bounce(5, 10); Bounce button6 = Bounce(6, 10); Bounce button7 = Bounce(7, 1); Bounce button8 = Bounce(8, 1); Bounce button9 = Bounce(9, 1); Bounce button10 = Bounce(10, 1); Bounce button14 = Bounce(14, 10); Bounce button15 = Bounce(15, 10); Bounce button16 = Bounce(16, 10); Bounce button17 = Bounce(17, 10); Bounce button21 = Bounce(21, 10); Bounce button22 = Bounce(22, 10); Bounce button23 = Bounce(23, 10); void setup() { pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); pinMode(14, INPUT_PULLUP); pinMode(15, INPUT_PULLUP); pinMode(16, INPUT_PULLUP); pinMode(17, INPUT_PULLUP); pinMode(21, INPUT_PULLUP); pinMode(22, INPUT_PULLUP); pinMode(23, INPUT_PULLUP); Mouse.screenSize(1920, 1080); } void loop() { } button2.update(); button3.update(); button4.update(); button5.update(); button6.update(); button7.update(); button8.update(); button9.update(); button10.update(); button14.update(); button15.update(); button16.update(); button17.update(); button21.update(); button22.update(); button23.update(); if (button7.fallingEdge()) { Mouse.move(-moveDistance, 0); } if (button8.fallingEdge()) { Mouse.move(moveDistance, 0); } if (button9.fallingEdge()) { Mouse.move(0, -moveDistance); } if (button10.fallingEdge()) { Mouse.move(0, moveDistance); } if (button14.fallingEdge()) { Mouse.scroll(1); } if (button15.fallingEdge()) { Mouse.scroll(-1); } if (button16.fallingEdge()) { Mouse.scroll(0, 1); } if (button17.fallingEdge()) { Mouse.scroll(0, -1); } if (button21.fallingEdge()) { Mouse.moveTo(10, 10); } if (button22.fallingEdge()) { Mouse.moveTo(960, 540); if (button23.fallingEdge()) { Mouse.moveTo(24, 1066); } if (button2.fallingEdge()) { Mouse.press(MOUSE_LEFT); } if (button2.risingEdge()) { Mouse.release(MOUSE_LEFT); } if (button3.fallingEdge()) { Mouse.press(MOUSE_MIDDLE); } if (button3.risingEdge()) { Mouse.release(MOUSE_MIDDLE); } if (button4.fallingEdge()) { Mouse.press(MOUSE_RIGHT); } if (button4.risingEdge()) { Mouse.release(MOUSE_RIGHT); } if (button5.fallingEdge()) { Mouse.press(MOUSE_BACK); } if (button5.risingEdge()) { Mouse.release(MOUSE_BACK); } if (button6.fallingEdge()) { Mouse.press(MOUSE_FORWARD); } if (button6.risingEdge()) { Mouse.release(MOUSE_FORWARD); } }
- توجه داشته باشید که مطابق تصویر زیر باید از منوی Tools در نرمافزار Arduino IDE اقدام به تغییر UsbType کنید و مقدار را بر روی Mouse تنظیم کنید تا ارتباط به درستی با سیستم و میکرو برقرار شود.
کلام آخر با سایفر
در این پروژه بار دیگر با استفاده از یکی قابلیت های برد teency اقدام به ساخت گجتی جالب کردیم، از این پروژه میتوانید در مواردی که نیاز به کنترل سیستم خود وابسته به میکروکنترلر ها دارید، استفاده کنید. همچنین در آینده میتوانیم با افزودن ماژول هایی مانند MPU6050 به این پروژه اقدام به کنترل نشانگر ماوس به شکل کنترل های های تلویزیون کنیم که بسیار جذاب خواهد بود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
ربان برنامه نویسی چیه؟ بالاخره با کدوم زبان که از همه پرکاربردتره میشه برنامه نوشت؟
اینجا از c++ استفاده شده. انتخاب زبان باید متناسب با سناریو و نیاز پروژه باشه.
سلام ممنون بابت این پروژه این ماوس رو چطوری به کامپیوتر وصل میشه؟
با سلام
از طریق پورت USB برد با یک کابل به کامپیوتر متصل میکنید.
سلام این ماوس دقیقا مثل ماوس کامپیوتر فلش تکان میخورد یا فقط دکمه ها کار میکنن؟
باسلام مجدد
خیر، برای چهار جهت بایستی از میکروسوئیچ استفاده شود مشابه تصاویر نمایش داده شده، این قابلیت در حقیقت کاربردی نیست و بیشتر بابت آموزش در نظر گرفته شده است.