2.3 Обзор проектов элективного курса по физике с применением ARDUINO Проект 1: Транзистор MOSFET. Показываем усилительные качества транзистора. На примере электродвигателя изменяем обороты В этом эксперименте мы познакомимся с транзистором MOSFET и с
помощью него будем управлять мощной нагрузкой – электродвигателем.
Необходимые компоненты: • плата для прототипирования;
• блок питания 5 В;
• контроллер Arduino UNO R3;
• транзистор MOSFET IRF540;
• диод 1N4007;
• двигатель DC;
• провода папа–папа.
Находятся в состоянии низкого импеданса контакты Arduino,
сконфигурированные как OUTPUT и могут подавать 40 мА на нагрузку и не
могут подавать питание на мощную нагрузку и высокое напряжение. Одним
из способов управления мощной нагрузкой является использование полевых
MOSFET-транзисторов. МОП-транзистор является ключом для управления
большими токами с небольшим напряжением (в отличие от биполярных
транзисторов, управляемых током). В нашем эксперименте мы будем
33
контролировать скорость вращения двигателя, изменяя напряжение,
подаваемое на полевой МОП-транзистор. Мы будем контролировать
напряжение, подаваемое на полевой МОП-транзистор, используя ШИМ
(широтно-импульсная модуляция). Для регулирования скорости двигателя
будет использоваться потенциометр.
Схема подключения элементов для данного эксперимента показана
на рисунке 2.3.
Рисунок 2.3 – Схема подключения мотора к Arduino
В листинге показан эскиз данного эксперимента. В цикле loop () мы
читаем аналоговое значение потенциометра и, масштабируя с помощью
функции map (), подаем сигнал ШИМ на MOSFET, к которому подключен
двигатель.
const int MOTOR = 9; // Выход для подключения MOSFET
const int POT = 0; // Аналоговый вход A0 для подключения
потенциометра
int valpot = 0; // переменная для хранения значения потенциометра
int speedMotor = 0; // переменная для хранения скорости двигателя
void setup ()
{
34
//
pinMode (МОТОР, ВЫХОД);
}
void loop ()
{
valpot = analogRead (POT); // читать данные потенциометра
// масштабируем значение до интервала 0–255
speedMotor = map (valpot, 0,1023,0,255);
// устанавливаем новое значение ШИМ
analogWrite (MOTOR, speedMotor);
задержка (1000); // Пауза
}