Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Компоненты и материалы

Инструменты

Библиотеки (Arduino IDE)

Описание проекта

Инопланетная слот-машина на ATmega328P

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Проект вдохновлен Alien Invasion Slot Machine Кори Поттера. Реализовано на двух ATmega328P: основной чип управляет игрой, второй — I2C ведомый для 8-разрядного 7-сегментного дисплея баланса. Сборка на макетках, корпус заказан. Проект занял 2 месяца досуга. Сложнейшая часть — математика выплат для реалистичного Volatility Index (VI).

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Как работает игра

Три барабана с 25 уникальными символами каждый. 5 способов выиграть:

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Функции (меню на LCD 20×4)

Навигация: две кнопки вверх/вниз, выбор — селект. Кнопка спина отдельная. Меню прокручивается (6 пунктов).

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Баланс всегда виден на 7-сегментном дисплее.

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Математика выплат

Вероятности (25 символов на барабане, всего 15625 комбинаций):

Выплаты подобраны в таблице (Excel) для VI < 20. При нулевом Hold сумма выплат ≈ сумме ставок. При Hold 15% — доход казино в ожидаемом диапазоне (90% доверительный интервал). Подробности в таблице (пароль «password»).

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Код

Основной скетч SlotMachine.ino (огромный, сильно прокомментирован). Используются глобальные переменные (80% RAM) — на AVR это допустимо для одиночного проекта. Библиотеки: LedControl (матрицы и 7-сегмент), TimerFreeTone (звук), LiquidCrystal_I2C (LCD). I2C ведомый — slotCreditsDisplaySlave.ino. Символы барабанов заданы в SlotMachine.h в бинарном виде (8 байт на символ). Известные баги: иногда барабан не крутится (выпал тот же символ), барабаны не останавливаются слева направо (упрощение). TODO: brown-out detection, watchdog.

Код на GitHub (ссылка в оригинале).

Сборка

Прошивка через FTDI (нужен конденсатор 100 нФ на линии RTS-Reset). Или через Arduino Uno как ISP. Настройка «Arduino на макетке» по гайду. Загрузчик загружается через AVRISP mkII или Arduino as ISP.

Детали подключения (пины)

Основной чип (Slot Machine)

Ведомый чип (Credit Display Slave)

Код

SlotMachine.ino (фрагмент)

/*SlotMachine.ino Version: 1.0 ...*/
#include 
#include 
#include 
#include "LedControl.h"
#include "SlotMachine.h"
#include 
#include 
#include 
#include 

// Payout Table
#define THREE_SPACESHIP_PAYOUT 600
#define THREE_SYMBOL_PAYOUT 122
#define TWO_SPACESHIP_PAYOUT 50
#define ONE_SPACESHIP_PAYOUT 3
#define TWO_SYMBOL_PAYOUT 2
// VI = 16.43

// ... остальной код (см. полный файл на GitHub) ...

SlotMachine.h (символы и ноты)

const byte reel[] = { // 25 символов по 8 байт каждый
// 0 star
B10011001, B01011010, B00111100, B11111111, B11111111, B00111100, B01011010, B10011001,
// 1 one spot on dice
B00000000, B00000000, B00000000, B00011000, B00011000, B00000000, B00000000, B00000000,
// ... (все 25 символов) ...
// 24 three
B11111111, B00000010, B00000100, B00011100, B00000010, B00000100, B00001000, B11100000 };
// Ноты для пьезо (NOTE_C4 = 262 и т.д.)

slotCreditsDisplaySlave.ino

/*slotCreditsDisplaySlave.ino ...*/
#include 
#include "LedControl.h"
#define BAUD_RATE 38400
#define CREDITS_SLAVE_ADDR 16
// ... инициализация LedControl на пинах 12,11,10 ...
// I2C приём 10 байт: startingBalance (4 байта), increment (2 байта), endingBalance (4 байта)
// Анимация счётчика баланса с бипом на каждом шаге.

Схемы

Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем

Fritzing файл: slotmachine_1nXzMvYVPH.fzz. Таблица выплат (Excel, пароль «password»): slotpayouttablecalc_v1_1_SfcpHOBOvf.xlsx.

Ссылка на Fritzing.org: Close Encounters Slot Machine

Итог

Увлекательный проект, объединяющий электронику, программирование AVR и теорию игр. Самое сложное — математика выплат. Надеюсь, вам понравится. Вопросы и баги — на email dan-murphy@comcast.net. Часть 2 будет про корпус.

Производственный процесс

  1. ЭЭГ-аппараты: дизайн, производство и новые применения
  2. Торговые автоматы: индустрия США на $36,6 млрд
  3. Голосовальные машины: история, технологии и стандарты
  4. Экспертное руководство по современным обменным автоматам: дизайн, компоненты и будущие тренды
  5. Современные ЭКГ-аппараты: технологии, производство и будущие инновации
  6. Эволюция и производство швейных машин: от изобретений XIX века к современной автоматизации
  7. Основные узлы токарного станка: функции и обзор
  8. Понимание токарных станков: история, типы и применение
  9. Ключевые компоненты фрезерного станка: подробное объяснение
  10. Что такое машина: определение, принцип работы и механизмы