Roll en estilo con este dado d20 electrónica diy

¿Quieres algo un poco único para su próxima mesa de juego de roles juego? ¿Qué tal un D20 electrónico con gráficos personalizados para los golpes críticos y errores? Hoy os voy a mostrar cómo construir su propia con un Arduino y un par de partes simples.

No se preocupe si usted nunca ha utilizado un Arduino antes, tenemos una guía de introducción.Primeros pasos con Arduino: una guía para principiantesPrimeros pasos con Arduino: una guía para principiantesArduino es una plataforma electrónica de prototipos de código abierto basado en flexible y fácil de usar hardware y software. Está pensado para artistas, diseñadores, aficionados y cualquier persona interesada en la creación de objetos interactivos o ambientes.Lee mas

construir plan

Este es un proyecto simple. Un Arduino impulsará una pantalla OLED, y un botón rodará la matriz. gráficos personalizados mostrarán de golpe crítico o rollos fallo crítico. Puede modificar fácilmente el código para ser un D8, D10, D12 o.

Que necesitas

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 x 0,96 "pantalla OLED I2C
  • 1 x El botón
  • 1 x 10k? Resistor
  • 1 x Breadboard
  • conectar cables surtidos
  • código completo aquí, si no desea seguir todo el camino a través de las instrucciones por escrito.

Esas son las piezas de la base que necesita para construir su propio D20. Es posible que desee instalarlo en un caso (véase más adelante) y soldar el circuito en un estado más permanente. Estas son las partes adicionales que se necesitan para hacer eso:

  • 4 x M2 x 10mm pernos (0,4 pulgadas)
  • 4 tuercas M2
  • 4 x 7 mm arandelas (0,28 pulgadas)
  • broche de presión de la batería de 9V (o alternativa adecuada)
  • tubo termorretráctil Surtido

Estas pantallas OLED son muy fresco. Por lo general, se pueden adquirir en blanco, azul, amarillo, o una mezcla de los tres. He comprado uno en azul, para que coincida con mi caso. Asegúrese de obtener una I2C modelo en vez de SPI.

Casi cualquier Arduino será adecuado. He elegido un Nano, ya que son lo suficientemente pequeño como para caber en el caso. Visita nuestra guía de compra para obtener más información sobre los modelos de Arduino.Arduino Guía de compra: ¿Qué Junta debe llegar?Arduino Guía de compra: ¿Qué Junta debe llegar?Hay tantos tipos diferentes de placas Arduino por ahí, que sería perdonado por ser confundidos. ¿Qué debe usted comprar para su proyecto? Vamos a ayudarle, con esta guía de compra Arduino!Lee mas

El circuito

Aquí está el circuito que necesita:

circuito d20 Arduino

Conectar VCC y GND en la pantalla OLED para el Arduino +5V y suelo. Conectar analógica 4 en el Arduino al pasador marcado SDA. Conectar analógico 5 al SCL alfiler. Estos pines contienen la circuitería necesaria para controlar la pantalla mediante el bus I2C. Los pines exactos variarán según el modelo, pero A4 y A5 se utiliza en el Nano y Uno. Compruebe la documentación de la biblioteca de cables para su modelo si no está usando un Uno o Nano.

Conectar la batería a tierra y el VIN alfiler. Esto significa tensión, y acepta una variedad de diferentes voltajes DC - pero comprueba su modelo específico en primer lugar, y que a veces puede variar ligeramente.

Conecte el botón para pin digital 2. Nótese cómo el 10k? resistor está conectado a tierra. ¡Esto es muy importante! Esto se conoce como una resistencia de pull down, y evita que el Arduino detectar datos espurios o interferencia como una prensa de botón. También sirve para proteger la tarjeta. Si no se utiliza esta resistencia, + 5V iría directamente al suelo. Esto se conoce como una cortocircuito y es una manera fácil de matar a un Arduino.

Si está soldando este circuito, proteger sus conexiones con la tubería del encogimiento del calor:

termorretráctil d20 Arduino

Asegúrese de que usted no lo calienta demasiado, y sólo lo hace una vez que esté seguro de las obras del circuito. También puede ponerse torcer los cables en pares. Esto los mantiene limpio y ayuda a protegerlos de la tensión indebida:

Arduino cables trenzados d20

botón de prueba

Ahora que ha construido el circuito, subir este código de prueba (asegúrese de seleccionar el tablero y el puerto correcto de la Herramientas gt; Tablero y Herramientas gt; Puerto menús):

const int buttonPin = 2- // el número del pasador botónvacío preparar() {pinMode(buttonPin, ENTRADA)- // botón de configuración De serie.empezar(9600)- // configuración en serie}vacío lazo(){Si(digitalRead(buttonPin) == ALTO) {De serie.impresión("Funciona")-retrasar(250)-}}

Una vez cargado, mantenga el Arduino conectado a través de USB y abra el monitor de puerto serie (Parte superior derecha gt; serial monitor). Debería ver las palabras Funciona aparecerá siempre que se pulse el botón.

Vídeo: El Cubo Inquieto es para los que no pueden quedarse quietos ni un momento - 15 POST

Si no ocurre nada, vaya y vuelva a comprobar su circuito.

Configuración OLED

prueba de OLED Arduino

Es necesario instalar dos bibliotecas para controlar la pantalla. Descargar las bibliotecas Adafruit_SSD1306 y Adafruit-GFX de Github, y guardarlos en la carpeta de biblioteca. Si no está seguro de dónde carpetas de la biblioteca son, ir a leer mi tutorial de juegos retro, donde puedo configurar esta misma pantalla con más detalle.Arduino juego retro con una pantalla OLEDArduino juego retro con una pantalla OLEDAlguna vez se preguntó hasta qué punto el trabajo que se necesita para escribir sus propios juegos retro? ¿Qué tan fácil es Pong para codificar el Arduino?Lee mas

Reiniciar el IDE Arduino y cargar un boceto de la prueba Archivo gt; Ejemplos menú. Seleccionar adafruit SSD1306 y entonces ssd1306_128x64_i2c. Sube el código (que tomará un tiempo), y usted debería ver una gran cantidad de formas y patrones en la pantalla:

prueba de OLED Arduino

Si no ocurre nada, doble chequeo de las conexiones. Si, después de comprobar, todavía no funciona, tendrá que modificar el código de ejemplo.

Cambie esta línea (al comienzo de la preparar función):

monitor.empezar(SSD1306_SWITCHCAPVCC, 0x3D)-

A esto:

monitor.empezar(SSD1306_SWITCHCAPVCC, 0x3C)-

Esto le dice a los detalles específicos de la biblioteca sobre la pantalla que esté utilizando. Ahora debería estar todo listo para el continuar con la construcción.

El caso

Si usted está construyendo este en un circuito, o si no desea a la caja hacia arriba, entonces puede saltarse este paso.

d20 caso Arduino

Diseñé e impresas en 3D de esta caja. Obtener los archivos en Thingiverse. No se preocupe si usted no tiene una impresora 3D - Ejes de servicios en línea en 3D y Shapeways proporcionar servicios de impresión en línea.

Desde aquí se puede hacer de esta caja de madera, o mediante la compra de una caja de plástico proyecto.

La tapa es un diseño en forma simple empujón, y contiene un par de recortes para el hardware:

d20 caso Arduino

El código

Ahora que todo está listo, es hora de que el código. Así es como funciona en Pseudocódigo:

si el botón de números aleatorios es numberif aleatoria pressedgenerate es graphicelse 20Mostrar si el número aleatorio es el número graphicelseshow 1Mostrar

Para que esto funcione correctamente, un número aleatorio necesita ser generada - este es el rollo de la matriz. Arduino tiene un generador de números aleatorios llamada aleatorio, pero no debe usarlo. A pesar de que es lo suficientemente bueno para tareas básicas al azar, simplemente no es lo suficientemente aleatoria para un dado electrónico. Las razones por las cuales son un tanto complicado, pero se puede leer más si está interesado en boallen.com.

Descargar la biblioteca TrueRandom por sirleech en Github. Agregue esto a su carpeta de la biblioteca y reiniciar el IDE.

Ahora crea un nuevo archivo de configuración y el código inicial (o simplemente tomar el código de acabado desde GitHub):

#incluir lt;SPI.maridogt;#incluir lt;Cable.maridogt;#incluir lt;Adafruit_GFX.maridogt;#incluir lt;Adafruit_SSD1306.maridogt;#incluir lt;TrueRandom.maridogt;Adafruit_SSD1306 monitor(4)-vacío preparar() {monitor.empezar(SSD1306_SWITCHCAPVCC, 0x3C)- // configura el OLEDpinMode(buttonPin, ENTRADA)- // botón de configuración }vacío lazo() {}

Este código configura el OLED, e incluye todas las bibliotecas que necesita para comunicarse con él, junto con su nueva biblioteca de números aleatorios. Ahora agregue esto al bucle principal:

Si(digitalRead(buttonPin) == ALTO) {retrasar(15)-Si(digitalRead(buttonPin) == ALTO) {monitor.fillScreen(NEGRO)- // borrar toda la pantallamonitor.SetTextColor(BLANCO)-monitor.SetTextSize(2)-monitor.setCursor(0, 0)-monitor.println(TrueRandom.aleatorio(1, 21))- // imprimir números aleatoriosmonitor.monitor()- // Escribir indicadorretrasar(100)-}}

Esto es bastante básico en el minuto, pero es un D20 de trabajo. Cada vez que se pulsa el botón, un número aleatorio entre uno y 20 se muestra en la pantalla:

Arduino primer código d20

Esto funciona bien, pero es un poco aburrido. Hagamos que sea mejor. Crear dos nuevos métodos, drawDie y eraseDie:

vacío drawDie() {monitor.drawRect(32, 0, 64, 64, BLANCO)-}

Estos dibujarán un troquel en el centro de la pantalla. Es posible que desee hacer esto más complicado, quizá dibujando una D20, D12 o una y así sucesivamente, pero es más sencillo para dibujar un dado de seis caras básica. Aquí está el uso básico:

drawDie()-

A continuación, modifique su bucle principal para dibujar el número aleatorio, sólo que más grande y en el medio. Cambiar el tamaño del texto y el cursor a la siguiente:

monitor.SetTextColor(BLANCO)-monitor.setCursor(57, 21)-

Se ve mucho mejor ahora:

Arduino solo carácter d20

El único problema es con un mayor número de nueve:

Arduino carácter dual d20

La solución a esto es simple. Cualquier número de menos de 10 tendrán el cursor se establece en una posición diferente de esos números 10 o más grandes. Reemplazar esta línea:

monitor.setCursor(57, 21)-

Con este:

rollo int = TrueRandom.aleatorio(1, 21)- // almacena el número aleatorioSi (rodar lt; 10) {// número de carácter individualmonitor.setCursor(57, 21)-}más {// número de carácter dualmonitor.setCursor(47, 21)-}

Esto es lo que se ve como ahora:

Arduino d20 carácter fijo dual

Todo lo que queda ahora es para las imágenes cuando se despliegue un golpe crítico o se pierda. Hay unos pocos pasos a seguir, pero es un proceso bastante simple.

Encontrar una imagen adecuada que desea utilizar (la más simple, mejor que la pantalla es solamente un solo color). Aquí están las imágenes que utilicé:

d20 obra Arduino
Crédito de la imagen: publicdomainvectors.org

Cualquier imagen que desea utilizar tendrá que ser convertida a una matriz HEX. Esta es una representación de la imagen en forma de código. Hay muchas herramientas disponibles para hacer esto, y algunos están escritos específicamente para pantallas OLED. La forma más sencilla es utilizar la herramienta en línea PicturetoC_Hex. Aquí están los ajustes necesarios:

Arduino imagen a hexadecimal

Sube tu imagen, y establecer el formato de código de HEX: 0x. Conjunto Usado para a Negro / blanco para todas las funciones de imagen Drenaje. Deje todas las otras opciones como los valores por defecto. Puede cambiar el tamaño de la imagen aquí si es necesario. prensa Obtener la secuencia de C y debería ver aparecer los datos de la imagen:

datos de imagen d20 Arduino

Necesitará este genera los datos en un minuto. Cree dos funciones llamadas drawExplosion y drawSkull (O un nombre apropiado para su versión). Aquí está el código:

vacío drawExplosion() {// imagen de la tienda en la EEPROMstatic const unsigned char IM.EXP 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,0xff,0xff
Artículos Relacionados