Pular para o conteúdo

Artigos Recentes

31
ago

RetroPie: Transforme seu RASPBERRY em um video-game retrô!

Embora tenhamos vivido grandes avanços tecnológicos na área da computação gráfica, muito se fala sobre os clássicos videogames que fizeram sucesso nas décadas de 70/80/90 e 2000.

E se você quer viver essa nostalgia de poder jogar um game clássico, essa é a oportunidade!

Hoje vamos utilizar o Raspberry com o software RetroPie, que basicamente é um emulador de videogames antigos, integrando uma lista extensa, dentre eles Atari 2600, Nintendo, MSX entre outros!

Materiais necessários

Raspberry Pi (nós estamos utilizando aqui como exemplo, o Pi 3b)

Cartão de memória (recomendamos o classe 10 de pelo menos 16gb)

Fonte para o Raspberry

Cabo HDMI ou RCA/p2

Teclado e/ou Gamepad USB

Download do RetroPie

 Para começarmos a brincadeira, o primeiro passo é baixar a imagem do RetroPie para gravarmos no nosso Raspberry. Você pode baixá-la clicando aqui.

Quando o download finalizar, descompacte o arquivo, que irá gerar um arquivo com nome retropie-buster-4.6-rpi2_rpi3 que é a imagem que vamos gravar no cartão MicroSD

Para gravação da imagem no cartão MicroSD, vamos usar o Etcher, que você pode baixar clicando aqui. 

Depois de baixar o Etcher, abra e selecione a imagem na pasta que você descompactou.

Nessa hora, é preciso estar com o cartão MicroSD inserido em seu computador.

 

Após imagem inserida no Etcher, clica em Select Target e selecione o cartão MicroSD que será gravado, e depois clique em Flash

Ao término da gravação, conecte o cartão MicroSD no Raspberry, e ligue-o na fonte.

Configurações iniciais do RetroPie

 Ao inicializar o Raspberry pela primeira vez, será carregada a tela inicial de configuração do RetroPie (abaixo), mas não vamos configurar os controles nesse momento. Tecle F4 para ir ao prompt de comando.

 

No prompt, digite sudo raspi-config para carregar a tela de configuração do Raspberry:

 

Na tela do raspi-config, selecione:

– Expand Filesystem – Selecione esta opção e aguarde o final da configuração

– Advanced Options – Dentro desta opção, selecione SSH, depois ENABLE

– Overclock – Selecione “Medium“

– Selecione FINISH e reinicie o Raspberry para que as alterações tenham efeito.

Copiando as ROMS para o Raspberry

ROMS são os arquivos contendo a imagem do jogo/software que você deseja rodar, e são facilmente encontradas na internet.

Para copiar as ROMS para o RetroPie, acesse a rede (network) pelo Windows Explorer e procure pelo dispositivo RetroPie (na imagem abaixo, à esquerda). Dentro dele teremos acesso à pasta ROMS, com as subpastas correspondentes aos emuladores:

 

Caso o RETROPIE não apareça na sua rede, pressione “windows” + “R”, e digite “\\retropie” sem aspas e dê enter:

Se for solicitado senha, digite para Username: “pi” e para senha: “raspberry”.

Após você ter baixado a ROM desejada, e colocado na respectiva pasta do Raspberry, basta reiniciar o Raspberry para que o game apareça na tela inicial.

Configurando o teclado

 Voltamos agora à tela de configuração do RetroPie, onde vamos configurar os atalhos do teclado. Será apresentada a mensagem NO GAMEPADS DETECTED.  Mantenha pressionada qualquer tecla para que o teclado conectado ao Raspberry seja selecionado.

Nas telas seguintes, atribua teclas para as funções UP (acima), DOWN (abaixo), LEFT (esquerda), RIGHT (direita), A, B, START (Iniciar), SELECT (Selecionar), L e R.

 Ao final, selecione OK para entrar na tela principal dos emuladores:

 Use as setas para selecionar o Nintendo Entertainment System. Como temos três ROMS copiadas para a pasta NES, será exibida uma lista com os três jogos. Agora basta selecionar o jogo com as teclas configuradas anteriormente.

Abaixo, uma tela do emulador Nintendo com o jogo ARKANOID, um clássico dos videogames:

Para carregar outros jogos e outras ROMS, baixe o arquivo de sua preferência e coloque-a na pasta do emulador correspondente.

 Lembrando que a PROESI abomina quaisquer formas de pirataria. Baixe somente as ROMS que você possua em tipo físico.

Configurando GamePads

Caso queira mudar as configurações do controle, após a primeira configuração, basta pressionar “start” e selecionar a opção “CONFIGURE INPUT” e refazer os passos mostrados acima.

Ao término da configuração quando “Ok” estiver selecionado basta apertar o Botão do controle que foi configurado como “A”. Para facilitar a navegação no sistema foi criado “Hotkeys” (atalhos) que podem ser vistos na tabela abaixo.

8
jun

Tutorial para montagem de “Caixa Inútil” (Useless Box)

Este tutorial serve pra você, apaixonado por eletrônica, montar sua caixa inútil, no formato e com o material que estiver à sua disposição, como você pode facilmente achar alguns layouts para impressão, e desenvolver com papelão, de forma mais pratica, ou desenvolver com uma caixa de madeira que foi o caminho que escolhemos. É um projeto simples em seu desenvolvimento, e demanda de poucos materiais.

Material:

01 arduino (uno R3,  nano, etc)

02 servos 180° – usado foi o 9G DXW 90 Tower Pro

01 LM7805

01 BD 139

01 Capacitor 330uf 16V

01 Capacitor 470 16V

01 Fonte 7,5Vdc

01 placa ilhada 12,9 x 2

01 caixa a sua escolha

01 ursinho, a sua escolha. Uma dica, quanto mais fofinho, e olhos grandes melhor o resultado.

Fios de Jumper

Na internet, existem outros tutorias que ensinam montar caixas sem o ursinho, só com o braço mecânico. Para começar a montagem, calculamos o espaço que o arduino iria ocupar junto com o braço e o arduino, conseguimos posicionar no centro da caixa. A preparação do ursinho é a parte mais dolorosa.

fotos1

A cabeça do urso fica colada na tampa e o tecido preto, serve para dar um acabamento quando a caixa estiver funcionando. Agora montamos o urso e o arduino para definir o tamanho dos suportes, disposição da placa e do botão.

fotos2

Para facilitar, montamos gabaritos em papel para depois poder fazer as montagens. Você não vai acertar as posições de primeira, no nosso caso foram montados 3 gabaritos antes de acertar no tamanho da pata. Depois da peças montadas, botão fixado, cabeça do urso colada, o resultado será este.

foto3

Detalhes importantes, o tecido da pata foi usado o tecido do braço do ursinho, sobre conjunto para fazer a abertura da tampa, vários tutorias usam somente uma madeira deslizando pela tampa, optamos por algo fixo na tampa, mais trabalhoso, porém não corre o risco da tampa cair sozinha durante os movimentos ou de ser aberto manualmente. Terminado a parte mecânica, agora montamos o arduino e suas ligações.

Os servos, até podem ser alimentado pelo próprio arduino, porém não é recomendado, ideal é usar alimentação externa, por isso que usamos capacitor na 470 uf antes do LM 7805 e na saída um de 330uf montados numa placa ilhada para ficar organizado. Depois da caixa montada, os servos quando energizados se deslocavam para a posição de 90 graus e acabavam por se trancar, para isso não acontecer, foi montado um transistor BD139 como chave (enable) dos servos.

foto4

Para o arduino, saem os pinos de controle dos servos, da chave alavanca, da base do BD139. Voce vai começar a programar e vai alterando os angulos dos servos, evite batidas fortes das peças ou que os servos trabalhem forçados de mais, isso vai evitar desgate ou quebra dos servos.

 

Para Poupar tempo ou servir como exemplo, segue o programa usado. As interações podem ser programadas como você bem entender. Nosso programa foi programado para ter 5 interações diferentes e após isto, o programa se encerra.

/*

* Projeto caixa inútil – Unsless box

*

* Projeto desenvolvido por Venancio Miranda e Proesi Componentes

*

* Material:

* 02 servos 9g dxw90

* 01 chave MTS alavanca L/D

* 01 BD 139

* 01 LM 7805

* 01 Capacitor 330uf 16V

* 01 Capacitor 470uf 16V

* 01 placa ilhada 12,9 x 2

*/

#include <Servo.h>

#define enablePin  11

#define botao      10

#define servo_pata  9

#define servo_tampa 8

// Posições da tampa

#define fecha   152

#define meio     70

#define abre      0

#define bate    165

#define fresta  140

#define Tbatida 100

// Posições pata

#define guarda 180

#define aceno   60

#define desl    10

boolean limite = true;

int count = 0, button = 0 , enable = 0;

Servo pata;

Servo tampa;

// Função que orienta posição dos servos e delay entre nova movimentação

void comando (Servo nome_servo,int grau ,int tempo)

{

nome_servo.write(grau);

delay(tempo);

}

 

void setup()

{

pinMode(botao , INPUT_PULLUP);

pinMode(enablePin , OUTPUT);

digitalWrite(enablePin,LOW);

 

pata.attach(servo_pata);

tampa.attach(servo_tampa);

}

 

 

void loop()

{

while(limite)                     //While que executa limite de execuções

{

digitalWrite(enablePin,LOW);

button = digitalRead(botao);

 

if(button == LOW)

{

switch(count)                 // contagem e sequencia dos movimentos

{

case 0:

digitalWrite(enablePin,HIGH);

delay(500);

comando(tampa , abre , 750);

comando(pata , desl, 1000);

comando(pata , guarda , 1000);

comando(tampa, fecha , 2000);

count++;

break;

 

case 1:

digitalWrite(enablePin,HIGH);

delay(1000);

comando(tampa , meio, 2000);

comando(tampa, fecha, 1000);

comando(tampa , abre , 1000);

comando(pata , desl, 1000);

comando(pata , guarda , 1000);

comando(tampa, fecha , 2000);

count++;

break;

 

case 2:

digitalWrite(enablePin,HIGH);

delay(2000);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , abre , 1000);

comando(pata , desl, 1000);

comando(pata,aceno,300);

comando(pata,desl,300);

comando(pata,aceno,300);

comando(pata,desl,300);

comando(pata,aceno,300);

comando(pata,desl,2000);

comando(pata , guarda , 1000);

comando(tampa, fecha , 2000);

count++;

break;

case 3:

digitalWrite(enablePin,HIGH);

delay(3000);

comando(tampa , abre , 750);

comando(pata , desl, 1000);

comando(pata , guarda , 1000);

comando(tampa, fecha , 1500);

comando(tampa , abre , 1500);

comando(pata,desl,300);

comando(pata,aceno,300);

comando(pata,desl,300);

comando(pata,aceno,300);

comando(pata,desl,2000);

comando(pata,guarda,1000);

comando(tampa, fecha , 2000);

comando(tampa , meio, 2000);

comando(tampa, fecha, 1000);

count++;

break;

 

case 4:

digitalWrite(enablePin,HIGH);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

comando(tampa , fresta , Tbatida);

comando(tampa , bate   , Tbatida);

 

comando(tampa, abre, 750);

comando(tampa, bate, 750);

comando(tampa, abre, 1250);

comando(pata , desl, 1000);

comando(pata , guarda , 1000);

comando(tampa, fecha , 2000);

limite = false;                         //encerra while

break;

}

}

}

}Nosso resultado final foi este, já com os devidos acabamentos.

foto5

%d blogueiros gostam disto: