Ви не увійшли.
42 кнопки на один пин в принципе возможно если только одна из них будет срабатывать, а у вас будут проблемы с определением какая нажата. Хотя, если почитать задачу изначальную, сбили мишень проиграли мелодию и по барабану какую именно то как вариант с резисторами можно что-то придумать. Но надёжнее конечно будет поставить расширители портов
Неактивний
Без схемы ничего непонятно
Вот схема с резисторами, для примера их 4 шт (т.е. здесь - 4 мишени). Замкнутая кнопка - мишень установлена, разомкнута - мишень сбита:
Замыкаясь, кнопки исключают соответственные резисторы,
сопротивление всего участка между +5В и Аналоговым пином уменьшается, значит
напряжение растёт, и analogRead() по мере зажимания кнопок (т.е. по мере установки мишеней) будет с приблизительно одинаковым шагом выдавать нам величину от 0 (когда сопротивление максимальное) до 1023(когда напряжение = опорному, +5В).
42 кнопки на один пин не получится.
смотрите в сторону сдвиговых регистров.
в сети есть примеры
Я пока что не знаю что это такое Но если ткнёте в ссылку, где всё доступно и на наших языках - обязательно изучу.
Пока ищу простые пути. К тому же, моя задача - это сделать так, чтоб я сыну смог доступно объяснить, а для этого надо сначала самому понять.
42 кнопки на один пин в принципе возможно если только одна из них будет срабатывать, а у вас будут проблемы с определением какая нажата. Хотя, если почитать задачу изначальную, сбили мишень проиграли мелодию и по барабану какую именно то как вариант с резисторами можно что-то придумать. Но надёжнее конечно будет поставить расширители портов
Вот именно! Не важно, какая именно мишень сбита - главное, что изменится сопротивление между пином в 5 вольт и аналоговым пином, который мы и будем читать, отлавливая изменения. Логика такова: если сигнал стал сильнее, значит сопротивление уменьшилось, т.е. какой-то резистор (не важно, по сути, какой именно - какой-то из них) был нажатием кнопки исключен из цепи последовательных резисторов - ток потёк через замкнутую кнопку, "в обход" соответствующего резистора.
Таким образом, изменения в состоянии мишени (заряжена/разряжена) - мы заметим, распознаем, и отреагируем на них (издадим нужный звук, или можно иллюминацию какую-то нарисовать, ).
Но по изначальной задумке еще нужно включать и выключать светодиоды подсветки мишеней, а эта схема не даёт информации о том, какая мишень сбита. Кроме того, 42 диода потребуют мощность, которой нет... Проще, наверное, вообще сделать их нетухнущими, заапитанными отдельно: пусть светят направленно на мишень, когда она установлена, а когда она сбита (упала) светопоток будет проходить мимо мишени, освещая лишь темный однотонный фон... Но, может, есть способ и для управления подсветкой сбитой мишени (обычными или адресными светодиодами)? С подсветкой еще подумаю, вопщем...
Если схема рабочая, то какой номинал и мощность резистора лучше взять? по идее, любой, но наверняка есть нюансы.
UPD/ Неееее, точно не любой резистор, а такой, чтобы при минимальном ненулевом сопротивлении (т.е. когда в цепи работает только один резистор, остальные исключены кнопками) падение напряжения на нем было достаточным для того чтобы зафиксировать это на пине, но не слишком большим - чтобы при подключении в цепь 41 резистора одинаковых номиналов не получить на пине 0, иначе последний (42й) резистор просто не будет вызывать изменения на пине.
Остання редакція DmytroDnipro (2020-11-27 21:03:47)
Неактивний
В схеме есть рациональное зерно, но чтобы всё заработало как надо, придётся кое-что добавить.
Да уж, прийдётся. Может, подскажете где и что искать? Сейчас имею трудность с написанием простого скетча. Точнее, не с написанием - а с его правильной работой))
Конкретнее:
собрал на макетке схему из моего предыдущего сообщения, резисторы - по 100 Ом (меньше под рукой не было), кнопка параллельна резистору. Залил в Ардуино УНО скетч (тупо опрашивающий аналоговый пин, и пишущий это в СОМ-порт). Смотрю в СОМпорт, вижу вот что:
- полное сопротивление этой цепи - 400 Ом. analogRead() выдает мне величину 50-51 (максимальное сопротивление , т.е. минимальное напряжение на пине);
- отключаю один резистор (получается 300 Ом). analogRead() выдает 67-68;
- отключаю два резистора (получаем 200 Ом). analogRead() выдает 99-100;
- отключаю три резистора (т.е. работает только 1 резистор на 100 Ом). analogRead() выдает 193-194;
- отключаю 4й, последний в цепи, резистор (т.е. сопротивления, как бы, совсем нет). analogRead() выдает 1009-1010.
И у меня тут кучка вопросов:
1) почему изменения в этих замерах происходят с разным шагом, не смотря на то, что исключаемые резисторы - одинакового номинала? Как сделать одинаковый шаг, и точные (не скачущие) показания?
2) analogRead() должен выдавать 1023 как максимум, при подаче +5В на аналоговый пин, а у меня - 1010 - почему так? (мультиметр китайский дешёвый, которому я не особо доверяю, показал 4,85 В на выходе с ардухи - может тут собака зарыта?)
3) какого номинала нужны резисторы, если цепь будет состоять из 42 штук? (экспериментально установил, что при сопротивлении цепи резисторов в 25 Ом, analogRead() выдает величину 643. Думаю, резистор должен быть таким, чтобы когда он в цепи один, т.е. все остальные исключены нажатиями кнопок, величина выдаваемая командой analogRead() была бы меньше числа 1023 на примерно 1023/42, это ~22..23. Это так бы и было наверняка, если бы изменения происходили с одинаковым шагом, но пока что это не так у меня)
Остання редакція DmytroDnipro (2020-11-27 20:48:25)
Неактивний
В вашей схеме не хватает как минимум еще одного резистора межу аналоговым пином и gnd. почитайте про делитель напряжения и вольтметр на ардуино, например, это https://microkontroller.ru/arduino-projects/prostoj-voltmetr-na-arduino-uno/
Как сделать одинаковый шаг ?
Рассчитать 42 делителя
Может, подскажете где и что искать?
Можно и подсказать.
Нужно будет собрать 6 цепочек по 7 резисторов и 7 кнопок.
Резисторы в цепочке должны иметь номиналы кратные числам 1, 2 ,4, 8, 16, 32, 64 (чем точнее соотношение, тем лучше).
Цепочки резисторов нужно подключить между шестью аналоговыми входами и землёй.
Питать цепочки нужно токовыми драйверами (коллектор биполярного транзистора или сток полевого).
Ток драйвера выбрать таким, чтобы при всех включенных резисторах на цепочке падало чуть меньше 5 вольт.
Если все кнопки разомкнуты, АЦП выдаст что-то около максимального значения 1023.
Если замкнуть один самый большой резистор, выходное значение АЦП уменьшится примерно на 512.
Если ..................................................................................................................................... 256.
Если ..................................................................................................................................... 128.
Если ...................................................................................................................................... 64.
Если ...................................................................................................................................... 32.
Если ...................................................................................................................................... 16.
Если замкнуть один самый маленький резистор, выходное значение АЦП уменьшится примерно на 8.
Если замкнуть все резисторы, выходное значение АЦП будет около минимального значения 0.
Если что-то непонятно, то вопросы задавайте по одному. Слона надо есть маленькими кусочками.
Неактивний
Нужно будет собрать 6 цепочек по 7 резисторов и 7 кнопок.
Я понял это вот так, правильно?
Питать цепочки нужно токовыми драйверами (коллектор биполярного транзистора или сток полевого).
Ток драйвера выбрать таким, чтобы при всех включенных резисторах на цепочке падало чуть меньше 5 вольт.
Разжуйте, пожалуйста, если не трудно. Где и как подключается полевой транзистор? Вероятно, это детский вопрос, но в смысле грамотности в области электроники я ребёнок и есть )) Буду весьма признателен.
Неактивний
Если все кнопки разомкнуты, АЦП выдаст что-то около максимального значения 1023.
Если замкнуть один самый большой резистор, выходное значение АЦП уменьшится примерно на 512.
Если ..................................................................................................................................... 256
... ... ... ...
Если ...................................................................................................................................... 16.
Если замкнуть один самый маленький резистор, выходное значение АЦП уменьшится примерно на 8.
Если замкнуть все резисторы, выходное значение АЦП будет около минимального значения 0.
Вот тут мне не всё понятно. Если все кнопки разомкнуты, значит ток будет идти по всем семи резисторам, и сопротивление будет максимальным на этом участке, т.е. АЦП, по идее, выдаст наименьший результат из возможных? То же самое здесь: Если замкнуть все резисторы, ток потечет через замкнутые кнопки без сопротивления, и выходное значение АЦП будет максимальным из возможного. При подключении к +5В это так и было у меня... Или это из-за того, что подключаем на землю?
Неактивний
Схему с транзисторами нарисовал, а как её запостить не знаю.
я такое делаю через здесь:
https://piccy.info/
Картинка 500 px, для форумов. Быстро грузится, нет рекламы - то, что нужно.
Неактивний
Зелёными резисторами подбираются токи, при которых АЦП будут выдавать значения чуть ниже максимального. Их сопротивление примерно в 100...200 раз больше, чем суммарное сопротивление резисторов цепочки. Понижать "+12V" не рекомендую.
PS Спасибо за подсказку по рисункам
Неактивний
Зелёными резисторами подбираются токи, при которых АЦП будут выдавать значения чуть ниже максимального. Их сопротивление примерно в 100...200 раз больше, чем суммарное сопротивление резисторов цепочки. Понижать "+12V" не рекомендую.
PS Спасибо за подсказку по рисункам
Большое спасибо!
Неактивний
Напряжения в точках А0...А5 могут оказаться намного больше допустимых для портов контроллера. Поэтому, сначала нужно подобрать токи драйверов для получения на цепочках по 5 вольт, а потом подключать эту схему к контроллеру.
Неактивний
Получается, когда в цепи из семи резисторов задействован один, с самым меньшим сопротивлением, то "зелёный" резистор должен быть таким, чтобы открыть транзистор лишь немного, и в паре с этим маленьким обеспечить не более 5 вольт на пине? И в то же время, цепь из семи резисторов будет иметь сопротивление в 127 раз больше , и совместно с всё тем же "зелёным" резистором они должны обеспечить хоть сколько-нибудь заметный для МК уровень сигнала?
Что-то я не понимаю, как мне это посчитать - если я вообще правильно понимаю работу транзистора здесь.
С чего хоть начинать подбор - с выбора самого маленького в цепи, с выбора "зелёного", или с подбора транзистора? От чего отталкиваться?
Остання редакція DmytroDnipro (2020-12-02 01:00:22)
Неактивний
Пусть самый маленький резистор имеет сопротивление 100 Ом, тогда самый большой - 6,4 кОм. Суммарное сопротивление цепочки - 12,7 кОм. Тогда"зелёным" резистором нужно подобрать ток коллектора около 0,4 мА. При этом, если все кнопки разомкнуты, на цепочке будет падатьнапряжение примерно 5 В. "Зелёный" резистор больше никогда не меняется! При нажатии разных комбинаций кнопок на входе порта будет изменяться напряжение. Если сопротивления резисторов в цепочке соответствуют указанной пропорции, то по напряжению можно точно определить, какие кнопки нажаты.
Неактивний
"зелёным" резистором нужно подобрать ток коллектора около 0,4 мА. При этом, если все кнопки разомкнуты, на цепочке будет падать напряжение примерно 5 В.
Т.е. выбор "зелёного" делать из того, какой используется транзистор? Но какие тогда параметры должен иметь транзистор? (Надыбал ресурс для онлайн подбора транзистора по параметрам, и понял: ооочень много неизвестных мне параметров, аж страшно. Вот здесь смотрел:
http://paratran.com/1ExtendedSearch.php , но растерялся )
Неактивний