چرخش خودکار صفحه مانیتور دسکتاپ با آردوینو و سنسور LSM6DS3

blog
۱۴۰۰-۰۳-۱۱
6 دقیقه

در این مقاله آموزشی، قصد داریم در یکی دیگر از پروژه های آردوینو، صفحه مانیتور دسکتاپ را به کمک یک سنسور ژیروسکوپ (Gyroscope) و شتاب سنج (Accelerometer) به نام LSM6DS3 بچرخانیم. از برد آردوینو با میکروکنترلر AVR برای قسمت سخت افزاری استفاده شده و برنامه چرخش صفحه سمت دسکتاپ نیز، به زبان پایتون نوشته شده و در ویندوز تست شده است.  از آن جایی که پایتون مالتی پلت فرم است، با تغییرات بسیار کوچکی، می‌توان آن را در لینوکس و مک نیز اجرا کرد!

پس با سیسوگ همراه باشید!

پس بزن بریم!

شاید برای شما مفید باشد: پروژه الکترونیک با میکروکنترلر های مختلف و آموزش 0 تا 100 راه اندازی پروژه

 

ایده اولیه

پایه‌های نگه‌دارنده بعضی از مانیتورها، قابلیت چرخش 360 درجه‌ای را به شما می‌دهند. همچنین به کمک پایه‌هایی معروف به “پایه آسانسوری”، می‌توانید مانیتور خود را به زاویه‌های مختلفی بچرخانید. اما برای چرخش تصویر خروجی سیستم عامل، شما باید به‌صورت دستی وارد تنظیمات نمایشگر (Display setting) شده و زاویه مانیتور را مجدداً در آن جا تنظیم کنید. حال فرض کنید بخواهید مدام و در حین کار با کامپیوتر، صفحه را به چرخش درآورید، هر بار باید مجدداً وارد تنظیمات شوید و این روند را تکرار کنید. چقدر خوب می‌شد، اگر همانند گوشی‌های هوشمندی مثل اندروید، مانیتور ما نیز به G-Sensor مجهز می‌شد و با چرخش آن، به‌صورت خودکار ویندوز، لینوکس یا مک ما نیز می‌چرخید! در این صورت می‌توانستیم به راحتی بازی‌ها و برنامه‌های مختلف را در حالت عمودی (Portrait) یا افقی (Landscape) در آوریم.

 

پایه آسانسوری

مانیتور با پایه آسانسوری

 

نکته:

در ویندوز 10، شما می‌توانید با دکمه‌های ترکیبی Ctrl + Alt + (right/left/up/down)

و در لینوکس با دستوراتی مثل

xrandr -o left
xrandr -o right
xrandr -o inverted
xrandr -o normal

نیز صفحه را به چرخش در آورید، در این مقاله می‌خواهیم به کمک یک سنسور خارجی، این کار را به‌صورت خودکار انجام دهیم.

 

سنسور LSM6DS3

دیتاشیت LSM6DS3 را می‌توانید از اینجا دانلود کنید. این سنسور قابلیت راه اندازی با دو رابط SPI یا I2C را دارا بوده و علاوه بر ژیروسکوپ، شتاب سنج هم می‌باشد.

سنسور LSM6DS3

سنسور ژیروسکوپ (Gyroscope) و شتاب سنج (Accelerometer) LSM6DS3

این سنسور شتاب را بر پایه‌ی سیستم‌های میکرو الکترومکانیک (MEMS) اندازه گیری می‌کند. بنابراین اگر محور X آن به سمت بالا باشد، به دلیل وجود نیروی جاذبه‌ی زمین، سنسور بیشترین مقدار را برای X در خروجی می‌دهد. همچنین، اگر این محور رو به زمین باشد، بزرگ‌ترین مقدار منفی را برای X اندازه گیری می‌کند. این موضوع برای محورهای Y و Z نیز صدق می‌کند.

شاید برای شما مفید باشد: آموزش AVR از 0 تا 100 به همراه جزوه PDF و ویدئو آموزشی

برای اندازه گیری زاویه مانیتور، ما به محور Z نیازی نداریم و محور X و Y برای ما کافی می‌باشد.

 

در حالتی که محور X رو به بالا است، سنسور بیشترین مقدار را برای محور X (حدود 10) اندازه گیری می‌کند و محور Y ها تقریباً مقدار صفر دارد. (زاویه 0 درجه)

در حالتی که محور Y رو به پایین است، سنسور کمترین مقدار را برای محور Y (حدود 10-) اندازه گیری می‌کند و محور X ها تقریباً مقدار صفر دارد. (زاویه 90 درجه)

در حالتی که محور X رو به پایین است، سنسور کمترین مقدار را برای محور X (حدود 10-) اندازه گیری می‌کند و محور Y ها تقریباً مقدار صفر دارد. (زاویه 180 درجه)

در حالتی که محور Y رو به بالا است، سنسور بیشترین مقدار را برای محور Y (حدود 10) اندازه گیری می‌کند و محور X ها تقریباً مقدار صفر دارد. (زاویه 270 درجه)

 

بنابراین، اگر سنسور را به‌صورت عمودی روبروی خود بگیرید، به گونه‌ای که محور X ها رو به بالا باشد، می‌توانید آن را به همین صورت پشت مانیتور خود متصل کنید.

محاسبات بالا را می‌توان به‌صورت یک تابع به شکل زیر در آردوینو نوشت:

 

 

راه اندازی سنسور LSM6DS3 با آردوینو

برای افزودن کتابخانه سنسور LSM6DS3 به آردوینو، وارد منوی زیر شوید:

Sketch -> include Libary -> Manage Libaries …

مدیریت کتابخانه ها در آردوینو

 

سپس یکی یکی کتابخانه‌های Adafruit LSM6DS، Adafruit BusIO و Adafruit Unified Sensor را جستجو کرده و نصب کنید.

Adafruit BusIO

 

Adafruit LSM6DS

 

Adafruit Unified Sensor

شما می‌توانید مثال‌های زیادی را برای این سنسور در منوی زیر ببینید:

File -> Examples -> Adafruit LSM6DS

در این مثال‌ها، این سنسور را می‌توانید هم با رابط‌های SPI و هم I2C راه اندازی کنید، برای این کار می‌توانید کد مربوطه را از حالت کامنت خارج و دیگری را کامنت کنید:

 

ما از رابط SPI استفاده کرده‌ایم. کد کامل برنامه چرخش صفحه ما در آردوینو به‌صورت زیر می‌باشد:

ابتدا در تابع setup ماژول LSM6DS3 را از طریق رابط SPI راه اندازی می‌کنیم، سپس در حلقه اصلی، به‌صورت مداوم زاویه ماژول را به طریقی که بالاتر گفته شد، حساب می‌کنیم، اگر این زاویه تغییر کرد، آن را از طریق پورت سریال برای کامپیوتر ارسال می‌کنیم.

 

سخت افزار

دقت داشته باشید که سنسور LSM6DS3 را به 3.3 ولت متصل کرده باشید. سیم کشی مدار زیر بر اساس SPI است. اگر می‌خواهید با I2C راه اندازی کنید، ضمن تغییر کد (به روشی که اشاره شد)، می‌بایست نحوه سیم کشی را نیز تغییر دهید.

آردوینو و LSM6DS3

مدار چرخش صفحه با آردوینو و LSM6DS3

 

نرم افزار سمت دسکتاپ چرخش صفحه

ما در محیط دسکتاپ، نیاز به یک نرم افزار داریم تا زاویه مورد نظر را در طریق پورت سریال خوانده و سپس بر روی تنظیمات نمایشگر اعمال کند. این برنامه را با زبان‌های مختلفی مثل #C، پایتون و… می‌توان توسعه داد. در این آموزش، از زبان پایتون به جهت سادگی و امکان اجرا بر روی سیستم عامل‌های مختلف استفاده می‌کنیم.

در پایتون، برای خواندن اطلاعات از پورت سریال و چرخش نمایشگر، به کتابخانه‌های آن‌ها نیاز داریم. به همین خاطر، ابتدا با دستور pip، کتابخانه‌های pySerial و rotate-screen را نصب می‌کنیم.

 

 

سپس کد زیر را در فایل rotate.py ذخیره می‌کنیم.

از آنجایی که زبان پایتون به فاصله‌ها حساس است، بهتر است این اسکریپت را به‌صورت فایل در انتهای مطلب دانلود کنید.

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

اطلاعات
10
0
لینک و اشتراک
profile

Digi Boy

متخصص الکترونیک

به دانش فزای و به یزدان گرای، که او باد جان تو را رهنمای (فردوسی)

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
مهران گفت :
۱۴۰۰-۱۰-۱۰ ۲۰:۳۹

راهش انداختم خیلی باحاله، حتما یه PCB براش می کشم و پشت مانیتورم وصل میکنم ? دیجی بوی عاشقتم ?

profile
Digi Boy گفت :
۱۴۰۰-۱۰-۱۱ ۰۹:۳۱

قابل شما رو نداره ?

profile
آراد گفت :
۱۴۰۰-۰۵-۰۸ ۰۰:۳۹

با سلام
من می خواستم سنسور LSM6DS3 روی بورد آردوینو از طریق پروتکل I2C راه اندازی کنم. فقط می خواستم مقادیر x-y-z را در خروجی نمایش بدهد. امکانش هست کد اصلاح شده را داشته باشم. با تشکر

profile
Digi Boy گفت :
۱۴۰۰-۰۵-۰۹ ۱۰:۱۹

درود بر شما.
ضمن تغییر پین‌ها در مدار، خط هفدهم (راه اندازی با SPI) را با کد I2C زیر جابجا کنید:
if (!lsm6ds33.begin_I2C()) {
مقدار x و y هم در خطوط 42 و 43 وجود دارند. برای به دست آوردن مقدار Z کد زیر را بهش اضافه کنید:
signed char z = floor(accel.acceleration.z);
حالا می تونید بقیه خود رو طبق سلیقه خودتون تغییر بدید و برای مثال با تابع Serial.print مقادیر را با فرمت دلخواهتون نمایش بدید.

profile
H.M گفت :
۱۴۰۰-۰۳-۱۸ ۰۰:۰۶

رو ویندوز ۱۰ اجرا کردم صفحه رو هی تند تند میچرخوندم حاجی خیلی باحال بود آخرش از بس کرم ریختم دیفندر هشدار رفتار غیر عادی داد و اسکریپتو پاک کرد منم دوباره کپیش کردم. در کل حرکت جالبی بود خسه نباشید

profile
Digi Boy گفت :
۱۴۰۰-۰۳-۱۸ ۱۱:۰۵

ممنون.
انقدر الکی می چرخونید صفحه رو سیستمتون رو به فنا ندید! ?

profile
آریا گفت :
۱۴۰۰-۰۳-۱۲ ۲۱:۵۲

ایول چه باحال!!!!!!! من گیمرم و مانیتورم هم پایه آسانسوریه اما الکترونیک خیلی بلد نیستم ولی این قطعات رو سفارش دادم امیدوارم بتونم یکیشو بسازم ? دمتون گرم فدایی دارین

profile
Digi Boy گفت :
۱۴۰۰-۰۳-۱۷ ۱۶:۴۲

آفرین، تو میتونی… ?

profile
مهرداد گفت :
۱۴۰۰-۰۳-۱۲ ۱۹:۳۱

دمتون گرم، خسته نباشید! مدارش رو ساختم خیلی جالبه. ممنون.

profile
Digi Boy گفت :
۱۴۰۰-۰۳-۱۷ ۱۶:۴۱

?

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله