Rolo no estilo com este diy die d20 eletrônico

Quer algo um pouco único para o seu próximo jogo de role-play mesa? Como cerca de um D20 eletrônico com gráficos personalizados para acertos críticos e erros? Hoje vou mostrar-lhe como construir seu próprio com um Arduino e algumas peças simples.

Não se preocupe se você nunca usou um Arduino antes, temos um Guia de Introdução.Começando com o Arduino: Guia de um novatoComeçando com o Arduino: Guia de um novatoArduino é uma plataforma electrónica de prototipagem de código aberto baseado em flexível e fácil de usar hardware e software. É destinado a artistas, designers, entusiastas e qualquer pessoa interessada em criar objetos ou ambientes interativos.consulte Mais informação

Plano de construir

Este é um projeto simples. Um Arduino irá conduzir um display OLED, e um botão vai rolar o dado. gráficos personalizados irá mostrar para o sucesso de crítica ou rolos falha crítica. Você pode facilmente modificar o código para ser um D8, D10 ou D12.

O que você precisa

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 x 0,96 "display OLED I2C
  • 1 x Botão
  • 1 x 10k? resistência
  • 1 x Tábua
  • gancho acima dos fios Assorted
  • código completo aqui, se você não quiser seguir todo o caminho através das instruções escritas.

Essas são as peças do núcleo que você precisa para construir o seu próprio D20. Você pode querer instalá-lo em um caso (discutido abaixo) e soldar o circuito em um estado mais permanente. Aqui estão as peças adicionais que você precisa para fazer isso:

  • 4 x M2 x 10mm parafusos (0,4 polegadas)
  • 4 x porcas M2
  • 4 x 7 mm (0,28 polegadas) anilhas
  • 9V encaixe bateria (ou alternativo adequado)
  • tubagem de retracção térmica sortido

Estes displays OLED são muito cool. Eles podem normalmente ser adquiridos em branco, azul, amarelo, ou uma mistura dos três. Eu comprei um em azul, para combinar com o meu caso. Certifique-se de obter um I2C modelo em vez de SPI.

Quase qualquer Arduino será adequado. Eu escolhi um Nano, como eles são pequenos o suficiente para caber dentro do caso. Confira nossa guia de compra Para mais informações sobre modelos Arduino.Guia Arduino compra: Qual conselho você deve começar?Guia Arduino compra: Qual conselho você deve começar?Há tantos tipos diferentes de placas Arduino lá fora, você seria perdoado por ter sido confundido. Que você deve comprar para o seu projeto? Vamos ajudar, com este guia de compra do Arduino!consulte Mais informação

O circuito

Aqui está o circuito que você precisa:

d20 circuito Arduino

Conectar VCC e GND no visor OLED para o Arduino +5V e chão. Conectar 4 analógico no Arduino ao pino marcado SDA. Conectar 5 analógico ao SCL PIN. Estes pinos conter o circuito necessário para conduzir a exibição usando o barramento I2C. Os pinos exatas irá variar dependendo do modelo, mas A4 e A5 são usados ​​no Nano e Uno. Verifique a documentação biblioteca Wire para o seu modelo se você não estiver usando um Uno ou Nano.

Ligue a bateria à terra ea VIN PIN. Isso significa tensão, e aceita uma variedade de diferentes voltagens DC - mas verificar o seu modelo específico em primeiro lugar, e às vezes pode variar um pouco.

Ligue o botão para 2 pino digital. Observe como a 10k? resistor é ligado à terra. Isto é muito importante! Isto é conhecido como um puxar para baixo da resistência, e que evita a detecção de Arduino dados espúrios ou de interferência como uma prensa de botão. Ele também serve para proteger a placa. Se esta resistência não foi utilizado, + 5V iria direto em solo. Isto é conhecido como um curto-circuito e é uma maneira fácil de matar um Arduino.

Video: Chevrolet D20 TD picadas

Se você está soldar este circuito, proteger suas conexões com tubulação do psiquiatra do calor:

heatshrink d20 arduino

Certifique-se de que você não aquecê-lo muito, e apenas fazê-lo uma vez que você tem certeza as obras do circuito. Você também pode querer torcer os cabos em pares. Este mantém-los limpo e ajuda a protegê-los de estresse:

cabos torcidos d20 Arduino

botão de teste

Agora que você construiu o circuito, carregar este código de teste (certifique-se de selecionar a bordo e porta correta do Ferramentas gt; Borda e Ferramentas gt; Porta menus):

buttonPin int const = 2- // o número do pino do botãovazio configuração() {pinMode(buttonPin, ENTRADA)- // botão de configuração Serial.início(9600)- // série configuração}vazio laço(){E se(digitalRead(buttonPin) == ALTO) {Serial.impressão("Funciona")-demora(250)-}}

Uma vez carregado, mantenha o Arduino conectado via USB e abra o monitor serial (Canto superior direito gt; Serial monitor). Você deverá ver as palavras Funciona aparecem cada vez que você pressionar o botão.

Se nada acontecer, vá e confira o dobro seu circuito.

Setup OLED

teste OLED Arduino

Você precisa instalar duas bibliotecas para conduzir o display. Faça o download das bibliotecas Adafruit_SSD1306 e Adafruit-GFX do Github, e salvá-los em sua pasta de biblioteca. Se você não tem certeza onde você pastas da biblioteca são, vá ler o meu tutorial retro gaming, onde eu configurar esta mesma tela em mais detalhes.Arduino Gaming Retro com um display OLEDArduino Gaming Retro com um display OLEDJá se perguntou o quanto trabalho é preciso para escrever seus próprios jogos retro? Como é fácil Pong para codificar para o Arduino?consulte Mais informação

Reinicie o Arduino IDE e fazer upload de um esboço de teste da Arquivo gt; Exemplos cardápio. selecionar Adafruit SSD1306 e depois ssd1306_128x64_i2c. Enviar este código (que vai demorar um pouco), e você deve ver um monte de formas e padrões no visor:

teste OLED Arduino

Se nada acontecer, verifique suas conexões. Se, após a verificação, ele ainda não vai funcionar, você precisará modificar o código de exemplo.

Altere esta linha (no início do configuração função):

exibição.início(SSD1306_SWITCHCAPVCC, 0x3D)-

Para isso:

exibição.início(SSD1306_SWITCHCAPVCC, 0x3C)-

Isto diz os detalhes específicos da biblioteca sobre a tela que você está usando. Agora você deve estar tudo pronto para o continuar com a compilação.

O caso

Se você está construindo isso em uma placa de ensaio, ou não desejam caixa-lo, então você pode pular esta etapa.

caso d20 arduino

Eu projetei e 3D impresso esta caixa. Obter os arquivos em Thingiverse. Não se preocupe se você não tem uma impressora 3D - serviços online Hubs 3D e Shapeways fornecer serviços de impressão on-line.

Você poderia facilmente fazer esta caixa de madeira, ou através da compra de uma caixa de projeto de plástico.

A tampa é um projeto simples ajuste de pressão, e contém alguns recortes para o hardware:

Video: D 20 CANTANDO TURBINA !!!



caso d20 arduino

O código

Agora que tudo está pronto, é hora para o código. Aqui está como ele vai trabalhar em Pseudocódigo:

Se o botão é o número aleatório numberif aleatória pressedgenerate é graphicelse 20show se o número aleatório é o número graphicelseshow 1show

Para que isso funcione corretamente, um número aleatório precisa ser gerado - este é o rolo do dado. Arduino tem um gerador de números aleatórios chamada aleatória, mas não deve usá-lo. Embora seja bom o suficiente para tarefas aleatórias básicas, não é apenas aleatório o suficiente para um dado eletrônico. As razões pelas quais são um pouco complicado, mas você pode ler mais se você estiver interessado em boallen.com.

Baixar a biblioteca TrueRandom por sirleech no Github. Adicione isto a sua pasta de biblioteca e reinicie o IDE.

Agora crie um novo arquivo e configurar o seu código inicial (ou apenas pegar o código acabado de GitHub):

#incluir lt;SPI.hgt;#incluir lt;Fio.hgt;#incluir lt;Adafruit_GFX.hgt;#incluir lt;Adafruit_SSD1306.hgt;#incluir lt;TrueRandom.hgt;Adafruit_SSD1306 exibição(4)-vazio configuração() {exibição.início(SSD1306_SWITCHCAPVCC, 0x3C)- // configurar o OLEDpinMode(buttonPin, ENTRADA)- // botão de configuração }vazio laço() {}

Este código configura o OLED, e inclui todas as bibliotecas que você precisa para se comunicar com ele, junto com sua nova biblioteca de números aleatórios. Agora adicione isso para o loop principal:

E se(digitalRead(buttonPin) == ALTO) {demora(15)-E se(digitalRead(buttonPin) == ALTO) {exibição.fillScreen(PRETO)- // apagar todo o ecrãexibição.SetTextColor(BRANCO)-exibição.setTextSize(2)-exibição.setCursor(0, 0)-exibição.println(TrueRandom.aleatória(1, 21))- // imprimir número aleatórioexibição.exibição()- // gravação para exibirdemora(100)-}}

Este é bastante básico em cima da hora, mas é um D20 de trabalho. Sempre que o botão é pressionado, um número aleatório entre um e 20 é mostrado na tela:

primeiro código d20 arduino

Isso funciona bem, mas é um pouco chato. Vamos torná-lo melhor. Criar dois novos métodos, drawDie e eraseDie:

vazio drawDie() {exibição.drawRect(32, 0, 64, 64, BRANCO)-}

Estes irão desenhar um dado no meio da tela. Você pode querer fazer isso mais complicado, talvez pelo desenho de um D20, ou um D12 e assim por diante, mas é mais simples de desenhar um dado de seis lados básico. Aqui está o uso básico:

drawDie()-

Em seguida, modificar seu loop principal para desenhar o número aleatório, só que maior e no meio. Alterar o tamanho do texto e cursor para isso:

exibição.SetTextColor(BRANCO)-exibição.setCursor(57, 21)-

Parece muito melhor agora:

caractere único d20 arduino

O único problema é com números maiores do que nove:

Video: D20 a 160km

arduino caráter dual d20

A correção para isso é simples. Quaisquer números de menos do que 10 terá o cursor para definir uma posição diferente do que os números 10 ou maiores. Substituir esta linha:

exibição.setCursor(57, 21)-

Com isso:

rolo int = TrueRandom.aleatória(1, 21)- // armazena o número aleatórioE se (lista lt; 10) {// número único caractereexibição.setCursor(57, 21)-}outro {// número de caráter dualexibição.setCursor(47, 21)-}

Aqui está o que parece agora:

arduino caráter dual fixa d20

Tudo o que resta agora é para as imagens quando você rolar um acerto crítico ou um fracasso. Existem alguns passos envolvidos, mas é um processo bastante simples.

Encontrar uma imagem adequada que pretende utilizar (quanto mais simples melhor que o visor é apenas uma cor só). Aqui estão as imagens que eu usei:

artwork d20 arduino
Crédito de imagem: publicdomainvectors.org

Qualquer imagem que você deseja usar precisará ser convertido para uma matriz HEX. Esta é uma representação da imagem em forma de código. Existem muitas ferramentas disponíveis para fazer isso, e alguns são escritos especificamente para displays OLED. A maneira mais fácil é usar a ferramenta online PicturetoC_Hex. Aqui estão as configurações necessárias:

imagem arduino para hex

Carregue a sua imagem, e definir o formato de código para HEX: 0x. Conjunto Usado para para Preto / branco para todos os função de imagem sorteio. Deixe todas as outras opções como os padrões. Você pode redimensionar a imagem aqui se você precisa. pressione Obter C Cordas e você deve ver aparecer os dados de imagem:

dados de imagem d20 arduino

Você vai precisar de dados gerados em um minuto. Criar duas funções chamadas drawExplosion e drawSkull (Ou um nome adequado para a sua versão). Aqui está o código:

vazio drawExplosion() {// imagem da loja na EEPROMstatic const unsigned char IMEXP PROGMEM[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x78,0x7f,0xff,0xC0,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xF0,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xFB,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xC0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xC0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xE0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xC0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xE0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xE0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xE0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xF0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xE0,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x07,0xff,0xff,0xf9,0xff,0xd8,0x00,0x00,0x00,0x3f,0xff,0xF0,0x0f,0x00,0x00,0x00,0x00,0x1f,0x1f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xF0,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xFC,0x00,0x00,0x01,0xBF,

Artigos relacionados