Справка: Random (рандом) — Случайный, произвольный, выбранный наугад.
Мысля:
Прокручивать стрелку случайное время, чтобы результат нельзя было предсказать.
Конечно сюда можно прикрутить Arduino…
Arduino, как bluetooth — с ним все становиться только лучше!
Иногда мне кажется, что моя кладовка это Нарния, сколько всего интересного там можно найти!
Балкон — Нарния 2 )))
// Задаём номера выводов:
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); // Выключаем мотор
}
}
+23 |
1793
52
|
+45 |
2479
88
|
+161 |
3764
45
|
у ардуины нет мощей мотор напрямую крутить, кто крутит?
Потребление моторчика 11 mA, запуск около 60 mA.
Но логика почему-то нормально не отрабатывает, поэтому добавил npn.
Почему так, разбираться было не охото, проще переделать.
Да и вообще Arduino не способна, что-то серьезное питать.
P.S. Да, это живой львенок.
Фоткались летомв Крыме, в каком-то заповеднике.
Спасибо за подсказку.
Только цены там не особо гуманные, а так там круто.
Сама идея хорошая, у меня для таких целей лежит светодиодный бегунок, покупал на али набор для пайки. Типа такого
https://aliexpress.com/item/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
Бокс 60р + кнопка 30р + переключатель 30р + мотор 70р + ардуино 120р + запас, т.к. цены везде разные.
Секторов всего 4, поэтому шанс выпадения каждого сектора 25% + погрешность на размер сектора.
На самом деле при игре сектора выпадают разные, бывают и повторы.
И еще надо принять во внимание то, что чистого рандомайзера, как такового нет. В данном случае Arduino генерирует какую-то последовательность. Можно только постараться увеличить случайность.
Могу вечером переснять видео, если нужно )))
а так и динозавра встретить — 50% шанс)
В теории, коротким нажатием можно примерно предугадать результат.
Конечно можно сделать проще, но сто сделано, то сделано )))
Но что сделано, то сделано))
Ну если хочется чтоб стрелка крутилась аналоговая и результат зависел от скетча а не от кривизны стрелки, циферблата и сил трения, можно использовать серву на 360 вместо двигателя.
Я показал свой.
При тестировании в игре, всех такой вариант устроил, жалоб не было.
Можно и не использовать ардуинку, а крутить руками, как и задумывали авторы.
Вечером пересниму видео в доказательство рандома )))
А так шанс выпадения каждого сектора около 25%, так что все честно.
У мотора есть плюс: разгон и торможение по инерции добавляют своего рандома.
1-2 — бег
3-4 — зубы
5 — сабли
6 — мишень:)
Авторам игры уже так советовали.
Но если бы я взял кубик, то не было бы обзора )))
С кубиком нет колхоза, а так уже не интересно.
Можно раскручивать «чашку» в которой вращается ось стрелки, тогда стрелка не будет привязана к ротору.
Не лично вам, но тем, кто решится повторить.
1. Кнопкой лучше прижимать ногу ардуины не к плюсу, а к земле. Соответственно, резистор подтягивающий пойдёт на плюс или (спасибо Атмелу) от него можно отказаться вовсе, используя внутреннюю подтяжку. Профит: экономим одну деталь, делаем всё, как правильно.
2. Ключ сделан совсем уж неправильно: сейчас мы в управляющий ток базы включаем весь ток через мотор. Так делать не надо. Будь мотор сильнее, пожжём выход ардуины. Надо так: эмитер сразу сажаем на минус, моторчик включаем в коллектрную, а не в эмитерную цепь. По феншую, ещё бы и базовый ток ограничить резистром. И диод от противотока моторчика добавить.
3. Использовать полиэтиленовую крышку для крепления на клей — бессмысленно. Суперклей с содой — это хорошо, но чуть пошевелите свою крышку — всё растрескается и отвалится. Тут лучше сработает механическое крепление. Хомут вокруг движка и болты — всё будет как влитое.
Просьба воспринимать не как «голословный наезд» а как «конструктивную критику».
1,2 — Я в радиотехнике разбираюсь, как свинья в апельсинах. Делал по наитию + интернет. За 2 пункт отдельное спасибо. Буду знать.
3 — Суперклей + сода держат очень даже хорошо, конечно в разумных пределах. Если нет желания изобретать крепеж, этот вариант, отлично подойдет. Единственное, я крышку немного зашкурил, иначе термоклей отваливается.
Первая же картинка из интернета. Просто вместо реле моторчик будет.
по п.1.
Один контакт кнопки к пину ардуины, второй к минусу. Безо всяких резисторов и прочего. В скетче тогда заменится следующее (без кавычек):
«pinMode(buttonPin, INPUT);» на «pinMode(buttonPin, INPUT_PULLUP);»
«if (digitalRead(buttonPin) == HIGH)» на «if (digitalRead(buttonPin) == LOW)»
Так строятся некоторые выходные каскады усилителей или входные усилители с большим входным сопротивлением.
Объединять токи управления и нагрузки для ключевого режима — неправильно.
И коэффициент усиления по напряжению у такого каскада всегда меньше 1.
И плохо во время выключения. Ток из коллектора перестает подпитывать двигатель/индуктивность. И он начинает течь забирая то что может их базы, а там нога контроллера. Она оказывается в минусе. В принципе нынешние микроконтроллеры порой и переполюсовку питания выдерживают, но это не значит что их всех надо подвергать таким истязаниям.
А автор молодец, что не зная почти ничего, все таки сделал и ОНО работает ))))
hobbyworld.ru/kubik-d4-opak-raznih-cvetov-v-assort-
hobbygames.ru/kubik-d4-andquot-prostojandquot-16mm-v-assortimente
хобби это хорошо, но принцип разумной достаточности никто не отменял :)
Это из серии «дурная голова ногам покоя не даёт». Вы сначала в хардварной части наплодили ненужных сущностей, а потом в софтварной части нагородили таких костылей, что волосы дыбом встают… Знаменитые индийские программисты по сравнению в вами — дети.
На муске есть конкурс типа «золотой малины»? Я б за вашу поделку проголосовал.
Нажал и все, не надо держать, arduino все сделал сама.
Но а так, похвально, улучшайте вашу подделку, улучшите скилл прогерства и хардвара :).
Увы, скилл радиотехника, где-то на уровне 3-4, до 99 еще далеко )))
Может его к мотору все же цеплять?
У вас в профиле вроде «программист» написано? Это шутка? Вы серьёзно полагаете, что эти ваши навороты в коде хоть как-то улучшат «рандомность» получаемых чисел?
Мне просто интересно, какими соображениями вы руководствовались при написании этого шедевра из 21 строки кода? И чем ваш метод лучше прямолинейного
?
2) Вы знаете как работает рандом !? Это некая псевдо случайная последовательность. При моем подходе результат сильно отличается от простого timer = random(timeMin, timeMax), где в большинстве случаев разница между результатами незначительна.
Вы можете предложить свой вариант, никто не запрещает.
Я-то знаю. А вы?
random(timeMin, timeMax) выдает псевдослучайное число из диапазона [timeMin, timeMax) с равномерным распределением.
Вы можете назвать хотя бы диапазон вашей псевдослучайной величины timer? Про распределение вероятности я уж не спрашиваю…
И еще…
Вы думаете, мне лень было написать random(0, 1000) !?
Судя по Вашим комментариям, скилл в программировании у Вас около 99 лвл.
Такой код там не просто так, обычный random выдает фигню.
Если Ваши навыки программирования, хоть сколько-нибудь приближены к самомнению, то продемонстрируйте свой вариант, а мы заценим и поглядим.
Счетчик i примет значения от 0, до 5, всего 6 раз. Максимальное значение timer будет
Я прогнал ваш алгоритм миллион раз и построил гистограмму в Excel. Компилятор GNU GCC, среда разработки Code::Blocks.
На равновероятный закон не похоже.
Случайные числа легче всего получать, собирая младшие биты с АЦП.
Занятно. У меня при тестировании получались немного несколько результаты, но в любом случае, я уже переписал алгоритм (код есть в обзоре).
Кстати да, это идея.
Чуток поправлю:
Поскольку диапазон значений функции random — [min, max). См. www.arduino.cc/en/Reference/Random
Садись, два.
Как ниже было показано, диапазон возможных значений
Учитывая, что timeMax = 100, получаем диапазон [0, 1188].
> Вы думаете, мне лень было написать random(0, 1000) !?
Нет, не думаю. Что я думаю, я уже написал: дурная голова ногам покоя не даёт.
> Такой код там не просто так, обычный random выдает фигню.
Фигню выдаёт ваш код, а недостаток математического образования и программистской квалификации не позволяют вам понять этого.
> Если Ваши навыки программирования, хоть сколько-нибудь приближены к самомнению, то продемонстрируйте свой вариант, а мы заценим и поглядим.
Жалкая попытка сменить тему дискуссии.
Адью.
после нас он сразу побежал обедать.
В подобных играх самое главное — взаимодействие людей. Верчение стрелки, бросание кубика, и все прочие сопутствующие процессы — часть игры, в которой раскрывается (а у детей ещё и формируется) характер. Кто-то пытается мухлевать, кто-то говорит что надо играть честно, а если кто-то будет играть нечестно, то получит по наглой рыжей морде… После автоматизации вращения стрелки осталось ещё автоматизировать передвижение фишек — и всё, можно расходиться, ардуина сама с собой сыграет, потом пришлёт на почту имя победителя. Каждый может уткнуться в собственный смартфон.
Стрелка — всего лишь инструмент, как кубики.
Что нашел, то и поставил.
Я их заказывал никогда, т.к. не было необходимости.
Зато у меня лежит образцовый вакууметр 1227, не знаю куда девать + куча разных двигателей и прочей советской электроники )))
А так да, идея хорошая. Мороки было бы меньше.
Я вечером перезалью видео, при игре он выпадает рандомно, проблема магнитов не ощущается.
Желательно схемой, если она не сложная.
только RUN и STOP одновременно нельзя подавать.
Есть настольная игра Тик Так Бумм. В ней есть такой элемент как бомба. Нажимаешь на кнопку бомба начинает тикать и через случайное время звучит взрыв. Возможно сымитировать убыстряющиеся звуки тиканья и взрыв на Arduino Nano?
Вот пример работы.
1) Сгенерировать случайное время
2) Воспроизводить звук 1 раз в секунду (например)
3) Если осталось < 3 секунд, то воспроизводить звук 1 раз в 500 мс.
Как-то так. Это общий алгоритм работы.
Хотя все равно ее дома нету.
Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.
> Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.
Комментарий выше говорит, что для решения проблемы достаточно капли смазки на ось стрелки. А результат — совершенно разный. Про каплю смазки обзор не напишешь, сотню лайков не заработаешь.
Вангую парень в своём ЭД Директум далеко пойдёт, архитектором скоро станет. Навыки по изготовлению высокотехнологичных проектов из г и палок уже есть, опыт в PR набирает быстрыми темпами. Ставить непарные закрывающие скобки уже научился.
А в области проектирования интерфейса между человеком и машиной парень — чёртов гений. Кто-нибудь обратил внимание на индикатор включения (зелёный светодиод)? Это же находка. Революция в области промдизайна.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.