- керування навантаженням через транзистор - нарощуємо яскравість світлодіодним шкали.
База біполярного транзистора - це його середня ніжка. Якщо повернути транзистор плоскою стороною до себе, ніжками вниз, то ліва ніжка це колектор, а права - емітер.
Якщо цю схему зібрати без резистора між базою транзистора і портом Arduino, ми практично влаштуємо коротке замикання порту на землю. Рано чи пізно це виведе з ладу транзистор або вихід мікроконтролера.
Навіщо тут взагалі транзистор? Без нього така кількість світлодіодів буде споживати струму більше ніж дозволених 40 мА, які може собі дозволити Arduino. Тому ми беремо живлення з порту 5V, розрахованого на струм до 500 мА, а на цифровий порт ставимо транзистор, щоб за допомогою малого струму управляти великим.
В даному випадку ми включили 10 світлодіодів паралельно, кожен через окремий резистор. Включати їх через один резистор неправильно: навіть світлодіоди з однієї партії мають мінімальний розкид вольтамперних характеристик, внаслідок чого вони:
- Світилися б з різною яскравістю
- Через мінімальної різниці в часі включення, більший струм, що пройшов через перший ввімкнувся світлодіод, міг би вивести його з ладу. І так по ланцюжку.
#define CONTROL_PIN 9
// змінні верхнього рівня, тобто оголошені поза функцій,
// називають глобальними. Їх значення зберігаються весь час,
// поки працює мікроконтролер
int brightness = 0 ;
void setup ( )
{
pinMode ( CONTROL_PIN, OUTPUT ) ;
}
Void loop ( )
{
// збільшуємо значення яскравості на одиницю, щоб наростити
// яскравість. Однак яскравість не повинна бути більше 255, тому
// використовуємо операцію залишку від ділення, щоб при
// досягненні значення 255, таким значенням знову став 0
// Y% X - це залишок від ділення Y на X;
// плюс, мінус, ділити, помножити, дужки - як в алгебрі.
brightness = ( brightness + 1 ) % 256 ;
// подаємо обчислений ШІМ-сигнал яскравості на пін з базою
// керуючого транзистора
analogWrite ( CONTROL_PIN, brightness ) ;
// чекаємо 10 мс перед наступним нарощуванням яскравості. Таким
// чином, повне розжарення буде відбуватися протягом
// 256 × 10 = 2560 мс
delay ( 10 ) ;
}