Numeros aleatórios com o Arduino: Simulador de Mega Sena

Introdução

A mega da virada passou, assim como o ano de 2020, e acredito que infelizmente você não foi um dos vencedores (#chateado). E que tal se o Arduino pudesse te ajudar nessa missão de gerar números para, quem sabe, você vir ser um dos premiados?

Hoje iremos aprender um pouco mais sobre como gerar números aleatórios e como aprender isto pode nos ajudar a criar projetos bastante legais, como este simulador de números da Mega Sena, que você poderá utilizar caso deseje fazer aquela aposta e não tem muita criatividade na hora de compor os números.

Como um conhecimento adicional, neste tutorial você aprenderá como criar caracteres personalizados para um display LCD, que poderá fazer com que seu projeto tenha um charme a mais.

Primeiro começaremos discutindo um pouco sobre a diferença de um número aleatório para um número pseudo aleatório.

Número aleatório e Pseudoaleatório

Pense você por um instante em como gerar um número aleatório escrevendo um programa no Arduino? (Após pensar continue lendo abaixo)

Provavelmente a solução que você deve pensou envolve o tempo, mas aqui usaremos algo bem mais simples: as portas analógicas.

Você já experimentou fazer a leitura de uma porta analógica sem que nada esteja conectada a ela? Provavelmente o que você viu algo como na imagem abaixo:

Isto basicamente é o ruído captado, que é completamente aleatório. sendo assim, uma boa forma de criar uma função de gerar números aleatórios com o Arduino é utilizar esses dados aleatórios de ruído para gerar os números aleatórios.

Por sorte, a biblioteca principal da Arduino IDE já implementou uma função para gerar números aleatório, e essa função é a random(), onde você pode passar um ou dois parâmetros. Caso você passe um parâmetro, você estará limitando os números pseudo-aleatórios de zero até o limite máximo que você passou no parâmetro. Quando você passa dois parametros, você está escolhendo o limite inferior e superior para que a função sempre passe valores entre os dois valores.

Eu disse que está gerando números pseudo-aleatórios é que se você utilizar a função random() sozinha não irá funcionar corretamente, porque ela irá gerar em toda execução os mesmos números, porque não indicamos de onde iremos tirar a aleatorização.

Para indicar de onde iremos utilizar a aleatorização, esta função é a randomSeed(). Esta função basicamente embaralha os números da função random(), e faz com que os números que eram pseudo-aleatórios passem a ser aleatórios.

 

Como ordenar estes números aleatórios recebidos?

Talvez você nunca precisou lidar com ordenação de dados, mas esse é um estudo muito importante na ciência da computação e surgiram vários métodos para realizar um ordenamento.

Neste exemplo de hoje iremos ordenar apenas 6 números recebidos, desta forma, o método escolhido não fará muita diferença no sentido de eficiência computacional, mas saber dominar os métodos de ordenamento é bastante importante para implementar sistemas grandes.

Pense na sua loja online preferida (Eletrogate), ao você pesquisar por exemplo: “Sensor”, você verá que existem mais de 469 resultados, e possível ordenar de várias formas.

Como ordem alfabética, mais recentes, mais vendidos, etc.

 

E se o seu método de ordenamento for ruim? Mal implementado? Isso fará com que haja uma demora excessiva na ordenação, e talvez isso faça com que prejudique a qualidade do seu site.

Pense agora em um sistema como o Google, que em uma pesquisa busca até 153 mil resultados que podem ser ordenados. Neste caso, o algoritmo de ordenamento será crucial.

Para entender um pouco sobre métodos de ordenação, uma excelente introdução ao assunto pode ser vista aqui (clique).

Como usaremos apenas 6 números, o método adotado será o de Inserção.

Entender o método de ordenação por inserção é algo bem simples. Ele é um método onde você inicia em uma das pontas do vetor de números (conjunto de números), e ele faz a ordenação como fazemos com cartas de baralho. A idéia é partir de que o primeiro elemento já está ordenado, e partimos dele. Sendo assim, todos os demais elementos serão inseridos em relação aos elementos já ordenados.

Para entender melhor, deixo aqui um vídeo divertido que explica muito bem este método.

Basicamente ele sempre ordena da esquerda para direita, onde, ele pega o próximo elemento do vetor ordenado e o ordena dentro deste vetor comparando um a um se é maior. Após a inserção, ele vai para o próximo elemento e assim o faz até o vetor estar completamente ordenado.

Assim, quando conseguirmos gerar os 6 números, basta colocar neste algoritmo para ele realizar a ordenação.

 

Materiais

Para fazer este novo tutorial iremos precisar de apenas:

 

Executando o projeto

Para deixar o projeto com uma cara muito bonita, iremos plotar o conhecido logo da Mega Sena na display.

Para fazer isto, iremos criar caracteres personalizados para o nosso Display.

O Arduino permite criarmos até 8 caracteres personalizados (limite máximo da plataforma) para o display. Para criar é bem simples, basta ir neste site aqui e desenhar o caractere, e ele já retorna o código Arduino.

Como exemplo, vou criar um coração.

https://maxpromer.github.io/LCD-Character-Creator/

Para fazer a logo, eu dividi a logo da mega sena em 8 caracteres que poderão ser criado, e guia para desenhar pode ser consultado aqui embaixo:

Caso queira criar essas imagens, basta pegar um desenho qualquer, levar até o Photoshop ou algum software de manipulação de imagem, e reduzir a imagem para 20×16 pixels.

 

Diagrama e código

Monte o diagrama abaixo e carregue o código para sua placa Arduino. Caso deseja, edite o código para ter um resultado diferente.

 

Para este exemplo precisaremos instalar a biblioteca LiquidCrystal I2C. Para isso, basta ir em “Ferramentas > Gerenciar bibliotecas”, e pesquisar por: “LiquidCrystal I2C” e instale a biblioteca do autor “Frank de Brabander”.

Eu estou utilizando a versão 1.1.2, caso dê algum erro, instale esta versão e teste.

O código a ser carregado é o código abaixo.

E o resultado obtido foi este abaixo:

 

Conclusão

Neste post aprendemos muitas coisas, que permitiram a gente criar um projeto legal. Hoje aprendemos a utilizar e criar números aleatórios, a como ordenar dados e como criar caracteres personalizados.

Você fez o seu simulador de números e talvez vai usar ele para fazer sua aposta? Tire uma foto e marque a gente no instagram @eletrogate , vai ser um prazer ver e interagir com você.

Gostou do post? Deixe sua avaliação.

Utilize a parte dos comentários para deixar dúvidas, sugestões e elogios.

Forte abraço e até a próxima!

Avaliação: 5.0/5. De 7 votos.
Espere por favor...
Gustavo Nery
Gustavo Nery
Cursando Engenharia de Controle e Automação pela UFMG. Apaixonado por eletrônica, computação e tecnologias na área de sistemas embarcados. Nos tempos livres me divido entre desenvolver pesquisa na universidade, adquirir novos conhecimentos e estar com a família.
Acesse nossa loja