آردوینو برد تینسی Teensy

پروژه راه‌اندازی سرو موتور SG90 و LED با سیگنال PWM در برد Teensy

Starting SG90 servo and LED with PWM signal in Teency board
نوشته شده توسط CiferTech

در این بخش از آموزش های برد Teency قصد استفاده از سیگنال های pwm را داریم، از مصارف عادی برای سیگنال pwm میتوان به کنترل سروو موتور ها مانند سروو موتور SG90 اشاره کرد و همچنین کنترل شدت نور LED ها است که در این آموزش به تمام این موارد خواهیم پرداخت. در این آموزش علاوه بر توضیحات تکمیلی درباره pwm در برد Teency دو سناریو ساده اما جال با سروو موتور SG90 را تست خواهیم کرد و همچنین اقدام به کنترل شدت نور LED ها بوسیله این سیگنال یعنی PWM خواهیم کرد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

کنترل سرو موتور با برد Teensy تینسی - دیجی اسپارک

 


برد Teensy 


Teensy یک برد توسعه با رابط کاربری آسان و دارای ویژگی های زیادی در یک بسته خوب ارائه شده است. هر برد Teensy همراه با یک بوت لودر از قبل فلش می شود بنابراین می توانید با استفاده از اتصال USB روی آن برنامه ریزی کنید، نیازی به برنامه نویس خارجی نیست و می‌توانید با استفاده از C برای Teensy در ویرایشگر مورد علاقه خود برنامه نویسی کنید و یا می‌توانید افزونه Teensyduino را برای Arduino IDE نصب کرده و با  Arduino IDE را برای آن برنامه بنویسید.

برد تینسی Teensy - دیجی اسپارک

 

پردازنده موجود در Teensy به USB نیز دسترسی دارد و می‌تواند هر نوع دستگاه USB مورد نیاز شما را تقلید کند و آن را برای USB-MIDI و سایر پروژه های HID آماده کار کند. پردازنده ۳۲ بیتی چند ویژگی دیگر نیز فراهم کرده است، از جمله چند کانال دسترسی مستقیم به حافظه، چند ADC با رزولوشن بالا و حتی یک رابط صوتی دیجیتال I2S. همچنین چهار تایمر جداگانه وجود دارد، به علاوه یک تایمر تأخیر. و همه پین های دیجیتال دارای قابلیت وقفه هستند و قابلیت ارائه ولتاژ سیستم ۳٫۳ ولت را تا حداکثر ۲۵۰ میلی آمپر را دارد. همه این قابلیت ها در یک برد با ابعاد ۱٫۴ در ۰٫۷ اینچی قرار گرفته است، بنابراین می‌توانید به راحتی برد را بر روی بردبرد سوار کنید و به انجام پروژه بپردازید.

جدول پین های PWM در برد های مختلف Teency.

نام برد پین های سازگار با PWM
Teensy 4.1 ۰, ۱, ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹, ۱۰, ۱۱, ۱۲, ۱۳, ۱۴, ۱۵, ۱۸, ۱۹, ۲۲, ۲۳,
۲۴, ۲۵, ۲۸, ۲۹, ۳۳, ۳۶, ۳۷, ۴۲, ۴۳, ۴۴, ۴۵, ۴۶, ۴۷, ۵۱, ۵۳
Teensy 4.0 ۰, ۱, ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹, ۱۰, ۱۱, ۱۲, ۱۳, ۱۴, ۱۵, ۱۸, ۱۹, ۲۲, ۲۳,
۲۴, ۲۵, ۲۸, ۲۹, ۳۳, ۳۴, ۳۵, ۳۶, ۳۷, ۳۸, ۳۹
Teensy 3.6 ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹, ۱۰, ۱۴, ۱۶, ۱۷, ۲۰, ۲۱, ۲۲, ۲۳, ۲۹, ۳۰, ۳۵, ۳۶, ۳۷, ۳۸
Teensy 3.5 ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹, ۱۰, ۱۴, ۲۰, ۲۱, ۲۲, ۲۳, ۲۹, ۳۰, ۳۵, ۳۶, ۳۷, ۳۸
Teensy 3.2 & 3.1 ۳, ۴, ۵, ۶, ۹, ۱۰, ۲۰, ۲۱, ۲۲, ۲۳, ۲۵, ۳۲
Teensy LC ۳, ۴, ۶, ۹, ۱۰, ۱۶, ۱۷, ۲۰, ۲۲, ۲۳
Teensy 3.0 ۳, ۴, ۵, ۶, ۹, ۱۰, ۲۰, ۲۱, ۲۲, ۲۳
Teensy++ 2.0 ۰, ۱, ۱۴, ۱۵, ۱۶, ۲۴, ۲۵, ۲۶, ۲۷
Teensy 2.0 ۴, ۵, ۹, ۱۰, ۱۲, ۱۴, ۱۵

 

 


سروو موتور SG90


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

 


روش کار موج مربعی یا PWM


موج مربعی یا pwm یا Pulse Width Modulation به معنی مدولاسیون پهنای پالس، روشی برای تنظیم توان الکتریکی، با تغییردادن زمان قطع‌ و‌ وصل شدن منبع در هر سیکل است. در واقع pwm یک سیگنال مربعی می‌باشد که در یک زمان می تواند ۱ یعنی ۵لت و یا ۰ که یعنی ۰ولت باشد که در این بین ما با تغییر Duty Cycle به نتیجه دلخواه که در نور led، حرکت در سروو و موارد دیگر می شویم. برای مثال اگر Duty Cycle یک موج PWM برابر با ۸۰% باشد یعنی در هر سیکل ۸۰% ولتاژ برابر ۵ولت و ۲۰% ولتاژ برابر۰ است.در شکل زیر PWM نشان داده شده است.

 


وسایل مورد نیاز


سروو موتور SG90

برد Teency 3.2

ال ای دی

پتانسیومتر

کابل جهت اتصالات

Starting SG90 servo and LED with PWM signal in Teency board

 


نصب Teensyduino


آموزش مقدماتی استفاده از برد های Teency  و همچنین نصب افزونه مورد نیاز در سایت دیجی‌اسپارک موجود است، برای آموزش نصب این افزونه به آموزش “شروع کار با برد های Teensy در پلتفرم Arduino IDE” مراجعه کنید.

 


راه‌اندازی سروو SG90 با Teency


در این بخش از آموزش اقدام به راه‌اندازی و کنترل سروو موتور های SG90 خواهیم کرد، به این صورت که یکبار تنها بوسیله خود برد Teency و تولید سیگنال pwm سروو در جهت ساخت گرد و پاد ساعتگرد تغییر جهت خواهد داد و در سناریو دوم با دریافت مقادیر تغییر مقاومت از پتانسیومتر نسبت به تغییر زاویه پتانسیومتر، زاویه سروو موتور ما نیز تغغیر خواهد کرد. ابتدا سناریو اول را تست خواهیم کرد. اتصالات را مطلبق جدول و شماتیک زیر برقرار کنید.

اتصالات سرو موتور با برد Teensy - دیجی اسپارک

 

  • شماتیک اتصالات سروو موتور SG90 با برد Teency

اتصالات سرو موتور Servo Motor به برد تینسی Teensy - دیجی اسپارک

کد های این بخش از پروژه بسیار ساده هستن و تنها از چند بخش تشکیل شده‌اند، برای مثال فراخوانی کتابخانه، ساهت آبجکت مد نظر، مشخص کردن پین مربوط به با آبجکت ساخته شده و اتصال سروو موتور و در نهایت تولید سیگنال pwm و تغییر محدوده و مقدار سیگنال با ایجاد دو عدد حلقه for در بخش loop یا حلقه اصلی برنامه. کد های این بخش از آموزش به شرح زیر است.

#include <Servo.h> 
 
Servo myservo;  // ساخت آبجکت برای سروو 
 
int pos = 0;    // مشخص کردن مقدار اولیه موقعیت سروو
 
void setup() 
{ 
  myservo.attach(9);  //اتصال پین سروو به D9
} 
 
void loop() 
{ 
  for(pos = 0; pos <= 180; pos += 1) // از ۰ تا ۱۸۰ درجه 
  {                                  
    myservo.write(pos);              // تغییر موقعیت سروو با توجه به مقدار متغیر 
    delay(15);                       // 15 میلی ثانیه صبر  
  } 
  for(pos = 180; pos>=0; pos-=1)     
  {                                
    myservo.write(pos);              
    delay(15);                      
  } 
}

 

Starting SG90 servo and LED with PWM signal in Teency board

 

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

اتصالات برد تینسی Teensy برای کنترل سرو موتور - دیجی اسپارک

 

  • شماتیک اتصالات پتانسیومتر و سروو به برد Teency

شماتیک اتصالات سرو موتور به برد Teensy - دیجی اسپارک

در کد های این پروژه ابتدا کتابخانه مورد نیاز مربوط به سروو را فراخوانی می‌کنیم، آبجکت مورد نیاز را خواهیم ساخت و پین آنالوگ برای خواندن مقادیر پتانسیومتر را مشخص خواهیم کرد، در ادامه مقادیر پتانسیومتر را از ۰ تا ۱۰۲۳ خواهیم خواند و این مقادیر را با استفاده map از ۰ تا ۱۸۰ مقیاس بندی خواهیم کرد. سپس این مقادیر را با نوقعیت سروو هماهنگ می‌کنیم. کد های این بخش از آموزش به شرح زیر است.

#include <PWMServo.h>

PWMServo myservo;  // ساخت آبجکت برای سروو

const int potpin = A0;  // مشخص کردن پین آنالوگ برای پتانسیومتر
int val;    // یک متغیر برای خواندن ذخیره مقادیر آنالوگ

void setup() {
  myservo.attach(SERVO_PIN_A);         // اتصال سروو موتور موتور به پین D9
}

void loop() {
  val = analogRead(potpin);            // خواندن مقادیر پتانسیومتر از ۰ تا ۱۰۲۳
  val = map(val, 0, 1023, 0, 179);     // مقیاس مقادیر بدست آمده از ۰ تا ۱۸۰
  myservo.write(val);                  // تنظیم موقعیت سروو با مقادیر متغیر
  delay(15);                           // 15 میلی ثانیه توفق
}

 

Starting SG90 servo and LED with PWM signal in Teency board

 


کنترل شدت نور LED با pwm در برد Teency


در این بخش از پروژه اقدام به کنترل نور led داخلی برد Teency در پایه D13 بوسیله سیگنال pwm خواهیم کرد، در واقع ما قادر هستیم با تغییر و اعمال مقادیر مختلف pwm ولتاژ را کم یا زیاد کنیم پس در ادامه می‌توانیم این تغییرات را به یک led اعمال کنیم تا در نتیحه نور این led تغییر کند. این LED ها در واقع خیلی سریع چشمک می زنند. از آنجا که چشمک زدن خیلی سریعتر از آنچه چشم انسان می تواند درک کند و بسیار سریعتر از زمان شاتر دوربین برای این عکس اتفاق می افتد، نتیجه به نظر می رسد یک LED است که تا حدی روشن شده است. بیشتر LED ها با نزدیک شدن به حداکثر میزان خروجی از میزان کارایی آنها کاسته می شود. حساسیت چشم انسان به اختلاف بین اجسام با نور زیاد کمتر است. این ۲ عامل باعث می شود که LED با مقدار PWM 120 تقریباً به اندازه درست ترین LED متصل مستقیم به برق روشن باشد. LED روشن شده با PWM فقط ۴۷٪ از انرژی را مصرف می کند. اتصالات را مطلبق جدول و شماتیک زیر برقرار کنید.

اتصال ال ای دی به برد تینسی Teensy - دیجی اسپارک

  • شماتیک اتصالات LED به برد Teency.

Starting SG90 servo and LED with PWM signal in Teency board

 

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

#include <SoftPWM.h> 

void setup()
{
  SoftPWMBegin();
  
  SoftPWMSet(13, 0);

  SoftPWMSetFadeTime(13, 1000, 1000);
}

void loop()
{
  SoftPWMSet(13, 255);
  delay(1000);
  SoftPWMSet(13, 0);
  delay(1000);
}

 

کنترل ال ای دی با موج PWM توسط برد تینسی Teensy - دیجی اسپارک

 


جمع بندی


پین های pwm در میکروکنترلر های مختلف کاربرد های فراوانی دارند که در این آموزش به دو مورد از آنها یعنی کنترل زاویه سروو موتور که ما از سروو موتور های SG90 استفاده کردیم، و دوم کنترل دور LED که در موارد بسیاری کاربد دارد و همچنین موجب کاهش مصرف توان تا ۵۰% خواهد شد. همچنین شکل موج PWM می تواند با یک فیلتر low pass به سیگنال های آنالوگ تبدیل شود. برای دستیابی به سیگنال آنالوگ، در ساده ترین فیلتر فقط از یک مقاومت و خازن استفاده می شود. که به این موارد نیز در آموزش های آینده خواهیم پرداخت.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه