Ардуино для начинающих. Урок 9. Моторы и транзисторы

Сегодня мы поговорим о транзисторах и подключении нагрузки к Arduino. Сама Ардуино не может выдать напряжение выше 5 вольт и ток больше 40 мА с одного пина. Этого достаточно для датчиков, светодиодов, но если мы хотим подключить устройства более требовательные по току, нам придется использовать транзисторы или реле. В этом уроке мы подключим девяти вольтовый моторчик и сервопривод к ардуино с помощью транзисторов.

В этом уроке используется:

Arduino Uno: Купить
Инфракрасный дальномер: Купить
Высокоточный лазерный дальномер с I2C: Купить
Набор резисторов из 100 штук на все случаи: Купить
Небольшой моторчик: Купить
Слабенький сервопривод: Купить
Мощный сервопривод: Купить
Мосфет транзистор для управления переменным током высокого напряжения: Купить
Набор npn транзисторов из 100 штук: Купить

Подключение мотора к Arduino

Как уже было сказано выше, ардуино не может обеспечить мотор необходимым током и напряжением. В таких случаях используются транзисторы.

Транзистор это радиоэлектронный компонент из полупроводникового материала способный от небольшого входного сигнала управлять значительным током в выходной цепи, что позволяет его использовать для усиления, генерирования, коммутации и преобразования электрических сигналов. Обычно у транзисторов 3 вывода: база, эмиттер и коллектор. Алгоритм действия можно сформулировать так: пропустить ток от коллектора к эмиттеру в зависимости от сигнала на базе. Транзисторы бывают разных типов и номиналов. Об этом можно подробнее почитать на википедии.

Будьте внимательны при выборе транзисторов для своих проектов. Некоторые рассчитаны на пропуск большого напряжения, или большого тока. Так же многие транзисторы не откроются от 5 вольт на базе. Всегда проверяйте характеристики транзисторов перед покупкой в datasheet. Так же обратите внимание, что для управления переменным током используются мосфет транзисторы.

Теперь давайте подключим мотор к ардуино по следующей схеме:

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

Как всегда ничего сложного. Главное не перепутать выводы транзистора. Обратите внимание на резистор через который ардуино подключена к базе. Это резистор на 1 кОм и нужен он для того что бы обезопасить нашу ардуинку. В видео к схеме добавлены диод и конденсатор, но они не обязательны. Так же можно добавить резистор на 10 — 100 кОм между эмиттером и коллектором для стабильности работы нашей схемы. Так же не забудьте, что земля на всех уровнях напряжения должна быть объединена. И взглянем на наш код:

 // Обозначаем пин к которому у нас подключена база транзистора
int motorPin = 9;

void setup () {
	// Устанавливаем пин в качестве выхода
	pinMode (motorPin, OUTPUT);
}

void loop () {
	// Перебор значений от 0 до 255 в цикле
	for (int i = 0; i <= 255; ++i) {
		analogWrite(motorPin, i);
		// небольшая задержка что бы все происходило не слишком быстро
		delay(10);
	}

delay(500);

for (int i = 0; i >= 0; i--) {
	analogWrite(motorPin, i);
	delay(10);
}

delay(500);
}

Как видите скетч очень прост. По комментариям в коде вы легко разберетесь, что к чему. Единственная конструкция, которую мы еще не использовали это цикл for.

Подключение сервопривода практически ни чем не отличается от подключения моторчика. Отличие в том что у сервы 3 вывода. Плюс, минус и логический. В видео подробно об этом рассказано.

Добавим в нашу схему инфракрасный дальномер. Просто потому, что мы можем 🙂 Будем задавать положение сервопривода в зависимости от показаний дальномера. Мы уже подключали дальномер, поэтому схему рисовать не буду.
Подключаем его к пину А0. Новый скетч стал еще проще:

 // Подключаем библиотеку для управления сервоприводом
#include <Servo.h>
Servo jeremysServo;

// Пин сервопривода
int servoPin = 9;
// Аналоговый пин инфракрасного дальномера
int distPin = 0;

void setup () {
	// передаем пин, подключенный к логическому выводу сервопривода
	jeremysServo.attach(servoPin);
}

void loop () {
	// Считываем показания инфракрасного дальномера
	int dist = analogRead(distPin);

	// Преобразуем значение в пригодное для ШИМ
	int pos = map(dist, 0, 1023, 0, 180);

	// Двигаем сервопривод
	jeremysServo.write(pos);
}

5 комментариев

  1. Дмитрий

    Добрый день! Что то не получается с транзистором. Взял кт815Г (что было). Эмитер соединил с землей (самая левая ножка). на землю посадил землю от бп (8V) и землю от ардуино. К коллектору (средняя ножка) присоединил лампочку одним выводом. К другому выводу лампочки присоединил + от БП 8V.
    базу (крайняя правая ножка) завел на землю через резистор 10К. На базу подал 5V от ардуино через резистор 1К. И ничего….

    • Shurovik

      Попробуйте для начала проверить сам транзистор, подав 5 В на базу (через резистор). Если он рабочий, то лампа загорится.

  2. Рудольф

    Напишите, для примера, какие транзисторы можно использовать. Или какие у них должны быть характеристики. Также неясно как подбирать резистор между эмиттером и коллектором и о какой стабильности идет речь.

  3. Александра

    Дмтрий можешь помощь, и немогу написать код с шаговым двигателем и датчиком света, немогу их вместе свезат что когда на улице светло он крутится в одну сторону ждёт пока не стемнет и крутица в другую сторону и там ждёт пока не рвсветет

  4. Дарья

    Объясните пожалуйста, почему вы пишите, что необходимо провести ток от коллектора к эмиттеру, при этом к коллектору у вас подключен мотор. какой сигнал в таком случае усиливает транзистор? разве он не должен быть между питанием и мотором, то есть в роли эмиттера будет мотор?

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

Ардуино