Сейчас, когда Arduino продолжает триумфальное шествие по планете, вряд ли кого-то удивишь схемами на макетной плате. Белые беспаечные макетные платы уже стали обязательным элементом наборов для гиков. И всё-таки я решила попробовать заинтересовать юных программистов из летней школы GoToCamp: провести для них мастер-класс по основам цифровой схемотехники, оканчивающийся сборкой интересного устройства – генератора случайных чисел.


При нажатии на кнопку, на индикаторе высвечивается случайное число. В чем же тут случайность, откуда она берется? Сразу раскрою секрет. Цифры генерируются по порядку: 0, потом 1, 2, и так далее. Хитрость вот в чем: очень высокая частота импульсов. Они выдаются так быстро, что цифры сливаются в одну на индикаторе. И совершенно невозможно угадать цифру!

Далее вы прочтете о том, как устроен такой генератор, и как собрать его самостоятельно.

Предыстория


Я работаю методистом в Центре инновационных образовательных технологий (ЦИОТ) МФТИ, а более конкретнопредставляю направление поддержки развития технического творчества. А также участвую в разработке продуктов компании «Киберфизика».

В настоящий момент у нас активно развиваются два курса: основы электроники и программирование на Arduino. По каждому курсу мы делаем видеоматериалы, пишем методические рекомендации, собираем готовые наборы.

Курс по Arduino уже достаточно хорошо проработан: по нему готов замечательный онлайн-курс, получивший недавно награду EdCrunch OOC Award в номинации «Естественные и технические науки».

Но направление по основам электроники имеет большие перспективы: оно не настолько известно и популярно, как Arduino, а значит, есть большой простор для методической работы. В дружественной нам школе GoToCamp, например, Arduino есть уже давно, а вот «чистой» электроникой никто не занимался. Меня пригласили провести у ребят-старшеклассников небольшой мастер-класс. Стоит отметить, что ребята уже к тому моменту занимались Arduino, а значит, рассчитывать на вау-эффект от мигающего светодиода не стоило. Поэтому я как следует продумала программу мастер-класса, о результате напишу далее.


Фотоотчет про сам лагерь и мое мероприятие опубликован на сайте «Занимательная робототехника», а в этом материале хотелось бы немного раскрыть технические подробности.
Собирали схемы из привезенных мною с собой наборов «Киберфизики»:

Как устроен «железный» генератор случайных чисел


Вот схема генератора случайных чисел, которую я предложила собрать (кликабельно):

Выглядит сложно? На самом деле, она близка сердцу любого программиста. Ведь она сделана из четырех отдельных элементов – как программа из четырех функций. Далее компоненты просто стыкуются между собой: выход одного элемента перенаправляется на вход следующего.


Кто любит программировать в Linux, наверняка вспомнит концепцию pipe – таких «труб», которые обозначаются черточкой «|» и позволяют из многих маленьких программ (даже написанных на разных языках программирования) быстро составить работающий скрипт. Лично я эти «трубы» просто обожаю и часто использую. Чувствуешь себя водопроводчиком Марио
Теперь рассмотрим подробнее элементы этой схемы

Генератор импульсов


В качестве генератора импульсов выступает популярнейший таймер 555. На выходе таймер выдает серию импульсов, которая будет «подталкивать» счётчик и заставлять его прибавлять значение.
Внутреннее устройство микросхемы таймера не очень просто объяснить новичку. Но зато эту микросхему очень удобно использовать так, как любят программисты – в режиме «чёрного ящика». Выводы таймера 555:

На этом рисунке выводы питания обозначены красным, входы – зеленым, выходы – синим. Мне понравился такой способ изображения цоколевки микросхем, я взяла его из англоязычной Википедии.
А вот как эта микросхема используется в конкретно нашей схеме. Ничего сложного – абсолютно стандартным образом, по типовой схеме
Режим работы таймера задается тремя элементами: резисторами R1 и R2 и конденсатором C1.


Просто подставив в эту формулу значения (или воспользовавшись онлайн-калькулятором, если лень считать), получаем частоту 40 Гц – то есть 40 колебаний в секунду. Соответственно, период будет 25 миллисекунд, и такую частую смену цифры на индикаторе человеческий глаз никогда не заметит.
Четвертый вывод отвечает за сброс и работает в инверсном режиме: чтобы произошел сброс, нужно замкнуть его на «минус». Поэтому через подтягивающий резистор он соединен с «плюсом» питания, а через кнопку с «минусом». Пока удерживаем кнопку «сброс», таймер стоит на месте и не выдает ничего – в это время можно полюбоваться на цифру на индикаторе.

Счётчик


Счётчик – это очень простая штука, практически как переменная i в программировании. Счётчик накапливает в себе число, вот и всё. А инкремент счётчика происходит по внешнему импульсу. Можно сделать по нажатию кнопки, а можно, как в нашем случае, от таймера.
Микросхема счётчика устроена так:

  • Цифра выводится как двоичное число на выходах Q1…Q4
  • По сигналу на 15-м выводе («Тактовый сигнал») счётчик прибавляет единицу
  • В десятичном режиме после цифры 9 счётчик сбрасывается и начинает опять с 0

В нашей схеме счётчик тоже подключается достаточно просто:
  • Вход U/D (направление счёта) подключен к «плюсу» питания, чтобы счёт шел по возрастающей.
  • Выводы PE (разрешение предустановки), J1…J4 (входы данных для предустановки счётчика), B/D (двоичный режим счёта), CI и CO (вход и выход переноса) все подключены к «земле», так как их функционал в данной схеме нам не нужен

Дешифратор


Если проводить опять аналогию с программированием, то дешифратор – это как библиотечная функция, которая двоичному числу ставит в соответствие набор светящихся сегментов на объекте типа «стандартный семисегментный индикатор». Бывают некоторые гики, которые сами это всё прописывают через микроконтроллер – я видела примеры и на Arduino, и на «чистых» ATMega. Не делайте так! Есть же специальная удобная микросхема для этого!



Здесь самое важное – это входы для двоичного числа (A, B, C, D) и выходы («a» … «f»), которые напрямую подключаются к соответствующим сегментам, которые точно так же промаркированы буквами.
Служебные входы:

  • вход для тестирования индикатора (LT) и для его гашения (Bl) заведены на «плюс»
  • вход для «замораживания» цифры (LE) – на «минус».

Семисегментный индикатор


Здесь всё совсем просто. Используется семисегментный индикатор с общим катодом.
Каждый из светодиодов подключается через токоограничивающий резистор. Бывает, что некоторые стараются сэкономить на резисторах и подключить семисегментник через только один резистор – на этот случай в документации на индикатор есть специальная картинка:
Слева – «подключение здорового человека». Каждый светодиод – через свой резистор. Справа – «подключение курильщика», только один резистор на всех. Несоблюдение этого правила приводит к тому, что некоторые светодиоды забирают себе больше тока, чем другие, и из-за этого сегменты светятся неравномерно.

Монтажная схема генератора случайных чисел


Вот и всё! Теперь, для тех, кто хочет сам собрать такую схему:



И список компонентов к ней:

  1. Микросхема таймера NE555
  2. Микросхема счётчика CD 4029
  3. Микросхема дешифратора CD 4511
  4. Тактовая кнопка
  5. Семисегментный индикатор с общим катодом (например, Kingbright SC56-11SRWA)          
  6. Электролитический конденсатор 10 мкФ, рабочим напряжением не менее 25 В         
  7. Резистор 1,2 кОм: 3 шт.
  8. Резистор 560 Ом: 7 шт
  9. Перемычки
  10. Беспаечная макетная плата
  11. Батарейка (в нашем случае, 9 вольт, но схема работает и в более широком диапазоне — от 5 до 12 вольт, нужно лишь подкорректировать номиналы резисторов)
  12. Разъём для подключения батареи

Схема в собранном виде (фото кликабельно):



Зачем это нужно?


Многие могут спросить: а зачем вообще нужен «железный» генератор случайных чисел? Не проще ли взять микроконтроллер, запрограммировать его… Ведь генератор случайных чисел — это уже давно известное всем готовое решение!

Тут мне вспомнилась история о том, как я в группе товарищей участвовала в техническом оснащении полевой ролевой игры «Чужие под землёй» (естественно, по мотивам известного фильма). Важным элементом игры был фонарики, которые должны были спустя некоторое время после включения «барахлить» и выключаться на время — чтобы создавать страшную и безысходную атмосферу. Для маленьких фонариков была разведена крошечная плата с микроконтроллером, настолько мелким, что стандартная библиотека генератора случайных чисел вместе с программой в него не влезала! Времени оптимизировать не было, заменять микроконтроллер тоже ни в коем случае было нельзя.

В итоге, я стала всерьез смотреть в сторону альтернативного варианта — брать значение со свободно «висящего» входа микроконтроллера, из АЦП. Даже протестировала его, и помню, что результат оказался не вполне случайным (некоторые значения систематически встречались чаще других), но для нужд игры вполне подходил. Забавно, что создавать псевдослучайное число из недр микроконтроллера чисто математическим способом оказалось сложнее, чем брать неопределенность напрямую, из окружающего мира…

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

Итоги


Мастер-класс, проведенный мной в GoToCamp, показал, что такую схему подростки-старшеклассники вполне могут собрать и понять, если им подробно объяснить все шаги и дать предварительный «загруз» в виде 10 более простых схем начального уровня.



Ребята получили важный опыт объединения нескольких простых схем в одну сложную. Мы объединили генератор импульсов, счётчик, дешифратор и семисегментный индикатор в схему — генератор случайных чисел. Обратите внимание, как легко это произошло благодаря понятным интерфейсам между маленькими схемами. Первая схема — генератор импульсов — на выходе имеет меандр, то есть прямоугольный сигнал. Частота этого меандра задает скорость работы счётчика. Счётчик, в свою очередь, «разговаривает» с дешифратором на языке двоичного кода. А тот, в свою очередь, передает данные в уже удобном для семисегментного индикатора виде.


На фото — тестирование генераторов на случайность при помощи секундомера в телефоне :)

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

А главное – изучайте готовые решения и успешные практики! Многое уже придумано до нас. Изучайте «азбуку» цифровой электроники, даже если вы уже уверенный «ардуинщик» или хардкорный микроконтроллерщик. Никогда не знаешь, для чего могут пригодиться те или иные кейсы.

Схема позаимствована из Tronix Book 2 замечательного американского популяризатора схемотехники Гэри Гибсона. А рассказал нам об этой книжке не менее замечательный выпускник МФТИ, инженер, разработчик микропроцессоров Юрий Панчул, за что ему большое спасибо!
Автор – Татьяна Волкова, специалист по учебно-методической работе ЦИОТ МФТИ (направление поддержки развития технического творчества), разработчик продуктов «Киберфизики»
Поделиться с друзьями
-->

Комментарии (111)


  1. OtshelnikFm
    07.11.2016 16:59
    +4

    Правильный посыл — изучайте те самые кирпичики, из которых сложены более серьезные микросхемы. и, или, не, и-не, или-не, триггеры, счетчики — все это достаточно увлекательно. Можно так же помигать диодами, сделать гирлянду, счетчик проходов или открываний чего либо, частотомер, часы (ардуино для этого — это как микроскопом гвозди забивать).

    p.s. а можно же было указать отечественные микросхемы — например 561 серии


    1. robofreak
      08.11.2016 01:33

      Спасибо на добром слове! Многие новички начинают изучать Arduino и быстро проскакивают этап простых, классических схем — вот этих самых «кирпичиков». И несомненно, лишаются некоторой радости, как мне кажется:)

      А отечественные микросхемы — вот не знаю, в чем прикол, но они стоят дороже импортных. Причем, раза в 2 как минимум, если посмотреть на самые ходовые, и их аналоги.


      1. OtshelnikFm
        08.11.2016 09:53
        +1

        о как про цены-то… Не знал. Давно уже радиоэлектроникой не занимался.

        С 14 лет, 6 лет радиоэлектроникой занимался (транзисторы, с лампами не сложилось — уж очень все громоздко, как этап развития — микросхемы конечно же. В начале 2000-х на них подсел), потом бросил, другие интересы (до контролеров так и не дошел), потом начал изучать программирование. И вот в него легко стартанул — все благодаря микросхемам — логические цепочки и там и там оказались очень похожими


    1. areht
      08.11.2016 03:37
      +1

      > ардуино для этого — это как микроскопом гвозди забивать

      Я тут на ценник посмотрел, один cd4029 мне обойдётся почти как attiny. Не говоря об отсутствии склада специализированных микросхем. Ну то есть перепрограммиров ардуину в cd4029 я не потеряю ничего.

      Нет, детям увлекательно, наверно. Но…


      1. LAutour
        08.11.2016 08:20

        Работать напрямую от 9В attyny тоже будет?


        1. areht
          08.11.2016 15:52

          Кстати да, можно ещё и на кроне сэкономить.


      1. robofreak
        10.11.2016 14:33

        Это просто и дешево, только если вы уже умеете программировать ATTiny. Но если мы берем школьника, то для него гораздо проще объяснить вот эти все цифровые логические микросхемы. Всё-таки программирование — отдельная ветка знаний, и мне кажется — она должна следовать после вот этих вот основных «кирпичиков».


        1. areht
          10.11.2016 19:20

          > Это просто и дешево, только если вы уже умеете программировать ATTiny.

          Я думаю, Arduino с его Wired вполне доступны старшекласнику. Я программировать начал раньше, чем узнал закон Ома.

          > Всё-таки программирование — отдельная ветка знаний, и мне кажется — она должна следовать после вот этих вот основных «кирпичиков».

          Мне кажется, отдельная ветка знаний не должна идти поле основных кирпичиков другой вертки знаний.

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


  1. GennPen
    07.11.2016 17:16

    Можно сделать красивее (но на самом деле менее наглядно) чтобы цифра не «бегала», а при нажатии на кнопку обновлялось следующее случайное число.
    Для этого нужно включить генератор на постоянную работу, а в разрыв между индикатором и дешифратором включить запоминающий регистр(если не ошибаюсь, можно сделать второй 4029), который при нажатии на кнопку запоминает текущее значение.


    1. antstar
      07.11.2016 17:59

      схема простая, если немного поколдовать, то можно сделать игру «поймай число» — запомнить число на первом регистре, и попробовать «отловить» такое же на втором


      1. robofreak
        08.11.2016 02:00

        Спасибо за идею! Очень нужны идеи именно игр и прочих развлечений для детей. Я программист по образованию, и для меня триггер или полусумматор — интересны сами по себе, но детям такая мотивация не годится :)


    1. robofreak
      08.11.2016 01:39

      Спасибо за совет! Я попробую, и о результатах напишу в (надеюсь) следующей статье. У меня по плану часть 2 — как превратить всё это в электронный кубик.


    1. BetsuNo
      08.11.2016 12:52

      А зачем дополнительная микруха, когда это уже есть на борту CD4511? Вывод «LE» повесить через килоомник к плюсу, и, чтобы фиксировать новое число, кнопку повесить в параллель с 20-икилоомником от того же «LE» на минус. Ну и генератор, естественно, должен быть постоянно включен. Единственный недостаток подобного подхода — бегающее значение во время удержания кнопки.
      Если еще немного усложнить схему, то можно отключать генератор (может даже и счетчик) на время «простоя».


      1. GennPen
        08.11.2016 13:27

        Для более наглядного пособия, где каждый узел — отдельная микросхема. Получается цепочка: генератор -> счетчик -> запоминающий регистр -> дешифратор -> индкатор.

        А кнопку можно повесить через RC-цепочку, чтобы генерировался короткий импульс.

        Генератор и счетчик не стОит отключать в простое для лучшей генерации случайного числа.


      1. robofreak
        10.11.2016 14:35

        Я тоже подумывала о том, чтобы использовать Latch Enable! У нас мысли работают в одном направлении :)

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


        1. BetsuNo
          10.11.2016 20:38

          Под лишней микрухой подразумевался запоминающий регистр, который предложил добавить GennPen, в виду наличия оного на борту CD4511.


  1. antstar
    07.11.2016 17:52
    +1

    Внутреннее устройство микросхемы таймера не очень просто объяснить новичку.

    если уж к корням возвращаться: почему-бы не использовать кварцевый генератор на И-НЕ? 1 микросхема + кварц — зато можно объяснить что именно из таймера 555 используется в данной схеме


    1. robofreak
      08.11.2016 01:38

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

      Спасибо за отзыв! Я думаю, можно то же самое демонстрировать и на логической микросхеме, так будет даже интересно. Тут как в математике: чем больше разных способов доказать теорему, тем красивее :)


  1. safari2012
    07.11.2016 18:01
    +1

    можно ещё пальцами замыкать аналоговый вход (в стандартной схеме вместо потенциометра) и смотреть напряжение, которое будет довольно случайным (в определенном диапазоне, естественно).


    1. robofreak
      08.11.2016 02:02

      Будет от сопротивления пальцев зависеть :)


      1. scratch_book
        08.11.2016 23:24

        А вы смотрите не первую, а третью цифру (десятые доли процента), она будет очень быстро изменяться.


  1. michael_vostrikov
    07.11.2016 18:12

    При нажатии на кнопку, на индикаторе высвечивается случайное число. В чем же тут случайность, откуда она берется? Сразу раскрою секрет. Цифры генерируются по порядку: 0, потом 1, 2, и так далее. Хитрость вот в чем: очень высокая частота импульсов. Они выдаются так быстро, что цифры сливаются в одну на индикаторе. И совершенно невозможно угадать цифру!

    Немного не в тему, но при чтении статей про квантовую неопределенность у меня возникали похожие мысли. То есть вот имеется фотон с неизвестным спином, и этот спин не то чтобы неопределен и появляется в момент наблюдения, а просто меняется очень быстро, или может не он сам, а какие-то связанные с ним параметры, то есть присутствуют какие-то высокочастотные колебания. И в момент наблюдения просто фиксируется текущее значение спина, колебания прекращаются, и повторное измерение дает то же значение. Так вроде и случайность присутствует, и магии особой нет. Но я не настолько разбираюсь в физике, чтобы понять, насколько эти мысли правильные.


    1. marenkov
      07.11.2016 18:21
      +3

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


    1. potan
      07.11.2016 19:36

      Это противоречит квантовой спутанности. У двух фотонов может быть одинаковый спин — получается что измерение одного должно останавливать колебания и у второго, хотя они пространственно разнесены.


      1. michael_vostrikov
        08.11.2016 06:30

        Ну так, насколько я понимаю, в этом и есть особенность квантовой спутанности — измерение состояния одной частицы влияет на результат измерения состояния второй, даже если они разнесены за пределы известных взаимодействий.


    1. napa3um
      07.11.2016 20:14
      +1

      Теорема Белла показывает, что у фотона до измерения нет никаких скрытых параметров (да и фотона нет в каком-то смысле). Фотон непосредственно при измерении «создаёт» свои параметры согласно своей волновой функции и функции волны-детектора.


      1. michael_vostrikov
        08.11.2016 05:57

        Вы, похоже, знакомы с предметом, можете поподробнее рассказать? Из того, что я знаю о теореме Белла, не вижу каких-то противоречий. Я же не утверждаю, что спин заранее задан, я предполагаю, что есть некоторый процесс, при остановке которого спин фиксируется. То есть, случайность есть, теория вероятности работает, но источник случайности — действия наблюдателя.


        1. napa3um
          08.11.2016 10:11

          Попробуйте начать со статьи http://elementy.ru/trefil/21102/Teorema_Bella. Но подозреваю, что ваше «непонимание» связано со способом использования речевых оборотов. «Некоторый процесс, при остановке которого спин фиксируется» и есть эволюция волновой функции фотона. Важно только понимать, что этот «процесс» скорее «математический», ежели физический, т.е., нет никаких способов нам его объективно зафиксировать, кроме как предположить его наличие по его результату.


          1. michael_vostrikov
            08.11.2016 12:50

            Я и предположил, как может быть реализован этот математический процесс на физическом уровне. Не «оно само случайно выбирается», а некоторый равномерный колебательный процесс, случайность в измерениях которого появляется благодаря наблюдению в произвольный момент времени.
            Эту статью я читал, там только общие слова без подробностей. И противоречий с такими предположениями я не нашел.
            Если развить мысль дальше, то возможно, потенциальная мощность квантовых вычислений как-то связана с этими высокочастотными процессами. То есть, их можно рассматривать как аналог перебора на высокой скорости всех возможных вариантов в обычных вычислениях. Если я где-то не прав, буду признателен за конкретные примеры.


            1. napa3um
              08.11.2016 13:13

              «Я и предположил, как может быть реализован этот математический процесс на физическом уровне.» — это замаскированный наивный платонизм :). Современная наука опирается на чуть более ограниченные принципы ([нео/пост]позитивизм), которые суждения подобные вашим относит к метафизике или философии, а не к объективным научным знаниям. Вы «не правы» в том, что ваш поиск «физических воплощений математических вычислений» бесконечен — каждое новое воплощение вы вынуждены будете описать в математических формализмах и отправляться дальше на формулирование «физических» обоснований этих математических формализмов, и так бесконечно. По-сути, вы пытаетесь когнитивные процессы исследователя («математические» процессы) сделать объективным свойством самого исследуемого предмета.


              1. michael_vostrikov
                08.11.2016 14:21

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


                1. napa3um
                  08.11.2016 14:53

                  Магия «оно само» неустранима в своём пределе, сам принцип каузальности (причинно-следственности) постулируется как данность, изначальное свойство объективной реальности, его не получится каким-то образом обосновать, не опираясь на него же. В общем, я обозначил суть ваших затруднений в том философском ключе, в котором сам понял ваши затруднения, могу быть совсем не прав в этом своём понимании, но добавить мне больше нечего, да.


  1. marenkov
    07.11.2016 18:13
    +9

    Все это интересно и познавательно, но только не имеет никакого отношения к генератору случайных чисел. С таким подходом можно и секундомер называть генератором случайных чисел (и даже часы, если смотреть на них не слишком часто). Хорошо, что чему-то учите детей, но не вводите в заблуждение юных программистов.


    1. Idot
      07.11.2016 18:58

      Почему не имеет? Вполне соответствует Seed от Таймера, просто сам генератор — дубовый и линейный.


      1. marenkov
        07.11.2016 19:08
        +3

        И все же интереснее и правильнее было бы приделать к нему источник энтропии, который бы и останавливал счетчик. Первое что пришло в голову — счетчик Гейгера. Т.е. человек запускает таймер, а выявленная частица останавливает.


        1. lohmatiyy
          08.11.2016 01:19
          +1

          К чему такие сложности? Можно просто оцифровывать шум с какого-нибудь полупроводникового элемента. Для любительской схемы стабилитрон подходит идеально.


    1. Barabas79
      08.11.2016 01:19

      C натяжкой можно и это устройство назвать генератором случайных чисел )
      Просто тут в качестве источника случайных чисел используется большое соотношение между частотой генератора и максимальной скорости реакции пользователя, человек просто физически не может нажать кнопку быстрее допустим 0.1 сек )


  1. napa3um
    07.11.2016 20:17
    +2

    В школе «делали» такой же генератор случайных чисел на базе секундомера электронных часов Montana. Можно было играть на щелбаны или использовать в других играх вместо игровых костей.


    1. robofreak
      08.11.2016 02:21
      +4

      Часы «Монтана» — вообще памятник гик-культуры современности! У нас в стране это всё равно, что на Западе — Pocket Protector. :)


  1. enclis
    07.11.2016 22:28
    -2

    Вот наверное самый простой настоящий генератор случайных чисел.


    1. beeruser
      07.11.2016 22:57
      +1

      псевдослучайных чисел.


  1. fomonster
    08.11.2016 01:18

    Аж прослезился от наплыва ностальгии. Как давно это было… Школа 7-й класс… паял такие штуки.


    1. robofreak
      08.11.2016 02:15

      Между прочим, в наши дни необходимость такого девайса более актуальна, чем тогда. Появились всякие настолки с кубиками на 20, на 40 граней. Осталось вернуть школьников к паяльникам :)


  1. andersong
    08.11.2016 01:18
    +3

    Свой первый «железный» ГСЧ а-ля «электронный кубик» я собрал году в 85м из моторчика, куска фольгированного текстолита с процарапанными секторами и газоразрядного индикатора ИН-12 )))


    1. robofreak
      08.11.2016 02:11

      Интересно, а какую роль играл моторчик?


      1. masai
        08.11.2016 02:54

        Перемещал контакт между секторами, думаю.


        1. andersong
          08.11.2016 06:15

          Точно. На валу моторчика была закреплена пружинка от авторучки. При нажатии на кнопку моторчик включался и пружинка бегала по секторам.
          Даже корпус склеил из пластика дихлорэтаном. До сих пор валяется где-то в недрах гаража.
          Очень мы тогда любили настольные игры, покупных было мало — рисовали сами.


          1. robofreak
            10.11.2016 14:40

            Это, выходит, тогда скорее рулетка была! Играли в «Что, где, когда»? :)

            У меня вот в детстве кубик постоянно терялся, поэтому мне очень нравился электронный кубик, встроенный в одну настольную игру. Формат игрового поля был большой, поэтому потерять кубик возможно было только вместе с игрой :)


  1. electronus
    08.11.2016 01:18

    CD4026 была бы уместнее


    1. robofreak
      08.11.2016 02:22

      С ней проще, конечно. Но тогда и не так интересно было бы! :)


      1. electronus
        08.11.2016 02:35

        Именно на ней и делал в детстве. В качестве генератора — палец и 50Гц с оного. Т.е. один корпус и один индикатор по-сути


      1. 4ebriking
        08.11.2016 05:02

        мне кажется больше CD4060 уместнее была бы.
        и дешевле.
        Впрочем, 555-я сама по себе — пусть будет в обучении, полезный «кирпичик». Мегауниверсальный.
        Хотя 4060-я — открываем зарядку батареек — вот она, а обе этих счётчик и дешифратор — так и останутся одноразовыми,.
        Впрочем, при цене нышних МК — похоже, надобность обучения «железу россыпью» — сильно дискуссионный вопрос, даже на уровне понимания (как «вообще», так и столь отлично выполненное конкретно это — не слишком ли напрасен столь великолепный труд?) На мой взгляд это как рассказ про молекулу воды в «повареной книге». (я сам и на 155-й паял было дело, если что)


        1. LAutour
          08.11.2016 08:06

          Если вдруг придется собрать асинхронную схему — микроконтроллеры не вариант, а ПЛИС, которая может заменить рассыпуху, целесообразна для сложных схем. К качеству электропитания рассыпуха тоже толерантнее.


          1. SADKO
            09.11.2016 13:44

            Я с детишками, мааленькими, вот такую ПЛИСку использую…


            1. tirus
              09.11.2016 13:53

              Здорово! А какие проекты? С их сайта или свои? Можете поделиться?


            1. robofreak
              10.11.2016 13:36

              Это круто! А вы делаете детям ликбез по основам цифровой электроники? Или сразу к программированию переходите? Мы тоже думаем как-нибудь ввести ПЛИС, в качестве одной из следующих ступеней…


        1. robofreak
          08.11.2016 16:56

          Есть замечательная книжка Чарльза Петцольда «Код», она для меня как ориентир. Там автор именно проходит всю историю и всё устройство компьютера кирпичик за кирпичиком. В свое время меня (курсе на 2-м) очень сильно впечатлило: я тогда училась программированию, но совершенно не представляла, что там у компьютера внутри. Эта книжка по степени воздействия была примерно как открытие для себя Unix-систем (в то же самое время). Хотя я поняла из нее тогда в лучшем случае половину. Думаю, что для программиста это полезное «расширение горизонтов».


  1. evilroman133
    08.11.2016 01:18

    А уверены что в первой схеме выход счётчика CO надо на землю замыкать?


    1. robofreak
      08.11.2016 02:08

      Уже исправили! Спасибо за внимательность :)


  1. LAutour
    08.11.2016 01:19

    В справочнике «Микропроцессорные структуры» Шевкопляса можно рассмотреть пример работы аппаратного псевдогенератора случайных чисел без постоянного генератора на входе.


    1. robofreak
      08.11.2016 02:22

      Спасибо, посмотрю! Интересно стало, как это — без генератора…


  1. technomancer
    08.11.2016 01:19

    Простите, но чем этот «железный генератор» с точки зрения того фонарика отличался бы от цикла с инкрементом счетчика без задержки, постоянно крутящегося в маленьком микроконтроллере?


    1. robofreak
      08.11.2016 02:10

      В том-то и дело, что ничем не отличался бы. Просто тогда мне эта мысль в голову не пришла. Я тогда про такой вариант не знала, и вместо этого сделала генератор на основе шума с АЦП :)


  1. 3cky
    08.11.2016 01:19

    Можно пойти дальше и сделать схему генератора псевдослучайных чисел на сдвиговом регистре, для юных программистов это будет и интереснее, и полезнее.


    1. robofreak
      08.11.2016 13:18

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


  1. fotofan
    08.11.2016 02:05

    Убираем дешифратор и индикатор. К выходу счётчика подключаем четыре LED. Смысл остаётся тот же, зато юные программисты учатся на ходу читать бинарный код


    1. robofreak
      08.11.2016 13:33

      Так отлаживать сложнее :) А вообще, тема хорошая — например, устроить викторину на угадывание двоичных чисел. Дети такое любят, а если ещё и с призами… Я делала такую викторину на чтение номиналов резисторов по цветовым полоскам, было весело


      1. fotofan
        08.11.2016 16:52

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


        1. robofreak
          10.11.2016 14:42

          Такое можно делать в инженерном кружке (есть хорошие кружки по типу «Советский инженер»). Там дети сами собирают себе блок питания и все остальные инструменты, которые им нужны для работы.

          Спасибо за совет, решение интересное!


  1. areht
    08.11.2016 03:02

    > Для маленьких фонариков была разведена крошечная плата с микроконтроллером, настолько мелким, что стандартная библиотека генератора случайных чисел вместе с программой в него не влезала!

    У вас же вот ГПСЧ — счётчик. Неужели прям не влез?


    1. robofreak
      08.11.2016 13:18

      Так в этой версии его останавливает пользователь. А там-то, в фонарике, должен был без участия пользователя срабатывать :)


      1. areht
        08.11.2016 16:00

        Это да, нужно взять 2 счётчика с разными основаниями.

        «настоящий» ГПСЧ гораздо сложнее того, что нужно фонарику.


  1. Fen1kz
    08.11.2016 03:07
    +1

    Мне кажется может подойти что-нибудь с мультиплеером. Кубик хорошо, но вот спаять и коллективно играть это уже совсем другой уровень. Для примера, в СССР была игра "Фотоохота", там вроде простая схема. Прикладываю картинку, другой информации не нашлось: https://19.img.avito.st/640x480/1660167219.jpg


    Edit: Или вот тут продают: http://novbu.ru/belgorod/igry/elektronnaya-igra-fotooh_663288


    1. robofreak
      08.11.2016 16:49

      Прикольно, спасибо! Не знала про такую. Советские игрушки — это очень высокий уровень, если вспомнить те же «Луноход» или «Детскую логическую машину».

      Сразу хочется купить и разобрать :)


  1. LAutour
    08.11.2016 08:31

    По электрической схеме: почему совсем отсутствуют конденсаторы по цепям питания микросхем?


    1. KonstantinSoloviov
      08.11.2016 12:42

      Так ГСЧ-же — глюки по питанию рассматривать как дополнительный источник энтропии )


    1. robofreak
      08.11.2016 16:42

      На батарейках и так работает нормально. У нас нет высоких частот в схемах и нет помех по питанию, именно потому, что батарейки.


      1. LAutour
        08.11.2016 17:19

        Высокие частоты для глюков не обязательны.


        1. tirus
          08.11.2016 17:57

          А расскажите, пожалуйста, как надо правильно ставить блокировочный конденсатор в цепях питания на макетную плату?


          1. alpik
            16.02.2017 13:31

            интересно видеть воплощение идеи, о которой сам задумывался несколько лет назад :)

            а вы не думали про игровой джойстик/тач панель, с крестиками/кнопками на тыльной стороне экрана — чтобы можно было играть, не заслоняя пальцами экран?


            1. ibnteo
              16.02.2017 14:12

              Вот как раз в клавиатуре нового типа и можно избавиться от устаревшего стандарта, в той же экранной MessagEase Keyboard своя раскладка.


              1. VaalKIA
                16.02.2017 17:18

                С вёрсткой на вашем сайте всё плохо, лого наехало на строку меню и оно не доступно для нажатия.


                1. tirus
                  08.11.2016 21:17

                  Даже интересно стало, надо взять осциллограф, посмотреть в разных точках макетки с разными конденсаторами — что и как там происходит :)


  1. Samad0000
    08.11.2016 12:35

    ничего нового, еще в журнале «Радио» 80-х годов были схемы генераторов случайных чисел на логике


    1. ionicman
      16.02.2017 12:13

      Так а смысл учиться на что-то очень хитрое, если есть блютус-клавы компактные или фаблеты/планшеты?

      нишу профессионалов
      Можно задать вопрос — кто эти профессионалы, кому надо срочно кучу текста печатать с телефона?

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

      Из всего этого я бы предположил, что вашей целевой аудиторией являются скорее гики.


  1. Hoksmur
    08.11.2016 12:35

    Для обучения — хорошо, наглядно!

    По поводу случайных чисел:

    В итоге, я стала всерьез смотреть в сторону альтернативного варианта — брать значение со свободно «висящего» входа микроконтроллера, из АЦП. Даже протестировала его, и помню, что результат оказался не вполне случайным (некоторые значения систематически встречались чаще других), но для нужд игры вполне подходил.

    А вы как делали? ADC следует подключить к реальному источнику сигнала (стабилитрон, внутренний термодачик, ...), желательно шумного, и набирать двоичное число из младших бит оцифрованного значения. То есть оцифрованное значение будет измеряемая величина+шумы, если мы будем брать последний бит, то почти наверняка он будет случайным (зависит от разрядности АЦП и уровня шумов). Опять же, это должны быть разные выборки АЦП для каждого бита.


    1. robofreak
      08.11.2016 16:42

      Я брала просто висящий в воздухе вывод АЦП, ни к чему не подключенный. Результат, скажем так, был ПОЧТИ случайным. :) В том смысле, что некоторые закономерности встречались, но в общем и целом, результат на тот момент устраивал. Я еще поищу, у меня должны были сохраниться графики с тех пор.


      1. LAutour
        08.11.2016 17:10

        просто висящий в воздухе вывод АЦП, ни к чему не подключенный.

        Типичный пример того, как нельзя делать.


        1. robofreak
          10.11.2016 13:43

          Я это знаю теперь! Тогда не знала. Кстати, мелкие цифровые схемы в этом плане опять же полезно собирать — приучают к дисциплине :)


  1. KonstantinSoloviov
    08.11.2016 12:49

    получаем частоту 40 Гц – то есть 40 колебаний в секунду

    Что-то маловато — всего 4 круга по 10. Вспоминая те же экзерсисы с электронными часами, при должной тренировке очень ловко можно было попадать на одинаковые цифры — 40 или 400 килогерц было бы куда уместнее.


    1. GennPen
      08.11.2016 13:33

      Это же пример работы логических микросхем для детей, он не претендует на роль настоящего генератора случайных чисел. =)


    1. Foosa
      16.02.2017 11:32
      +4

      Как только станет понятно, что это дает приемущество/упрощает работу, вопрос о переучивании пропадет сам собой. Научились же смартфонами пользоваться. И с кнопочной Т9 все перешли на экранную.


      1. KonstantinSoloviov
        08.11.2016 20:41
        +1

        Прекрасно. Хакнуть, а потом разобраться и улучшить :) Кстати схема хороша тем, что прижав пальцем в нужном месте в нужное время можно добиться ожидаемого результата…

        Мне нравится то, что вы делаете. Поставив эту точку в понимании и заинтересовав можно идти вглубь: счетчик-триггер-логический элемент и (чего уж там :) транзистор или напротив подниматься выше: регистр-микропроцессор-программа.

        Вы, конечно, уже видели эти горящие от восторга глаза? А ради чего еще жить? :)


        1. robofreak
          10.11.2016 13:52

          Я, как программист по образованию, сердцем тяготею больше к направлению «вверх» — чтобы, в конечном счете, люди приходили к пониманию того, как же всё-таки работает компьютер. У Чарльза Петцольда книга именно так построена.

          Но холодным умом понимаю, что пробелы сейчас в образовании на «нижнем» уровне. Школьная физика и близко не закрывает необходимый минимум технической грамотности. И дело не в школьной программе (она-то как раз довольно насыщенна), а в способе подачи. Ни в моем детстве, ни сейчас школьники и близко никаких опытов не проделывают, даже в режиме «чёрного ящика» не могут использовать транзистор. Зато в учебнике их кормят параграфами про электронно-дырочную проводимость.

          Надо менять ситуацию, и я стараюсь эту точку зрения по мере сил доносить до нашей педагогической общественности :)


  1. softi
    08.11.2016 16:39

    А зачем здесь Ардуино? Стрельба из пушки по воробьям?


    1. robofreak
      08.11.2016 16:39

      В этом примере Arduino не используется вообще.


  1. grey_rat
    08.11.2016 21:09

    А как на счёт мигалки на одном транзисторе? Здесь сам светодиод наглядно показывает случайность в виде разной яркости и длительности моргания.


    1. GennPen
      09.11.2016 07:50

      > Здесь сам светодиод наглядно показывает случайность в виде разной яркости и длительности моргания.

      Там же в комментах:

      > А помечу частота мерцания была не всегда одинаковой??
      >> это происходит до полного заряда конденсатора, после частота мерцания стабильная?


      1. grey_rat
        09.11.2016 18:36

        Частота да, а вот длительность и яркость разные.


        1. GennPen
          09.11.2016 18:52

          Мне кажется это из-за не синхронности кадров камеры и коротких вспышек светодиода.


          1. grey_rat
            10.11.2016 18:44

            на днях спаяю на коленке, проверю


  1. AVKinc
    10.11.2016 13:56

    Раньше такие схемки в журнале "«Юный техник» печатали. Для детей по сути.
    А теперь взрослые дядьки обсуждают. И непонятки даже есть.
    Печаль наверно это…


    1. robofreak
      10.11.2016 14:03

      Это, безусловно, печаль. Я согласна. В СССР с научно-техническим образованием молодежи было намного лучше, чем сейчас. Я думаю, что вполне реалистично позаимствовать оттуда лучшие практики и внедрить их в современные школы. Я занимаюсь пропагандой этого :)

      Не знаю, обрадует это или огорчит, но на Западе ситуация такая же. Спад интереса школьников к науке и технике заметен и у них. Общались недавно с американским профессором MIT, он с сожалением признавал, что американские школьники с большей охотой идут в бизнес и менеджмент, чем в естественные науки.

      А повод для оптимизма всё-таки есть. Сейчас мы видим, что инженерное творчество и всё с ним связанное находится на волне интереса. Возьмем хотя бы такое новое веяние, как «мэйкерство».


  1. aso
    10.11.2016 14:03

    Простейший ГСЧ — это просто контакт.
    Ставим кнопку включения в верхнее плечо входа (обычно их ставят наоборот, вниз — для уменьшения дребезга) — и вуаля!
    Переключатель, разумеется, желательно похуже. %))
    Ещё можно какое-нибудь реле подключить после генератора — или поднять частоту самого генератора.
    А для этого достаточно мультивибратора на ~сотню килогерц/мегагерц. ;)
    Ну и ещё есть вариант псевдослучайной генерации последовательности на сдвиговом регистре с отводами и исключающем ИЛИ (элементарно реализуется «в железе» — но я с налёту не придумаю, как его реализовать программно).


    1. robofreak
      10.11.2016 14:26

      Аутентичность этого переключателя будет возрастать со временем по ходу устаревания контакта :)

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


  1. areht
    10.11.2016 19:30

    Скажите, а зачем здоровому человеку «сэкономить на резисторах и подключить семисегментник через только один резистор»? Если уж экономить — поставить один диод…


    1. robofreak
      12.11.2016 16:12

      Тут скорее даже не «сэкономить», а «полениться» :) Ведь поставить один резистор в схему куда проще, чем шесть…


      1. areht
        12.11.2016 22:24

        Вы, похоже, не поняли меня… СЕМИсегментник подключен ОДНИМ резистором. Что он покажет?


  1. igordata
    11.11.2016 02:01

    На просторах интернета встречал схему робота, гоняющегося за источником света или ползающего по черной линии.

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

    Суть в том, что датчики подключаются ко входам стереоусилителя, а моторчики к выходам. Если подключить их перекрёстно, то при подаче света на датчик, будет крутиться противоположный моторчик, и «робот» развернётся в сторону света так, чтобы на оба датчика приходилось одинаковое количество света. Если перекрёстно не подключать, то будет избегать темноты, что и даст возможность не съезжать с нарисованной линии.

    Кажется это была малюсенькая lm386. Можно даже наверное без пайки обойтись.


    1. igordata
      11.11.2016 02:01

      ну да, я хотел сказать, что не только встречал, но и собирал разок


      1. LAutour
        12.11.2016 09:55

        Вот:
        http://www.myrobot.ru/stepbystep/el_simple_robot.php