Кубико-генератор


Недавно снова ударился в настольные игры, но столкнулся с такой проблемой, что маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола. Поэтому родилась идея сделать электронный вариант, но в классическом «семидырочном» исполнении.

Сделать решено было 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
+
avatar
  • Leon17
  • 08 марта 2020, 20:45
+8
Оригинально))
+
avatar
-3
Но бесполезно. Это как ездить за рулем, лишь держа в руках джойстик сидя на диване.
+
avatar
+1
Смотря для чего :)
Такая штука, например, не дает жульничать.
+
avatar
+2
в конце 90х на лекциях играли в «таракана», но поскольку кубики кидать было палевно, забили в калькулятор какое то хитрое выражение на три строчки, включающее в себя рандомную составляющую, которую калькулятор мог выдавать.
+
avatar
  • ksiman
  • 08 марта 2020, 20:45
+13
маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола.
Как больших дядек убедить что эта игрушка не жулит?
+
avatar
+23
Как обычно, дать один раз выиграть.
+
avatar
+5
а в казино как убеждают больших дядек в честности одноруких бандитов?
+
avatar
  • Suhoff
  • 08 марта 2020, 23:25
-1
Самовнушением
+
avatar
  • sav13
  • 09 марта 2020, 13:19
0
А как самому убедиться, что генератор случайных чисел в копеечном МК дает не псевдослучайные цифры?
+
avatar
+1
кропотливо выписать результаты и отследить закономерности…
+
avatar
  • rx3apf
  • 09 марта 2020, 13:58
0
Автоматизировать обработку и построение распределения можно, но без «человеческого фактора» (случайный момент нажатия) не получится. Но грубую ошибку в алгоритме так поймать можно.
+
avatar
+4
псевдослучайные — это уже будет хорошо или просто отлично, но у автора в коде всё гораздо печальнее.

там просто 2 значения, одно монотонно возрастает в своём диапазоне, другое монотонно уменьшается исходя из того предыдущего значения. но второе значение при этом, уменьшается на величину разности константы и первого значения.

т.е. некоторые комбинации будут невозможны впринципе.
например если первая чиселка будет 4, то и вторая будет тоже 4. всегда.

такой вот у него генератор «случайности»
от копеечности МК никак не зависит.
+
avatar
0
да, недоработка. Есть предложение как улучшить генерацию 2-го числа?
+
avatar
0
Две кнопки…
+
avatar
0
В рандоме задействовать время работы контроллера. Причем для обоих чисел.
+
avatar
  • rx3apf
  • 09 марта 2020, 20:49
+2
Зачем вообще два числа? Считаем 0...35. Частное от деления результата на 6 — дает код первой кости (прибавить единицу, естественно). Остаток (опять же +1) — код второй.
+
avatar
0
Так от псевдослучайности без реальной случайности все равно не уйдешь, хоть рандом два раза до 6, хоть 1 раз до 36.
+
avatar
  • rx3apf
  • 09 марта 2020, 21:40
0
А это (случайность/псевдослучайность) уже другой аспект. Чтобы иметь элемент случайности, вполне достаточно «человеческого фактора» — асинхронное (по отношению к внутренней тактировке) нажатие клавиши. Т.е. от нажатия к нажатию надо брать не последовательные состояния ПСП, а действительно случайное число. Оно таким и будет. Но коэффициент пересчета нужно брать кратным 36, чтобы не нарушать распределение.
+
avatar
  • ksiman
  • 09 марта 2020, 18:33
+1
т.е. некоторые комбинации будут невозможны в принципе.
Так и знал, что кубики всё-таки жулят :)
+
avatar
  • ksiman
  • 08 марта 2020, 20:47
+2
Печатка есть, код есть, схемы нет…
+
avatar
0
зачем? Она простая как мычание, была накидана на листочке.
+
avatar
  • Serg32
  • 08 марта 2020, 21:59
+3
фото?
+
avatar
  • 2gusia
  • 08 марта 2020, 20:47
+16
Такая же была задача. Правда, с дочкой. Скачал для телефона бесплатное приложение.
+
avatar
+4
была задача максимально избавиться от гаджетов за столом, иначе все неизбежно залипнут
+
avatar
  • Alax
  • 09 марта 2020, 23:38
0
Старый смарт с 512Мбайт памяти на 4-м андроиде без сим-карты и с выключенным вайфаем — залипать будет не в чем.
+
avatar
+3
Подходящий конфиг для кубика :))) А два потянет?
+
avatar
  • Serg32
  • 08 марта 2020, 21:59
+3
Это не спортивно, нужно было написать свое приложение. А код сюда выложить :)
+
avatar
+1
Хм… облачное причем.
Дарю идею бесплатно. Собираем на ардуине роботизированную руку, которая будет 1...N кубиков собирать с поля и бросать обратно по команде. Поставить камеру 4к чтоб транслировала происходящее в приложение по подписке. Вуаля. И тру-рандом и современно и не дорого :)
+
avatar
  • Aloha_
  • 08 марта 2020, 20:52
+8
На видео вместо громкой музыки лучше бы качество прибавить.
+
avatar
+13
прикольно. в китае есть наборы для тех кто не умеет прогать но любит паять
+
avatar
+4
в связи с вирусом неизвестно сколько пришлось бы ждать, а хотелось «прямо щаз», тем более что всё нужное было под рукой.
+
avatar
  • alex323
  • 08 марта 2020, 21:08
+7
Вирус ни при чем, высылают как обычно.
+
avatar
+10
у меня заказано 3 посылки в январе, до сих пор ни слуху ни духу. Правда продаваны ранее неизвестные, могли и не отправить.
+
avatar
  • Brs
  • 08 марта 2020, 22:14
+9
И у известных такая же фигня, три посылки висят с 20го января. Неясно за что вас минусуют
+
avatar
0
Ввиду закрытия (насколько мне известно, до 1 марта) границ с Китаем многие посылки, отправляемые наземными путями, до сих пор на границах и застряли. С бэнгуда несколько посылок сдэком отправили — с 20 января жду, а тут ленту светодиодную ленту заказал с Али, ее отправили на самолете — 3 недели и уже прилетело в Магадан.
+
avatar
-1
Касперский от вирус поможет?
+
avatar
  • Suhoff
  • 08 марта 2020, 23:26
-2
Поездка в крым на курорты поможет.
+
avatar
  • knst
  • 08 марта 2020, 23:31
+1
нужно поставить на рабочий стол иконку " преподобный каспер прогонитель бесов".
+
avatar
  • tuz_83
  • 09 марта 2020, 05:42
0
Касперский от вируса поможет?
Софт — не поможет. Поможет только железо, только хардкор:-)

+
avatar
  • triller
  • 09 марта 2020, 11:19
+1
из-за вируса на работу не все китайцы выходят. мне уже два письма прилетело с извинениями на эту тему.
Полный возврат оплаты в течении часа после прибытия почты.
+
avatar
+1
Нашел их на Али, действительно штука интересная (и дешевая) на базе STC 15F104W. Надо будет заказать пачку на брелки, спасибо за наводку!
+
avatar
0
можно ссыль попросить?
+
avatar
0
+
avatar
  • irub
  • 09 марта 2020, 05:20
0
А меня такой не заработал ;( таки пришлось собирать самому
+
avatar
  • emdskar
  • 08 марта 2020, 21:07
+4
МРБ №1189 стр. 101
+
avatar
  • Brs
  • 08 марта 2020, 22:15
+2
Для этого как минимум ещё Спектрум иметь надо )
+
avatar
  • rmike
  • 09 марта 2020, 08:32
+1
Эмуляторов Спектрума полно, в том числе и на андроид,
+
avatar
+3
в контексте данного топика Спектрум следует спаять )))
+
avatar
+3
А просто ардуины не хватило бы? 8 ног на выход (7 — для индикации числа, 1 — для выбора кубика) с динамической индикацией, псевдо-рандом.
Достаточно было бы платы, 14 светодиодов и 7 резисторов, да одной кнопки управления.
На таких крохах интереснее писать на ассемблере. Добью код — опубликую свой проект.
+
avatar
+1
А просто ардуины
Просто ардуина — это что?
Если это nano — там ATMEGA328 стоит — у нее 23 линии :)
+
avatar
0
Да, её имел в виду. Но я бы предпочёл усложнить код и упростить схему, чем задействовать все выводы микроконтроллера.
+
avatar
0
а зачем? Ардуина больше и дороже, 74HC595-х у меня навалом
+
avatar
+1
Я ардуино про мини за 100 рублей покупал, а это 18х33 мм. Можно сделать двухстороннюю плату, на одну сторону припаять ардуино, на другую — smd светодиоды и резисторы.

Но в целом согласен — если есть навалом определённая элементная база — грех ей не воспользоваться.
+
avatar
  • rx3apf
  • 09 марта 2020, 00:51
0
Если стремиться к минимизации — 595 там тоже лишние. Шести портовых ног достаточно для управления 18-ю светодиодами.

upd: наврал — тридцатью. Пяти ног достаточно на 20 диодов.
+
avatar
  • Corvair
  • 09 марта 2020, 03:08
+3
Это по моему забивание гвоздей микроскопом.
+
avatar
+2
Можно задам странный вопрос? :D

А зачем все это надо было городить с дешифраторами, а просто не взять проц с бОльшим числом IO?

Про PIC не скажу — но наверняка в линейке есть что-то типа ATMEGA328, у которой 23 линии IO.
При этом по цене будет точно сравнимо.

Я уж молчу про чарлиплексинг, там и в 8 линий можно будет уложить.
+
avatar
0
Конечно можно! К примеру arduino mega 2560
+
avatar
+6
От не надо передергивать. И речь была про проц, а не про ардуино. Ардуино здесь вообще не нужно.

Всяко лучше, чем обвешаться дешифраторами, так можно и до логики дойти и все на ней скидать.

А если сделать чарлиплексинг и динамическую индикацию — можно очень все компактно сделать и с минимальными размерами / пайкой.
+
avatar
+19
Регистры не нужны


А вместо кучи резисторов использовать 9-пиновую DIP-«гребенку».
Программный ШИМ или массив 1206
+
avatar
0
Тоже отличный вариант.
+
avatar
0
Кстати, да, на той же тиньке можно всё сделать.
+
avatar
  • p0gank
  • 08 марта 2020, 22:20
0
Если только от резета избавиться, у тиньки всего 8 ног.
+
avatar
+1
Не надо избавляться от ресета — реролл делать по прерыванию питания или подачей того-же ресета.
+
avatar
0
В таких проектах он и не нужен, либо делать программный сброс или по питанию.
+
avatar
  • ewavr
  • 08 марта 2020, 22:38
0
8-питание-земля-резет=5, как и требуется.
+
avatar
  • rx3apf
  • 09 марта 2020, 00:55
0
Точно так (опередил !). Кстати, токоограничительные резисторы тоже можно убрать — поставить один в цепь питания. Пока напряжение на открытом переходе больше минимума для работы контроллера, проблем быть не должно. Даже с красными (если контроллер работает от 1.8).
+
avatar
  • oleg333
  • 09 марта 2020, 01:41
+1
Ну так давайте совместными усилиями накодим, нарисуем, вытравим и спаяем брелки прикольные!
Пусть китайцы завидуют.
Если шо — я тока печатку осилю.
+
avatar
0
А китайцы покрутят у виска из-за использования тиньки и накодили бы такой на своих контроллерах, которые меньше доллара за корпус стоят…
+
avatar
0
О!
а справа обрезано, наверно клавиатура?
а можно полную версию и вообще сцылочку на проект?
+
avatar
0
Да просто гуглонул чарлиплексинг и выдрал первую картинку…
+
avatar
+6


у нас в детстве вот такая была игра. «кубикогенератор» просто бегущий огонь на ТТЛ и зачем-то с регулируемой скоростью. 1987 год, Ленинград — а там всё ещё лампы накаливания. Буквально вчера внедрил 2x18650+TP4056, т.к. племянница маленькая добралась до этой коробки
+
avatar
+1
да, сделать подобное на NE555 + CD4017 было бы самым простым вариантом.
+
avatar
0
CD4026+семисегментник?
+
avatar
  • AndrVU
  • 08 марта 2020, 23:15
+4
Помню, дети все кубики растеряли, так я им по быстрому в Экселе СЛУЧМЕЖДУ написал, такк и играли в какую-то настольную игру, нажимая на кнопку компа)))
+
avatar
  • oleg235
  • 08 марта 2020, 23:42
+4
Недавно снова ударился в настольные игры, но столкнулся с такой проблемой, что маленькие кубики из лап больших дядек норовят улететь куда угодно помимо стола.
Какие-то слишком простые игры у вас там. Вот такие попробуйте.
+
avatar
+7
не, ну на спичках — это уже реальный изврат!
+
avatar
+4
Как интернет стал тесен… Куда ни пойдёшь — всё одно и то же. На муське — кубико-генератор, на пикабу — он же… На анекдот.ру автор свой кубико-генератор ещё не залил?
+
avatar
+2
Продаются эти кубики в виде наборов для самостоятельной пайки

Но я купил рулетку.
+
avatar
  • Demz
  • 09 марта 2020, 11:31
0
ага, тема, я в такую разноцветных диодов напихал (прозрачных), мелкий теперь доволен, правда рядом еще кнопка от какого-то турецкого верблюда, так что по итогу у меня получился цирк с медведямитурками.
+
avatar
+1
Как самоделка — миленько. Но практической пользы я в этом не вижу. Проще установить на смартфон генератор случайных чисел. Есть даже стилизованные под дайсы от D4 до D20, где для получения результата смартфон нужно потрясти.
+
avatar
  • sbt2
  • 09 марта 2020, 11:04
0
В гугл плее пачка приложений для бросания N кубиков d6-d20
+
avatar
+1
наверно как раз тот случай, когда библиотечные штуки (из ардуины или libc или ещё откуда-то) работают лучше и надежнее.

тем, кто раздумывает чем и как проинициализировать псевдослучайную последовательность, то сходу 2 железобетонных варианта.
1) измерять время между дребезгами кнопки через прерывания
2) SRAM при первоначальном включении содержит случайные значения. но тут нужно хорошо знать яп и что происходит с памятью во время работы (т.е. архитектуру и все побочные эффекты до точки входа в программу).

вариант с adc тут неподходит, т.к. все пины заняты.
+
avatar
0
судя по всему ошибся, насчет своих предсказаний по коду.

накидал на скорую руку аналог 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.
измерять распреденение и прочие статистические параметры не стал, тут итак всё ясно.
т.е. одному значению первой чиселки сответствует лишь две вариации значений второй.

период последовательности должен быть существенного много больше вариаций значений.
+
avatar
0
вторая чиселка принципиально не имеет значений 1 и 4
как я понимаю, речь про выводимые значения 2 и 5 (dice[1]=2, dice[4]=5), так они есть даже на видео
+
avatar
  • ksiman
  • 09 марта 2020, 18:37
0
возможных уникальных пар значений должно быть 36 (как известно из комбинаторики)
Либо 21 если последовательность чисел не имеет значения
+
avatar
  • rx3apf
  • 09 марта 2020, 16:55
+2
Ни дребезг, ни начальное значение памяти, ни код ADC не могут гарантировать идеальную случайность. Но вот если просто крутить таймер (программный или аппаратный, не столь важно) с максимальной частотой от момента включения, а реагировать на момент нажатия кнопки (человеком) — будет вполне себе случайное число (если брать младшие биты, значение которых изменяется на порядки быстрее возможной реакции человека). Можно как непосредственное значение взять, можно использовать как «затравку».
+
avatar
0
именно так и реализовано
+
avatar
0
благодаря замечаниям доработал код (обновил в топике), значения для randomSeed беру из аналогого пина. Погонял минут 10, теперь выглядит действительно случайным.
+
avatar
  • SEM
  • 09 марта 2020, 19:19
0
1. Можно поискать справочник Дьяконова для программируемых микрокалькуляторов, там было несколько алгоритмов генерации псевдослучайных чисел, от 9000 до 108 неповторяющихся чисел. И формулы, и код. Язык — очень близок к Ассемблеру, т.е. можно «перевести» на «микроконтроллерный» и он будет очень компактным.
2. Я бы «второй кубик» сделал на светодиодах другого цвета, для наглядности.
+
avatar
0
> теперь выглядит действительно случайным.

Распределение случайной величины какое? «Действительно случайное»?
+
avatar
0
Основываться на биологическом источнике псевдослучайных чисел — времени нажатия кнопки, например.
+
avatar
+3
Как любитель настолок, могу сказать, что никакие электронные штуковины (ни такая, ни кубикометалки на телефон) не заменят бросок кубиков руками. Даже dice-tower'ы не то. Просто бросая кубик руками есть ощущение, что «твоя судьба в твоих руках». А чтобы кубики у взрослых дядек летели не по всему столу, придумали дайс треи разнообразных форм, конструкций и цветов.
+
avatar
0
хм. Прикольно, но как по мне не очень удобное и не очень красивое решение.

Но, натолкнуло на мысль, что можно сделать электронный кубик, на котором все 6 сторон будут задействованы по 7 светодиодов с каждой (Итого 42 светодиода, максимальное кол-во одновременно включенных 36 или 30 если добавить какой нибудь датчик положения), и чтоб сильно его не кидать (как бывает что улетает куда-то далеко) достаточно легонько подрбросить даже без кручения (внутри пружинка замыкающая контакт как в китайских шариках-игрушках-попрыгушках).

Тем самым получим и кубик и кидать сильно не нужно и со всех сторон видно выпавшее число.