توليد أرقام عشوائية باستخدام الاردوينو: التقنيات والأمثلة

  • يقوم الأردوينو بإنشاء أرقام عشوائية زائفة، وليست عشوائية حقيقية.
  • يعد استخدام RandomSeed والبذور المتغيرة أمرًا أساسيًا لتجنب التسلسلات المتكررة.
  • يمكن لوظائف millis() وanalogRead() محاكاة العشوائية عن طريق تغيير البذرة.

اردوينو أرقام عشوائية

عند العمل مع مشاريع Arduino، من الشائع أن تواجه الحاجة إلى إنشاء أرقام عشوائية. ربما كنت تقوم ببناء لعبة، أو جهاز تفاعلي، أو تحتاج ببساطة إلى أحداث لا تتبع نمطًا يمكن التنبؤ به. ولكن هل الأرقام التي تم إنشاؤها بواسطة Arduino عشوائية تمامًا؟ الإجابة المختصرة هي لا، ومن هنا تبرز الحاجة إلى فهم مفهوم الأعداد عشوائية زائفة وكيفية تنفيذها بفعالية.

في هذه المقالة، سنعلمك كيفية توليد أرقام عشوائية في الاردوينو، وكيفية استخدام الوظائف عشوائية y RandomSeed، ولماذا تعتبر هذه العناصر أساسية للتأكد من أن تسلسلاتنا الرقمية عشوائية قدر الإمكان. سترى ذلك، على الرغم من أن الأرقام التي تم إنشاؤها ليست كذلك عشوائي تمامايمكننا تحقيق درجة أعلى من العشوائية من خلال معالجة البذور التي يستخدمها Arduino بشكل صحيح.

كيف يقوم الاردوينو بإنشاء أرقام عشوائية؟

من حيث المبدأ، فإن المتحكم الدقيق مثل Arduino غير قادر على توليد أرقام عشوائية حقيقية، لأنه جهاز مصمم ليكون دقيقًا ويمكن التنبؤ به. ما يفعله Arduino هو تنفيذ حسابات رياضية باستخدام بذرة (رقم أساسي) لإنشاء سلسلة من الأرقام عشوائية زائفة. وهذا يعني أنه من نفس البذرة، ستحصل دائمًا على نفس تسلسل الأرقام.

لمنع تكرار الأرقام عدة مرات، يمكنك تغيير البذرة باستخدام الوظيفة البذور عشوائي(). يتيح لك ذلك تغيير نقطة البداية لإنشاء تسلسل الأرقام. باستخدام هذه الأداة إلى جانب بعض التقنيات الذكية للحصول على بذور غير متوقعة، مثل قراءة دبوس تناظري غير متصل أو قياس وقت تنفيذ البرنامج، يمكننا جعل الأرقام تختلف مع كل تشغيل للشفرة.

باستخدام الدالة العشوائية

يوفر لنا Arduino طريقتين أساسيتين لاستدعاء الوظيفة عشوائية: أحدهما لتوليد رقم عشوائي بين 0 والحد الأقصى لعدد (الحد الأقصى – 1)، والآخر لإنشاء رقم عشوائي بين الحد الأدنى للقيمة والحد الأقصى للقيمة (الحد الأدنى والحد الأقصى).

بناء الجملة الأساسي هو كما يلي:

  • عشوائي (الحد الأقصى); يولد رقم بين 0 و الحد الأقصى - 1.
  • عشوائي (دقيقة، ماكس); يولد عددا بين دقيقة y الحد الأقصى - 1.

على سبيل المثال، إذا اتصلنا عشوائي(250)، سوف نحصل على رقم بين 0 و 249. وبالمثل، إذا قمنا بالتنفيذ عشوائي(100,200)، سوف نحصل على رقم عشوائي بين 100 و 199.

أهمية وظيفة RandomSeed

كما ذكرنا سابقًا، لمنع Arduino من إنشاء نفس تسلسل الأرقام دائمًا في كل عملية تنفيذ للبرنامج، يجب علينا التأكد من تغيير البذرة التي نستخدمها في البذور عشوائي(). الحيلة هي اختيار بذرة لا يمكن التنبؤ بها في كل مرة يتم فيها تنفيذ الكود.

إحدى الطرق الأكثر شيوعًا لإنشاء بذرة عشوائية هي قراءة دبوس تمثيلي غير متصل. في هذه الحالة، يتصرف هذا الدبوس بشكل غير متوقع، حيث يلتقط ضوضاء كهربائية، مما يضمن أن القيمة المقروءة ستتغير باستمرار. يمكن إنشاء البذرة على النحو التالي:

RandomSeed(analogRead(0));

بدلا من ذلك، يمكننا استخدام الدالة ميلي () للحصول على الوقت المنقضي منذ بدء البرنامج واستخدامه كبذرة. وهذا مفيد بشكل خاص في المشاريع التفاعلية حيث يمكن للمستخدم الضغط على زر في نقاط زمنية مختلفة، الأمر الذي سيولد بداية مختلفة لكل تسلسل من الأرقام.

على سبيل المثال، يمكننا استخدام RandomSeed(ملي()); بحيث تختلف البذرة حسب زمن التنفيذ.

مثال عملي: النرد الإلكتروني

اردوينو IDE ، أنواع البيانات ، البرمجة

التطبيق الكلاسيكي لاستخدام الأرقام العشوائية في Arduino هو إنشاء نرد إلكتروني. في هذه الحالة، في كل مرة نضغط فيها على زر، يتم إنشاء رقم بين 1 و6، وتضيء مصابيح LED لتمثل وجه القالب المقابل.

هذا مثال لكيفية بناء الكود:

زر الضغط = 8؛ // دبوس الزر
RandomNum = عشوائي(1, 7); // توليد رقم عشوائي بين 1 و 6

عندما تضغط على الزر، يقوم Arduino بإنشاء رقم عشوائي ويقوم تلقائيًا بتنشيط مصابيح LED المقابلة لمدة 1,5 ثانية حتى يتمكن المستخدم من عرض النتيجة النهائية. وبعد فترة قصيرة، تنطفئ مصابيح LED حتى يتم الضغط على الزر مرة أخرى.

توليد أرقام عشوائية زائفة محسنة

لتحسين العشوائية بشكل أكبر، يفضل بعض المستخدمين التركيز على البتات القليلة الأولى من الضوضاء العشوائية التي يمكن أن يلتقطها الدبوس التناظري. وذلك لأن البتات الأولى تحتوي على قدر أكبر من التباين، والذي يمكن استخدامه في المشاريع التي تتطلب قدرًا أكبر من العشوائية. إحدى الطرق المثيرة للاهتمام للقيام بذلك هي استخدام عملية bitwise:

RandomSeed(analogRead(A0) & 3);

تسمح هذه الطريقة باستخراج البتات الأولى من الضوضاء التي تم التقاطها بواسطة الطرف التناظري A0، مما يحسن عشوائية الأرقام التي تم إنشاؤها. يتمتع Arduino بالقدرة على توليد ما يصل إلى 4.294.967.295 رقمًا عشوائيًا زائفًا مختلفًا، وهو أكثر من كافٍ لمعظم المشاريع المنزلية.

أخيرًا، بمجرد ضبط البذرة والمدى بشكل صحيح، يمكنك الاستمتاع بتنوع أكبر في الأرقام التي يولدها Arduino، وهو مثالي لمجموعة واسعة من المشاريع مثل الألعاب والأنظمة التفاعلية وعمليات المحاكاة. على سبيل المثال:

void setup() {
  Serial.begin(9600); // Inicializamos la comunicación serial
  randomSeed(analogRead(0)); // Semilla para generar números más aleatorios
}

void loop() {
  int numeroAleatorio = random(1, 11); // Genera un número aleatorio entre 1 y 10
  Serial.println(numeroAleatorio);
  delay(1000); // Esperamos 1 segundo
}

لا تنس أنه على الرغم من أن Arduino غير قادر على توليد أرقام عشوائية حقيقية، فإن تطبيق تقنيات مثل تلك المذكورة هنا سيحسن النتائج بشكل كبير ويسمح لك بمحاكاة العشوائية في معظم الحالات.


كن أول من يعلق

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.