Оглавление:

Используйте 1 аналоговый вход для 6 кнопок для Arduino: 6 шагов
Используйте 1 аналоговый вход для 6 кнопок для Arduino: 6 шагов

Видео: Используйте 1 аналоговый вход для 6 кнопок для Arduino: 6 шагов

Видео: Используйте 1 аналоговый вход для 6 кнопок для Arduino: 6 шагов
Видео: Уроки Arduino #10 - потенциометры и аналоговые пины 2024, Июль
Anonim
Используйте 1 аналоговый вход для 6 кнопок для Arduino
Используйте 1 аналоговый вход для 6 кнопок для Arduino

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

Зачем мне нужно одновременное нажатие кнопок? Как показано на схеме TinkerCad Circuits, его можно использовать для входов DIP-переключателя для выбора различных режимов в программе.

Схема, которую я придумал, использует источник 5 В, доступный от Arduino, и использует 7 резисторов и 6 кнопок или переключателей.

Шаг 1: Схема

Схема
Схема

У Arduino есть аналоговые входы, которые принимают входное напряжение от 0 до 5 В. Этот вход имеет разрешение 10 бит, что означает, что сигнал разбит на 2 ^ 10 сегментов или 1024 отсчета. Исходя из этого, максимум, что мы когда-либо могли ввести в аналоговый вход, позволяя одновременное нажатие, - это 10 кнопок на 1 аналоговый вход. Но это не идеальный мир. Есть сопротивление в проводниках, шум от внешних источников и несовершенная мощность. Итак, чтобы дать себе большую гибкость, я планировал разработать его для 6 кнопок. Частично на это повлиял тот факт, что в TinkerCAD Circuits был объект DIP-переключателя с 6 переключателями, который упростил тестирование.

Первым шагом в моем дизайне было убедиться, что каждая кнопка, при нажатии по отдельности, будет обеспечивать уникальное напряжение. Это исключало все резисторы одинакового номинала. Следующим шагом было то, что значения сопротивления, добавленные параллельно, не могли иметь такое же сопротивление, как любое значение отдельного резистора. Когда резисторы соединены параллельно, результирующее сопротивление можно рассчитать как Rx = 1 / [(1 / R1) + (1 / R2)]. Итак, если R1 = 2000 и R2 = 1000, Rx = 667. Я предположил, что, удвоив размер каждого резистора, я не увижу одинакового сопротивления ни для одной из комбинаций.

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

Последний резистор имеет 3 назначения. Во-первых, он действует как понижающий резистор. Без резистора, когда никакие кнопки не нажаты, схема неполная. Это позволит напряжению на аналоговом входе Arduino достичь любого напряжения. Понижающий резистор снижает напряжение до 0 В. Вторая цель - ограничить ток в этой цепи. Закон Ома гласит, что V = IR или напряжение = ток, умноженный на сопротивление. При данном источнике напряжения, чем больше резистор, тем меньше ток. Итак, если на резистор 500 Ом был подан сигнал 5 В, максимальный ток, который мы могли бы увидеть, будет 0,01 А или 10 мА. Третья цель - обеспечить сигнальное напряжение. Полный ток, протекающий через последний резистор, будет: i = 5V / Rtotal, где Rtotal = Rlast + {1 / [(1 / R1) + (1 / R2) + (1 / R3) + (1 / R4) + (1 / R5) + (1 / R6)]}. Однако включайте только 1 / Rx для каждого резистора, для которого нажата соответствующая кнопка. Из общего тока напряжение, подаваемое на аналоговый вход, будет i * Rlast или i * 500.

Шаг 2: Доказательство - Excel

Доказательство - Excel
Доказательство - Excel

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

Я установил все возможные комбинации входов переключателя и организовал их последовательно, следуя двоичным шаблонам. Значение «1» указывает, что переключатель включен, пробел означает, что он выключен. Вверху таблицы я ввел значения сопротивления для каждого переключателя и для понижающего резистора. Затем я вычислил эквивалентное сопротивление для каждой из комбинаций, за исключением случая, когда все резисторы выключены, поскольку эти резисторы не будут иметь влияния, если не будет источника питания. Чтобы упростить мои расчеты, чтобы я мог копировать и вставлять в каждую комбинацию, я включил все комбинации в расчет, умножив каждое значение переключателя (0 или 1) на его инвертированное значение сопротивления. Это исключило его сопротивление из расчета, если переключатель был выключен. Полученное уравнение можно увидеть на изображении электронной таблицы, но Req = Rx + 1 / (Sw1 / R1 + Sw2 / R2 + Sw3 / R3 + Sw4 / R4 + Sw5 / R5 + Sw6 / R6). Используя Itotal = 5V / Req, мы определяем полный ток в цепи. Это тот же ток, который проходит через понижающий резистор и подает нам напряжение на аналоговый вход. Это рассчитывается как Vin = Itotal x Rx. Изучая как данные Req, так и данные Vin, мы видим, что у нас действительно есть уникальные значения.

На данный момент похоже, что наша схема будет работать. Теперь выясним, как программировать Arduino.

Шаг 3: Программирование Arduino

Программирование Arduino
Программирование Arduino
Программирование Arduino
Программирование Arduino
Программирование Arduino
Программирование Arduino

Когда я начал думать о том, как программировать Arduino, я изначально планировал настроить отдельные диапазоны напряжения для определения того, включен ли переключатель или нет. Но однажды ночью, лежа в постели, мне пришло в голову, что я смогу найти уравнение, чтобы сделать это. Как? EXCEL. В Excel есть возможность вычислять уравнения, чтобы наилучшим образом вписать данные в диаграмму. Для этого мне понадобится уравнение целочисленного значения переключателей (двоичного) в зависимости от входного напряжения, соответствующего этому значению. В моей книге Excel я помещаю целочисленное значение в левую часть таблицы. Теперь определимся с моим уравнением.

Вот краткое руководство о том, как определить уравнение линии в Excel.

1) Выберите ячейку, не содержащую данных. Если у вас выделена ячейка с данными, Excel попытается угадать, что именно вы хотите изменить. Это значительно усложняет настройку тренда, потому что Excel редко предсказывает правильно.

2) Выберите вкладку «Вставка» и выберите «Точечную» диаграмму.

3) Щелкните правой кнопкой мыши в поле диаграммы и выберите «Выбрать данные…». Появится всплывающее окно «Выбрать источник данных». Нажмите кнопку «Добавить», чтобы продолжить выбор данных.

4) Дайте ему название серии (необязательно). Выберите диапазон для оси X, щелкнув стрелку вверх и выбрав данные напряжения. Выберите диапазон для оси Y, щелкнув стрелку вверх и выбрав целочисленные данные (0-63).

5) Щелкните правой кнопкой мыши точки данных и выберите «Добавить линию тренда…». В окне «Форматировать линию тренда» нажмите кнопку Полином. Глядя на тенденцию, мы видим, что порядок 2 не совсем совпадает. Я выбрал порядок из трех и почувствовал, что это намного точнее. Установите флажок «Отображать уравнение на диаграмме». Окончательное уравнение теперь отображается на диаграмме.

6) Готово.

OK. Вернемся к программе Arduino. Теперь, когда у нас есть уравнение, программировать Arduino очень просто. Целое число, представляющее положения переключателя, вычисляется в 1 строке кода. Используя функцию «bitread», мы можем получить значение каждого отдельного бита и, таким образом, узнать состояние каждой кнопки. (СМОТРЕТЬ ФОТО)

Шаг 4: схемы TinkerCAD

Схемы TinkerCAD
Схемы TinkerCAD

Если вы еще не пробовали TinkerCAD Circuits, сделайте это сейчас. ЖДАТЬ!!!! Завершите чтение моей инструкции, а затем ознакомьтесь с ней. TinkerCAD Circuits упрощает тестирование схем Arduino. Он включает в себя несколько электрических объектов и Arduinos, позволяя даже программировать Arduino для тестирования.

Чтобы проверить свою схему, я установил 6 переключателей с помощью блока DIP-переключателей и привязал их к резисторам. Чтобы доказать, что значение напряжения в моей таблице Excel было правильным, я показал вольтметр на входе в Arduino. Все сработало, как ожидалось.

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

Затем я переключил каждый переключатель на каждую возможную комбинацию и с гордостью говорю: «ЭТО РАБОТАЕТ» !!!

Шаг 5: «До свидания и спасибо за рыбу». (ссылка 1)

Мне еще предстоит испытать это на реальном оборудовании, так как в настоящее время я путешествую по работе. Но, убедившись в этом с помощью TinkerCAD Circuits, я считаю, что это сработает. Проблема в том, что значения резисторов, которые я указал, не являются стандартными значениями для резисторов. Чтобы обойти это, я планирую использовать потенциометры и комбинации резисторов, чтобы получить нужные мне значения.

Спасибо, что прочитали мою инструкцию. Я надеюсь, что это поможет вам в ваших проектах.

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

Шаг 6: ссылки

Вы же не думали, что я приведу цитату без ссылки на ее источник, не так ли?

исх. 1: Адамс, Дуглас. Так долго и спасибо за все рыбы. (4-я книга "Автостопом по Галактике" трилогия)

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