Дорабатываем настольную игру с помощью Arduino


Решил написать небольшой обзорчик на тему:
«Как еще можно применить Arduino»…

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


Справка: Random (рандом) — Случайный, произвольный, выбранный наугад.

Начнем повесть с того, что сыну на день рождения подарили настольную игру «Зомби в доме».
Ну как подарили !?
Увидел рекламу, сказал «Хочу» и вуаля, список подарков пополнился еще одной настолкой )))



Сама по себе настольная игра довольно прикольная и не смотря на рейтинг 12+, подходит для детей более юного возраста (сыну исполнилось 6).
Правила можно посмотреть тут
Ссылка на сайт «Мосигра», там правила в текстовом виде.

Небольшое видео с правилами


Фотографий игры в интернете много, поэтому уберу свои под спойлер:
Пару фотографий настолки


Коробку я уже немного порезал )))



Виновником обзора является вот это картонный диск:


Если Ваш доходяга должен сходить или он наткнулся на зомби, то берем в руки эту штуку, крутим стрелку и в зависимости от выпавшей картинки или цифры выполняем действие.

После первой же партии обнаружились некоторые минусы:
1) Стрелка крутиться не свободно и иногда заедает;
2) Крутить стрелку пальцем/рукой не очень удобно;
3) Большое поле для мухлежа, а так хочется честной игры.

Видя такую несправедливость, я не мог остаться в стороне и с наступлением ночи, одев супергеройские колготки и дырявые носки, я отправился в кладовку для поиска идей и вдохновения.

Идея, как и компоненты для ее реализации, пришла довольно быстро.

Мысля:
Прокручивать стрелку случайное время, чтобы результат нельзя было предсказать.
Конечно сюда можно прикрутить Arduino…
Arduino, как bluetooth — с ним все становиться только лучше!

Итак в кладовке я нашел:
— Пластиковый бокс, приобретенный для другого проекта (он чуть больше диска, ну да ладно);
— Arduino Nano V3 (я их покупал давно и сразу много);
— Моторчик, выдранный из какой-то старой игрушки;
— Кнопка (без фиксации);
— Переключатель (вкл/выкл);
— Power Bank (их как-то давали на работе просто так, с тех пор пылиться на полке);
— Кусок старого USB кабеля (помимо пакета с пакетами, у меня еще есть пакет в проводами);
— NPN транзистор KSP44 (выдрал его из базы старого радиотелефона).

Иногда мне кажется, что моя кладовка это Нарния, сколько всего интересного там можно найти!
Балкон — Нарния 2 )))

Групповое фото, найденного барахла


Для разбора вязанки проводов, накидал небольшую схему:


В собранном виде это выглядит, как фильм из категории XXX:


Моторчик приклеил на суперклей + сода, остальное на термоклей.
Повербанк посадил на двухсторонний скотч, чтобы не болтался по корпусу.
Еще пару фотографий с разных ракурсов




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


Вот собственно и собранная конструкция.

Код для Adruino - постарался по максимуму пояснить, что и как работает
// Задаём номера выводов:
const int buttonPin = 5; // Вход с кнопки
const int motorPin = 6; // Выход на мотор
const int timeMin = 0; // Минимальное время (в миллисекундах)
const int timeMax = 100; // Максимальное время (в миллисекундах)
const int count = 5; // Количество проходов цикла

void setup() {
pinMode(motorPin, OUTPUT);
pinMode(buttonPin, INPUT);

pinMode(13, OUTPUT);
randomSeed(analogRead(0));
}

void loop() {
int timer = 0;
int sol = 0;

// Считываем состояние кнопки
if (digitalRead(buttonPin) == HIGH)
{
for (int i=0; i <= count; i++){
sol = random(timeMin, timeMax); // Генерируем случайное число
if (sol % 2 == 0) // Если число четное
{
timer = timer + random(timeMin, timeMax); // Добавляем случайное время
}
}

sol = random(timeMin, timeMax); // Генерируем случайное число
if (sol % 2 == 0) // Если число четное
{
timer = timer / 2; // Уменьшаем время в 2 раза
}
else
{
sol = random(timeMin, timeMax); // Генерируем случайное число
if (sol % 2 == 0) // Если число четное
{
timer = timer * 2; // Увеличиваем время в 2 раза
}
}

digitalWrite(13, HIGH); // Включаем светодиод на 13 пине
digitalWrite(motorPin, HIGH); // Включаем мотор

delay(timer);
}
else
{
digitalWrite(13, LOW); // Выключаем светодиод на 13 пине
digitalWrite(motorPin, LOW); // Выключаем мотор
}
}

Упрощенный вариант кода
// Задаём номера выводов:
const int buttonPin = 5; // Вход с кнопки
const int motorPin = 6; // Выход на мотор
const int count = 15; // Количество проходов цикла

void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(buttonPin, INPUT);

pinMode(13, OUTPUT);
randomSeed(analogRead(0));
}

void loop()
{
int timer = 0;
// Считываем состояние кнопки
if (digitalRead(buttonPin) == HIGH)
{
for (int i = 0; i <= random(1, count); i++)
{
timer = timer + 100; // Добавляем случайное время
}
digitalWrite(13, HIGH); // Включаем светодиод на 13 пине
digitalWrite(motorPin, HIGH); // Включаем мотор

delay(timer);
}
else
{
digitalWrite(13, LOW); // Выключаем светодиод на 13 пине
digitalWrite(motorPin, LOW); // Выключаем мотор
}
}

Работает эта «Штука», так: включаем, нажимаем на кнопку, Arduino «случайным» образом генерирует время от 0 до 1000 мс, крутит мотор и по прошествии времени останавливает его.
К этому добавляем неизвестное начальное положение стрелки + инерцию при остановке.

Вуаля — теперь этот девайс выдает случайное количество шагов или действие.



Т.к. абсолютно чистый рандом реализовать в принципе невозможно, есть возможность отказаться от помощи Arduino и крутить стрелку самостоятельно.

Итог
Т.к. я нашел все в кладовке, то денег я потратил 0, но поскольку это все мной же и покупалось, то стоимость компонент составила около 350р (по текущему курсу $$$).
Стоимость Power Bank я сюда не включал, т.к. реализовать питание можно по разному.
У меня, в случае необходимости, Power Bank можно снять для зарядки или своих нужд.

На разработку, сборку и программирование ушло около 3,5 часов лежания на диване )))

Сыграв пару партий, все одобрили девайс, поскольку полный рандом добавляем изюминку игре.

Спасибо за внимание, за грамматику не бить )))

P.S. Вариантов реализации идеи много. Я лишь показал свой вариант.
P.P.S. Видео перезалил, рандом присутствует )))

Это тоже котик )))


Планирую купить +13 Добавить в избранное +38 +82
+
avatar
  • lkwqas
  • 11 апреля 2017, 10:20
0
львенок чтоль живой?
у ардуины нет мощей мотор напрямую крутить, кто крутит?
+
avatar
  • Alf
  • 11 апреля 2017, 10:35
+1
Увы, она начинает глючить.
Потребление моторчика 11 mA, запуск около 60 mA.
Но логика почему-то нормально не отрабатывает, поэтому добавил npn.

Почему так, разбираться было не охото, проще переделать.
Да и вообще Arduino не способна, что-то серьезное питать.

P.S. Да, это живой львенок.
Фоткались летомв Крыме, в каком-то заповеднике.
+
avatar
+2
Парк львов Тайган
+
avatar
  • Alf
  • 11 апреля 2017, 11:06
0
Да, точно.
Спасибо за подсказку.

Только цены там не особо гуманные, а так там круто.
+
avatar
+1
Ходят слухи, что его дни сочтены. Извиняюсь за оффтоп.
+
avatar
+1
Диод поставьте параллельно моторчику, рукой раскрутите и сгорит транзистор.
Сама идея хорошая, у меня для таких целей лежит светодиодный бегунок, покупал на али набор для пайки. Типа такого
aliexpress.com/item/Round-Electronic-Lucky-Rotary-Suite-CD4017-NE555-Self-DIY-LED-Light-Kit-Production-Parts-and-Components/32795203638.html,searchweb201602_3_10152_10065_10151_10068_10136_10137_10060_10138_10062_10156_10153_10141_10056_10055_10054_10059_10099_10103_10102_10096_10148_120_10147_10052_10053_10142_10107_10050_10143_10051_10117_10084_10083_10119_10080_10082_10081_10110_10111_10112_10113_10114_10078_10079_10073_10070_10123_10120_10127_10124_10125-10120,searchweb201603_9,afswitch_1_afChannel,ppcSwitch_5&btsid=71effd8f-74ef-4923-964b-22e9b543fae6&algo_expid=94ef1c04-765f-4d2e-9b4b-0deee3da2825-26&algo_pvid=94ef1c04-765f-4d2e-9b4b-0deee3da2825
+
avatar
-18
+
avatar
+3
ну ведь есть же у вас понимание, чего брюзжите то ) 6 баксов.
+
avatar
  • Alf
  • 11 апреля 2017, 10:37
+6
Все, за исключением Arduino покупалось в местных магазинах, поэтому и в рублях.
Бокс 60р + кнопка 30р + переключатель 30р + мотор 70р + ардуино 120р + запас, т.к. цены везде разные.
+
avatar
  • uweroy
  • 11 апреля 2017, 10:28
+2
Рандом ??? )) Только второй и третий сектор выпадал )))
+
avatar
  • Alf
  • 11 апреля 2017, 10:44
0
Да, тут как повезет.
Секторов всего 4, поэтому шанс выпадения каждого сектора 25% + погрешность на размер сектора.
На самом деле при игре сектора выпадают разные, бывают и повторы.

И еще надо принять во внимание то, что чистого рандомайзера, как такового нет. В данном случае Arduino генерирует какую-то последовательность. Можно только постараться увеличить случайность.

Могу вечером переснять видео, если нужно )))
+
avatar
  • caliban
  • 11 апреля 2017, 10:49
0
шанс выпадения каждого сектора 25%
25 — если бы сектора одинаковые были
а так и динозавра встретить — 50% шанс)
+
avatar
-1
Тоже есть сомнения в случайности. Если моторчик раскручивается до одинакового числа оборотов, то и сектор остановки будет одинаковым плюс-минус мелкие внешние факторы.
+
avatar
  • Alf
  • 11 апреля 2017, 13:05
0
Время прокручивания всегда разное.
+
avatar
0
Интересно, а если бы просто поставить кнопку в цепь питания двигателя, то на сколько повторяемый результат бы был? Идея в том, что на кнопку нажать абсолютно одинаково не получится.
+
avatar
  • Alf
  • 03 мая 2017, 08:42
0
Проблема в том, что секций то всего 4, а значит и вариантов не так много.
В теории, коротким нажатием можно примерно предугадать результат.

Конечно можно сделать проще, но сто сделано, то сделано )))
+
avatar
0
Чтобы усложнить возможность мухляжа, можно, на пример, добавить в правила игры условие нажатия на кнопку: короткое — длинное — короткое. Тогда ещё сложнее будет предугадать.
Но что сделано, то сделано))
+
avatar
+2
Из видео демонстрации работы мезанизма видно, что стрелка останавливается в основном на секторах 3 и 2. Мне кажется, проблема в том, что стрелка может сидеть на валу двигателя не совсем ровно, также сам циферблат может быть слегка кривой. Возможно, реализовав выбор сектора с помощью 4х светодиодов можно добиться более разнообразных результатов работы устройства. Например вставить светодиодики рядом с цифрами-номерами секторов и совсем избавиться от стрелки.
+
avatar
+3
С крутящейся стрелкой ребенку всяко интереснее, я думаю. В смысле сам процесс…
+
avatar
0
Если сделать не 4, а хотябы 12 светодиодов — по 3 на каждом секторе, то можно реализовать довольно симпатичную эмитацию крутящейся стрелки. Не думаю что ребёнку понравится процесс, если будет выпадать в основном сектор 3 и иногда 4 с крутящеяся стрелкой

Ну если хочется чтоб стрелка крутилась аналоговая и результат зависел от скетча а не от кривизны стрелки, циферблата и сил трения, можно использовать серву на 360 вместо двигателя.
+
avatar
  • Alf
  • 11 апреля 2017, 10:54
+4
Дак вариантов реализации масса.
Я показал свой.
При тестировании в игре, всех такой вариант устроил, жалоб не было.

Можно и не использовать ардуинку, а крутить руками, как и задумывали авторы.
+
avatar
  • Alf
  • 11 апреля 2017, 10:47
0
Нет, стрелка не задевает циферблат.
Вечером пересниму видео в доказательство рандома )))

А так шанс выпадения каждого сектора около 25%, так что все честно.
У мотора есть плюс: разгон и торможение по инерции добавляют своего рандома.
+
avatar
  • caliban
  • 11 апреля 2017, 10:47
+5
а ведь можно просто взять обычный кубик, он же — игральная кость))
1-2 — бег
3-4 — зубы
5 — сабли
6 — мишень:)
+
avatar
  • Alf
  • 11 апреля 2017, 10:49
+3
Дак можно.
Авторам игры уже так советовали.
Но если бы я взял кубик, то не было бы обзора )))
С кубиком нет колхоза, а так уже не интересно.
+
avatar
+4
У двигателя постоянные магниты, по этому он останавливается в определёных положениях.
Можно раскручивать «чашку» в которой вращается ось стрелки, тогда стрелка не будет привязана к ротору.
+
avatar
  • EEhd
  • 11 апреля 2017, 10:52
+1
Маленькие коллекторные двигатели содержат в себе магниты на статоре, в связи с этим позиция вала частенько пытается «встать» в определенное место. Так что тут случайностью и не пахнет.
+
avatar
  • KBlack
  • 11 апреля 2017, 11:07
+1
Я думаю таких позиций явно больше, чем 4 положения на секторе. Да и не нужен тут чистый рандом, — это детская настолка, а не гослото все-таки.
+
avatar
  • ambuddy
  • 11 апреля 2017, 19:47
0
в гослото небось тоже не рандом))
+
avatar
  • Dimon_
  • 11 апреля 2017, 10:57
+12
Немножечко замечаний.
Не лично вам, но тем, кто решится повторить.

1. Кнопкой лучше прижимать ногу ардуины не к плюсу, а к земле. Соответственно, резистор подтягивающий пойдёт на плюс или (спасибо Атмелу) от него можно отказаться вовсе, используя внутреннюю подтяжку. Профит: экономим одну деталь, делаем всё, как правильно.

2. Ключ сделан совсем уж неправильно: сейчас мы в управляющий ток базы включаем весь ток через мотор. Так делать не надо. Будь мотор сильнее, пожжём выход ардуины. Надо так: эмитер сразу сажаем на минус, моторчик включаем в коллектрную, а не в эмитерную цепь. По феншую, ещё бы и базовый ток ограничить резистром. И диод от противотока моторчика добавить.

3. Использовать полиэтиленовую крышку для крепления на клей — бессмысленно. Суперклей с содой — это хорошо, но чуть пошевелите свою крышку — всё растрескается и отвалится. Тут лучше сработает механическое крепление. Хомут вокруг движка и болты — всё будет как влитое.

Просьба воспринимать не как «голословный наезд» а как «конструктивную критику».
+
avatar
  • Alf
  • 11 апреля 2017, 11:05
0
Да никаких наездов )))
1,2 — Я в радиотехнике разбираюсь, как свинья в апельсинах. Делал по наитию + интернет. За 2 пункт отдельное спасибо. Буду знать.

3 — Суперклей + сода держат очень даже хорошо, конечно в разумных пределах. Если нет желания изобретать крепеж, этот вариант, отлично подойдет. Единственное, я крышку немного зашкурил, иначе термоклей отваливается.
+
avatar
  • Dimon_
  • 11 апреля 2017, 11:19
+10
По п.2. поясню для тех, кто придёт сюда позже.

Первая же картинка из интернета. Просто вместо реле моторчик будет.



по п.1.
Один контакт кнопки к пину ардуины, второй к минусу. Безо всяких резисторов и прочего. В скетче тогда заменится следующее (без кавычек):
«pinMode(buttonPin, INPUT);» на «pinMode(buttonPin, INPUT_PULLUP);»
«if (digitalRead(buttonPin) == HIGH)» на «if (digitalRead(buttonPin) == LOW
+
avatar
0
в управляющий ток базы включаем весь ток через мотор
Там же эмиттерный повторитель — ток базы в h21 раз меньше коллекторного тока
+
avatar
  • Dimon_
  • 11 апреля 2017, 12:23
0
Да, но так ключи не строятся.
Так строятся некоторые выходные каскады усилителей или входные усилители с большим входным сопротивлением.
Объединять токи управления и нагрузки для ключевого режима — неправильно.
И коэффициент усиления по напряжению у такого каскада всегда меньше 1.
+
avatar
0
коэффициент усиления по напряжению у такого каскада всегда меньше 1
а там и не нужно усиление по напряжению
+
avatar
  • demon54
  • 11 апреля 2017, 18:23
+2
Эмиттерный повторитель, это усилитель с обратной связью, чем больше падение напряжения на нагрузке тем меньше напряжение на базе-эмиттер, тем менее ключевой режим у транзистора. Тем ему хуже. Это раз.
И плохо во время выключения. Ток из коллектора перестает подпитывать двигатель/индуктивность. И он начинает течь забирая то что может их базы, а там нога контроллера. Она оказывается в минусе. В принципе нынешние микроконтроллеры порой и переполюсовку питания выдерживают, но это не значит что их всех надо подвергать таким истязаниям.
А автор молодец, что не зная почти ничего, все таки сделал и ОНО работает ))))
+
avatar
  • Vetalar
  • 11 апреля 2017, 11:01
0
да уж… дайс D4 стоит до 100 рублей… бери и играй…
hobbyworld.ru/kubik-d4-opak-raznih-cvetov-v-assort-
hobbygames.ru/kubik-d4-andquot-prostojandquot-16mm-v-assortimente
хобби это хорошо, но принцип разумной достаточности никто не отменял :)
+
avatar
0
D4 там не подойдет. Размеры секторов разные явно для имитации разных шансов для разных событий. Даже d6 будет маловато, я думаю, поскольку там соотношение явно где-то 30/30/20/20%, на одном d6 выйдет 33/33/16/16 примерно.
+
avatar
  • Eremeev
  • 11 апреля 2017, 11:36
+7
На мой взгляд можно было бы обойтись и вообще без ардуины, просто цепь кнопка мотор и батарейка. Скорость вращения стрелки очень большая что бы предугадать когда она остановится.
+
avatar
+1
С языка снял.
+
avatar
  • Alf
  • 11 апреля 2017, 11:59
0
Я рассматривал такой вариант, но ардуинка показалась лучше.
+
avatar
0
> Я рассматривал такой вариант, но ардуинка показалась лучше.

Это из серии «дурная голова ногам покоя не даёт». Вы сначала в хардварной части наплодили ненужных сущностей, а потом в софтварной части нагородили таких костылей, что волосы дыбом встают… Знаменитые индийские программисты по сравнению в вами — дети.

На муске есть конкурс типа «золотой малины»? Я б за вашу поделку проголосовал.
+
avatar
  • Alf
  • 11 апреля 2017, 12:51
0
А в чем проблема такой реализации?
Нажал и все, не надо держать, arduino все сделал сама.
+
avatar
  • MeGaPk
  • 11 апреля 2017, 13:48
0
имеется ввиду, что при «нажали и все», будет так же и с вариантом Eremeev'a т.к. за эти доли секунды раскрутит мама не горюй. Если же не хватает, можно попробовать использовать кондюк.
Но а так, похвально, улучшайте вашу подделку, улучшите скилл прогерства и хардвара :).
+
avatar
  • Alf
  • 11 апреля 2017, 13:55
0
Знал бы я еще как тут кондер применить, какой именно и т.д.…
Увы, скилл радиотехника, где-то на уровне 3-4, до 99 еще далеко )))
+
avatar
  • MeGaPk
  • 11 апреля 2017, 13:57
0
Товарищ «u3712» написал. Тупо взять конденцатор и в паралель кнопке подключить. Поиграйтесь, не думаю что, что то спалите. Всё познается методом тыка, раз с теорией не очень. :)
+
avatar
  • Dimon_
  • 11 апреля 2017, 14:18
0
конденцатор и в паралель кнопке подключить
Обнять и плакать…
+
avatar
  • Alf
  • 11 апреля 2017, 14:19
0
Немного не понимаю, зачем подключать кондер параллельно кнопке !?
Может его к мотору все же цеплять?
+
avatar
+2
> А в чем проблема такой реализации?

У вас в профиле вроде «программист» написано? Это шутка? Вы серьёзно полагаете, что эти ваши навороты в коде хоть как-то улучшат «рандомность» получаемых чисел?

for (int i=0; i <= count; i++){
    sol = random(timeMin, timeMax); // Генерируем случайное число
    if (sol % 2 == 0) // Если число четное
    {
        timer = timer + random(timeMin, timeMax); // Добавляем случайное время
    }
}

sol = random(timeMin, timeMax); // Генерируем случайное число
if (sol % 2 == 0) // Если число четное
{
    timer = timer / 2; // Уменьшаем время в 2 раза
}
else
{
    sol = random(timeMin, timeMax); // Генерируем случайное число
    if (sol % 2 == 0) // Если число четное
    {
        timer = timer * 2; // Увеличиваем время в 2 раза
    }
}


Мне просто интересно, какими соображениями вы руководствовались при написании этого шедевра из 21 строки кода? И чем ваш метод лучше прямолинейного

timer = random(timeMin, timeMax);


?
+
avatar
  • Alf
  • 12 апреля 2017, 08:42
0
1) В обзоре есть упрощенная версия кода
2) Вы знаете как работает рандом !? Это некая псевдо случайная последовательность. При моем подходе результат сильно отличается от простого timer = random(timeMin, timeMax), где в большинстве случаев разница между результатами незначительна.

Вы можете предложить свой вариант, никто не запрещает.
+
avatar
0
> 2) Вы знаете как работает рандом !? При моем подходе результат сильно отличается от простого timer = random(timeMin, timeMax), где в большинстве случаев разница между результатами незначительна.

Я-то знаю. А вы?

random(timeMin, timeMax) выдает псевдослучайное число из диапазона [timeMin, timeMax) с равномерным распределением.

Вы можете назвать хотя бы диапазон вашей псевдослучайной величины timer? Про распределение вероятности я уж не спрашиваю…
+
avatar
  • Alf
  • 12 апреля 2017, 14:15
0
Запросто: от 0 до 1000 мс.

И еще…
Вы думаете, мне лень было написать random(0, 1000) !?
Судя по Вашим комментариям, скилл в программировании у Вас около 99 лвл.
Такой код там не просто так, обычный random выдает фигню.

Если Ваши навыки программирования, хоть сколько-нибудь приближены к самомнению, то продемонстрируйте свой вариант, а мы заценим и поглядим.
+
avatar
  • dansar
  • 12 апреля 2017, 20:29
+1
У вас в первом цикле стоит условие
i <= count

Счетчик i примет значения от 0, до 5, всего 6 раз. Максимальное значение timer будет
timeMax*6*2


Я прогнал ваш алгоритм миллион раз и построил гистограмму в Excel. Компилятор GNU GCC, среда разработки Code::Blocks.



На равновероятный закон не похоже.

Случайные числа легче всего получать, собирая младшие биты с АЦП.
+
avatar
  • Alf
  • 13 апреля 2017, 08:46
0
Хм…
Занятно. У меня при тестировании получались немного несколько результаты, но в любом случае, я уже переписал алгоритм (код есть в обзоре).

Случайные числа легче всего получать, собирая младшие биты с АЦП.
Кстати да, это идея.
+
avatar
0
> Максимальное значение timer будет timeMax*6*2

Чуток поправлю:

(timeMax - 1) * 6 * 2 

Поскольку диапазон значений функции random — [min, max). См. www.arduino.cc/en/Reference/Random
+
avatar
0
> Запросто: от 0 до 1000 мс.

Садись, два.

Как ниже было показано, диапазон возможных значений

(timeMax - 1) * 6 * 2 

Учитывая, что timeMax = 100, получаем диапазон [0, 1188].

> Вы думаете, мне лень было написать random(0, 1000) !?

Нет, не думаю. Что я думаю, я уже написал: дурная голова ногам покоя не даёт.

> Такой код там не просто так, обычный random выдает фигню.

Фигню выдаёт ваш код, а недостаток математического образования и программистской квалификации не позволяют вам понять этого.

> Если Ваши навыки программирования, хоть сколько-нибудь приближены к самомнению, то продемонстрируйте свой вариант, а мы заценим и поглядим.

Жалкая попытка сменить тему дискуссии.

Адью.
+
avatar
  • u3712
  • 11 апреля 2017, 12:31
0
Можно жульничать коротким нажатием. Лечится модом — большой электролит. конденсатор параллельно кнопке.
+
avatar
  • jonsvl
  • 11 апреля 2017, 11:53
0
что-то Барсик вялый какой-то.
+
avatar
  • Alf
  • 11 апреля 2017, 11:58
0
кушать хотел )))
после нас он сразу побежал обедать.
+
avatar
+1
> Большое поле для мухлежа, а так хочется честной игры.

В подобных играх самое главное — взаимодействие людей. Верчение стрелки, бросание кубика, и все прочие сопутствующие процессы — часть игры, в которой раскрывается (а у детей ещё и формируется) характер. Кто-то пытается мухлевать, кто-то говорит что надо играть честно, а если кто-то будет играть нечестно, то получит по наглой рыжей морде… После автоматизации вращения стрелки осталось ещё автоматизировать передвижение фишек — и всё, можно расходиться, ардуина сама с собой сыграет, потом пришлёт на почту имя победителя. Каждый может уткнуться в собственный смартфон.
+
avatar
  • Alf
  • 11 апреля 2017, 12:02
0
Тут и без стрелки взаимодействия хватает )))
Стрелка — всего лишь инструмент, как кубики.
+
avatar
  • tianddu
  • 11 апреля 2017, 12:40
0
по уму владелец ардуины должен был взять шаговик, чаще всего у шаговика 1.8 градуса на шаг. Получается генерите число от 1 до 200 и сдвигаете стрелку, тоже рандомно влево или вправо. на много забавнее было бы + можно изредко рандомить + 360*N.
+
avatar
  • Alf
  • 11 апреля 2017, 12:54
0
Нету шаговика.
Что нашел, то и поставил.
+
avatar
  • tianddu
  • 11 апреля 2017, 13:39
0
эх, у меня коробка штук 40 их валяется от плоских до размером с кулак…
+
avatar
  • Alf
  • 11 апреля 2017, 13:47
0
Везет )))
Я их заказывал никогда, т.к. не было необходимости.

Зато у меня лежит образцовый вакууметр 1227, не знаю куда девать + куча разных двигателей и прочей советской электроники )))
+
avatar
  • Worker
  • 11 апреля 2017, 12:42
+1
Пять копеек от себя добавлю. Можно в начале и конце этапа вращения стрелки сделать замедленным. Прибавляется визуальность и интрига. Обзор понравился спасибо. Доработка игр интересная тема. Плюс вам.
+
avatar
  • Alf
  • 11 апреля 2017, 13:07
0
С таким моторчиком такой фокус наверное не провернуть, если только добавить какое-нибудь электронное сопротивление или какую-нибудь микруху, но я в этом почти 0.
+
avatar
  • bones27
  • 11 апреля 2017, 17:46
0
думаю ШИМ ардуиновский с этим вполне справится.
+
avatar
  • Alf
  • 11 апреля 2017, 21:39
0
Если Вы о том, чтобы питать мотор от цифрового выхода ардуинки, то я пробовал, она глючит почему-то.
А так да, идея хорошая. Мороки было бы меньше.
+
avatar
  • bones27
  • 12 апреля 2017, 00:38
0
я о том, что на базу транзистора можно подать шим и регулировать обороты (мощность на самом деле), схема не меняется, только скетч.
+
avatar
  • Aloha_
  • 11 апреля 2017, 12:46
0
Напрашивается шаговый двигатель, проблему магнитов уже озвучили выше. Ну или эл двигатель с тормозом.
+
avatar
  • Alf
  • 11 апреля 2017, 13:03
0
Если только шаговик заказать с али, но это еще месяц ожиданий.
Я вечером перезалью видео, при игре он выпадает рандомно, проблема магнитов не ощущается.
+
avatar
  • bones27
  • 11 апреля 2017, 18:07
0
Могу ошибаться, коллекторник вроде тормозит, если замкнуть выводы, так что можно попробовать поставить еще 1 ключевой транзистор. Берем 2 рандома: 1й — время раскручивания, 2й — пауза перед торможением, будет рандом в квадрате :) А если поставить полевик, то там и диод в комплекте, и резистор в затвор можно не ставить.
+
avatar
  • Aloha_
  • 11 апреля 2017, 19:06
0
Точно!
+
avatar
  • Alf
  • 11 апреля 2017, 21:35
0
А можно подробнее?
Желательно схемой, если она не сложная.
+
avatar
  • bones27
  • 12 апреля 2017, 00:24
0
не сложная, 1 деталь к вашей схеме добавить. Полевик почти любой, чем ниже Vth тем лучше.



только RUN и STOP одновременно нельзя подавать.
+
avatar
0
Крутая игрушка получилась. Всё и так хорошо, а советчики пусть сами CNC строят. Молодец! Завидую.
+
avatar
  • golart
  • 11 апреля 2017, 13:58
0
Прошу совета по подобному использованию Arduino.
Есть настольная игра Тик Так Бумм. В ней есть такой элемент как бомба. Нажимаешь на кнопку бомба начинает тикать и через случайное время звучит взрыв. Возможно сымитировать убыстряющиеся звуки тиканья и взрыв на Arduino Nano?
+
avatar
  • Alf
  • 11 апреля 2017, 14:18
0
Да, можно.
Вот пример работы.
1) Сгенерировать случайное время
2) Воспроизводить звук 1 раз в секунду (например)
3) Если осталось < 3 секунд, то воспроизводить звук 1 раз в 500 мс.

Как-то так. Это общий алгоритм работы.
+
avatar
0
Котик из Тайгана?
+
avatar
  • Alf
  • 11 апреля 2017, 21:35
0
Ага
+
avatar
  • Nemexis
  • 11 апреля 2017, 20:44
0
Вращение конечно прикольно, но я бы поставил 4 светодиода, по 1 на каждое поле и стрелку убрал. Нажал кнопку, запустил цикл на 50 функций рандом от 1 до 4. Диоды будут хаотично моргать.
+
avatar
  • Suhoff
  • 11 апреля 2017, 21:01
+1
Отличная игра. Ардуино это круто. Мне хватило капли силиконового на ось стрелки — устаем ждать когда остановится стрелка. Планирую ещё сделать тяжелое основание для картонки с цифрами, чтобы можно было крутить одной рукой и не держать табло.
+
avatar
  • Alf
  • 11 апреля 2017, 21:37
0
А о смазке я как-то не подумал даже ))))
Хотя все равно ее дома нету.
+
avatar
  • skif31
  • 12 апреля 2017, 04:56
+1
Не понял, зачем Ардуина? Батарейка, моторчик, кнопка… Нажали кнопку, моторчик раскрутился, отпустили — остановился с учётом инерции в случайном положении. Только что проверил — работает.

Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.
+
avatar
+1
> Не понял, зачем Ардуина?
> Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.

Комментарий выше говорит, что для решения проблемы достаточно капли смазки на ось стрелки. А результат — совершенно разный. Про каплю смазки обзор не напишешь, сотню лайков не заработаешь.

Вангую парень в своём ЭД Директум далеко пойдёт, архитектором скоро станет. Навыки по изготовлению высокотехнологичных проектов из г и палок уже есть, опыт в PR набирает быстрыми темпами. Ставить непарные закрывающие скобки уже научился.

А в области проектирования интерфейса между человеком и машиной парень — чёртов гений. Кто-нибудь обратил внимание на индикатор включения (зелёный светодиод)? Это же находка. Революция в области промдизайна.
+
avatar
  • Alf
  • 12 апреля 2017, 14:04
0
Я смотрю бомбит у Вас не по детски )))
+
avatar
0
смотрю бомбит у Вас не по детски
Привыкайте, фауна тут клыкастая ;-)
+
avatar
0
Не глотайте слова, не понятно же нифига.