Недавно снова ударился в настольные игры, но столкнулся с такой проблемой, что маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола. Поэтому родилась идея сделать электронный вариант, но в классическом «семидырочном» исполнении.
Сделать решено было 2 кубика параллельно (чего уж размениваться?). Чтобы «дрыгать» 14-ю светодиодами, использовал 74HC595. За мозги взял ATtiny13A, его возможностей хватит за глаза. Светодиоды использовал недавно полученные прозрачные красные, они имеют яркое направленное свечение.
Схему накидал на листочке, потом перенес в старый добрый Sprint-Layout
Дополнительная информация
Далее классика: ФЛУТ, лужение «жидким оловом» от Rexant (очень уж удобно), пайка, цапон-лак в 3 слоя.
Для прошивки Тиньки были выведены пины вокруг неё. Далее подключил UNO как программатор, запустил Arduino IDE и стал осваивать программную часть.
Прошивка получилась коротенькая, без использования индусского shiftOut занимает всего 50% от 1К памяти. Разумеется используется псевдо-рандом, берущий значения от тактов МК, но для генерации случайного числа этого вполне достаточно. При прошивке, сразу после компиляции, надо на UNO нажимать reset, иначе выдается ошибка.
Переключатель оказался пока никак не задействован (планировал сделать 1d6/2d6), возможно в будущем придумаю какую-нибудь функцию и для него, как и еще для одной свободной ноги.
Собрал всё в любимой мной распаячной коробке, размер подошел отлично, даже не пришлось плату крепить на стойки (зажимается и держится коробочным саморезом). В корпусе тоже не стал делать отверстий, через него диоды смотрятся гораздо лучше и кнопка срабатывает нажатием на корпус. С автономным питанием не стал заморачиваться, вывел mini-USB, а дальше хош — от розетки, хош — от банки силы.
Кнопку в будущем можно повесить сенсорную, однако тут переделывать уже смысла не было.
Вот как это выглядит (получилось размыто, но суть понятна):
В планах перевести проект на SMD, тиньку в SOP8-корпусе. Не знаю как всё это буду паять, но всё уже заказано :) А вместо кучи резисторов использовать 9-пиновую DIP-«гребенку».
Планирую купить+11Добавить в избранноеОбзор понравился+71
+94
в конце 90х на лекциях играли в «таракана», но поскольку кубики кидать было палевно, забили в калькулятор какое то хитрое выражение на три строчки, включающее в себя рандомную составляющую, которую калькулятор мог выдавать.
Автоматизировать обработку и построение распределения можно, но без «человеческого фактора» (случайный момент нажатия) не получится. Но грубую ошибку в алгоритме так поймать можно.
псевдослучайные — это уже будет хорошо или просто отлично, но у автора в коде всё гораздо печальнее.
там просто 2 значения, одно монотонно возрастает в своём диапазоне, другое монотонно уменьшается исходя из того предыдущего значения. но второе значение при этом, уменьшается на величину разности константы и первого значения.
т.е. некоторые комбинации будут невозможны впринципе.
например если первая чиселка будет 4, то и вторая будет тоже 4. всегда.
такой вот у него генератор «случайности»
от копеечности МК никак не зависит.
Зачем вообще два числа? Считаем 0...35. Частное от деления результата на 6 — дает код первой кости (прибавить единицу, естественно). Остаток (опять же +1) — код второй.
А это (случайность/псевдослучайность) уже другой аспект. Чтобы иметь элемент случайности, вполне достаточно «человеческого фактора» — асинхронное (по отношению к внутренней тактировке) нажатие клавиши. Т.е. от нажатия к нажатию надо брать не последовательные состояния ПСП, а действительно случайное число. Оно таким и будет. Но коэффициент пересчета нужно брать кратным 36, чтобы не нарушать распределение.
Хм… облачное причем.
Дарю идею бесплатно. Собираем на ардуине роботизированную руку, которая будет 1...N кубиков собирать с поля и бросать обратно по команде. Поставить камеру 4к чтоб транслировала происходящее в приложение по подписке. Вуаля. И тру-рандом и современно и не дорого :)
Ввиду закрытия (насколько мне известно, до 1 марта) границ с Китаем многие посылки, отправляемые наземными путями, до сих пор на границах и застряли. С бэнгуда несколько посылок сдэком отправили — с 20 января жду, а тут ленту светодиодную ленту заказал с Али, ее отправили на самолете — 3 недели и уже прилетело в Магадан.
из-за вируса на работу не все китайцы выходят. мне уже два письма прилетело с извинениями на эту тему.
Полный возврат оплаты в течении часа после прибытия почты.
А просто ардуины не хватило бы? 8 ног на выход (7 — для индикации числа, 1 — для выбора кубика) с динамической индикацией, псевдо-рандом.
Достаточно было бы платы, 14 светодиодов и 7 резисторов, да одной кнопки управления.
На таких крохах интереснее писать на ассемблере. Добью код — опубликую свой проект.
Я ардуино про мини за 100 рублей покупал, а это 18х33 мм. Можно сделать двухстороннюю плату, на одну сторону припаять ардуино, на другую — smd светодиоды и резисторы.
Но в целом согласен — если есть навалом определённая элементная база — грех ей не воспользоваться.
Точно так (опередил !). Кстати, токоограничительные резисторы тоже можно убрать — поставить один в цепь питания. Пока напряжение на открытом переходе больше минимума для работы контроллера, проблем быть не должно. Даже с красными (если контроллер работает от 1.8).
у нас в детстве вот такая была игра. «кубикогенератор» просто бегущий огонь на ТТЛ и зачем-то с регулируемой скоростью. 1987 год, Ленинград — а там всё ещё лампы накаливания. Буквально вчера внедрил 2x18650+TP4056, т.к. племянница маленькая добралась до этой коробки
Помню, дети все кубики растеряли, так я им по быстрому в Экселе СЛУЧМЕЖДУ написал, такк и играли в какую-то настольную игру, нажимая на кнопку компа)))
Недавно снова ударился в настольные игры, но столкнулся с такой проблемой, что маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола.
Какие-то слишком простые игры у вас там. Вот такие попробуйте.
Как интернет стал тесен… Куда ни пойдёшь — всё одно и то же. На муське — кубико-генератор, на пикабу — он же… На анекдот.ру автор свой кубико-генератор ещё не залил?
ага, тема, я в такую разноцветных диодов напихал (прозрачных), мелкий теперь доволен, правда рядом еще кнопка от какого-то турецкого верблюда, так что по итогу у меня получился цирк с медведямитурками.
Как самоделка — миленько. Но практической пользы я в этом не вижу. Проще установить на смартфон генератор случайных чисел. Есть даже стилизованные под дайсы от D4 до D20, где для получения результата смартфон нужно потрясти.
наверно как раз тот случай, когда библиотечные штуки (из ардуины или libc или ещё откуда-то) работают лучше и надежнее.
тем, кто раздумывает чем и как проинициализировать псевдослучайную последовательность, то сходу 2 железобетонных варианта.
1) измерять время между дребезгами кнопки через прерывания
2) SRAM при первоначальном включении содержит случайные значения. но тут нужно хорошо знать яп и что происходит с памятью во время работы (т.е. архитектуру и все побочные эффекты до точки входа в программу).
вариант с adc тут неподходит, т.к. все пины заняты.
судя по всему ошибся, насчет своих предсказаний по коду.
накидал на скорую руку аналог python, глянул что там выдается.
Дополнительная информация test.py
$ cat test.py
RAND_MAX = 5
def gen_seq(RAND_MAX=RAND_MAX):
tik = 0
tak = 3
while True:
tik += 1
if tik > RAND_MAX:
tik = 0
for _ in range(RAND_MAX - tik):
tak -= 1
if tak < 0:
tak = RAND_MAX
yield tik
yield tak
t = gen_seq()
for _ in range(1000):
print(next(t), next(t))
оказалось, что итоговая последовательность имеет период всего 12 пар, т.е. всего 12 пар существует, дальше они повторяются.
1 5
2 2
3 0
4 5
5 5
0 0
1 2
2 5
3 3
4 2
5 2
0 3
и что самое интересное, во вторая чиселка принципиально не имеет значений 1 и 4. (т.е. там даже значений меньше, чем должно быть)
возможных уникальных пар значений должно быть 36 (как известно из комбинаторики), а тут всего 12.
измерять распреденение и прочие статистические параметры не стал, тут итак всё ясно.
т.е. одному значению первой чиселки сответствует лишь две вариации значений второй.
период последовательности должен быть существенного много больше вариаций значений.
Ни дребезг, ни начальное значение памяти, ни код ADC не могут гарантировать идеальную случайность. Но вот если просто крутить таймер (программный или аппаратный, не столь важно) с максимальной частотой от момента включения, а реагировать на момент нажатия кнопки (человеком) — будет вполне себе случайное число (если брать младшие биты, значение которых изменяется на порядки быстрее возможной реакции человека). Можно как непосредственное значение взять, можно использовать как «затравку».
благодаря замечаниям доработал код (обновил в топике), значения для randomSeed беру из аналогого пина. Погонял минут 10, теперь выглядит действительно случайным.
1. Можно поискать справочник Дьяконова для программируемых микрокалькуляторов, там было несколько алгоритмов генерации псевдослучайных чисел, от 9000 до 108 неповторяющихся чисел. И формулы, и код. Язык — очень близок к Ассемблеру, т.е. можно «перевести» на «микроконтроллерный» и он будет очень компактным.
2. Я бы «второй кубик» сделал на светодиодах другого цвета, для наглядности.
Как любитель настолок, могу сказать, что никакие электронные штуковины (ни такая, ни кубикометалки на телефон) не заменят бросок кубиков руками. Даже dice-tower'ы не то. Просто бросая кубик руками есть ощущение, что «твоя судьба в твоих руках». А чтобы кубики у взрослых дядек летели не по всему столу, придумали дайс треи разнообразных форм, конструкций и цветов.
хм. Прикольно, но как по мне не очень удобное и не очень красивое решение.
Но, натолкнуло на мысль, что можно сделать электронный кубик, на котором все 6 сторон будут задействованы по 7 светодиодов с каждой (Итого 42 светодиода, максимальное кол-во одновременно включенных 36 или 30 если добавить какой нибудь датчик положения), и чтоб сильно его не кидать (как бывает что улетает куда-то далеко) достаточно легонько подрбросить даже без кручения (внутри пружинка замыкающая контакт как в китайских шариках-игрушках-попрыгушках).
Тем самым получим и кубик и кидать сильно не нужно и со всех сторон видно выпавшее число.
Такая штука, например, не дает жульничать.
там просто 2 значения, одно монотонно возрастает в своём диапазоне, другое монотонно уменьшается исходя из того предыдущего значения. но второе значение при этом, уменьшается на величину разности константы и первого значения.
т.е. некоторые комбинации будут невозможны впринципе.
например если первая чиселка будет 4, то и вторая будет тоже 4. всегда.
такой вот у него генератор «случайности»
от копеечности МК никак не зависит.
Дарю идею бесплатно. Собираем на ардуине роботизированную руку, которая будет 1...N кубиков собирать с поля и бросать обратно по команде. Поставить камеру 4к чтоб транслировала происходящее в приложение по подписке. Вуаля. И тру-рандом и современно и не дорого :)
Полный возврат оплаты в течении часа после прибытия почты.
jsspeccy.zxdemo.org/
viva-games.ru/
Достаточно было бы платы, 14 светодиодов и 7 резисторов, да одной кнопки управления.
На таких крохах интереснее писать на ассемблере. Добью код — опубликую свой проект.
Если это nano — там ATMEGA328 стоит — у нее 23 линии :)
Но в целом согласен — если есть навалом определённая элементная база — грех ей не воспользоваться.
upd: наврал — тридцатью. Пяти ног достаточно на 20 диодов.
А зачем все это надо было городить с дешифраторами, а просто не взять проц с бОльшим числом IO?
Про PIC не скажу — но наверняка в линейке есть что-то типа ATMEGA328, у которой 23 линии IO.
При этом по цене будет точно сравнимо.
Я уж молчу про чарлиплексинг, там и в 8 линий можно будет уложить.
Всяко лучше, чем обвешаться дешифраторами, так можно и до логики дойти и все на ней скидать.
А если сделать чарлиплексинг и динамическую индикацию — можно очень все компактно сделать и с минимальными размерами / пайкой.
Программный ШИМ или массив 1206
Пусть китайцы завидуют.
Если шо — я тока печатку осилю.
а справа обрезано, наверно клавиатура?
а можно полную версию и вообще сцылочку на проект?
у нас в детстве вот такая была игра. «кубикогенератор» просто бегущий огонь на ТТЛ и зачем-то с регулируемой скоростью. 1987 год, Ленинград — а там всё ещё лампы накаливания. Буквально вчера внедрил 2x18650+TP4056, т.к. племянница маленькая добралась до этой коробки
Но я купил рулетку.
медведямитурками.тем, кто раздумывает чем и как проинициализировать псевдослучайную последовательность, то сходу 2 железобетонных варианта.
1) измерять время между дребезгами кнопки через прерывания
2) SRAM при первоначальном включении содержит случайные значения. но тут нужно хорошо знать яп и что происходит с памятью во время работы (т.е. архитектуру и все побочные эффекты до точки входа в программу).
вариант с adc тут неподходит, т.к. все пины заняты.
накидал на скорую руку аналог python, глянул что там выдается.
оказалось, что итоговая последовательность имеет период всего 12 пар, т.е. всего 12 пар существует, дальше они повторяются.
и что самое интересное, во вторая чиселка принципиально не имеет значений 1 и 4. (т.е. там даже значений меньше, чем должно быть)
возможных уникальных пар значений должно быть 36 (как известно из комбинаторики), а тут всего 12.
измерять распреденение и прочие статистические параметры не стал, тут итак всё ясно.
т.е. одному значению первой чиселки сответствует лишь две вариации значений второй.
период последовательности должен быть существенного много больше вариаций значений.
2. Я бы «второй кубик» сделал на светодиодах другого цвета, для наглядности.
Распределение случайной величины какое? «Действительно случайное»?
Но, натолкнуло на мысль, что можно сделать электронный кубик, на котором все 6 сторон будут задействованы по 7 светодиодов с каждой (Итого 42 светодиода, максимальное кол-во одновременно включенных 36 или 30 если добавить какой нибудь датчик положения), и чтоб сильно его не кидать (как бывает что улетает куда-то далеко) достаточно легонько подрбросить даже без кручения (внутри пружинка замыкающая контакт как в китайских шариках-игрушках-попрыгушках).
Тем самым получим и кубик и кидать сильно не нужно и со всех сторон видно выпавшее число.
aliexpress.ru/item/33027926700.html?spm=a2g0o.detail.0.0.a2a36ab8E9LanL&gps-id=pcDetailFavMayLike&scm=1007.12873.140318.0&scm_id=1007.12873.140318.0&scm-url=1007.12873.140318.0&pvid=22c9436d-165c-47f6-95b5-25ff2bf5c4a6