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 鈥榩eque帽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 鈥渇lotante鈥, 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.

Download me
Autor: kaiser
1 proyectos 0 seguidores 0 siguiendo

COMENTARIOS
Para publicar un comentario debes