Переключение внешнего источника питания на охлаждающий вентилятор 5В с Arduino и транзистором 2N2222
Я использую транзистор 2N2222 в качестве переключателя нижнего плеча для включения и выключения компьютерного вентилятора 5 В с помощью цифрового контакта Arduino, который программно реагирует на нажатие кнопки, т. е. соответствующий цифровой контакт переключается с НИЗКОГО на ВЫСОКИЙ в течение определенного времени в ответ на нажатие кнопки, записанное на A0.
Моя схема выглядит так:
А вот мой код:
#define btnPin A0
#define signalPin 6
void setup() {
pinMode(btnPin, INPUT_PULLUP);
pinMode(signalPin, OUTPUT);
digitalWrite(signalPin, LOW);
}
void loop() {
if(digitalRead(btnPin) == LOW){
digitalWrite(signalPin, HIGH);
delay(5000);
digitalWrite(signalPin, LOW);
}
}
Для простоты я показываю на схеме отдельный компонент кнопки, но на самом деле я использую кнопку, подключенную к защитному экрану ЖК-дисплея.
Я ожидаю, что когда я нажму кнопку, цифровой контакт, подключенный к базе транзистора, заставит транзистор закрыть цепь и включить вентилятор (и светодиод) на пять секунд.
Проблема, с которой я столкнулся, заключается в том, что цифровой вывод Arduino, по-видимому, не может насытить базу, поэтому через транзистор проходит недостаточно тока для питания вентилятора. Он включает и выключает светодиод, как и ожидалось, но вентилятору требуется гораздо больше тока, чем светодиоду. Если я возьму провод напрямую от VIN или контакта 5V и поднесу его к базе (конечно, через резистор), он насытит базу, и вентилятор включится. Измеряя ток от VIN (или контакта 5 В) до базы, я получаю 4 мА, поэтому я предполагаю, что 4 мА достаточно для насыщения базы. Насколько я понимаю, цифровой вывод Arduino должен легко обеспечить это. Но в моем случае ток от соответствующего цифрового вывода к базе транзистора никогда не превышает 1,4 мА. Я пробовал разные контакты на плате, но всегда получал один и тот же результат.
Итак, вопрос в том, почему схема работает так, как ожидалось, для светодиода, но не для вентилятора? Будем признательны за любую помощь/предложения!
@artocignus, 👍1
Обсуждение4 ответа
Чтобы полностью включить транзистор, вы должны подать на базу от 1/10 до 1/20 тока коллектора. Если вы прочитаете техническое описание PN2222 (настоятельно рекомендуется), вы увидите, что Vce( sat) указывается с Ic/Ib = 10.
Теперь микросхема микроконтроллера Microchip ATMega328 во многих (но не во всех) платах Arduino способна выдавать 10 мА или 15 мА с минимальным падением (при условии питания 5 В). Опять же, эта информация доступна в техническом описании микроконтроллера (рис. 31-71). стр. 355).
Похоже, вы используете «Arduino» с каким-то другим микроконтроллером. В этом случае вы можете либо использовать другой транзистор для увеличения тока, либо заменить его на полевой МОП-транзистор логического уровня.
Что за Arduino?, @Spehro Pefhany
Тогда это должно работать. Теперь я предполагаю, что вы поменяли местами E и C на транзисторе., @Spehro Pefhany
@artocignus Он будет работать с перевернутым E&C, но будет иметь очень низкий коэффициент усиления. Или транзистор поврежден (например, от перегрева)., @Spehro Pefhany
Правильно. У тебя вообще есть старая металлическая банка, а? Редкий., @Spehro Pefhany
Исходя из описания вашей схемы, похоже, что вы, возможно, не подключили землю Arduino к «минусовой шине», той части схемы, к которой подключен эмиттер транзистора. Вы должны выполнить это соединение, чтобы правильно сместить переход база-эмиттер транзистора.
Я рекомендую вам нарисовать схему для такого рода вопросов, это было бы полезно.
Кажется, я решил проблему. Как упоминалось в вопросе, я использовал кнопку, подключенную к экрану ЖК-дисплея. Поскольку экран ЖК-дисплея занимает все контакты разъема на плате Arduino, экран ЖК-дисплея обеспечивает подключение цепей для неиспользуемых контактов Arduino. Похоже, что ЖК-экран, который я использовал, имеет некоторую неисправность, которая позволяет протекать только ограниченному току с соответствующих контактов Arduino. Это могло бы объяснить аномалию, состоящую в том, что только светодиод загорался, как и ожидалось, но вентилятор не работал: предположительно слабый ток в базе транзистора создавал достаточное усиление для питания светодиода, но не для вентилятора. В конце концов, после многих попыток заставить схему работать, даже светодиод перестал работать, и именно тогда я понял, что должна быть проблема с непрерывностью соединений заголовка. Итак, сняв экран ЖК-дисплея и подключив все напрямую к Arduino с помощью отдельной кнопки, все заработало, как и ожидалось. Большое спасибо за все полезные ответы. Теперь я гораздо лучше разбираюсь в том, как работает BJT!
У вас также должен быть диод на двигателе, катод на 5 В и анод на транзисторе. Когда транзистор выключится, двигатель попытается поддерживать ток 200 мА. Диод позволяет рассеивать этот ток. Без него вы можете получить всплеск высокого напряжения на транзисторе, который может повредить его.
Спасибо! Собственно, это один из вопросов, которые у меня были. На всякий случай я поставил обратноходовой диод в последнюю цепь. Приятно осознавать, что это не лишнее!, @artocignus
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Транзистор на изображении Fritzing подключен наоборот (E и C поменяны местами). Пожалуйста, дайте схему., @Spehro Pefhany
Я сделал что-то подобное с S8050MD, который похож на 2N2222, но с более высоким коэффициентом усиления. Я также согласен с @CrossRoads в его рекомендации по диодам., @mongo