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

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

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

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

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

پس بزن بریم!

 

ایده اولیه

پایه‌های نگه‌دارنده بعضی از مانیتورها، قابلیت چرخش 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 نیز صدق می‌کند.

برای اندازه گیری زاویه مانیتور، ما به محور 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) مربوط به آردوینو از شما درخواست می‌شود، سپس برنامه به‌طور مداوم منتظر دریافت زاویه از طریق این پورت می‌ماند. در صورتی که زاویه جدیدی توسط آردوینو ارسال شد، آن را تنظیم می‌کند. دقت داشته باشید که در لینوکس و مک که بر پایه یونیکس هستند، پورت سریال بجای عدد، به‌صورت آدرس فایل است و باید این قسمت را تغییر کوچکی بدهید.

1 نفر

پــــســنــدیـده انـد

توجه

آواتار نویسنده
Digi Boy

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

دیدگاه ها

10 دیدگاه

  • مهران
    ۱۰ دی ۱۴۰۰

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

  • آراد
    ۸ مرداد ۱۴۰۰

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

    • Digi Boy
      Digi Boy
      ۹ مرداد ۱۴۰۰

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

  • H.M
    ۱۸ خرداد ۱۴۰۰

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

    • Digi Boy
      Digi Boy
      ۱۸ خرداد ۱۴۰۰

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

  • آریا
    ۱۲ خرداد ۱۴۰۰

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

    • Digi Boy
      Digi Boy
      ۱۷ خرداد ۱۴۰۰

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

  • مهرداد
    ۱۲ خرداد ۱۴۰۰

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک