Генериране на произволни числа с Arduino: техники и примери

  • Arduino генерира псевдослучайни числа, а не истински случайни.
  • Използването на randomSeed и променливо начално число е от ключово значение за избягване на повтарящи се последователности.
  • Функциите millis() и analogRead() могат да симулират произволност чрез промяна на семената.

arduino произволни числа

Когато работите с проекти на Arduino, обичайно е да срещнете необходимостта от генериране на произволни числа. Може би създавате игра, интерактивно устройство или просто имате нужда от събития, които не следват предвидим модел. Но наистина ли числата, генерирани от Arduino, са напълно случайни? Краткият отговор е не и оттук възниква необходимостта да се разбере концепцията за числата псевдослучаен и как да ги прилагате ефективно.

В тази статия ще ви научим как да генерирате произволни числа в Arduino, как да използвате функциите случаен y randomSeedи защо те са ключови, за да гарантираме, че нашите числови последователности са възможно най-случайни. Ще видите това, въпреки че генерираните числа не са напълно случаен, можем да постигнем много по-висока степен на произволност чрез правилно манипулиране на семената, които Arduino използва.

Как Arduino генерира произволни числа?

По принцип микроконтролер като Arduino не е в състояние да генерира истински произволни числа, тъй като е устройство, проектирано да бъде предвидимо и прецизно. Това, което Arduino прави, е да изпълнява математически изчисления със семена (базово число), за да генерира поредица от числа псевдослучаен. Това означава, че от едно и също семе винаги ще получавате една и съща последователност от числа.

За да предотвратите повтарянето на числата много пъти, можете да променяте семето с функцията randomSeed(). Това ви позволява да промените началната точка за генериране на последователността от числа. Използвайки този инструмент заедно с някои хитри техники за получаване на непредвидими семена, като четене на несвързан аналогов щифт или измерване на времето за изпълнение на програмата, можем да накараме числата да варират при всяко изпълнение на кода.

Използване на произволната функция

Arduino ни предоставя два основни начина за извикване на функцията случаен: едно за генериране на случайно число между 0 и максимално число (max – 1), а друго за генериране на произволно число между минимална стойност и максимална стойност (min и max).

Основният синтаксис е както следва:

  • случаен (макс.); генерира число между 0 и максимум – 1.
  • случаен (мин., макс.); генерира число между мин y максимум – 1.

Например, ако се обадим случаен(250), ще получим число между 0 и 249. По същия начин, ако изпълним случаен(100,200), ще получим произволно число между 100 и 199.

Значение на функцията randomSeed

Както вече споменахме, за да попречим на Arduino да генерира винаги една и съща последователност от числа при всяко изпълнение на програмата, трябва да се уверим, че променяме семето, което използваме в randomSeed(). Номерът е да избирате непредсказуемо семе всеки път, когато кодът се изпълнява.

Един от най-често срещаните начини за генериране на произволно начално число е да се прочете несвързан аналогов щифт. В този случай този щифт се държи непредвидимо, улавяйки електрически шум, което гарантира, че отчетената стойност ще варира постоянно. Семената могат да бъдат установени, както следва:

randomSeed(analogRead(0));

Като алтернатива можем да използваме функцията милис () за да получите изминалото време от стартирането на програмата и да го използвате като семе. Това е особено полезно в интерактивни проекти, където потребителят може да натиска бутон в различни моменти от време, което ще генерира различно начало за всяка последователност от числа.

Например, можем да използваме randomSeed(milis()); така че семето варира в зависимост от времето за изпълнение.

Практически пример: Електронни зарове

Arduino IDE, типове данни, програмиране

Класическо приложение за използване на случайни числа в Arduino е създаването на електронен зар. В този случай всеки път, когато натиснем бутон, се генерира число между 1 и 6 и светодиодите светват, за да представят лицето на съответния зар.

Това е пример за това как кодът може да бъде структуриран:

бутон = 8; // Игла за копчета
randomNum = random(1, 7); // Генериране на произволно число между 1 и 6

Когато натиснете бутона, Arduino генерира произволно число и автоматично активира съответните светодиоди за 1,5 секунди, така че потребителят да може да види крайния резултат. След кратко време светодиодите изгасват до повторно натискане на бутона.

Генерирайте подобрени псевдослучайни числа

За да подобрят допълнително случайността, някои потребители предпочитат да се съсредоточат върху първите няколко бита случаен шум, които аналоговият щифт може да улови. Това е така, защото първите битове съдържат по-голямо количество променливост, което може да се използва в проекти, които изискват по-голяма произволност. Интересен начин да направите това е да използвате побитовата операция:

randomSeed(analogRead(A0) & 3);

Този метод позволява да бъдат извлечени първите битове от шума, уловен от аналоговия пин A0, което подобрява произволността на генерираните числа. Arduino има способността да генерира до 4.294.967.295 XNUMX XNUMX XNUMX различни псевдо-случайни числа, което е повече от достатъчно за повечето домашни проекти.

И накрая, след като правилно зададете семената и диапазона, можете да се насладите на по-голяма променливост в числата, генерирани от 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.