پرش به محتوای اصلی
آزمایشگاه‌های مجازی یادگیری با شبیه‌سازی ورود ثبت‌نام
درس ۱ از ۹ مقدماتی ۲۰ دقیقه

آشنایی با آردوینو و اولین برنامه

ساختار برد Uno، چرخهٔ راه‌اندازی و تکرار، و نوشتن اولین برنامه برای چشمک‌زدن دو ال‌ای‌دی.

در پایان این درس می‌توانید

  • بخش‌های اصلی برد Uno و نقش پایه‌های دیجیتال، آنالوگ و تغذیه را بشناسی.
  • تفاوت کار setup و loop را توضیح دهی و بدانی هر کد کجا باید بنشیند.
  • با pinMode و digitalWrite یک پایهٔ دیجیتال را خروجی کنی و آن را بالا و پایین ببری.
  • مقاومت سری یک ال‌ای‌دی را از قانون اهم حساب کنی.
  • دورهٔ تناوب و بسامد یک چشمک‌زن ساخته‌شده با delay را محاسبه کنی.

آردوینو Uno یک برد کوچک است که پل میان برنامه‌ای که می‌نویسی و دنیای فیزیکی را می‌سازد. مغز آن یک میکروکنترلر ATmega328P است؛ تراشه‌ای هشت‌بیتی با بسامد کاری ۱۶ مگاهرتز، ۳۲ کیلوبایت حافظهٔ فلش برای نگه‌داری برنامه و ۲ کیلوبایت حافظهٔ موقت برای متغیرها. برخلاف رایانه، این تراشه سیستم‌عامل ندارد؛ تنها همان کدی که تو داخلش ریخته‌ای، از لحظهٔ وصل شدن برق تا لحظهٔ قطع آن، بی‌وقفه اجرا می‌شود.

آناتومی برد

دور تا دور برد سه گروه پایه می‌بینی. گروه نخست چهارده پایهٔ دیجیتال است با برچسب D0 تا D13؛ هر کدام فقط دو حالت می‌شناسند: نزدیک صفر ولت یا نزدیک پنج ولت. گروه دوم شش پایهٔ آنالوگ A0 تا A5 است که ولتاژ پیوسته را اندازه می‌گیرند و به عدد تبدیل می‌کنند. گروه سوم پایه‌های تغذیه‌اند: 5V و 3V3 برای ولتاژ مثبت، GND برای زمین یا همان مرجع صفر ولت، و VIN برای تغذیه از منبع بیرونی. سوکت USB هم‌زمان سه کار می‌کند: برد را تغذیه می‌کند، برنامهٔ کامپایل‌شده را داخل تراشه می‌ریزد و مسیر ارتباط سریال با رایانه را باز نگه می‌دارد. دکمهٔ ریست هم اجرا را از خط اول شروع می‌کند.

دو تابعی که هر برنامه دارد

هر طرح آردوینو دقیقاً دو تابع اجباری دارد. setup() یک بار، بلافاصله پس از ریست یا وصل تغذیه، اجرا می‌شود؛ اینجا جای کارهای یک‌باره است: تعیین نقش پایه‌ها، راه‌اندازی سریال و مقداردهی اولیه. بعد از آن loop() شروع می‌شود و تا وقتی برق برقرار است بی‌نهایت بار پشت سر هم تکرار می‌شود. اگر این تقسیم کار را رعایت نکنی و مثلاً pinMode() را داخل loop() بگذاری، برنامه ظاهراً کار می‌کند ولی هزاران بار در ثانیه کاری بی‌فایده انجام می‌دهد و وقت پردازنده را می‌سوزاند.

سه دستور اول

pinMode(pin, OUTPUT) نقش یک پایه را تعیین می‌کند. با OUTPUT راننده‌های داخلی تراشه به پایه وصل می‌شوند و پایه می‌تواند جریان بدهد؛ اگر این خط را ننویسی پایه در حالت ورودی و پرمقاومت می‌ماند. digitalWrite(pin, HIGH) پایه را از راه یک ترانزیستور کم‌مقاومت به پنج ولت می‌چسباند و digitalWrite(pin, LOW) آن را به زمین می‌کشد. delay(ms) هم اجرا را به اندازهٔ عددی که می‌دهی، برحسب میلی‌ثانیه، متوقف می‌کند.

ثابت LED_BUILTIN روی برد Uno برابر ۱۳ است، چون سازنده یک ال‌ای‌دی ریز به‌همراه مقاومت سری‌اش را از پیش روی همین پایه لحیم کرده است. روی خانوادهٔ بردهای دیگر ممکن است شمارهٔ این پایه فرق کند؛ پس نوشتن نام ثابت به‌جای عدد، کد تو را قابل حمل نگه می‌دارد.

یک نمونهٔ عددی

می‌خواهی یک ال‌ای‌دی قرمز را از یک پایهٔ دیجیتال روشن کنی. ال‌ای‌دی قطعه‌ای غیرخطی است: اگر مستقیم به پنج ولت وصل شود جریانی بسیار بیشتر از تحملش می‌کشد و در چند لحظه می‌سوزد. پس یک مقاومت سری می‌گذاریم تا جریان را مهار کند. ولتاژ پایه در حالت بالا پنج ولت است، افت ولتاژ روی ال‌ای‌دی قرمز حدود دو ولت و جریان مطلوب پانزده میلی‌آمپر. ولتاژی که به مقاومت می‌رسد برابر پنج منهای دو یعنی سه ولت است. طبق قانون اهم، مقاومت لازم برابر است با سه ولت تقسیم بر ۰٫۰۱۵ آمپر که می‌شود ۲۰۰ اهم. چون ۲۰۰ اهم مقدار استاندارد رایجی نیست، نزدیک‌ترین مقدار بالاتر یعنی ۲۲۰ اهم را برمی‌داریم. با ۲۲۰ اهم جریان به سه تقسیم بر ۲۲۰ یعنی حدود ۱۳٫۶ میلی‌آمپر می‌رسد؛ هم برای چشم به‌خوبی روشن است و هم زیر سقف مجاز پایه می‌ماند. توجه کن که همیشه مقدار بالاتر را انتخاب می‌کنیم، چون مقاومت کوچک‌تر یعنی جریان بیشتر.

هر پایهٔ دیجیتال برد Uno را حداکثر تا ۲۰ میلی‌آمپر بار بزن و مجموع جریان همهٔ پایه‌ها را زیر ۲۰۰ میلی‌آمپر نگه دار. ال‌ای‌دی بدون مقاومت سری، هم خودش و هم پایهٔ برد را از بین می‌برد.

کاربرد واقعی

همین سه دستور اسکلت هر کار خروجی دیجیتال‌اند. چراغ هشدار یک دستگاه، روشن‌کردن یک رله برای پمپ آب، یا نشانگر وضعیت یک ماشین صنعتی، همگی از دید برنامه دقیقاً همین‌اند؛ تفاوت فقط در قطعه‌ای است که ته سیم قرار می‌گیرد. تنها نکته این است که delay() ساده‌ترین راه زمان‌بندی است ولی چون اجرا را کاملاً متوقف می‌کند، در پروژه‌های جدی‌تر جایش را به شمارش زمان با millis() می‌دهد. برای اولین برنامه اما همین کافی است، و مهم‌تر از آن، به تو نشان می‌دهد که یک خط کد چگونه به نور تبدیل می‌شود.

رابطه‌های کلیدی

R = (Vcc - Vf) / I = (5 - 2) / 0.015 = 200 Ωمقاومت سری ال‌ای‌دی از قانون اهم؛ در عمل نزدیک‌ترین مقدار استاندارد بالاتر یعنی ۲۲۰ اهم
T = t_on + t_off = 500 ms + 500 ms = 1 s → f = 1 Hzدورهٔ تناوب و بسامد چشمک‌زنی که با دو delay نیم‌ثانیه‌ای ساخته می‌شود
pinMode(pin, OUTPUT); digitalWrite(pin, HIGH | LOW);امضای دو تابعی که یک پایهٔ دیجیتال را خروجی می‌کنند و سطح آن را تعیین می‌کنند

مأموریت روی میز کار

مدار را اجرا کن و ببین ال‌ای‌دی بیرونی و ال‌ای‌دی داخلی برد یک‌درمیان روشن و خاموش می‌شوند. بعد اعداد کد را دست‌کاری کن و اثرش را روی چشم‌هایت بسنج.

  1. کد را اجرا کن و با شمارش، تأیید کن که ال‌ای‌دی بیرونی هر ثانیه یک بار چشمک می‌زند.
  2. هر دو عدد داخل delay را به ۱۰۰ تغییر بده و ببین چشمک پنج برابر تندتر می‌شود.
  3. زمان روشنی را ۹۰۰ و زمان خاموشی را ۱۰۰ میلی‌ثانیه بگذار تا نسبت روشن به خاموش نامتقارن شود.
  4. خط pinMode مربوط به ال‌ای‌دی بیرونی را موقتاً کامنت کن، اجرا کن و ببین دیگر روشن نمی‌شود؛ بعد برش گردان.
  5. شمارهٔ پایهٔ ال‌ای‌دی بیرونی را در کد به ۷ تغییر بده و سر سیم را هم روی برد به همان پایه ببر تا دوباره کار کند.
انتظار می‌رود: ال‌ای‌دی قرمز بیرونی و ال‌ای‌دی داخلی برد با دورهٔ یک ثانیه برعکس هم چشمک می‌زنند؛ هرگز هر دو با هم روشن نیستند.
مدار و کد این درس همین حالا اجرا می‌شود و حساب لازم ندارد. با حساب رایگان پیشرفت و نمرهٔ شما هم ثبت می‌شود و سقف روزانه بالاتر می‌رود.

مدار و کد این درس از پیش چیده شده‌اند. آزادانه تغییرشان بدهید — پروژه‌های خودتان دست‌نخورده می‌مانند. تمام‌صفحه با همین کیت

آزمون این درس

۵ پرسش چهارگزینه‌ای. پس از ثبت، پاسخ درست و توضیح هر پرسش را می‌بینید. می‌توانید هر چند بار که خواستید تلاش کنید؛ بهترین نمره در کارنامه ثبت می‌شود.