Как использовать транзистор для "нажатия" кнопки?
У меня есть пульт дистанционного управления обогревателем, на который я хочу нажимать кнопки с помощью своего Arduino. Я питаю пульт дистанционного управления и Arduino от внешнего источника 5 В, поэтому оба заземления подключены.
В настоящее время я пробовал использовать транзистор NPN(TIP122), и он действительно работает, но не очень надежен. Это, вероятно, работает в 80% случаев, но недостаточно хорошо для моей цели. Иногда ничего не происходит, а иногда кнопка нажимается дважды без всякой причины.
Это мои связи.
У меня эмиттер подключен к земле, коллектор подключен к кнопке, а база подключена к Arduino с резистором 1k. С моими связями все в порядке?
Я также пробовал использовать транзистор PNP, но тянул НИЗКО вместо ВЫСОКО и НИЗКО вместо ВЫСОКО.
Код очень прост, в настройках у меня есть:
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
delay(20);
digitalWrite(4, LOW);
Поэтому, когда я перезапускаю Arduino, он должен нажать кнопку, верно?
У меня также есть IRLZ44N и IRF540N, будет ли любой из них работать лучше?
@Username, 👍2
Обсуждение2 ответа
Взгляд на таблицу данных TIP22 показывает, что это парный транзистор Дарлингтона, что означает, что он имеет очень высокое усиление постоянного тока (хорошо), но за счет очень высокого Vbe_ON (плохо). В таблице данных показано, что Vbe_ON равен 2,5 В, что означает, что напряжение на 1K составляет всего 2,5 В максимум, что ограничивает базовый ток примерно до 2 мА. Этого, вероятно, недостаточно для хорошего насыщения. Кроме того, Vce_SAT для этого устройства составляет около 2,0 В, чего может быть или не быть достаточно, чтобы выглядеть как хороший GND для схемы кнопок.
Я думаю, что МОП-транзистор, подобный IRF540N, подключенный, как показано здесь (схема замены кнопки для двигателя), может быть лучшим выбором YMMV
Вам действительно нужен только один провод и никаких резисторов или МОП-транзисторов.
Я вижу много ответов, включая дорогие МОП-транзисторы и реле, чтобы ответить на этот вопрос. Существует гораздо более простое решение, не требующее логики склеивания или схемы сопряжения. Недавно мне пришлось установить готовый ультразвуковой увлажнитель воздуха в инкубаторе/брудере. Это дешевый маленький диффузор для ароматерапии домашнего использования. Он должен был управляться реле, чтобы включаться и выключаться. Загвоздка в том, что схема управления и встроенное ПО, используемые почти во всех из них, одинаковы, их можно включить с помощью реле в контроллере инкубатора PID, но для запуска ультразвукового увлажнителя и вентилятора требуется одно нажатие кнопки после подачи питания. три нажатия кнопок выключают увлажнитель воздуха, переводят его в режим ожидания и автоматически выключают, когда в нем заканчивается вода. использование arduino для управления только кнопкой, чтобы вывести его из режима ожидания, не приведет к надежной работе. Я искал ответ, но не нашел ничего, что я мог бы сделать, учитывая, что у меня было мало деталей и я работал на удаленной ферме. Это мое решение.
Наука, стоящая за этим, и то, как это работает, заключается в том, что микроконтроллер не ощущает нажатие кнопки, он обнаруживает изменение состояния. Вы можете ознакомиться с этим в руководствах по arduino для чтения нажатия кнопки.
Подключите заземление arduino к заземлению в цепи, которой вы хотите управлять. найдите рельс 5 В и включите arduino. дополнительная мощность не требуется. Обычно имеется тестовая панель, которая заземляется и находится на 5 В рядом с кнопкой, которой вы хотите управлять. если нет, найдите регулятор для микроконтроллера, который вы пытаетесь запустить, проследив схему и подсоедините силовые рельсы. Я использовал цифровой вывод 2 для сигнала запуска. подключите d2 к точке рядом с коммутатором. Убедитесь, что в цепи между точкой и микроконтроллером имеется резистор примерно 600-1000 Ом. Это должно присутствовать в цепи, которую вы уже запускаете, просто потому, что именно так микроконтроллеры обнаруживают изменения состояния без понижения или источника бесконечного тока.
Этот код сработает один раз, а затем перейдет в спящий режим. Длительные задержки должны учитывать ожидаемый код отмены в микроконтроллере и время загрузки. проще говоря, он переключает PD2 между высоким и низким состояниями в состояниях с высоким и низким сопротивлением, и в основном все, что делает переключатель, - это переключается между состояниями с высоким и низким сопротивлением. Этот код должен вызвать практически любой микроконтроллер, независимо от требуемого определенного состояния, один раз, а затем перейти в спящий режим.
#include <avr/sleep.h>
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
pinMode(PD2, INPUT_PULLUP);
digitalWrite(PD2, HIGH);
delay(2000);
pinMode(PD2, OUTPUT);
digitalWrite(PD2, HIGH);
digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
pinMode(PD2, INPUT_PULLUP);
digitalWrite(PD2, HIGH);
delay(300);
pinMode(PD2, OUTPUT);
digitalWrite(PD2, LOW);
digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
pinMode(PD2, INPUT_PULLUP);
digitalWrite(PD2, LOW);
delay(500);
sleep_enable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_cpu();
}
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Определение того, была ли нажата и отпущена кнопка
- Хорошая кнопка debouncing/Библиотека StateChange
- Управление светодиодом с помощью транзистора (TL188)
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
вы должны нажимать кнопку дольше, чем 1/50 секунды, @jsotola
Я пытался изменить это. Я перепробовал все от 20 до 1000 мс, и все они дали одинаковые результаты., @Username
Вы уверены, что кнопка просто тянет контакт вниз? Возможно, это не так. Однажды я решил аналогичную проблему, используя транзистор NPN для соединения кнопки, вместо того, чтобы опускать ее низко. Это, кажется, работает довольно хорошо, хотя я не проверял это тщательно., @chrisl
Когда я нажимаю на землю пульта дистанционного управления на контакт кнопки, он "нажимает ее". Пока я тестировал и просто делал это с помощью перемычки, казалось, что это работает почти каждый раз., @Username
почему вы используете транзистор для понижения другого логического вывода 5 В?, @Juraj
Когда дается неизвестная схема для управления кнопками, я нахожу, что обычно лучше пойти на полную изоляцию и использовать оптопару., @Majenko
Однако, безусловно, N-канальный транзистор FET намного лучше NPN - транзистора-вы не получаете падения напряжения от FET, которое вы получаете с помощью BJT., @Majenko
Как бы я подключил МОП-транзистор к кнопке. Подключаю ли я затвор к Arduino с помощью резистора, источник к заземлению и слив к кнопке?, @Username
Звучит правильно для меня, да., @Majenko
Транзистор PNP имеет довольно высокое сопротивление "вкл.". Это может быть слишком. Вы должны попробовать использовать переменный резистор и посмотреть, какой уровень сопротивления надежно запускает переключатель, а затем попробовать схему синхронизации, чтобы узнать, как долго вам нужно удерживать это сопротивление, прежде чем оно зарегистрируется. (Начните с 1 секунды и двигайтесь в обратном направлении.) МОП-транзистор имеет гораздо меньшее сопротивление, и вы можете получить их, которые могут быть полностью включены от логического сигнала 5 В., @Duncan C
Вы уже открыли пульт дистанционного управления, поэтому вам нужно проверить, соединяет ли кнопка входной вывод чипа пульта дистанционного управления с GND или с его собственным VCC, или, может быть, с чем-то еще. Не должно занять много времени с мультиметром в режиме "звуковой сигнал". Если есть много кнопок, они могут быть мультиплексированы, так что проверьте это. Изображение удаленной печатной платы помогло бы. Также вам нужно проверить, что такое VCC на этом чипе, он, вероятно, не работает на 5 В, поэтому, возможно, вам захочется быть осторожным, чтобы не выводить немного 5 В из arduino., @bobflux