معرفی بوردهای آردوینو

آردوینو یک پلتفرم متن‌باز برای ساخت پروژه‌های الکترونیکی و رباتیک است که از یک برد سخت‌افزاری (میکروکنترلر) و یک محیط برنامه‌نویسی ساده تشکیل شده است. با استفاده از آردوینو می‌توان سنسورها، موتور‌ها، LEDها و سایر قطعات الکترونیکی را کنترل کرد. این بردها معمولاً دارای پایه‌های ورودی و خروجی دیجیتال و آنالوگ هستند که امکان ارتباط با قطعات مختلف را فراهم می‌کنند. برنامه‌ها در محیط Arduino IDE نوشته شده و از طریق کابل USB روی برد آپلود می‌شوند. آردوینو به دلیل سادگی، قیمت مناسب و منابع آموزشی فراوان، یکی از محبوب‌ترین ابزارها برای آموزش الکترونیک و رباتیک به شمار می‌رود.

وسایل مورد نیاز برای شروع کار با آردوینو:

برد آردوینو (Uno یا Nano)

برد آردوینو (Uno یا Nano)

800.000
تومان
افزودن به سبد خرید
کابل USB برای اتصال به کامپیوتر

کابل USB برای اتصال به کامپیوتر

86.000
تومان
افزودن به سبد خرید
برد بورد (Breadboard)

برد بورد (Breadboard)

170.000
تومان
افزودن به سبد خرید
سیم‌های جامپر (Jumper Wires)

سیم‌های جامپر (Jumper Wires)

148.000
تومان
افزودن به سبد خرید
قطعات پایه مثل LED و مقاومت

قطعات پایه مثل LED و مقاومت

3.000
تومان
افزودن به سبد خرید

بورد آردوینو نانو (Arduino Nano)

آردوینو نانو یک برد کوچک و فشرده از خانواده آردوینو است که تقریباً تمام قابلیت‌های آردوینو اونو را در اندازه‌ای بسیار کوچکتر ارائه می‌دهد. این برد بر پایه میکروکنترلر ATmega328 ساخته شده و دارای پایه‌های دیجیتال و آنالوگ برای اتصال به سنسورها و ماژول‌ها است. به دلیل اندازه کوچک، آردوینو نانو گزینه بسیار مناسبی برای پروژه‌های رباتیک کوچک، پروژه‌های قابل حمل و زمانی است که فضای کمی در اختیار داریم. این برد معمولاً روی برد بورد قرار می‌گیرد و از طریق کابل Mini USB یا Micro USB به کامپیوتر متصل می‌شود.

بورد آردوینو اونو (Arduino Uno)

آردوینو اونو یکی از محبوب‌ترین و پرکاربردترین بردهای آردوینو است که برای آموزش و پروژه‌های ابتدایی بسیار مناسب است. این برد نیز از میکروکنترلر ATmega328P استفاده می‌کند و دارای 14 پایه دیجیتال و 6 پایه آنالوگ است. آردوینو اونو به دلیل اندازه مناسب، سادگی اتصال قطعات و پشتیبانی گسترده در آموزش‌ها، معمولاً اولین بردی است که افراد برای یادگیری الکترونیک و برنامه‌نویسی میکروکنترلر استفاده می‌کنند. این برد از طریق کابل USB Type‑B به کامپیوتر متصل می‌شود و برنامه‌ها به راحتی روی آن آپلود می‌شوند.

روشن کردن LED با آردوینو

یکی از ساده‌ترین و اولین پروژه‌هایی که معمولاً با آردوینو انجام می‌شود، روشن کردن یک LED است. در این پروژه یک LED به یکی از پایه‌های دیجیتال آردوینو متصل می‌شود و با استفاده از یک برنامه ساده، دستور روشن یا خاموش شدن آن ارسال می‌شود. این تمرین به دانش‌آموزان کمک می‌کند تا با مفاهیمی مانند خروجی دیجیتال (Digital Output)، نحوه سیم‌کشی روی برد بورد و نحوه آپلود برنامه روی آردوینو آشنا شوند.

اتصالات کلی:

  • پایه مثبت LED به یکی از پایه‌های دیجیتال آردوینو (مثلاً پایه 13)
  • پایه منفی LED از طریق مقاومت به GND

با استفاده از دستور pinMode(13, OUTPUT); پایه شماره 13 که LED به آن متصل است روی حالت خروجی یعنی OUTPUT تنظیم می‌گردد. سپس با دستور digitalWrite(13, 1); وضعیت پایه 13 به 1 تغییر کرده و LED روشن می‌شود. کافی است وضعیت پایه 13 را به صفر تغییر دهیم تا LED خاموش شود. برای آپلود برنامه روی بورد آردوینو می‌توان از کلید میانبر CTRL + U استفاده کرد.

Blink.ino
void Setup(){
	pinMode(13, OUTPUT);
	digitalWrite(13, 1);
}
void Loop(){
	
}

راه اندازی بازر

حال به جای استفاده از LED می‌توانید از یک بازر استفاده کنید و با 0 و 1 کردن پایه شماره 13 آردوینو بازر را قطع و وصل کنید. دقت داشته باشید که پایه بلند تر بازر پایه مثبت آن است که باید به پایه 13 آردوینو متصل شود. پایه کوتاه تر نیز پایه منفی بوده و به GND وصل می‌شود.

راه اندازی 7-Segment

سون‌سگمنت (7‑Segment) یک نمایشگر عددی است که از هفت LED باریک برای نمایش اعداد 0 تا 9 و یک نقطه‌ی اعشاری تشکیل شده است. این نوع نمایشگر در شمارنده‌ها، تایمرها، ساعت‌ها، دستگاه‌های دیجیتال و پروژه‌های آردوینو بسیار کاربرد دارد. سون سگمنت ها در دو نوع کاتد مشترک (پایه مشترک GND) و آند مشترک (پایه مشترک مثبت) ساخته می‌شوند. در سون سگمنت های کاتد مشترک برای روشن کردن LED ها به آن ها 1 می‌دهیم و در سون سگمنت های آن مشترک به آنها 0 می‌دهیم.

در مدار زیر از یک سون سگمنت کاتد مشترک استفاده شده یعنی پایه مشترک به منفی مدار متصل شده و پایه های a, b, c, d, e, f, g به ترتیب به پایه های شماره 2 تا 8 آردوینو وصل شده اند. مدار زیر را روی برد بورد ببندید.

برنامه شمارنده ساده

در برنامه زیر ابتدا برای پایه های a, b, .., g متغیر هایی جهت تعریف شماره پایه آنها ساخته شده و با استفاده از دستور pinMode پایه های 2 تا 8 روی حالت خروجی تنظیم شده و سپس تابعی به نام displayNumber(int num) تعریف شده تا به ازای هر عدد، LED های مربوط به آن عدد را روشن کند. در این تابع یک آرایه به نام digits تعریف شده که مشخص میکند چه سگمنت هایی باید برای نمایش هر عدد روشن شوند. در حلقه loop با استفاده از یک حلقه for اعداد 0 تا 9 روی سون سگمنت نمایش داده می‌شوند.

Segment.ino
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;

void setup() {
  int pins[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < 7; i++) {
    pinMode(pins[i], OUTPUT);
  }
}

// الگوی نمایش اعداد
void displayNumber(int num) {
  bool digits[10][7] = {
    {1,1,1,1,1,1,0},  // 0
    {0,1,1,0,0,0,0},  // 1
    {1,1,0,1,1,0,1},  // 2
    {1,1,1,1,0,0,1},  // 3
    {0,1,1,0,0,1,1},  // 4
    {1,0,1,1,0,1,1},  // 5
    {1,0,1,1,1,1,1},  // 6
    {1,1,1,0,0,0,0},  // 7
    {1,1,1,1,1,1,1},  // 8
    {1,1,1,1,0,1,1}   // 9
  };

  int pins[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < 7; i++) {
    digitalWrite(pins[i], digits[num][i]);
  }
}

void loop() {
  for (int i = 0; i <= 9; i++) {
    displayNumber(i);
    delay(700);
  }
}

ورودی ها در آردوینو

تا کنون با پورت های خروجی در آردوینو آشنا شدید. با استفاده از پورت های خروجی می‌توانیم وضعیت پایه ها را به 0 یا 1 تغییر دهیم. حال می‌خواهیم وضعیت یک پایه را به صورت ورودی دریافت کنیم. برای مثال برای راه اندازی کلید های فشاری یا push button میتوان پایه ای از آردوینو را به آن متصل کرد و با فشار دادن کلید آن پایه را 0 یا 1 کرد. سپس در آردوینو وضعیت این پایه را با استفاده از تابع digitalRead(pinNumber) دریافت می‌کنیم و در برنامه خود استفاده می‌کننیم. طبق مدار زیر دو کلید فشاری به مدار قبلی اضافه کنید.

در مدار بالا دو کلید فشاری به پایه های A5 و A4 متصل شده و با فشار دادن هر کلید وضعیت آن پایه به 1 تغییر می‌کند. (چون پایه دیگر کلید به مثبت مدار متصل شده) اما هنگامی که کلید در وضعیت قطع باشد وضعیت پایه مشخص نخواهد بود به همین خاطر یک مقاومت 10 کیلو وضعیت پیشفرض پایه را 0 می‌کنیم (یعنی مقاومت را به منفی وصل میکنیم). هنگامی که پایه ای را با مقاومت به منفی وصل میکنیم به این کار pull-down کردن می‌گویند. اصطلاح pull-up نیز به معنی وصل کردن یک پایه به مثبت با استفاده از یک مقاومت است.

Segment.ino
// 7-Segment Pins
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;

// Buttons
int btnUp   = A5;
int btnDown = A4;

int number = 0;     // current number on display (0–9)

bool lastUpState   = HIGH;
bool lastDownState = HIGH;

unsigned long debounceDelay = 120;  // ms
unsigned long lastUpTime = 0;
unsigned long lastDownTime = 0;

// 7‑segment digit patterns (for Common Cathode)
bool digits[10][7] = {
  {1,1,1,1,1,1,0},  // 0
  {0,1,1,0,0,0,0},  // 1
  {1,1,0,1,1,0,1},  // 2
  {1,1,1,1,0,0,1},  // 3
  {0,1,1,0,0,1,1},  // 4
  {1,0,1,1,0,1,1},  // 5
  {1,0,1,1,1,1,1},  // 6
  {1,1,1,0,0,0,0},  // 7
  {1,1,1,1,1,1,1},  // 8
  {1,1,1,1,0,1,1}   // 9
};

void displayNumber(int num) {
  int pins[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < 7; i++) {
    digitalWrite(pins[i], digits[num][i]);
  }
}

void setup() {
  int pins[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < 7; i++) {
    pinMode(pins[i], OUTPUT);
  }

  pinMode(btnUp,   INPUT_PULLUP);
  pinMode(btnDown, INPUT_PULLUP);

  displayNumber(number);
}

void loop() {
  int upState = digitalRead(btnUp);
  int downState = digitalRead(btnDown);

  // ---------- Increase Button ----------
  if (upState == LOW && lastUpState == HIGH) {
    if (millis() - lastUpTime > debounceDelay) {
      number++;
      if (number > 9) number = 9; // limit
      displayNumber(number);
      lastUpTime = millis();
    }
  }
  lastUpState = upState;

  // ---------- Decrease Button ----------
  if (downState == LOW && lastDownState == HIGH) {
    if (millis() - lastDownTime > debounceDelay) {
      number--;
      if (number < 0) number = 0; // limit
      displayNumber(number);
      lastDownTime = millis();
    }
  }
  lastDownState = downState;
}

تمرین 5: با استفاده از سون سگمنت و کلید فشاری یک شمارنده طراحی کنید که با فشار دادن کلید اول شروع به شمارش کند. سپس با فشار دادن مجدد کلید اول شمارش متوقف شود و پس از فشار دادن مجدد شمارش ادامه یابد.

تمرین 6: با استفاده از سون سگمنت یک شمارنده معکوس بسازید و هنگامی که شمارش معکوس به 0 رسید یک بازر شروع کند به روشن و خاموش شدن.

تمرین 7: با استفاده از سون سگمنت تعداد پایه های A0 تا A5 که در وضعیت 1 قرار دارند را نمایش دهید.

راه اندازی نمایشگر کاراکتری

نمایشگرهای کاراکتری 16x2 مبتنی بر کنترلر HD44780 یکی از پرکاربردترین نمایشگرها در پروژه‌های الکترونیک هستند و امکان نمایش حروف، اعداد و نمادها را فراهم می‌کنند. این نمایشگرها معمولاً در حالت 4 بیتی یا 8 بیتی راه‌اندازی می‌شوند که حالت 4 بیتی محبوب‌تر است چون از پایه‌های کمتری استفاده می‌کند. برای کنترل آن‌ها تنها کافی است پایه‌های فرمان (RS, RW, EN) و چهار پایه دیتای بالا (D4–D7) به آردوینو وصل شوند. همچنین نور پس‌زمینه و تغذیه LCD به سادگی با 5V کار می‌کنند. اگرچه معمولاً از پتانسیومتر برای تنظیم کنتراست استفاده می‌شود و اغلب یک مقاومت برای LED پس‌زمینه گذاشته می‌شود، در این راه‌اندازی ساده ما بدون مقاومت اضافی مدار را اتصال می‌دهیم.

در این اتصال، پایه‌های RS ،RW و EN به ترتیب به پین‌های 2 ،3 و 4 آردوینو وصل شده‌اند و پایه‌های دیتای D4 ،D5 ،D6 و D7 به پین‌های 5 ،6 ،7 و 8 متصل شده‌اند. پایه‌های VSS به زمین و VCC به 5 ولت وصل می‌شوند و نور پس‌زمینه (Backlight) نیز مستقیماً به تغذیه متصل شده است. اگرچه در اتصال‌های استاندارد بهتر است یک مقاومت برای بک‌لایت و یک پتانسیومتر برای تنظیم کنتراست قرار داده شود، اما در این پیکربندی خاص هیچ مقاومتی استفاده نشده است و LCD با اتصال مستقیم راه‌اندازی می‌شود.

LCD.ino
#include "LiquidCrystal.h"

// LiquidCrystal(rs, en, d4, d5, d6, d7)
LiquidCrystal lcd(2, 4, 5, 6, 7, 8);

void setup() {
  // راه‌اندازی LCD با 16 ستون و 2 سطر
  lcd.begin(16, 2);

  // چاپ متن
  lcd.print("Hello World!");
}

void loop() {
  // کار خاصی انجام نمی‌دهیم
}

تمرین 8: با استفاده از نمایشگر کاراکتری 16x2 یک شمارنده بسازید.

تمرین 9: با استفاده از نمایشگر کاراکتری 16x2 یک ساعت دیجیتال بسازید.

تمرین 10: با استفاده از نمایشگر کاراکتری 16x2 و یک کلید فشاری بازی dinachrome را بسازید. در این بازی کاکتوس ها به از راست به چپ حرکت می‌کنند و دایناسور باید از روی کاکتوس ها بپرد.

مبدل آنالوگ به دیجیتال (ADC)

سیگنال‌های آنالوگ مقدارشان پیوسته است و می‌توانند بین یک بازه‌ی مشخص هر عددی باشند؛ مثل جوی‌استیک دسته‌ی بازی که موقعیت اهرم را از حداقل تا حداکثر به صورت تدریجی تغییر می‌دهد. اما سیگنال‌های دیجیتال فقط دو حالت دارند: روشن/خاموش یا ۰/۱؛ مثل دکمه‌های روی دسته‌ی بازی که یا فشار داده شده‌اند یا نشده‌اند. آردوینو برای اینکه بتواند مقدار سیگنال‌های آنالوگ را بفهمد، آن‌ها را از طریق ADC (مبدل آنالوگ به دیجیتال) به یک عدد دیجیتال ۱۰ بیتی بین ۰ تا 1023 تبدیل می‌کند.

برای خواندن مقدار ورودی آنالوگ از پین‌های A0 تا A5 از دستور analogRead() استفاده می‌کنیم که مقدار ولتاژ ۰ تا ۵ ولت را به عددی بین ۰ تا 1023 تبدیل می‌کند. مثال ساده‌ی یک مدار شامل LDR به‌صورت سری با یک مقاومت 10 کیلو بسیار رایج است؛ با تغییر نور، مقاومت LDR تغییر کرده و ولتاژ نقطه‌ی میانی نیز تغییر می‌کند. این ولتاژ را به یکی از پین‌های آنالوگ می‌دهیم تا آردوینو بتواند شدت نور را اندازه‌گیری کند.

ADC.ino
#include "LiquidCrystal.h"

// LiquidCrystal(rs, en, d4, d5, d6, d7)
LiquidCrystal lcd(2, 4, 5, 6, 7, 8);

void setup() {
  lcd.begin(16, 2); 
  lcd.print("Analog A5:");
}

void loop() {
  int value = analogRead(A5);   // خواندن مقدار آنالوگ

  lcd.setCursor(0, 1);          // رفتن به خط دوم
  lcd.print("Value: ");         
  lcd.print(value);             
  lcd.print("    ");            // پاک کردن باقی‌مانده‌ی متن

  delay(200);
}

تمرین 11: یک سیستم روشنایی هوشمند بسازید. هنگامی که نور محیط از حد مشخصی کمتر شد یک LED یا بازر روشن شود.

تمرین 12: یک قفل دیجیتال ساده با 7seg بسازید که با هر بار فشردن دکمه، عدد 0 تا 9 روی سون‌سگمنت تغییر می‌کند. اگر عدد درست انتخاب شد (مثلاً 7)، buzzer یک بوق کوتاه “قبولی” بزند و LED روشن شود. اگر عدد اشتباه وارد شد، زنگ خطا بوق بزند.

تمرین 13: یک سیستم نمایشگر روز و شب بسازید که با LDR نور محیط اندازه‌گیری شود و روی LCD وضعیت نمایش داده شود: “Bright Day” و “Normal Light” و “Dark Night”

تمرین 14: یک چراغ مطالعه‌ی هوشمند بسازید که اگر نور محیط کم باشد، LED روشن شود. اگر زیاد باشد، خاموش شود. مقدار نور و وضعیت چراغ روی LCD نمایش داده شود. کاربر با دکمه بتواند به‌صورت دستی Auto Mode را فعال/غیرفعال کنداگر چراغ برای مدت طولانی روشن بود، buzzer هشدار یادآوری بدهد.

راه اندازی موتور DC

ماژول درایور L298 یک ماژول قدرتمند برای کنترل موتورها و سایر بارهای الکتریکی است. این ماژول از تراشه L298 مشهور استفاده می‌کند که یک درایور دو جهته (Bidirectional) با جریان بالا برای موتورها و بارهای الکتریکی است. این درایور قابلیت کنترل دو موتور DC یا یک موتور استپر را فراهم می‌کند. ماژول L298 دارای ورودی و خروجی‌های متعددی است که امکان اتصال به میکروکنترلرها یا سایر سیگنال‌های کنترلی را فراهم می‌کند. علاوه بر این، این ماژول دارای پایه‌های تغذیه جداگانه برای منابع تغذیه موتورها و منبع تغذیه منطقی (میکروکنترلر) است که اجازه می‌دهد بارهای با توان بالا را به طور مجزا از مدار منطقی کنترل کنید. مهم‌ترین ویژگی این ماژول قابلیت کنترل دو جهت حرکت موتورها است، که این امکان را فراهم می‌کند که موتورها را به جلو و عقب حرکت داده و سرعت آنها را تغییر دهید. همچنین، L298 دارای قابلیت حفاظت در برابر جریان بالا، ولتاژ اضافی و دمای بالا است که از ایجاد خرابی در مدار و موتورها جلوگیری می‌کند. به علت ویژگی‌های قابل توجه و کاربردهای گسترده‌ای که دارد، ماژول L298 در انواعی از پروژه‌های رباتیک، اتوماسیون صنعتی، خودروهای الکتریکی و دیگر برنامه‌های الکترونیکی مورد استفاده قرار می‌گیرد.

1. جهت کنترل دو موتور به صورت همزمان مدار زیر را باید ببندید.

2. با توجه به تصویر زیر موتور ها به out1, out2, out3, out4 که در دوطرف ماژول هستند وصل می‌شود. سوکت‌های آبی رنگ که با نام ترمینال فونیکس معروف هستند، برای اتصال سیم استفاده می‌شوند. ترمینال فونیکس 3 پایه نیز جهت اتصال تغذیه یا باتری است. پایه های کنترلی برای هر موتور شامل یک EN و دو IN است. پایه EN جهت کنترل سرعت موتور و دو پایه IN نیز برای کنترل جهت چرخش استفاده می‌گردد. پایه های EN معمولا با یک جامپر به 5v متصل است که باعث می‌شود موتور با حداکثر سرعت خود بچرخد.

3. پس از اتصال موتور به آردوینو کافی است پایه های مورد نظر را روی حالت خروجی (OUTPUT) تنظیم نموده و برای کنترل جهت موتور این پایه‌ها را 0 یا 1 کنیم. در این برنامه موتور 1 که به پایه های کنترلی آن به ترتیب 1 و 0 داده شده در یک جهت و موتور دو که به آن 0 و 1 داده شده در جهت عکس می‌چرخد. همچنین اگر 0 و 0 یا 1 و 1 به پایه های کنترلی داده شود موتور خاموش می‌شود.

motor.ino
void setup() {
  // Motor 1
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  // Motor 2
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  // Motor 1
  digitalWrite(2, 1);
  digitalWrite(3, 0);
  // Motor 2
  digitalWrite(4, 0);
  digitalWrite(5, 1);
}

4. برنامه بالا تنها جهت چرخش موتور را مشخص می‌کند. برای کنترل سرعت موتور باید پایه های EN را نیز به یکی از پایه های آردوینو که با علامت ~ مشخص شده وصل کنیم. به عنوان مثال در شکل زیر پایه های EN به پایه‌های 3 و 9 از آردوینو متصل شده. و پایه‌های کنترل جهت نیز به ترتیب به 4، 5، 6 و 7 متصل است.

5. برای کنترل سرعت موتور کافی است به پایه EN یک پالس PWM بدهیم. به عبارت دیگر پایه EN را با سرعت زیاد خاموش و روشن می‌کنیم و این موجب خاموش و روشن شدن موتور شده و با کنترل مدت زمان خاموش و مدت زمان روشن بودن موتور می‌توان سرعت آن را کنترل کرد. اساس کار PWM (مدلاسیون عرض پالس) به صورت زیر است و مقدار آن می‌تواند از 0 تا 255 باشد.

6. برنامه‌ کنترل سرعت موتور به صورت زیر می‌باشد که در آن یک تابع به نام motor تعریف شده و سرعت دو موتور را به عنوان ورودی دریافت کرده و دستورات لازم را اجرا می‌کند. جهت سرعت نیز با علامت قابل تعیین است. بنابراین سرعت هر موتور عددی از -255 تا +255 می‌باشد.

motor.ino
void motor(M1, M2){
  if(M1 >= 0){
    // Motor 1
    digitalWrite(4, 1);
    digitalWrite(5, 0);
    analogWrite(3, M1);
  }
  else{
    // Motor 1
    digitalWrite(4, 0);
    digitalWrite(5, 1);
    analogWrite(3, M1);
  }
  if(M2 >= 0){
    // Motor 2
    digitalWrite(6, 1);
    digitalWrite(7, 0);
    analogWrite(9, M2);
  }
  else{
    // Motor 2
    digitalWrite(6, 0);
    digitalWrite(7, 1);
    analogWrite(9, M2);
  }
}
void setup() {
  // Motor 1
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  // Motor 2
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop() {
  motor(-100, 150);
}

تمرین 15: برنامه‌ای بنویسید که سرعت موتور به صورت مداوم و به آرامی از 0 تا ماکزیمم رفته و بعد به آرامی دوباره کم شود.

تمرین 16: برنامه‌ای بنویسید که موتور 3 ثانیه به راست با سرعت 100 و 3 ثانیه به چپ با سرعت 200 بچرخد.

تمرین 17: با استفاده از یک پتانسیومتر سرعت موتور را کنترل کنید.

تمرین 18: یک روبات دو چرخ بسازید و برای آن برنامه ای بنویسید که به صورت مداوم جلو و عقب برود.

راه اندازی موتور سروو

سروموتور (Servo Motor) یک نوع موتور الکتریکی است که به طور خاص برای کنترل دقیق موقعیت و زاویه یک سازه یا قطعه مکانیکی استفاده می‌شود. این موتورها معمولاً شامل یک مکانیزم داخلی قوی با بازده بالا برای تحریک موقعیت دقیق می‌شوند. سروموتورها دارای سه پایه مرتبط با منبع تغذیه، زمین و سیگنال هستند. پایه تغذیه به منبع تغذیه متصل می‌شود (معمولاً بین ۴.۸ تا ۶ ولت)، پایه زمین به منبع زمین متصل می‌شود و پایه سیگنال به یک پین سیگنالی میکروکنترلر متصل می‌شود. با اعمال سیگنال به پایه سیگنال، سروموتور به موقعیت دقیقی تغییر می‌یابد. با توجه به سیگنال متقاضی، سروموتور به زاویه دلخواهی در محدوده ۰ تا ۱۸۰ درجه حرکت می‌کند. برای کنترل دقیق موقعیت، اغلب از PWM (Modulation Width Modulation) استفاده می‌شود که این امکان را فراهم می‌کند که زمان پالسهای ورودی تغییر کند و سروموتور به موقعیت دقیقی حرکت کند.

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

2. برای کنترل زاویه موتور باید به صورت زیر یک سیگنال پالس مربعی برای آن بفرستیم. عرض این پالس (مدت زمان روشن بودن) زاویه موتور را مشخص می‌کند. اگر مدت زمان روشن بودن به اندازه 2 میلی ثانیه باشد سروو در زاویه 180 درجه و اگر 1 میلی ثانیه باشد موتور به وضعیت 0 درجه می‌رود.

3. برنامه زیر را در آردوینو بنویسید و زاویه سروو موتور را تغییر دهید. در این برنامه از کتابخانه Servo.h استفاده می‌شود. با استفاده از تابع myservo.attach(9) شماره پایه ای که سروو را به آن وصل کردیم مشخص می‌کنیم. سپس در حلقه loop برنامه با دستور myservo.write(40) زاویه موتور را روی زاویه دلخواه تنظیم می‌کنیم.

servo.ino
#include "Servo.h"
Servo myservo; 

void setup() {
  myservo.attach(9);
}
void loop() {
  myservo.write(40);
}

تمرین 19: برنامه ای بنویسید که سروو موتور از زاویه 0 شروع به حرکت کرده و به آرامی به 180 برود و وقتی به 180 رسید مجددا به آرامی به 0 برگردد.

تمرین 20: با استفاده از پتانسیومتر زاویه سروو موتور را کنترل کنید.

تمرین 21: با استفاده از سروو موتور یک بازوی رباتی درست کنید.

راه اندازی سنسور فاصله سنج اولتراسونیک

سنسور SRF04 یک سنسور فاصله الکترونیکی ultrasonic است که برای اندازه‌گیری فواصل و حساب کردن موقعیت اشیاء از فاصله‌های نزدیک تا دور استفاده می‌شود. این سنسور از مبدل‌های فرکانس فرا‌صوت برای ارسال پالس‌های صوتی به اشیاء و دریافت سیگنال‌های بازتابی استفاده می‌کند، و سپس با توجه به زمانی که از فرستادن تا دریافت سیگنال برگشتی طول می‌کشد، فاصله را محاسبه می‌کند. SRF04 دارای دو پایه اصلی برای اتصال به میکروکنترلرها یا سیستم‌های الکترونیکی است.

1. سنسور را طبق تصویر زیر به آردوینو متصل کنید.

2. اساس کار این سنسور به این صورت است که ابتدا به مدت 10 میکروثانیه پایه Trigger را 1 کرده و سپس 0 میکنیم. سنسور با دریافت این پالس از طریق فرستنده خود موج فراصوت را ارسال و بازتاب آن را دریافت کرده و با اندازه گیری مدت زمان رفت و برگشت فاصله تا جسم روبرو را می‌سنجد. سپس یک پالس در پایه Echo به آردوینو ارسال می‌کند و با اندازه گیری مدت زمان این پالس (عرض پالس) و ضرب آن در یک ضریب ثابت می‌توان فاصله اندازه گیری شده را بر حسب سانتیمتر بدست آورد.

3. در نرم افزار آردوینو ابتدا پایه Trigger و Echo را به ترتیب روی حالت خروجی و ورودی تنظیم می‌کنیم. در اینجا برای نمایش فاصله اندازه گیری شده از ارتباط سریال استفاده می‌شود. در برنامه زیر تابع Serial.begin(9600) ارتباط سریال را آغاز کرده و سرعت انتقال دیتا را روی 9600 بیت بر ثانیه تنظیم می‌کند. سپس در تابع loop پالس 10 میکروثانیه را ارسال و پالس Echo را با تابع pulseIn(echo, HIGH) اندازه گیری می‌کنیم. سپس این عدد را در یک ضریب ثابت ضرب کرده و فاصله را بر حسب سانتیمتر بدست می‌آوریم. در نهایت با استفاده از ارتباط سریال مقدار اندازه گیری شده را به کامپیوتر ارسال میکنیم.

SRF04.ino
int trig = 3;
int echo = 2;
void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH);
  distance = duration * 0.0343 / 2;
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(500);
}

4. در نهایت با کلیدهای ctrl+shift+m می‌توان Serial Monitor را باز کرده و نتیجه را مشاهده نمود.

تمرین 22: سنسور دنده عقب ماشین را با استفاده از یک سنسور SRF04 و یک بازر بسازید.

تمرین 23: با استفاده از سنسور SRF04 و یک سروو موتور یک رادار بسازید.

دیدگاه کاربران

1000 دیدگاه
4.7 (میانگین امتیاز کاربران)