Оглавление:

Селектор настройки DIP с использованием 1 контакта: 4 шага
Селектор настройки DIP с использованием 1 контакта: 4 шага

Видео: Селектор настройки DIP с использованием 1 контакта: 4 шага

Видео: Селектор настройки DIP с использованием 1 контакта: 4 шага
Видео: Котёл Навьен делюкс.Проверяем регулировки вживую секундомером. 2024, Ноябрь
Anonim
Селектор настройки DIP с использованием 1 контакта
Селектор настройки DIP с использованием 1 контакта

Некоторое время назад я работал над проектом «музыкальная шкатулка», в котором нужно было выбирать между 10 различными фрагментами мелодий. Естественным выбором для выбора конкретной мелодии был 4-контактный микропереключатель, поскольку 4 переключателя обеспечивают 24= 16 различных настроек. Однако для реализации этого подхода требуется 4 контакта устройства, по одному для каждого переключателя. Поскольку я планировал использовать ATtiny85 для разработки, потеря 4 контактов была слишком большой. К счастью, я наткнулся на статью, в которой описывается гениальный метод использования 1 аналогового вывода для управления несколькими входами переключателя.

В методе с несколькими переключателями; 1 вход используется схема делителя напряжения, чтобы обеспечить уникальное целочисленное значение для каждой из 16 возможных комбинаций настроек переключателя. Этот набор из 16 целочисленных идентификаторов затем используется в прикладной программе для связывания действия с настройкой.

Эта инструкция использует метод множественного переключения для реализации выбора мелодии для приложения музыкальной шкатулки. Выбранная мелодия затем воспроизводится через пьезозуммер с использованием функции тона Arduino.

Шаг 1: необходимое оборудование

Требуемое оборудование
Требуемое оборудование

Использование UNO в качестве платформы для реализации сводит к минимуму количество необходимых аппаратных компонентов. Для реализации метода ввода с несколькими переключателями требуется только 4-контактный двухпозиционный переключатель, 5 резисторов, используемых для делителя напряжения, и соединительный провод для соединений. В конфигурацию добавлен пьезозуммер для реализации селектора мелодий музыкальной шкатулки. При желании, в зависимости от типа используемого микропереключателя, полезно использовать 8-контактное гнездо 2x4 для подключения микропереключателя к макетной плате, поскольку стандартные контакты микропереключателя, похоже, предназначены для пайки на монтажной плате, а не для подключения непосредственно к макетной плате. Гнездо стабилизирует соединения микропереключателя и препятствует легкому поднятию переключателя при установке тумблеров.

Имя Возможный источник Как использовали
4-контактный двухпозиционный переключатель Выбор мелодии
Гнездо 2x4 контакта (опционально) Амазонка Штыри на большинстве микропереключателей не очень хорошо удерживают переключатель на макетной плате. Розетка помогает сделать соединение более надежным. Альтернативой является поиск микропереключателя, который действительно предназначен для использования на макетной плате с обычными выводами микросхемы.

резисторы:

  • 10К x2
  • 20 тыс.
  • 40 тыс.
  • 80 тыс.
Делитель напряжения агрегата
пассивный пьезозуммер Амазонка Воспроизведение мелодии, управляемой приложением, с помощью функции тона Arduino

Шаг 2: Объяснение метода нескольких переключателей

Многопозиционный метод Объяснение
Многопозиционный метод Объяснение

В этом разделе обсуждаются основные концепции метода с несколькими переключателями и разрабатываются уравнения, необходимые для автономного расчета уникальных идентификаторов для каждой из 16 возможных конфигураций настроек двухпозиционного переключателя. Эти идентификаторы затем можно использовать в прикладной программе для связывания конфигурации коммутатора с действием. Например, вам может потребоваться настройка - включить 1, выключить 2, выключить 3, выключить 4 (1, 0, 0, 0) - для воспроизведения Amazing Grace и (0, 1, 0, 0) для воспроизведения. Лев спит сегодня вечером. Для краткости и краткости идентификаторы конфигурации в остальной части документа называются компараторами.

Изображение
Изображение

Фундаментальной концепцией метода с несколькими переключателями является схема делителя напряжения, которая состоит из 2 последовательно соединенных резисторов, подключенных к входному напряжению. Вывод выходного напряжения подключен между резисторами R1 и R2, как показано выше. Выходное напряжение делителя рассчитывается как входное напряжение, умноженное на отношение резистора R2 к сумме R1 и R2 (уравнение 1). Это соотношение всегда меньше 1, поэтому выходное напряжение всегда меньше входного.

Как показано на схеме выше, мульти-переключатель сконфигурирован как делитель напряжения с R2 фиксированный и R1 равно составному / эквивалентному сопротивлению для 4 резисторов DIP-переключателя. Значение R1 зависит от того, какие микропереключатели включены и, следовательно, вносят вклад в составное сопротивление. Поскольку резисторы двухпозиционного переключателя включены параллельно, уравнение для расчета эквивалентного сопротивления выражается в терминах обратных величин компонентных резисторов. Для нашей конфигурации и случая, когда все переключатели включены, уравнение принимает вид

1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

давая R1 = 5333,33 вольт. Чтобы учесть тот факт, что в большинстве настроек хотя бы один из переключателей выключен, состояние переключателя используется как множитель:

1 / R1 = s1* 1/80000 + с2* 1/40000 + с3* 1/20000 + с4*1/10000 (2)

где множитель состояния, sя, равно 1, если переключатель включен, и равен 0, если переключатель выключен. р1 теперь можно использовать для расчета коэффициента сопротивления, необходимого в уравнении 1. Используя случай, когда все переключатели включены в качестве примера, снова

СООТНОШЕНИЕ = R2/(Р1+ R2) = 10000/(5333.33+10000) =.6522

Последним шагом в вычислении предсказанного значения компаратора является умножение RATIO на 1023, чтобы имитировать эффект функции analogRead. Идентификатор для случая, когда все переключатели включены, тогда

компаратор15 = 1023*.6522 = 667

Теперь есть все уравнения для расчета идентификаторов для 16 возможных настроек переключателя. Обобщить:

  1. р1 рассчитывается по формуле 2
  2. р1 и R2 используются для расчета соответствующего СООТНОШЕНИЯ СОПРОТИВЛЕНИЯ
  3. ОТНОШЕНИЕ умножается на 1023, чтобы получить значение компаратора.
  4. опционально, прогнозируемое выходное напряжение также может быть рассчитано как RATIO * Vin

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

Набор компараторов для конкретной конфигурации можно получить несколькими способами: запустить демонстрационную программу и записать значения для каждой настройки; используйте таблицу в следующем разделе для расчета; скопировать существующий набор. Как отмечалось выше, все наборы, скорее всего, будут немного отличаться, но должны работать. Я предлагаю использовать набор идентификаторов автора метода для настройки с несколькими переключателями и электронную таблицу из следующего раздела, если какой-либо из резисторов был значительно изменен или добавлено больше резисторов.

Следующая демонстрационная программа демонстрирует использование компараторов для определения текущей настройки двухпозиционного переключателя. В каждом программном цикле выполняется analogRead для получения идентификатора текущей конфигурации. Затем этот идентификатор сравнивается в списке компараторов до тех пор, пока не будет найдено совпадение или список не будет исчерпан. Если совпадение найдено, для проверки выдается выходное сообщение; если не найден, выдается предупреждение. В цикл вставляется 3-секундная задержка, чтобы окно последовательного вывода не было переполнено сообщениями и чтобы дать некоторое время для сброса конфигурации двухпозиционного переключателя.

//-------------------------------------------------------------------------------------

// Демонстрационная программа для чтения выходного сигнала делителя напряжения и использования его для определения // текущей конфигурации двухпозиционного переключателя путем поиска выходного значения в массиве // значений сравнения для каждой возможной настройки. Значения в поисковом массиве могут быть // либо получены из предыдущего запуска конфигурации, либо путем вычислений // на основе лежащих в основе уравнений. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Определение переменных обработки int dipPin = A0; // аналоговый вывод делителя напряжения input int dipIn = 0; // удерживает выходное напряжение делителя, переведенное с помощью analogRead int count = 0; // счетчик циклов int epsilon = 7; // полуширина интервала сравнения bool dipFound = false; // истина, если текущий вывод делителя напряжения найден в таблице поиска void setup () {pinMode (dipPin, INPUT); // настраиваем вывод делителя напряжения как INPUT Serial.begin (9600); // включение последовательной связи} void loop () {delay (3000); // предотвращаем слишком быструю прокрутку вывода // Инициализируем параметры поиска count = 0; dipFound = false; // Считываем и документируем текущее выходное напряжение dipIn = analogRead (dipPin); Serial.print («вывод делителя»); Serial.print (dipIn); // Поиск текущего значения в списке компараторов while ((count <16) && (! DipFound)) {if (abs (dipIn - compare [count]) <= epsilon) {// нашел его dipFound = true; Serial.print («найдено при входе»); Serial.print (количество); Serial.println ("значение" + строка (компаратор [количество])); перерыв; } count ++; } if (! dipFound) {// значение не в таблице; не должно происходить Serial.println («Ой! Не найдено; лучше вызвать Охотников за привидениями»); }}

Шаг 3: Таблица сравнения

Изображение
Изображение

Расчеты для 16 значений компаратора приведены в таблице, показанной выше. Сопровождающий файл Excel доступен для загрузки внизу этого раздела.

В столбцах таблицы A – D записываются значения резисторов двухпозиционного переключателя и 16 возможных настроек переключателя. Обратите внимание, что аппаратный DIP-переключатель, показанный на схеме конструкции фритзинга, на самом деле пронумерован слева направо, а не справа налево, как показано в таблице. Я нашел это несколько сбивающим с толку, но альтернативный вариант не помещает конфигурацию «1» (0, 0, 0, 1) в начало списка. В столбце E используется формула 2 из предыдущего раздела для расчета эквивалентного сопротивления R делителя напряжения.1 для настройки. Столбец F использует этот результат для вычисления соответствующего СООТНОШЕНИЯ сопротивления, и, наконец, столбец G умножает СООТНОШЕНИЕ на максимальное значение analogRead (1023), чтобы получить прогнозируемое значение компаратора. Последние 2 столбца содержат фактические значения из прогона демонстрационной программы, а также различия между прогнозируемыми и фактическими значениями.

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

Шаг 4. Сыграйте мелодию

Сыграть мелодию
Сыграть мелодию

Чтобы проиллюстрировать, как метод множественного переключения может использоваться в приложении, демонстрационная программа сравнения из раздела «Объяснение метода» модифицирована для реализации обработки выбора мелодии для программы музыкальной шкатулки. Обновленная конфигурация приложения показана выше. Единственное дополнение к оборудованию - это пассивный пьезозуммер для воспроизведения выбранной мелодии. Основное изменение в программном обеспечении - добавление подпрограммы воспроизведения мелодии, однажды идентифицированной, с использованием зуммера и звуковой подпрограммы Arduino.

Доступные фрагменты мелодий содержатся в файле заголовка Tunes.h вместе с определением необходимых структур поддержки. Каждая мелодия определяется как массив структур, связанных с нотами, содержащий частоту и продолжительность ноты. Частоты нот содержатся в отдельном заголовочном файле Pitches.h. Программа и заголовочные файлы доступны для скачивания в конце этого раздела. Все три файла должны быть помещены в один каталог.

Выбор и идентификация происходит следующим образом:

  1. «Пользователь» устанавливает DIP-переключатели в конфигурацию, связанную с желаемой настройкой.
  2. в каждом цикле программного цикла идентификатор для текущей настройки двухпозиционного переключателя получается через analogRead
  3. Идентификатор конфигурации шага 2 сравнивается с каждым из компараторов в доступном списке настроек.
  4. Если совпадение найдено, вызывается процедура playTune с информацией, необходимой для доступа к списку нот мелодии.

    Используя функцию тона Arduino, каждая нота воспроизводится через зуммер

  5. Если совпадений не найдено, никаких действий не предпринимается.
  6. повторить 1-5

Настройки DIP-переключателя для доступных мелодий показаны в таблице ниже, где 1 означает, что переключатель включен, 0 - выключен. Напомним, что при ориентации DIP-переключателя переключатель 1 находится в крайнем левом положении (то, которое связано с резистором 80 кОм).

ИМЯ Переключатель 1 Переключатель 2 Переключатель 3 Переключатель 4
Дэнни Бой 1 0 0 0
Медвежонок 0 1 0 0
Лев спит сегодня вечером 1 1 0 0
Никто не знает проблемы 0 0 1 0
Великая благодать 0 0 0 1
Пустое пространство 1 0 0 1
Пересмешник Птичий холм 1 0 1 1

Качество звука пьезозуммера, конечно, невысокое, но, по крайней мере, узнаваемо. Фактически, если измерить тоны, они очень близки к точной частоте нот. Одним из интересных приемов, используемых в программе, является сохранение данных настройки в разделе флэш-памяти / памяти программ вместо раздела памяти данных по умолчанию с помощью директивы PROGMEM. Раздел данных содержит переменные обработки программы и намного меньше, около 512 байт для некоторых микроконтроллеров ATtiny.

Рекомендуемые: