Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
Компоненты и материалы
- Arduino UNO — 1 шт.
- LCD-дисплей 16×2 (HD44780, белый на синем) — 1 шт.
- Тактильная кнопка 12 мм (с платой для макетки) — 1 шт.
- Потенциометр 10 кОм — 1 шт. (контраст LCD)
- Макетная плата и перемычки
- USB-кабель A-B
О проекте
Автор устал от обычных игральных кубиков и решил сделать электронные. Arduino опрашивает кнопку: если нажата (LOW) — запускает анимацию «Rolling dice...» на 4 секунды, затем выдает два случайных числа от 1 до 6 на двух строках LCD. Если кнопка не нажата — показывает заставку «Digital dice» с пользовательским символом (кубик).
Схема подключения
- LCD (параллельный интерфейс): RS→D7, EN→D8, D4→D9, D5→D10, D6→D11, D7→D12. VSS→GND, VDD→5V, V0→средний вывод потенциометра (края — 5V и GND), A→5V (подсветка), K→GND.
- Кнопка: один вывод → D2, второй → GND (внутренний pull-up не используется, схема с внешним pull-down или активный LOW от платы кнопки).
- Встроенный светодиод D13 мигает при броске (в коде задан, но не критичен).
Схема в Fritzing (файл .jpg) в разделе «Schematics».
Код (Arduino)
#include
long randNumber;
int Led = 13;
int Shock = 2; // пин кнопки (назван "Shock" в оригинале)
int val;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // RS, EN, D4, D5, D6, D7
// Пользовательский символ: кубик 5x8
byte customChar[] = {
B00000,
B00000,
B11111,
B11001,
B10101,
B10011,
B11111,
B00000
};
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, customChar);
lcd.home();
pinMode(Led, OUTPUT);
randomSeed(analogRead(0)); // шум на A0 как источник энтропии
pinMode(Shock, INPUT);
lcd.write(byte(0));
lcd.print("Digital dice");
lcd.write(byte(0));
delay(1000);
}
void loop() {
val = digitalRead(Shock);
if (val == LOW) { // кнопка нажата
lcd.clear();
lcd.print("Rolling dice...");
delay(4000);
lcd.clear();
lcd.setCursor(0, 0);
randNumber = random(1, 7); // 1..6
lcd.print("Dice 1 = ");
lcd.print(randNumber);
lcd.setCursor(0, 1);
randNumber = random(1, 7);
lcd.print("Dice 2 = ");
lcd.print(randNumber);
}
delay(150); // небольшой дебаунс
}
Пояснения
random(1,7)возвращает 1–6 включительно (верхняя граница исключается).randomSeed(analogRead(0))инициализирует генератор шумом на неиспользуемом аналоговом входе.- Пользовательский символ (customChar) рисует контур кубика с точками.
- Код компактен, идеален для новичка. Можно расширить: звук, анимация «броска», история последних значений, EEPROM-статистика.
Производственный процесс
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- Сборка аудиореактивной настольной лампы на Arduino Nano
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Своё рулевое управление (джойстик) для игр на Arduino
- Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем