Цифровой оптический регулятор громкости со светодиодом и фоторезистором (свет для отдельных цепей, оптический потенциометр)

История

Во-первых, я знаю о существовании цифрового горшка. «Проблема» в том, что для этого вам нужна микросхема, а также вы хотите, чтобы схемы были полностью разделены (и просты). Также хочу использовать его с аудиопроектом Arduino без внешней ИС (уже есть MCU, который может выполнять работу «настройки»). Поэтому мне пришла в голову идея использовать светодиод и фоторезистор для разделения цепей и избежать фиксированных «цифровых» шагов, как в обычном потенциометрическом резисторе, чтобы он оставался гладким и естественным, но без проблем сбоя/старения аналогового сигнала.

Сделал два (быстро!) наброска, один с помощью простого оборудования, такого как колесо непрозрачности, и один с использованием Arduino:введите описание изображения здесь

Я выяснил, что основы этой идеи с использованием света для управления громкостью не нова, нашел это: http://www.tortugaaudio.com/evolution-of-ldr-volume-control/ И пассивный аттенюатор Lightspeed: http: //diyaudioprojects.com/Solid/DIY-Lightspeed-Passive-Attenuator/

Попробуйте найти компонент, который они используют, светодиод с фоторезистором, но не смог его найти. Я начал экспериментировать с существующими компонентами, такими как этот (сделал экспериментальную плату из старого принтера Canon, плату с двумя оптическими датчиками, разрезал пополам и добавил к аудиоразъемам), чтобы понять, что она все равно будет работать:

введите описание изображения здесь

Эксперимент удался очень хорошо, очень интересно увидеть, что он действительно работает. Громкость уменьшается, когда вы кладете объект между оптическими датчиками или ограничиваете входное напряжение. За исключением ......одна сторона амплитуды обрублена. Поскольку контактов всего четыре, приемник может быть опторезистором, однако, похоже, это диод? Просто послушайте этот саундтрек, что произошло:

введите описание изображения здесьВолновой файл: https://drive.google.com/file/d/0B2l-eQoHefcVdXRlUkM1bXJYek0/view?usp=sharing

Файл волны (левый + правый вместе): https://drive.google.com/file/d/0B2l-eQoHefcVVzZ3aWVrZ0hMVjg/view?usp=sharing

Вопрос

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

Я думаю, что компоненты, которые вы используете (U1 и U2), имеют в себе фотодиоды или фототранзисторы, а не резисторы (слишком медленные). Итак, по сути, вы построили выпрямитель. Отсюда и квадратура. Я знаю, что это прекрасно работает с настоящими LDR. Хотя понятия не имею, где их собирать.

Ответы (3)

Замечательная попытка и хорошие усилия по отладке. Ваши оптопары Cannon - это другие животные, чем те, которые описаны в предоставленной вами ссылке. Они используют инфракрасный диод для обеспечения света, но фоточувствительный элемент не является резистивным, а представляет собой кремниевый фототранзистор. Ток, который он обеспечивает, течет только в одном направлении - отсюда обрезанные формы волны, которые дают сильно искаженный звук.
Фоточувствительный элемент в вашей ссылке - кадмий-сульфидный или кадмий-селенидный фоторезистор. Это резистор, который пропускает ток в обоих направлениях достаточно линейным образом. Поисковые запросы, такие как оптопара фотоэлемента, могут помочь.
Некоторые доступные в настоящее время детали №: NSL-33-007 от LUNA optoelectronics представляет собой двухканальную оптопару с фотоэлементом.
NSL-32H-103 от LUNA Optoelectronics — одноканальная версия.

Я бы не стал использовать фотопрерыватель. Я думаю, что проектирование поворотного изменяемого окна слишком сложно. Просто используйте двухэлементный фотоизолятор на основе LDR, такой как Vactrol VTL5C3/2, и изменяйте ток светодиода.
@RichS: я не хочу использовать фотопрерыватель, просто разберитесь в примере, который я создаю для этого эксперимента. Компоненты, о которых вы говорите, довольно дорогие. Не подскажете, в чем разница между этими версиями (VTL5C1..VTL5C4)?
В техническом паспорте @Erwinus Perkin Elmer указано: «VTL5C4 имеет очень низкое сопротивление во включенном состоянии, быстрое время отклика и меньший температурный коэффициент сопротивления, чем VTL5C1». Поскольку ваше приложение представляет собой довольно статический регулятор громкости, любой из них, вероятно, будет в порядке - они оба имеют широкий динамический диапазон.

Google "Vactrol", затем щелкните левой кнопкой мыши "More images for vactrol", чтобы найти именно то, что вам нужно.

Вот пример:

введите описание изображения здесь

Кроме того, проверьте Fairchild H11F1 для другого решения.

Хай, спасибо, это имена, они тоже довольно дорогие! Теперь я понимаю, почему так много желающих клонировать эти устройства (отображаться в результатах поиска) и эти компоненты не используются часто. Прочтите некоторую информацию о фотодатчиках в целом, температуре, цветовом спектре (нм) чувствительности. Меня не волнует медлительность фотосенсоров, так что, может быть, я смогу сделать их самостоятельно по дешевке. Какой светодиод вы рекомендуете использовать (нм)? Здесь есть таблица - Resistanceguide.com/photoresistor - но не могу понять, что лучше сделать. Заранее спасибо.

Через несколько месяцев: Спасибо EM Fields, который указывает мне правильное направление. Vactrols недешевые компоненты и доступны только в некоторых магазинах. Поэтому я решил построить свои собственные вектролы, и это можно сделать по дешевке ;-) и это работает очень хорошо!

Я заказал несколько разных LDR, несколько светодиодов в Китае (около 3 евро за пару сумок с 50 LDR и 200 светодиодами) и начал с ними экспериментировать. Есть люди, которые утверждают, что цвет светодиодов имеет значение при построении вектролов, белые кажутся лучшими для использования, потому что они самые яркие из всех. есть некоторые форумчане, которые утверждают, что не используют яркие светодиоды, ну, я не согласен из-за сопротивления, вам нужен очень яркий свет, чтобы получить низкое сопротивление. Вы не можете достичь этого с помощью старых светодиодов.

Я тестировал разные LDR, и сопротивление может отличаться между моделями и одинаковыми моделями. Чтобы убедиться, что LDR имеют одинаковое/ближайшее/самое низкое сопротивление, проверьте его с помощью яркого светодиодного барашка и омметра.

LDR медленный в ответ? Ну не соглашусь, импульсный ШИМ-сигнал они улавливают очень хорошо (звучит как левый+правый-объединенный-пример вопроса более подробно) и нужно менять частоту импульсного сигнала иначе настройка бесполезна( см. позже в этом письме, что я сделал для этого).

Когда светодиод работает на полную яркость, я достиг (см. настройку ниже для двухканального вектора только с ОДНИМ светодиодом) около 100-120 Ом, и это очень хорошо и полезно по сравнению с тем, что я измерил ранее со светодиодным барашком. Некоторое сопротивление не так уж плохо при использовании его с усилителем (входное сопротивление), как я.

Я изменил схему на эту:

схематический поворотный энкодер и vectrol arduino

Также создайте тестовое устройство, цифровой/аналоговый регулятор громкости звука USB с использованием SparkFun DigiSpark (Arduino attiny85). Создал цифровой регулятор громкости раньше, поэтому мне просто нужно было немного изменить код. См. также это руководство: http://www.instructables.com/id/Digispark-Volume-Control/ . Версия кода, которую я использую, является более продвинутой, потому что я улучшил код и добавил некоторые дополнительные функции, такие как кнопки.

Это устройство, которое я сделал, крошечная ручка громкости с поворотным основанием USB-разъема, так что вы можете подключить его под любым углом без кабеля к ноутбуку или аккумулятору. Это установка только с ОДНИМ светодиодом и ДВУМЯ LDR.

Регулятор громкости-поворотный энкодер-vactrol-usb-v1

Пользовательский светодиод

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

Я понял, что на этих светодиодах есть мертвая точка. Вы можете ясно видеть это на приведенном выше примере изображения, LDR расположены слева от лампы со стороны светодиода, а не внизу (= мертвая зона). Поскольку LDR очень чувствительны, вы должны обойти эти мертвые зоны, чтобы избежать невозможности получить максимальные результаты.

Проблема с частотой ШИМ

Хотя с первой попытки это работает очень хорошо, звук звучит как mp3 с множеством артефактов (низкий битрейт). Этого не произойдет, если вы используете аккумулятор для питания светодиода. LDR реагирует на частоту ШИМ, поэтому в звуке есть пробелы, потому что сопротивление LDR очень быстро колеблется между высоким и низким (вкл / выкл) сопротивлением.

Во-первых, я нашел это: https://provideyourown.com/2011/analogwrite-convert-pwm-to-voltage/ , используйте фильтр верхних частот, чтобы избежать этих промежутков импульсов ШИМ.

Для этого вам нужны компоненты, и вам нужно рассчитать правильную емкость используемого конденсатора. Вот я и подумал, а можно ли поменять частоту ШИМ? Да, ты можешь!

Добавьте эту функцию в свой скетч и вызовите эту функцию в процедуре настройки.

void setMaxPWM()
{
   /* Attiny85 PWM modification
       http://www.re-innovation.co.uk/web12/index.php/en/blog-75/305-fast-pwm-on-attiny85

       Or you can use the PWM library:
       Video  : Arduino PWM Tutorial #2 - How to Set PWM Frequency Accurately - Julian Ilett
                https://www.youtube.com/watch?v=9JXGIeM3BSI
       library: https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads
                NOTICE: This library cannot be installed directly from zip, you need to
                extract the PWM directory first and zip it again. After this, put the zip
                into to libraries directory and install the zip via the Arduino IDE.      
    */

   /*
    Control Register A for Timer/Counter-0 (Timer/Counter-0 is configured using two registers: A and B)
    TCCR0A is 8 bits: [COM0A1:COM0A0:COM0B1:COM0B0:unused:unused:WGM01:WGM00]
    2<<COM0A0: sets bits COM0A0 and COM0A1, which (in Fast PWM mode) clears OC0A on compare-match, and sets OC0A at BOTTOM
    2<<COM0B0: sets bits COM0B0 and COM0B1, which (in Fast PWM mode) clears OC0B on compare-match, and sets OC0B at BOTTOM
    3<<WGM00: sets bits WGM00 and WGM01, which (when combined with WGM02 from TCCR0B below) enables Fast PWM mode
    */
    TCCR0A = 2<<COM0A0 | 2<<COM0B0 | 3<<WGM00;

    /*
    Control Register B for Timer/Counter-0 (Timer/Counter-0 is configured using two registers: A and B)
    TCCR0B is 8 bits: [FOC0A:FOC0B:unused:unused:WGM02:CS02:CS01:CS00]
    0<<WGM02: bit WGM02 remains clear, which (when combined with WGM00 and WGM01 from TCCR0A above) enables Fast PWM mode
    1<<CS00: sets bits CS01 (leaving CS01 and CS02 clear), which tells Timer/Counter-0 to not use a prescalar
    */
    TCCR0B = 0<<WGM02 | 1<<CS00;


    // ---------------------------------------
    // Below we don't use (and need) these because it will screw up the usb connection
    /*
    Control Register for Timer/Counter-1 (Timer/Counter-1 is configured with just one register: this one)
    TCCR1 is 8 bits: [CTC1:PWM1A:COM1A1:COM1A0:CS13:CS12:CS11:CS10]
    0<<PWM1A: bit PWM1A remains clear, which prevents Timer/Counter-1 from using pin OC1A (which is shared with OC0B)
    0<<COM1A0: bits COM1A0 and COM1A1 remain clear, which also prevents Timer/Counter-1 from using pin OC1A (see PWM1A above)
    1<<CS10: sets bit CS11 which tells Timer/Counter-1  to not use a prescalar
    */
    //TCCR1 = 0<<PWM1A | 0<<COM1A0 | 1<<CS10;

    /*
    General Control Register for Timer/Counter-1 (this is for Timer/Counter-1 and is a poorly named register)
    GTCCR is 8 bits: [TSM:PWM1B:COM1B1:COM1B0:FOC1B:FOC1A:PSR1:PSR0]
    1<<PWM1B: sets bit PWM1B which enables the use of OC1B (since we disabled using OC1A in TCCR1)
    2<<COM1B0: sets bit COM1B1 and leaves COM1B0 clear, which (when in PWM mode) clears OC1B on compare-match, and sets at BOTTOM
    */
    //GTCCR = 1<<PWM1B | 2<<COM1B0;
}

Приведенный выше пример предназначен только для attiny и не нуждается в библиотеке. Частота ШИМ теперь выше предела слышимости (ультразвуковая частота), и звук звучит великолепно! Я просто показываю вам, что вактролы потрясающие, и концепция Arduino потрясающая, но в целом возможности Attiny85 тоже потрясающие (и, конечно, сообщество, которое разделяет такие темы, как вы и я).

Следующее, что нужно сделать, это проблема analogWrite, разрешение analogWrite. Поскольку между ВКЛ и ВЫКЛ существует очень большая разница, если вы analogWrite( PB1, 1 );обнаружите, что это состояние вкл/выкл, а не плавный переход между 0 и >1.