Um jogo da velha "gamer" para Fatec Aberta ( Gamer é por que tem LED’s, isso aumenta o FPS do computador em 256%)
Desenvolver um jogo da velha usando LED’s, que seja clicável, que tenha sons e que seja executado em um computador, usando a linguagem Python 3 (Porque já tĂnhamos uma biblioteca prĂłpria mais ou menos pronta), um ArduĂno mega ( Porque temos um exemplar e temos uma noção de como ambos se encaixam ) e que tenha uma estrutura parecido com esse modelo 3D que fizemos no blender 2.8:
Os passos descritos aqui nĂŁo foram executados necessariamente nessa ordem que eles estĂŁo descritos.
Primeiramente criamos um quadro no Trello, onde organizamos todas as etapas que iriamos precisar fazer para realizar o projeto.
Começamos por definir com exatidão o que cada parte do projeto faria:
- O ArduĂno ligará e desligará os LED’s de acordo com letras que serĂŁo enviadas na sua serial. Ele tambĂ©m irá ler o estado dos botões e enviar nĂşmeros para a serial.
- O circuĂto eletrĂ´nico sĂł terá função de obedecer aos comandos do ArduĂno e tratar de potenciais ruidos.
- O script em Python dará comandos para o ArduĂno, sendo que ele irá ler nĂşmeros na serial e irá enviar letras por ela. Ele tambĂ©m irá controlar a reprodução do som.
- O sistema deve funcionar com perfeição no Windows 10.
Depois, começamos a definir quem faria o que:
- Quem vai fazer o script?
- Quem vai trabalhar no ArduĂno?
- Quem vai fazer a placa?
- Quem vai trabalhar no design?
- Quem vai trabalhar nas melhorias?
Depois começamos a fazer testes, para ver como seria o modelo 3D, sem se preocupar com detalhes mais técnicos. Nesse passo, conseguimos descobrir diversas falhas que nosso projeto teria.
Usando o software PROTEUS(Conseguimos acesso a um computador com o proteus, caso vocĂŞ nĂŁo tenha acesso por ser um software pago, vocĂŞ pode usar outros programas como o Every Circuit) fizemos um circuito eletrĂ´nico que seria acessĂvel para o nosso projeto, depois geramos um modelo 3D. Os modelos que fizemos, nos deram uma visĂŁo fantástica sobre como cada parte do circuito deveria funcionar, o que facilitou demais no desenvolvimento e o planejamento sobre como iriamos organizar a parte elĂ©trica na placa.
Começamos a desenvolver uma versĂŁo simples de como o script funcionaria, decidimos adotar o Python 3.6 com a biblioteca PySerial para que pudĂ©ssemos nos conectarmos com o ArduĂno. Posteriormente, adicionamos a biblioteca PyGame para reproduzir o som.
A ideia é básica, eu reaproveitei pedaços de código de um jogo da velha que eu tinha feito anteriormente, em que ele recebe uma lista com 9 elementos, os elementos podem ser ' ', 'x' ou 'o'. Eles definem o estado de todas as posições no tabuleiro. A biblioteca analisa essa lista, com todos os dados sobre onde está cada jogador e então escolhe uma posição de acordo com uma série de regras pré definidas. A biblioteca retorna a própria lista com a posição que ela escolheu.
Então fizemos um outro script, que coordena a posição que o jogador escolheu, a posição que o “computador escolheu”, que envia e faz a leitura de dados da serial e que executa os sons de acordo com o que está acontecendo.
Inicialmente ele era independente, portanto, conseguimos testá-la sozinha no computador, deixando ela pronto para se conectar ao ArduĂno, mesmo sem o ArduĂno e sem a placa montada.
Isso sĂł foi possĂvel por que padronizamos como a comunicação entre o ArduĂno e o computador seria feita, atravĂ©s de tabelas.
Ao mesmo tempo, iniciamos o planejamento e a codificação do ArduĂno.
Planejamos as respostas de duas perguntas principais:
- O que o ArduĂno vai fazer ao receber um sinal dos botões?
- O que o ArduĂno receberá para ligar ou desligar os LED’s?
Começando pela primeira:
O que o ArduĂno vai fazer ao receber um sinal dos botões?
Ao receber um sinal dos botões, o ArduĂno deve enviar para serial, reportando para o script qual botĂŁo que foi clicado, ou seja, se o botĂŁo 1 for pressionado (button1), qual sinal que o ArduĂno enviará para a serial?
Definimos uma tabela padrĂŁo, que segue o modelo abaixo.
A tabela foi atualizada com a pinagem que usamos.
sinal | botĂŁo | pinagem |
---|---|---|
1 | button1 | 2 |
2 | button2 | 3 |
3 | button3 | 4 |
4 | button4 | 5 |
5 | button5 | 6 |
6 | button6 | 7 |
7 | button7 | 8 |
8 | button8 | 9 |
9 | button9 | 10 |
Nesse caso, se o button4 for pressionado, ele enviará um sinal HIGH para o pino 5, esse sinal será lido pelo ArduĂno e ele enviará o sinal 4 para a serial. O papel do ArduĂno Ă© basicamente isso. O script irá ler a serial e ver o sinal 4, entendendo que o button4 foi pressionado.
Ou seja, seguimos basicamente essa estrutura:
Resumindo:
- Um positivo alimenta todos os botões.
- Na saĂda, forçamos os botões a terem uma saĂda LOW, quando nĂŁo estiverem sendo pressionados, atravĂ©s dos resistores de PULL DOWN.
- As saĂdas vĂŁo para os pinos do ArduĂno, de 2 a 10.
Exemplificando novamente, se o pino 10 for acionado, significa que o button9 foi clicado, sendo assim, o ArduĂno deverá enviar o sinal 9 para a serial e o script entenderá que o button9 foi clicado.
Também criamos uma tabela padrão, que diz quais sinais devem estar na serial para que o Arduino ligue ou desligue os LED’s.
sinal | led | status | pinagem |
---|---|---|---|
"a" | LedVerde1 | ligado | 22 |
"b" | LedAzul1 | ligado | 23 |
"c" | LedVerde2 | ligado | 24 |
"d" | LedAzul2 | ligado | 25 |
"e" | LedVerde3 | ligado | 26 |
"f" | LedAzul3 | ligado | 27 |
"g" | LedVerde4 | ligado | 28 |
"h" | LedAzul4 | ligado | 29 |
"i" | LedVerde5 | ligado | 30 |
"j" | LedAzul5 | ligado | 31 |
"k" | LedVerde6 | ligado | 32 |
"l" | LedAzul6 | ligado | 33 |
"m" | LedVerde7 | ligado | 34 |
"n" | LedAzul7 | ligado | 35 |
"o" | LedVerde8 | ligado | 36 |
"p" | LedAzul8 | ligado | 37 |
"q" | LedVerde9 | ligado | 38 |
"r" | LedAzul9 | ligado | 39 |
"z" | *tudo | deslig | SERIAL |
Nessa tabela, vemos que, se o ArduĂno receber o sinal "a", ele deverá ligar o conjunto de LED’s verde do primeiro quadrado, que está no pino 22. Se ele receber um sinal "z", ele deverá desligar todos os leds.
Para otimizarmos fios, tempo e recurso financeiros, decidimos que os 4 negativos dos leds de um quadrado seriam ligados juntos, sendo assim, verificamos que seria viável usarmos um resistor de 220 OHM para cada 4 conjuntos de LED’s, custando menos tempo de manutenção, menos tempo montando, menos recursos financeiros.
Os resistores servem para delimitar a corrente elĂ©trica. AtĂ© onde sabemos, os LED’s que usamos possuem uma tensĂŁo nominal de 3.3 volts, sendo assim, ligar diretamente no 5 volts do ArduĂno Ă© uma pĂ©ssima ideia, portanto, ao adicionarmos os resistores de 220 OHM na saĂda dos 4 leds, a tensĂŁo Ă© reduzida a nĂveis seguros para o funcionamento dos leds.
Sendo assim, o esquema para cada botĂŁo fica assim:
Resumindo:
- Interligamos o positivo dos dois LED’s verdes de cada botão.
- Interligamos o positivo dos dois LED’s azuis de cada botão.
- O positivo do conjunto de LED’s verdes vão em um pino e o positivo do conjunto de LED’s azuis vão em outro pino, seguindo a tabela acima.
- Interligamos os quatro negativos a um resistor de 220 OHM conectando ao negativo.
ApĂłs definirmos como as coisas deveriam funcionar e quais padrões iriamos seguir, começamos a testar se a nossa lĂłgica, tanto de programa quanto fĂsica estaria correta. Montamos uma versĂŁo simplificada e bem feia de como tudo deveria funcionar.
Nesse teste, descobrimos que nossa lĂłgica estava correta, de forma bem robusta, nosso software e a parte fĂsica estavam respondendo conforme o planejado.
ApĂłs definirmos padrões e validarmos nosso circuito, com testes e análises, iniciamos a etapa de comprar o que faltava. Compramos tudo seguindo a tabela abaixo. (Algumas coisas nĂłs já tĂnhamos, faça a sua prĂłpria lista de compras).
Qt | Nome | Preço | Explicação |
---|---|---|---|
2 | Metros de fio de rede. | R$: 2,00 | Conexões entre os componentes |
40 | Cabo Jumper Macho/?? | R$: 2,00 | Conexões entre o ArduĂno e a placa |
18 | LED’s verde de autobrilho. | R$: 0,5 cada | Xis |
18 | LED’s azul de autobrilho. | R$: 0,5 cada | Bolinha |
9 | Push Button. | R$: 0,2 cada | Leitura do clique |
36 | Resistores 220 OHM. | R$: 0,15 cada | Controlar a tensĂŁo dos LEDS |
27 | Resistores 2K2. | R$: 0,15 cada | Definir um GND |
1 | ArduĂno MEGA 2560 | R$: 80,00 | Controle |
1 | Conector para ArduĂno | R$: 15,00 | Enviar comandos e controle |
1 | Placa De Circuitos 15x15 | R$:20.00 | Circuitos eletrĂ´nicos |
3 | Metros de estanho. | R$: 2,00 | Conexões entre os sistemas |
9 | Blocos brancos | R$: 0,00 | Design |
1 | Notebook | R$: 450 | Celebro |
Qt | Nome | Preço | Explicação |
---|---|---|---|
1 | Protoboard | R$: 20,00 | Circuitos de testes |
1 | Ferro de solda | R$: 15,00 | Solda de componentes |
1 | Alicate | R$: 00,00 | Corte de fios |
Quando tivemos a certeza que tudo deveria funcionar conforme o planejado e tĂnhamos comprado os itens básicos, iniciamos a etapa de montagem de tudo. Foi mais ou menos assim:
Com a placa em mãos, testamos o comportamento dos botões de plásticos que queriamos usar. Eles seriam a etapa final, mas nós precisávamos confirmar que eles ficariam bem com os botões.
Com tudo de acordo, posicionamos os botões, os leds, os resistores e fomos soldando eles na placa. Como regra, nĂłs sempre fazĂamos etapa por etapa, ou seja, a etapa de interligação dos resistores dos botões era apenas isso, iniciávamos e finalizávamos nisso, fazendo testes para verificar se a solda estáva boa, se algum fio se soltou, se tem alguma coisa se comportando mal, etc.
Fizemos isso atĂ© a Ăşltima tarefa, sempre tentando fazer o melhor trabalho possĂvel. Sem dĂşvidas, esse foi a tarefa mais demorada, e que exigiu mais testes.
Essa etapa também foi a que mais exigiu delicadeza, já que erros poderiam ocasionar na não conclusão do projeto.
Quando a parte eletrĂ´nica estava toda soldada, fizemos mais um teste geral, validando que tudo estava funcionando de acordo com o que foi previsto e que nĂŁo haviam curtos na placa. ApĂłs isso que sentimos confiança para ligar o a placa no ArduĂno, como já tĂnhamos feito um teste na protoboard e a placa estava respondendo de acordo, a integração foi literalmente sĂł ligar os fios, o resto já havia sido testado e validado nas etapas anteriores.
Colocando os botões obtivemos esse resultado:
Com tudo funcionando perfeitamente, adicionamos sons atravĂ©s do script em Python, adicionamos animações e fizemos diversas atualizações no cĂłdigo, deixando o jogo bem mais difĂcil contra o computador.
O resultado do nosso trabalho pode ser visto nesse repositĂłrio.
É necessário instalar o Python, de preferência na versão 3.6, adicionando o "Path" na variável de ambiente, caso você esteja usando o Windows.
Depois precisamos instalar a biblioteca PyGame, que nos permite reproduzir os sons.
pip install pygame
E entĂŁo precisamos instalar o PySerial, essa biblioteca nos permite ler e enviar dados para a serial do ArduĂno, sendo a nossa ponte entre o script e o Arduino
pip install pyserial