در این پست از سایت اِمیک, یک پروژه بسیار جالب و آموزشی به نام تولید عدد رندوم واقعی با آردوینو قرار داده شده است. همانطور که از نام پروژه مشخص است, ما در این پروژه به وسیله برد آردوینو یک عدد رندوم یا تصادفی ایجاد می کنیم و این عدد را روی یک LCD کاراکتری نمایش می دهیم. این پروژه با برد آردوینو UNO انجام شده است. در ادامه در مورد پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه را مشاهده می کنید:
قبلا نیز همین پروژه را با استفاده از میکروکنترلر AVR در سایت قرار داده بودم که برای مشاهده آن پست می توانید اینجا کلیک کنید.
همانطور که مشاهده می کنید, ما در این پروژه از برد آردوینو UNO استفاده کرده ایم. از یک LCD کاراکتری 2 در 16 نیز استفاده کرده ایم که این LCD به پایه های A0 تا A5 برد آردوینو متصل شده است. پتانسیومتر RV1 برای تنظیم کنتراست یا میزان روشنایی LCD کاراکتری استفاده شده است. یک کلید فشاری نیز به پایه 13 برد آردوینو متصل شده است.
عملکرد پروژه به این صورت است که با هر بار فشار دادن کلید فشاری SW1 یک عدد رندوم بین 1 تا 32767 روی LCD کاراکتری نمایش داده می شود.
تغذیه پروژه بالا را می توانید از خود برد آردوینو بگیرید, به این صورت که برد آردوینو را با استفاده از آداپتور راه اندازی کنید و از پایه های 5V و GND آردوینو برای تغذیه استفاده کنید.
تابع rand و srand :
برای تولید عدد رندوم در برنامه پروژه, ما از دو تابع rand و srand استفاده کرده ایم. تابع rand یک عدد تصادفی بین 1 تا 32767 تولید می کند. اگر بخواهیم که تابع rand اعداد کاملاً تصادفی ایجاد کند باید قبل از آن از تابع srand استفاده کنیم. تابع srand یک ورودی از نوع اعداد صحیح بدون علامت می گیرد و باعث تصادفی شدن تابع rand بر اساس مقدار ورودی تابع srand می شود.
به عبارت دیگر برای اینکه عدد تولید شده توسط تابع rand واقعا تصادفی باشد باید قبل از استفاده از این تابع از تابع srand استفاده کنیم. تابع srand نیاز به یک عدد ورودی دارد تا بر اساس آن عدد, عدد رندوم ما تولید شود. ما در برنامه یک متغیر (i) تعریف کرده ایم که با فشار دادن کلید, مقدار این متغیر هر 1 میکروثانیه افزایش می یاید و تغییر می کند. این متغیر را به عنوان عدد ورودی به تابع srand داده ایم. بنابراین با توجه به مدت زمانی که کلید را فشار داده ایم یک عدد بین 0 تا 30000 به عنوان ورودی به تابع srand اعمال می شود که در نتیجه باعث تولید یک عدد رندوم واقعی توسط تابع rand می شود.
برنامه آردوینو :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//////// WWW.EMIC.IR //////// #include <LiquidCrystal.h> //فراخوانی کتابخانه ال سی دی کاراکتری// LiquidCrystal lcd(A5, A4, A3, A2, A1, A0); //تابع روبرو مشخص می کند که کدام پین های اردوینو به ال سی دی متصل شود// int i = 0, R = 0; //تعریف متغیر برای استفاده در برنامه// void setup() { pinMode(13, INPUT_PULLUP); //ورودی کردن پین 13 اردوینو و فعال کردن مقاومت بالاکش این پین براي اتصال به کليد// lcd.begin(16, 2); //دستور روبرو ال سی دی را پیکره بندی می کند// } void loop() { if (digitalRead(13) == 1) { //روبرو اجرا مي شوند if زماني که کليد فشار داده نشده است دستورات درون شرط// lcd.clear(); //پاک کردن ال سی دی// lcd.setCursor(0, 0); //رفتن به سطر 0 و ستون 0 از ال سي دي// lcd.print("RAN Number:"); //روی ال سی دی RAN Number: نوشتن عبارت// lcd.print(R); //ذخيره شده بود روي ال سي دي کاراکتري R نمايش عدد رندوم توليد شده که در متغير// lcd.setCursor(3, 1); //رفتن به سطر 1 و ستون 3 از ال سي دي// lcd.print("WWW.EMIC.IR"); //روی ال سی دی WWW.EMIC.IR نوشتن عبارت// delay(300); //ايجاد تاخير به مدت 300 ميلي ثانيه// } else { //اجرا خواهند شد else زماني که کليد فشار داده شد دستورات درون// i = i + 1; //يکي يکي اضافه مي شود i متغیر// srand(i); //به عنوان مقدار اوليه براي توليد عدد رندوم i دادن متغير// R = rand(); //R توليد عدد رندوم و ذخيره ان در متغير// delayMicroseconds(1); //ايجاد تاخير به مدت 1 ميکرو ثانيه// if (i > 30000) i = 0; //از 30000 بيشتر شد دستور روبرو ان را دوباره صفر مي کند i در صورتي که متغير// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. از انتهای مطلب نیز می توانید فایل های آردوینو و شبیه سازی پروتئوس برای این پروژه را دانلود کنید.
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…