Generar numeros aleatorios con arduino

Publicado el: 17 de noviembre de 2019
Principiante
Acerca de este proyecto
En muchos proyectos que involucran microcontroladores vamos a tener la necesidad de obtener números aleatorios o generados al azar.
aleatorios
Publicidad
DETALLES

En este artículo se explicará como se pueden obtener números aleatorios con arduino.

Vamos a usar la función random() que se usa de la siguiente manera:

random(maximo): genera un número aleatorio entre 0 y maximo-1.

Por ejemplo, si deseamos obtener un número aleatorio entre 0 y 9, se usa: random(10), ya que el número pasado como parámetro no entra en la lista de los números generados.

Si deseamos obtener un número aleatorio entre un rango definido se usa:

random(minimo,maximo-1)

Si por ejemplo ahora queremos generar un número aleatorio entre 100 y 999, colocamos:

random(100,1000).

Pero  hay un pequeño inconveniente si generamos los números al azar usando sólo esta función, ya que realmente los números no son aleatorios sino que una secuencia de números que se repetirán continuamente.

Para comprobar lo mencionado vamos a usar el siguiente sketch:


int azar;
void setup()
{
 Serial.begin(9600);
}
void loop()
{
 azar = random(1,11);
Serial.println(azar);
delay(300);
}

Si reseteamos el arduino,  observará que la lista de los números generados siempre va a ser la misma, algo que no se desearía en ningún proyecto que involucre el uso de estos números.

Para solucionar eso, debemos primero generar lo que se llama una semilla, que en pocas palabras es un número que se usa como parámetro para a partir de ese número generar una lista diferente de números aleatorios:

randomSeed(semilla);



int azar;
void setup()
{
 randomSeed(56);
 Serial.begin(9600);
}
void loop()
{
 azar = random(1,11);
Serial.println(azar);
delay(300);
}

En la línea 4 vemos que usamos la función randomSeed() y le pasamos como parámetro el número 56.

Sin embargo hay un ‘pequeño’ problema, todavía no obtenemos números realmente aleatorios; aunque se piense que la secuencia de números es aleatoria con la función randomSeed(), aun será la misma cada vez que se ejecute el programa. Es solo una lista de números seudo-aleatorios.

Por tal razón debemos pasar como parámetro un número que esté cambiando de manera constante, la página de referencias de arduino recomienda que usemos la función analogRead() para leer el valor de un pin que no es esté utilizando. Debido a que ese pin no tiene asociado un voltaje ya que se encuentra “flotante”, este capturará lo denominado señal de ruido.

Este valor de ruido se usa como semilla para la función randomSeed() para producir secuencias diferentes de números aleatorios cada vez que se ejecute el sketch.

Comprobémoslo con el siguiente programa:


int azar;
void setup()
{
 randomSeed(analogRead(0));
 Serial.begin(9600);
}
void loop()
{
 azar = random(1,11);
Serial.println(azar);
delay(300);
}

En la línea 6 utilizamos la función randomSeed y le pasamos como parámetro (semilla) el valor captado por el pin analógico 0, al ejecutar este programa varias veces los valores obtenidos son aleatorios. Así que esta es la manera que se usa en arduino para producir estos números.

Espero que les haya servido este artículo.

Autor: kaiser
1 proyectos 0 seguidores 0 siguiendo

PROYECTOS RELACIONADOS
COMENTARIOS
Para publicar un comentario debes
COMENTARIOS
sistemasymicros
hace 4 semanas

Interesante