Оказалось, что Жасмин является разработчиком видеоигр и гораздо больше разбирается в теме случайных распределений, чем я. Он произвел впечатление вежливого и терпеливого человека, который знает, о чем говорит, и заинтересован помочь решить проблему, которую обнаружил.
После того как он прислал мне графики относительной частоты появления каждого числа, я вынужден был согласиться, что проблема существует. Я предложил множество возможных объяснений, и все они оказались неправильными. В итоге Жасмин доказал, что низкое потребление мощности единственным светодиодом в сравнении с более высоким потреблением мощности шестью светодиодами позволяет таймеру работать немного дольше, когда напряжение незначительное. Это увеличивало вероятность того, что он остановится в течение именно этого периода.
В результате Жасмин предложил альтернативную схему, в которую был добавлен второй таймер 555, а выходы от этих двух таймеров были объединены элементом Исключающее ИЛИ. Он успешно доказал, что это устраняет перекос в сторону числа «один». Я был в восторге от того, что один из моих читателей узнал так много, прочитав мою книгу, что смог выявить и устранить обнаруженную проблему.
В новом издании я опустил замедляющий конденсатор, который вызывал указанную проблему. Но я не привожу схему Жасмина, потому что она оказалась довольно сложной. Каждый кубик должен иметь собственную пару таймеров 555, а также, как он предлагал, элемент Исключающее ИЛИ. Он использовал также диоды, которые я заменил бы элементами ИЛИ, и тогда на макетной плате едва хватило бы места.
С его разрешения я бесплатно пришлю предложенную им схему любому, кто свяжется со мной (с помощью процедуры, описанной в предисловии). Я не могу привести ее здесь, потому что мне пришлось бы полностью перерисовать схему, чтобы уместить на странице.
Альтернативные варианты
Вы, возможно, думаете, что есть более простой способ замедлить отображение без влияния на случайный характер. При просмотре онлайн- ресурсов я обнаружил, что кто-то соединил эмиттер n-p-n-транзистора с контактом 7 таймера, а между базой и коллектором включил конденсатор, чтобы при отключении питания выходной сигнал транзистора постепенно снижался. Другие разработчики использовали аналогичное решение для своих схем игральных костей. Однако я подозреваю, что такое решение может привести к той же проблеме, которую обнаружил Жасмин.
Я также видел схемы с «замедляющим» конденсатором, как и у меня (например, на сайте Doctronics). Я думаю, что они почти наверняка страдают указанным недостатком.
Мой окончательный ответ может вас не удовлетворить: я не знаю, как достичь замедляющего эффекта, не добавляя компоненты, усложняющие схему.
И все же, когда написание этой книги подходило к завершению, мой друг и редактор Фредрик Янссон (Fredrik Jansson) предложил подавать питание на таймер 555 от отдельного стабилизатора напряжения, чтобы оградить его от колебаний напряжения в остальной части схемы. Мне понравилась эта идея, но уже не было времени проверить ее перед публикацией книги.
Я собрал совершенно другую схему для игральных костей на основе микроконтроллера PICAXE, но обнаружил, что он также имеет свои проблемы в связи с несовершенством генератора случайных чисел, встроенного в микросхему.
В эксперименте 34 (последнем в этой книге) вы обнаружите, что я создал еще один имитатор игральных костей, используя среду Arduino. Но опять-таки, мне пришлось положиться на встроенный генератор случайных чисел, а я не вполне уверен, что он создает равномерно распределенный диапазон случайных чисел.
Проблема генерации случайных чисел не так проста, как кажется. После электронной переписки с Жасмином я так заинтересовался ею, что подробно исследовал эту тему в книге Make: More Electronics, а также написал статью об этом в журнале Make (выпуск 45), совместно с Аароном Логом (Aaron Logue), который ведет небольшой веб-сайт с описанием созданных им устройств. Он познакомил меня с генератором шума на основе транзистора в режиме лавинного пробоя, случайный сигнал которого затем обрабатывается хитроумным алгоритмом, авторство которого приписывают величайшему теоретику вычислительных систем, Джону фон Нейману. Это, думаю, самый близкий к идеалу генератор случайных чисел, который можно придумать, но количество микросхем в нем довольно велико.
Все эти усовершенствования выходят за рамки книги для начинающих. Если у кого-либо из читателей появится действительно простое улучшение представленной здесь схемы игральных костей, которое позволит добавить эффект замедленного отображения, я с радостью буду ждать электронного письма (да, я их читаю).
Осталось лишь привести фотографии завершенных устройств электронных игральных костей. Вариант, изображенный на рис. 4.152, был приведен в первом издании этой книги в 2009 году.