Решил написать небольшой обзорчик на тему:
«Как еще можно применить 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; // Количество проходов цикла
// Считываем состояние кнопки
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 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
Диод поставьте параллельно моторчику, рукой раскрутите и сгорит транзистор.
Сама идея хорошая, у меня для таких целей лежит светодиодный бегунок, покупал на али набор для пайки. Типа такого 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
Все, за исключением Arduino покупалось в местных магазинах, поэтому и в рублях.
Бокс 60р + кнопка 30р + переключатель 30р + мотор 70р + ардуино 120р + запас, т.к. цены везде разные.
Да, тут как повезет.
Секторов всего 4, поэтому шанс выпадения каждого сектора 25% + погрешность на размер сектора.
На самом деле при игре сектора выпадают разные, бывают и повторы.
И еще надо принять во внимание то, что чистого рандомайзера, как такового нет. В данном случае Arduino генерирует какую-то последовательность. Можно только постараться увеличить случайность.
Тоже есть сомнения в случайности. Если моторчик раскручивается до одинакового числа оборотов, то и сектор остановки будет одинаковым плюс-минус мелкие внешние факторы.
Интересно, а если бы просто поставить кнопку в цепь питания двигателя, то на сколько повторяемый результат бы был? Идея в том, что на кнопку нажать абсолютно одинаково не получится.
Чтобы усложнить возможность мухляжа, можно, на пример, добавить в правила игры условие нажатия на кнопку: короткое — длинное — короткое. Тогда ещё сложнее будет предугадать.
Но что сделано, то сделано))
Из видео демонстрации работы мезанизма видно, что стрелка останавливается в основном на секторах 3 и 2. Мне кажется, проблема в том, что стрелка может сидеть на валу двигателя не совсем ровно, также сам циферблат может быть слегка кривой. Возможно, реализовав выбор сектора с помощью 4х светодиодов можно добиться более разнообразных результатов работы устройства. Например вставить светодиодики рядом с цифрами-номерами секторов и совсем избавиться от стрелки.
Если сделать не 4, а хотябы 12 светодиодов — по 3 на каждом секторе, то можно реализовать довольно симпатичную эмитацию крутящейся стрелки. Не думаю что ребёнку понравится процесс, если будет выпадать в основном сектор 3 и иногда 4 с крутящеяся стрелкой
Ну если хочется чтоб стрелка крутилась аналоговая и результат зависел от скетча а не от кривизны стрелки, циферблата и сил трения, можно использовать серву на 360 вместо двигателя.
У двигателя постоянные магниты, по этому он останавливается в определёных положениях.
Можно раскручивать «чашку» в которой вращается ось стрелки, тогда стрелка не будет привязана к ротору.
Маленькие коллекторные двигатели содержат в себе магниты на статоре, в связи с этим позиция вала частенько пытается «встать» в определенное место. Так что тут случайностью и не пахнет.
Немножечко замечаний.
Не лично вам, но тем, кто решится повторить.
1. Кнопкой лучше прижимать ногу ардуины не к плюсу, а к земле. Соответственно, резистор подтягивающий пойдёт на плюс или (спасибо Атмелу) от него можно отказаться вовсе, используя внутреннюю подтяжку. Профит: экономим одну деталь, делаем всё, как правильно.
2. Ключ сделан совсем уж неправильно: сейчас мы в управляющий ток базы включаем весь ток через мотор. Так делать не надо. Будь мотор сильнее, пожжём выход ардуины. Надо так: эмитер сразу сажаем на минус, моторчик включаем в коллектрную, а не в эмитерную цепь. По феншую, ещё бы и базовый ток ограничить резистром. И диод от противотока моторчика добавить.
3. Использовать полиэтиленовую крышку для крепления на клей — бессмысленно. Суперклей с содой — это хорошо, но чуть пошевелите свою крышку — всё растрескается и отвалится. Тут лучше сработает механическое крепление. Хомут вокруг движка и болты — всё будет как влитое.
Просьба воспринимать не как «голословный наезд» а как «конструктивную критику».
Да никаких наездов )))
1,2 — Я в радиотехнике разбираюсь, как свинья в апельсинах. Делал по наитию + интернет. За 2 пункт отдельное спасибо. Буду знать.
3 — Суперклей + сода держат очень даже хорошо, конечно в разумных пределах. Если нет желания изобретать крепеж, этот вариант, отлично подойдет. Единственное, я крышку немного зашкурил, иначе термоклей отваливается.
Первая же картинка из интернета. Просто вместо реле моторчик будет.
по п.1.
Один контакт кнопки к пину ардуины, второй к минусу. Безо всяких резисторов и прочего. В скетче тогда заменится следующее (без кавычек):
«pinMode(buttonPin, INPUT);» на «pinMode(buttonPin, INPUT_PULLUP);»
«if (digitalRead(buttonPin) == HIGH)» на «if (digitalRead(buttonPin) == LOW)»
Да, но так ключи не строятся.
Так строятся некоторые выходные каскады усилителей или входные усилители с большим входным сопротивлением.
Объединять токи управления и нагрузки для ключевого режима — неправильно.
И коэффициент усиления по напряжению у такого каскада всегда меньше 1.
Эмиттерный повторитель, это усилитель с обратной связью, чем больше падение напряжения на нагрузке тем меньше напряжение на базе-эмиттер, тем менее ключевой режим у транзистора. Тем ему хуже. Это раз.
И плохо во время выключения. Ток из коллектора перестает подпитывать двигатель/индуктивность. И он начинает течь забирая то что может их базы, а там нога контроллера. Она оказывается в минусе. В принципе нынешние микроконтроллеры порой и переполюсовку питания выдерживают, но это не значит что их всех надо подвергать таким истязаниям.
А автор молодец, что не зная почти ничего, все таки сделал и ОНО работает ))))
D4 там не подойдет. Размеры секторов разные явно для имитации разных шансов для разных событий. Даже d6 будет маловато, я думаю, поскольку там соотношение явно где-то 30/30/20/20%, на одном d6 выйдет 33/33/16/16 примерно.
На мой взгляд можно было бы обойтись и вообще без ардуины, просто цепь кнопка мотор и батарейка. Скорость вращения стрелки очень большая что бы предугадать когда она остановится.
> Я рассматривал такой вариант, но ардуинка показалась лучше.
Это из серии «дурная голова ногам покоя не даёт». Вы сначала в хардварной части наплодили ненужных сущностей, а потом в софтварной части нагородили таких костылей, что волосы дыбом встают… Знаменитые индийские программисты по сравнению в вами — дети.
На муске есть конкурс типа «золотой малины»? Я б за вашу поделку проголосовал.
имеется ввиду, что при «нажали и все», будет так же и с вариантом Eremeev'a т.к. за эти доли секунды раскрутит мама не горюй. Если же не хватает, можно попробовать использовать кондюк.
Но а так, похвально, улучшайте вашу подделку, улучшите скилл прогерства и хардвара :).
Товарищ «u3712» написал. Тупо взять конденцатор и в паралель кнопке подключить. Поиграйтесь, не думаю что, что то спалите. Всё познается методом тыка, раз с теорией не очень. :)
У вас в профиле вроде «программист» написано? Это шутка? Вы серьёзно полагаете, что эти ваши навороты в коде хоть как-то улучшат «рандомность» получаемых чисел?
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 строки кода? И чем ваш метод лучше прямолинейного
1) В обзоре есть упрощенная версия кода
2) Вы знаете как работает рандом !? Это некая псевдо случайная последовательность. При моем подходе результат сильно отличается от простого timer = random(timeMin, timeMax), где в большинстве случаев разница между результатами незначительна.
Вы можете предложить свой вариант, никто не запрещает.
> 2) Вы знаете как работает рандом !? При моем подходе результат сильно отличается от простого timer = random(timeMin, timeMax), где в большинстве случаев разница между результатами незначительна.
Я-то знаю. А вы?
random(timeMin, timeMax) выдает псевдослучайное число из диапазона [timeMin, timeMax) с равномерным распределением.
Вы можете назвать хотя бы диапазон вашей псевдослучайной величины timer? Про распределение вероятности я уж не спрашиваю…
И еще…
Вы думаете, мне лень было написать random(0, 1000) !?
Судя по Вашим комментариям, скилл в программировании у Вас около 99 лвл.
Такой код там не просто так, обычный random выдает фигню.
Если Ваши навыки программирования, хоть сколько-нибудь приближены к самомнению, то продемонстрируйте свой вариант, а мы заценим и поглядим.
> Большое поле для мухлежа, а так хочется честной игры.
В подобных играх самое главное — взаимодействие людей. Верчение стрелки, бросание кубика, и все прочие сопутствующие процессы — часть игры, в которой раскрывается (а у детей ещё и формируется) характер. Кто-то пытается мухлевать, кто-то говорит что надо играть честно, а если кто-то будет играть нечестно, то получит по наглой рыжей морде… После автоматизации вращения стрелки осталось ещё автоматизировать передвижение фишек — и всё, можно расходиться, ардуина сама с собой сыграет, потом пришлёт на почту имя победителя. Каждый может уткнуться в собственный смартфон.
по уму владелец ардуины должен был взять шаговик, чаще всего у шаговика 1.8 градуса на шаг. Получается генерите число от 1 до 200 и сдвигаете стрелку, тоже рандомно влево или вправо. на много забавнее было бы + можно изредко рандомить + 360*N.
Пять копеек от себя добавлю. Можно в начале и конце этапа вращения стрелки сделать замедленным. Прибавляется визуальность и интрига. Обзор понравился спасибо. Доработка игр интересная тема. Плюс вам.
С таким моторчиком такой фокус наверное не провернуть, если только добавить какое-нибудь электронное сопротивление или какую-нибудь микруху, но я в этом почти 0.
Если только шаговик заказать с али, но это еще месяц ожиданий.
Я вечером перезалью видео, при игре он выпадает рандомно, проблема магнитов не ощущается.
Могу ошибаться, коллекторник вроде тормозит, если замкнуть выводы, так что можно попробовать поставить еще 1 ключевой транзистор. Берем 2 рандома: 1й — время раскручивания, 2й — пауза перед торможением, будет рандом в квадрате :) А если поставить полевик, то там и диод в комплекте, и резистор в затвор можно не ставить.
Прошу совета по подобному использованию Arduino.
Есть настольная игра Тик Так Бумм. В ней есть такой элемент как бомба. Нажимаешь на кнопку бомба начинает тикать и через случайное время звучит взрыв. Возможно сымитировать убыстряющиеся звуки тиканья и взрыв на Arduino Nano?
Да, можно. Вот пример работы.
1) Сгенерировать случайное время
2) Воспроизводить звук 1 раз в секунду (например)
3) Если осталось < 3 секунд, то воспроизводить звук 1 раз в 500 мс.
Вращение конечно прикольно, но я бы поставил 4 светодиода, по 1 на каждое поле и стрелку убрал. Нажал кнопку, запустил цикл на 50 функций рандом от 1 до 4. Диоды будут хаотично моргать.
Отличная игра. Ардуино это круто. Мне хватило капли силиконового на ось стрелки — устаем ждать когда остановится стрелка. Планирую ещё сделать тяжелое основание для картонки с цифрами, чтобы можно было крутить одной рукой и не держать табло.
Не понял, зачем Ардуина? Батарейка, моторчик, кнопка… Нажали кнопку, моторчик раскрутился, отпустили — остановился с учётом инерции в случайном положении. Только что проверил — работает.
Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.
> Не понял, зачем Ардуина?
> Конечно с Ардуиной солиднее, особенно в прозрачном корпусе. Но результат тот же.
Комментарий выше говорит, что для решения проблемы достаточно капли смазки на ось стрелки. А результат — совершенно разный. Про каплю смазки обзор не напишешь, сотню лайков не заработаешь.
Вангую парень в своём ЭД Директум далеко пойдёт, архитектором скоро станет. Навыки по изготовлению высокотехнологичных проектов из г и палок уже есть, опыт в PR набирает быстрыми темпами. Ставить непарные закрывающие скобки уже научился.
А в области проектирования интерфейса между человеком и машиной парень — чёртов гений. Кто-нибудь обратил внимание на индикатор включения (зелёный светодиод)? Это же находка. Революция в области промдизайна.
у ардуины нет мощей мотор напрямую крутить, кто крутит?
Потребление моторчика 11 mA, запуск около 60 mA.
Но логика почему-то нормально не отрабатывает, поэтому добавил npn.
Почему так, разбираться было не охото, проще переделать.
Да и вообще Arduino не способна, что-то серьезное питать.
P.S. Да, это живой львенок.
Фоткались летомв Крыме, в каком-то заповеднике.
Спасибо за подсказку.
Только цены там не особо гуманные, а так там круто.
Сама идея хорошая, у меня для таких целей лежит светодиодный бегунок, покупал на али набор для пайки. Типа такого
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
Бокс 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 набирает быстрыми темпами. Ставить непарные закрывающие скобки уже научился.
А в области проектирования интерфейса между человеком и машиной парень — чёртов гений. Кто-нибудь обратил внимание на индикатор включения (зелёный светодиод)? Это же находка. Революция в области промдизайна.