Подключение транзистора к ардуино

Если вам нужно измерять с помощью ардуины напряжения превышающие напряжение питания или измерять сопротивление резистивного датчика — вам необходим резисторный делитель напряжения.
На деле это очень просто — два резистора и всё:

К выводу верхнего резистора (R1) подключаем измеряемое напряжение (Uвх) — со средней точки снимаем поделённое (Uвых).
Значение выходного напряжения зависит от соотношения сопротивлений (и входного напряжения естественно):

Обратите внимание — важно только соотношение сопротивлений, например, если сопротивления равны, то входное напряжение поделится на 2.
А что бы через делитель не шёл слишком большой ток (разряжая батарею и грея резисторы) стоит выбирать номиналы в еденицы-десятки килоом.
Что со всем этим можно сделать:
Измерение напряжения питания
Например, имеется тяговый 12В аккумулятор на роботе и надо знать его текущее состояние, что бы вовремя подъехать на зарядку. Подключим «плюс» батареи к верхнему резистору делителя, и объединим земли — «минус» батареи робота и GND ардуины.

Измерения будем просто выводить в сом-порт:
// аналоговый пин подключенный к средней точке делителя const int batterySensorPin = A0; int batterySensorValue = 0; float batteryVoltage = 0; // 5V/1024 значений = 0,004883 В/значение const float voltPerUnit = 0.004883; //»рассчёт делителя» const float R1 = 2; const float R2 = 1; //коэффициент для расчёта напряжения на входе делителя const float dividerRatio = (R1+R2)/R2; //коэффициент перевода имерений в напряжение const float voltRatio = voltPerUnit * dividerRatio; void setup() { Serial.begin(9600); } void loop() { batterySensorValue = analogRead(batterySensorPin); // рассчитаем в человеко-понятных вольтах batteryVoltage = batterySensorValue * voltRatio; //и выведем результаты в ком-порт: Serial.print(«batterySensorValue = » ); Serial.print(batterySensorValue); Serial.print(» » ); Serial.print(«batteryVoltage = » ); Serial.println(batteryVoltage); delay(1000); }Получилось так:

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

Тоесть можно воткнуть крайние ноги в землю и в питание(5В), а со средней снимать напряжение зависящее от угла поворота ручки.
В качестве примера можно взять стандартный скетч knob:
#include <Servo.h> Servo myservo; // создаём обьект servo int potpin = 0; // на A0 подключим среднюю ногу потенциометра int val; // сюда будем считывать void setup() { myservo.attach(9); // на 9 ноге у нас будет серва } void loop() { val = analogRead(potpin); // читаем значение с А0 ( получается от 0 до 1023) val = map(val, 0, 1023, 0, 179); // преобразуем это в диапазон 0-180 для управления сервой myservo.write(val); // и поворачиваемсерву на получившийся угол delay(15); // задержка }
схема для примера проста как угол дома:

поэтому работает:

Много резисторов и серв, и зачем такая связка может понадобиться можно увидеть .

Резистивные датчики (фоторезистор, терморезистор)
Некоторые датчики меняют своё сопротивление в зависимости от изменений измеряемой величины — например фоторезистор или терморезистор. Чувствовать изменение сопротивления контроллер не может — зато воткнув наш датчик в одно из плечей делителя сможем измерить изменение напряжения:
«Х» на полке у нижнего резистора символизирует некую физическую величину к которой данный Х-резистор не равнодушен.
Тут, как и в примере с потенциометром, мы запитали делитель от стабильного известного напряжения — напряжения питания МК (5В), сопротивление верхнего резистора постоянно, так что напряжение со средней точки будет зависеть только от сопротивления датчика(нижнего резистора).
Узнаем освещённость во внешнем мире:
Скетч — подрезанный AnalogInOutSerial:
const int analogInPin = A0; //на A0 подключим среднюю ногу делителя int sensorValue = 0; // тут будем хранить значения с фоторезистора void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogInPin); //считываем значение Serial.print(«sensor = » ); // и самым тупым образом выводим его в сиреал Serial.println(sensorValue); delay(500); // с задержкой }
Он видит свет!
Ещё по теме:
(там скорее термостабилитрон, но суть совершенно та же)

NPN mosfet подключение к arduino

Тут все без гемора. Вот пара вариантов подключения:

Если надо еще и плавно включать/выключать лампочку, либо не на всю мощность, а только на половину например, можно из ардуино пищать шимом, а между затвором и истоком включить еще конденсатор микрофарад на 300. Это нужно чтобы открыть мосфет на половину.. Однако это подойдет только для маломощной лампочки, потому как полуоткрытый мосфет имеет некислое внутреннее сопротивление и греется как утюг.

В эту схему подойдет к примеру мосфет h6n03l. Но тут есть нюанс в выборе резюков. Тот, который между ардуино и gate – чем больше сопротивление, тем меньше ток на ноге ардуино и меньше вероятность что она задымится. И чем больше сопротивление тем медленнее открывается мосфет. Кароч 150 ом норм для ардуино (по закону ома I = E / R, I = 5 / 150 = 0.033 А — это 33 миллиампера, норм). Зачем он вообще нужен? Дело в том, что затвор (gate) у полевика имеет определенную емкость и является в какой-то мере конденсатором. Так что в момент переключения через затвор проходят большие токи, которые может не выдержать ардуина. Для этого и нужен резистор между gate и пином.

А второй 10 кОм типа подтягивающий резистор – нужен чтобы держать мосфет закрытым и нагрузку выключенной пока порт ардуины в неопределенном состоянии например при загрузке (так называемое Z-состояние).

Но у этой схемы есть косяк – она медленновата. На переключение уйдет 600ns что подходит не для всех задач. Вот фронт и спад.

Желтая – выход с мосфета, зелено-бирюзово-светло-голубая – выход с ШИМ ардуино. Желтая не успевает. Для решения этой проблемы надо поставить парочку транзисторов как тут предлагают http://joost.damad.be/2012/09/dimming-12v-led-strip-with-mosfet-and.html

Но это нужно далеко не всегда и как правило достаточно первой схемы. И кстати есть вариант получше — про него в конце статьи.

PNP mosfet arduino

Тут чутка сложнее

Если нам надо на нагрузку подать 5 вольт:

  • R1 ограничивает ток на затворе чтобы ардуинка не сломалась
  • R2 подтягивает порт на землю чтобы не было ложных срабатываний
  • D1 диод шотки чтобы не спалить все – он нужен только если нагрузка имеет большую индуктивность – например реле или мотор или еще что-то, где есть много намотанной проволоки. Кстати для NPN мосфета он тоже нужен. А на переменном токе не нужен, а то задымится)

Если на мотор или лампочку надо 12 вольт то все немного сложнее. Чтобы открыть мосфет нам надо подать 12 вольт на gate, а при таком варианте наш ардуино задымится. Надо еще один транзистор так:

Тут Q1 – биполярный транзистор – он то и включает 12 вольт на gate Q2, а R1 нужен чтобы ограничить ток чтобы ардуино опять таки не задымилась. Работает все так:

  • подаем с ардуино high – q1 начинает проводить ток с коллектора на эмиттер и 12 вольт утекает не в gate q2, а на землю. q2 включает мотор
  • подаем с ардуино low – q1 закрыт и не пропускает ток, 12 вольт через резистор подаются на gate q2, моторчик не крутится. все просто. резистор r2 нужен чтобы ограничить ток q1 и q2 чтобы он не задымились

Управлять больше чем 12 вольт можно, например 24 вольтами, если q1 выдержит. Чтобы наверняка можно добавить диод D2:

This entry was posted in Ремонт. Bookmark the <a href="https://kabel-house.ru/remont/podklyuchenie-tranzistora-k-arduino/" title="Permalink to Подключение транзистора к ардуино" rel="bookmark">permalink</a>.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *