اولین نسخه ی تاس باینری در آردوینو

Ratings
(0)

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

 ما از قبل می دانیم که چگونه یک ال ای دی تکی را بر روی برد برد کنترل کنیم.  کنترل کردن سه ال ای دی نیز به همین طریق است و تنها به سیم ها و ال ای دی ها و مقاومت های 1kΩ و پین های بیشتری نیاز دارد. تصویر 1.1 اولین نسخه از تاس باینری ما را در صفحه 46 نشان می دهد. که در حال کار کردن است. مهمترین تفاوت، این است که سیم اتصال به زمین(ground) در آنها مشترک است. وقتی که ما به اتصال به زمین(ground) برای یک ال ای دی تکی نیاز داشته باشیم، می توانیم آن را مستقیما به ال ای دی متصل کنیم. اما وقتی که به اتصال به زمین(ground) برای سه ال ای دی نیاز داریم، از ردیف های بردبرد برای اولین بار است که استفاده می کنیم .ردیفی از بردبرد که علامت خط ربط( مثل منفی یا hyphen ) دارد را به پین اتصال به زمین(ground ) آردوینو وصل کنید، حالا تمام سوکت ها در این ردیف مانند پین اتصال به زمین عمل می کنند. سپس ما می توانیم سوکت های این ردیف را با استفاده از سیم های کوتاه به ال ای دی ها متصل کنیم.

 (تصویر 11)اولین نسخه از تاس باینری

 هر چیز دیگری در این مدار باید برای ما آشنا به نظر برسد زیرا ما تنها باید سه بار، مدار ال ای دی قبل را شبیه سازی کنیم. توجه کنید که ما این سه ال ای دی را به پین های 10 و 11 و 12(در برد آردوینو) متصل کرده ایم. تنها چیزی که باقی مانده است، نوشتن نرم افزار است:

const unsigned int LED_BIT0 = 12;
const unsigned int LED_BIT1 = 11;
const unsigned int LED_BIT2 = 10;

void setup() {
  pinMode(LED_BIT0, OUTPUT);
  pinMode(LED_BIT1, OUTPUT);
  pinMode(LED_BIT2, OUTPUT);
  
  randomSeed(analogRead(A0)); 
  long result = random(1, 7);
  output_result(result);
}

void loop() {
}

void output_result(const long result) {
  digitalWrite(LED_BIT0, result & B001);
  digitalWrite(LED_BIT1, result & B010);
  digitalWrite(LED_BIT2, result & B100);
}

 این تمام کدهایی است که برای راه اندازی اولین نسخه ی تاس باینری خود به آن نیاز داریم. معمولا، ما چند ثابت(constants ) برای پین های خروجی(output pins ) که ال ای دی ها به آنها متصل شده اند، تعریف می کنیم. در تابع setup، ما تمام پین ها را به حالت OUTPUT تنظیم کرده ایم. ما برای تاس خود، به اعداد تصادفی، که از 1 تا 6 تغییر کنند نیاز داریم. تابع random اعداد تصادفی را با استفاده از یک تولید کننده ی عدد شبه تصادفی، در یک برد مشخص تولید کرده و برمی گرداند. در خط 10، ما تولید کننده ی عدد تصادفی(generator ) را با کمی نویز که از ورودی آنالوگ پین A0 به دست می آوریم، مقداری دهی اولیه(initialize ) می کنیم. برای اینکه علت ایجاد اعداد تصادفی را بفهمید، مقاله ی تولید اعداد تصادفی، در صفحه ی 48 را مشاهده کنید. ممکن است تعجب کنید که ثابت A0 از کجا آمده است. IDE آردوینو ثابت هایی را برای تمام پین های آنالوگ به نام های A0 و A1 و ... تعریف می کند. سپس ما عملاً یک عدد تصادفی را بین یک و شش تولید می کنیم و با استفاده از تابع output_result در خروجی پس می دهیم.  عدد 7 در فراخوانی تابع random صحیح است، زیرا این تابع از ما حد بالا(upper limit)  بعلاوه ی 1 را می خواهد.

تابع output_result یک عدد را می گیرد و سه بیت پایین آن را حساب می کند و بر این اساس سه ال ای دی ما را روشن یا خاموش می کند. در اینجا ما از عملگر & و لیترال های باینری استفاده می کنیم. عملگر & دو عدد را می گیرد و آنها را به صورت بیتی ترکیب می کند. وقتی دو بیت متناظر هردو 1 باشند، نتیجه ی عملگر & نیز 1 خواهد بود. در غیر این صورت نتیجه 0 خواهد بود. پیشوند B به ما امکان می دهد تا اعداد باینری را مستقیماً در کدهای خود قرار دهیم. بعنوان مثال B11 با عدد 3 یکسان است. ممکن است متوجه شده باشید که تابع loop خالی رها شده است و شاید تعجب کنید که چگونه این تاس کار می کند. این نکته بسیار ساده است: وقتی که ما آردوینو را استارت می کنیم، یک عدد جدید به ما می دهد و برای اینکه تاس را دوباره بیاندازیم، باید دکمه ی reset را در برد آردوینو فشار دهیم.

اکنون کدها را کامپایل کنید و آن را در آردوینو آپلود کنید و با تاس باینری که خود ساخته اید بازی کنید. اکنون شما اولین پروژه ی پیشرفته ی الکترونیک خود را به پایان رساندید، تبریک می گوییم! هنگامی که ما م خواهیم یک نتیجه ی جدید را مشاهده کنیم، باید دکمه ی reset آردوینو را فشار دهیم. این احتمالاً عملی ترین رابط کاربری است که شما می توانید ایجاد کنید، و برای بار اول، بسیار عالی است. اما ظریف تر است که تاس خود را با دکمه ی خودمان کنترل کنیم. این کاری است که می خواهیم در بخش بعدی انجام دهیم.

 


 تولید اعداد تصادفی

برخی مسئله های محاسباتی به طرز تعجب آوری سخت هستند و ایجاد اعداد تصادفی خوب، یکی از این مسائل است. گذشته از این، یکی از مهمترین ویژگی های یک کامپیوتر رفتار قطعی(deterministic behavior) آن است. هنوز، برای انواع هدف ها، ما (حداقل ظاهراً) به رفتارهای تصادفی(random behavior)  نیاز داریم. مشهورترین روش(که در تابع random آردوینو به کار رفته است) این است که اعداد شبه تصادفی ایجاد کنیم(منبع a). آنها تصادفی به نظر می رسند، اما حقیقتاً حاصل شده از یک فرمول هستند. انواع مختلفی از الگوریتم ها وجود دارد، اما معمولا هر عدد شبه تصادفی جدید از اعداد پیشین(predecessors) خود به دست می آید. این دلالت دارد بر اینکه ما به یک مقدار اولیه سازی شده(initialization value) برای ایجاد اولین عدد از دنباله نیاز داریم. به مقدار اولیه سازی شده( initialization value)  یک seed تصادفی گفته می شود و دنباله های متفاوتی از اعداد شبه تصادفی ایجاد می کند؛ و ما باید از seed های مختلفی استفاده کنیم. ایجاد اعداد شبه تصادفی کم اهمیت است، اما اگر شما الگوریتم و seed تصادفی را می دانید، به سادگی می توانید آنها را پیش بینی کنید. بنابراین ما نباید از اعداد شبه تصادفی برای اهداف رمزنگاری استفاده کنیم. در جهان واقعی، ما می توانیم فرایند های تصادفی بی شماری را پیدا کنیم و با آردوینو، آسان است که آنها را اندازه گیری کنیم تا بتوانیم اعداد تصادفی حقیقی ایجاد کنیم. اغلب کافی است که مقداری نویز تصادفی از پین آنالوگ 0 بخوانیم و آن را به صورت seed تصادفی به تابع random-Seed() بدهیم. ما همچنین می توانیم از این نویز برای ایجاد اعداد تصادفی حقیقی نیز استفاده کنیم؛ برای این کار حتی یک کتابخانه(library ) نیز وجود دارد(منبع b) اگر شما به اعداد تصادفی قوی نیاز دارید، آردوینو یک دستگاه عالی برای ایجاد آنها است.  شما می توانید پروژه های بسیاری پیدا کنید که فرآیند های طبیعی را به تنهایی مورد مشاهده قرار داده اند تا اعداد تصادفی را ایجاد کنند. یکی از آنها با استفاده از آردوینو یک ساعت شنی را مورد بررسی و مشاهده قرار می دهد.(منبع c)

منبع a : سایت http://en.wikipedia.org/wiki/Pseudo-random_numbers

منبع b: سایت http://code.google.com/p/tinkerit/wiki/TrueRandom

منبع c: سایت http://www.circuitlake.com/usb-hourglass-sand-timer.html

 {module کمک نقدی به نویسنده}

  • بازدید: 2718

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال