Рисуем на экране осциллографа

    Hello HabrМоё первое знакомство с осциллографом состоялось в школьном радиокружке, тогда же я узнал про режим X-Y, при котором отключается развёртка и лучом управляется непосредственно напряжениями, подаваемыми на входы X и Y. Снова эта тема всплыла через несколько лет, в университете, когда на лабораторных работах при помощи фигур Лиссажу мы учились определять кратность частот сигналов. Потом пошёл работать в программисты, и следующую пару десятилетий к бегающему по экрану лучику я не возвращался, пока в конце прошлого года мне не позвонили соседи. Наводя порядок в подвале, они наткнулись на старую коробку с электроникой, которую тут же и подарили мне, в обмен на обязательство самому всё забрать. Так мне достался старый аналоговый осциллограф, минимум 25-летней давности. К удивлению, после замены старого сетевого кабеля он сразу же заработал, и я решил применить свои программистские навыки, чтоб нарисовать что-нибудь на экране.

    В Интернете нашлись примеры созданных на компьютере звуковых файлов, которые надо проигрывать, подключив входы осциллографа к правому и левому каналам аудиокарточки. Некоторые из них даже не страшно слушать человеческому уху. Мне же захотелось управлять лучом осциллографа прямо из программы, в реальном времени, так что я выбрал микроконтроллер. У Arduino DUE есть прямо на борту два 12-битных цифро-аналоговых-преобразователя, а тактовая частота 84 MHz и 96 KB памяти снижают требования к оптимизации программ. При написании кода можно поставить читаемость кода впереди скорости, при этом контроллер всё равно справляется с созданием довольно сложных изображений. Никаких шилдов или иной внешней электроники не требуется, осциллограф можно подключать прямо к выходам ардуинки:

    image

    Была создана простейшая графическая библиотека с функциями для рисования точек и линий, плюс возможностью задать скорость рисования. Не думаю, что есть смысл пересказывать алгоритм Брезенхайма, я его практически без изменений портировал из Википедии. Все исходные тексты лежат в свободном доступе на GitHub-е. Программа состоит из десятка классов наследников GraphBase, каждый из них рисует на экране простой сюжетик. Например, движущийся текст, ёлочку, или праздничный салют. Осциллограф был поставлен ёлку в виде электронной открытки, так что мотивы в основном новогодние.

    Лучше один раз увидеть, чем сто раз прочитать, так что сразу перехожу к видео:


    Результаты экспериментов и выводы:
    • Я пробовал подключить к микроконтроллеру и современный цифровой осциллограф, но картинка на аналоговом намного приятней. Плавно угасающее послесвечение люминофора создаёт «тёплую ламповую» атмосферу.
    • Arduino DUE в доли секунды справляется с расчётом тригонометрических функций, скорости хватило для вычисления координат «цветка» в реальном времени. Для фигур Лиссажу нужен больший объём вычислений, так что микроконтроллеру приходится сперва рассчитывать таблицу синусов и использовать целочисленную арифметику.
    • VisualStudio с бесплатным плагином Visualmicro намного удобней родной IDE Arduino.
    • Рисовать на осциллографе довольно просто. Отладка кода на Arduino может быть сложной, но в данном случае почти не понадобилась.
    • ЦАП-ы имеют конечное быстродействие, поэтому когда при переходе от одной линии к другой переключается сначала напряжение на выходе Х, а потом на выходе Y, на экране появляются артефакты. Заметны в виде отдельных точек, например на кадрах с плавающей надписью „2014“.


    В общем, по-моему, получилось весьма симпатично. Следующий логический шаг – заменить осциллограф парой зеркал на гальванометрах, и рисовать на стене лазерным лучом.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 48
      +5
      Увы, видео просмотреть невозможно: «Это личное видео».
        +4
        Подправил. Спасибо за подсказку.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Куда проще и понятнее…
            0
            Вот это будет куда интереснее.

            Да, особенно учитывая инерционность зеркал. Линейный алгоритм Брезенхема уже не подходит, приходится делать разгон-торможение на каждой линии. Ну и послесвечение намного меньше выражено — сетчатка быстрее забывает изображение, чем экран старого осциллографа.
              0
              Был приятно удивлен тем, что увидел название своего родного города (Днепропетровск) под статьей с демонстрационным осциллографом.

              Действительно занятные статьи в журнале. Спасибо.
              +3
              Ключевые вопросы — где добыть такой станок и как называются такие стойки для плекса?
                +2
                Электролобзик покупался в хозяйственном магазине, «стойки установочные крепежные шестигранные» с резьбой M3 или M4 широко распространены в электротехнике, покупал в магазине радиодеталей.
                  0
                  Отлично, спасибо. А ориентировочно цену на лобзик + сверильный станок не подскажете?
                    0
                    Лобзик в нашей деревне (Германия) стоит от 70 евро. В качестве сверлильного станка выступает стойка для дрели с зажатым в ней «дремелем». Отверстия под M3 можно с достаточной точностью сверлить обычной дрелью зажатой в раму с рычагом для плавного движения по вертикали. Гуглится по «стойка для дрели», у нас стоит от 20 евро.
                      0
                      Судя по цвету, это всё Proxxon: www.paradox-ltd.ru/proxxon_equipment.jaw
                      Но пилить оргстекло лобзиком не очень удобно — оно сразу плавится и приваривается обратно. Правда, я пробовал с толщиной 6мм, а у автора потоньше, поэтому и получилось, наверное.
                        +1
                        У меня тоже поначалу приваривалось, решил проблему установкой минимальной скорости мотора и выбором полотна с более крупными зубьями. Теперь оргстекло в 2,5 мм режет без проблем.
                          0
                          Я тут погуглил и решил, что проще заказать распил по шаблону. В Краснодаре фрезеровка стоит 30 р. за погонный метр для 2мм оргстекла. Смысл в покупке станка несколько теряется. Только колеблюсь между лазерной резкой и фрезеровкой.
                            +2
                            Если для одного изделия, то однозначно проще заказать. Я же, пока не накопил на 3D-принтер, использую оргстекло для быстрого изготовления несущих конструкций в домашних проектах. Сначала в бесплатном Inkscape рисуется шаблон, в редакторе можно выставить шкалу в миллиметрах, что очень удобно. Потом, прямо сквозь бумагу, оргстекло сверлится и режется. Лист оргстекла покрыт с обеих сторон защитной плёнкой, в конце её просто снимаешь и получаешь гладкую поверхность без пыли и царапин.

                            Примеры: подставка для детектора движения на Raspberry Pi (фото), все прозрачные элементы в моей роботособаке.

                            image

                              0
                              Изящно) Inkscape я использую постоянно, не проблема. Но инструмента нет, к сожалению. Я, собственно, хотел нарезать корпусов под Arduino с отверстиями под потенциометры, кнопки и экран. Минимальный заказ — 500 р, поэтому буду делать сразу стопку)
                                0
                                Извините! Я тоже из Краснодара. А где у нас делают резку и фрезеровку? (недавно здесь живу)
                                  0
                                  Я сам пока не заказывал. Но беглый гуглинг показывает, что нужно смотреть в сторону изготовителей рекламы. Вот ссылка, где есть цены.
                                0
                                3D принтер не очень годится для тех задач, где вы оргстекло используете. Как владелец 3Д принтера заявляю. :)
                                Подумываю прикупить себе станок для вырезания плоских деталей.
                                3Д принтер тратит много материала и качество получается хуже, чем если вырезать из цельного куска.
                                  0
                                  Подтверждаю, лучше обзавестись координатным столом, как у фрезерного станка, и комбинировать его с инструментом вроде Dremel 4000, используя подходящие фрезы…
                              0
                              Да, рекомендации по резке пластиковых листов:
                              — минимальная скорость пилы
                              — точно соответствующая ей подача (скорость увеличения длины распила)
                              — пила без разводки, можно — с частыми зубьями, но тогда они должны быть глубокими
                              — чем тоньше пластик, тем полезнее закреплять его между двумя листами более толстого расходного материала (фанеры), это практически гарантирует отсутствие разломов.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Корпус же сделан из оргстекла?
                          +4
                          Так и называются стойки. У нас дорого, но можно заказать, например
                            –1
                            Оооо… Ловите плюс в карму) То, что нужно.
                            +3
                            Стойка зовется HTC-10 это если нужна пластиковая. Я их беру сотнями в радиомагазине нашем.
                              0
                              Спасибо огромное. Металл симпатичен, но цена важнее. У нас довольно убогие локальные магазины деталей.
                              UPD. Гуглятся одни телефоны ((
                                +1
                                еще имеет смысл гуглить «стойка нейлоновая» это оно же :) А то по HTC-10 все смартфонами засрано.
                                  0
                                  Вот еще клевый таракан
                                  chipster.ru/catalog/misc/2199.html

                                  Если надо состыковать не более двух плат ваще идеально. В один щелчок. Дешево, быстро и очень технологично.
                                    0
                                    О. Интересная идея. Мне надо ещё понять, какую высоту брать. Вероятно, буду Uno использовать. У меня сейчас две задачи — использование meas'овских пьезоэлектрических пленок для регистрации степени кавитации и игрушка для ребёнка в виде RGB-светильника.
                                  0
                                  Странно, но на ebay пластиковые в малых партиях стоят чаще дороже. Металлические можно заказать в количестве 10 штук, что дешевле в абсолютных цифрах. А чаще всего больше 4 на один корпус и не нужно.
                                    0
                                    А сколько надо? Я беру по 3р штука. Упаковками по 1000шт.
                                      0
                                      Собственно, 8 шт.)) я никуда не тороплюсь, у меня нет промышленных масштабов. Я хотел из плекса сделать пару открытых корпусов с дырками под кнопки, потенциометры и тому подобное. 400 рублей за стандартный корпус, пусть и более аккуратный, дорого.
                                      Завтра пройдусь по магазинам. Меня и по 7 рублей устроит)
                                +1
                                Теперь еще из одной Ардуины и какого-нибудь экрана соберите свой новый осцилограф и рисуйте на нем =)
                                  +1
                                  Осцилограф нужно аналоговый однако.
                                  +1
                                  По-поводу «заменить осциллограф парой зеркал»: www.youtube.com/watch?v=FPc1vfjpW-o (смотреть начиная с 1:50)
                                    +2
                                    Забавно.
                                    О том как «рисовать» на экране осцилографа писали ещё в журнале Радио в 70-х годах :)
                                      0
                                      Класс, салют как настоящий.
                                        +1
                                        Geek Porn, и даже музычка соответствующая:)
                                          +7
                                          Не могу не напомнить об этом видео:


                                          Правда автор не рассчитывает это все в реальном времени, а использует заранее вычисленные точки, образующие контур.
                                            –1
                                            Надеюсь по новому закону не запретят страничку из за УЖАСНОГО СЛОВА

                                            http://www.sensi.org/~svo/pr0nscope/
                                              –1
                                              сво рулит, как обычно :)
                                              0
                                              Так был сделан мультиметр в С1-112, например.
                                              Вместо ЦАП — две платы с жёсткой логикой.
                                                0
                                                Мне непонятно зачем тут ардуино, когда всё можно было управлять со звуковой карты с компьютера. ИМХО лишняя деталь, для понтов.



                                                Из демороликов такого типа мне очень нравится вот этот, демонстрировался на Chaos Construction 2006 вживую. Можно скачать звуковой файл и посмотреть самому. Без всяких лишних геммороев.
                                                  0
                                                  Тoгда уж сразу надо давать ссылку на Oscillofun.
                                                  Тут всё изображение закодировано прямо в звуке.
                                                    0
                                                    В моём случае тоже изображение закодировано в звуке. Или вы имеете в виду, что мелодия генерирует видеоряд?
                                                      0
                                                      Да, там звук=изображение, то есть два канала стерео L и R подаются на X и Y осциллографа. Вот пример тот же Oscillofun с отображением на зеленом осциллографе.

                                                      www.youtube.com/watch?v=J1ylMJwfLmM
                                                    0
                                                    Ой, sorry, Oscillofun тут упоминался.

                                                    Jerobeam Fenderson — Nuclear Black Noise

                                                    www.youtube.com/watch?v=YqSvkNjWnnQ

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое