Сторінка 1 з 1

Використання аналогового входу і потенціометра для управління світлодіодом

Додано: 24 травня 2017 11:37
Arduino
В прикладі використовуються схеми: зчитування напруги з поенціометра через аналоговий вхід, використання результату дискретного значення напруги для управління ШІМ методом яскравістю світлодіода - передача значення напруги в цифровому вигляді на вхід керування напругою джерела світла
За даним принципом конструюються дімери для управління світлодіодними стрічками, звичайними лампами розжарювання та управління потужністю двигунів
l3-svetilniksupravljarkost1.jpg
Підключення світлодіода до схеми з потенціометром
  • Ми підключили «землю» світлодіода і змінного резистора (потенціометра) до довгої рейці «-» макетної плати, і вже її з'єднали з входом GND мікроконтролера. Таким чином ми використовували менше входів і від макетке до контролера тягнеться менше проводів.
  • Підписи «+» і «-» на макетній платі не зобов'язують вас використовувати їх строго для живлення, просто найчастіше вони використовуються саме так і маркування нам допомагає
  • Не важливо, яка з крайніх ніжок потенціометра буде підключена до 5 В, а яка до GND, зміниться тільки напрямок, в якому потрібно крутити ручку для збільшення напруги. Запам'ятайте, що сигнал ми зчитуємо з середньою ніжки
  • Для зчитування аналогового сигналу, що приймає широкий спектр значень, а не просто 0 або 1, як цифровий, підходять тільки порти, помічені на платі як «ANALOG IN» і пронумеровані з префіксом A. Для Arduino Uno - це A0-A5.
// даємо розумні імена для пінів з світлодіодом
// і потенціометром (англ potentiometer або просто «pot»)
#define LED_PIN 9
#define POT_PIN A0

void setup ( )
{
// пін з світлодіодом - вихід, як і раніше ...
pinMode ( LED_PIN, OUTPUT ) ;

// ... а ось пін з потенціометром повинен бути входом
// (англ. «Input»): ми хочемо зчитувати напруга,
// що видається їм
pinMode ( POT_PIN, INPUT ) ;
}

void loop ( )
{
// заявляємо, що далі ми будемо використовувати 2 змінні з
// іменами rotation і brightness, і що зберігати в них будемо
// цілі числа (англ. «integer», скорочено просто «int»)
int rotation, brightness ;

// зчитуємо в rotation напруга з потенціометра:
// мікроконтролер видасть число від 0 до 1023
// пропорційне куту повороту ручки
rotation = analogRead ( POT_PIN ) ;

// в brightness записуємо отримане раніше значення rotation
// поділене на 4. Оскільки в змінних ми побажали зберігати
// цілі значення, дрібна частина від ділення буде відкинута.
// В результаті ми отримаємо ціле число від 0 до 255
brightness = rotation / 4 ;

// видаємо результат на світлодіод
analogWrite ( LED_PIN, brightness ) ;
}


Пояснення до коду програми
  • За допомогою директиви #define ми сказали компілятору замінювати ідентифікатор POT_PIN на A0- номер аналогового входу. Ви можете зустріти код, де звернення до аналогового порту буде за номером без індексу A. Такий код буде працювати, але щоб уникнути плутанини з цифровими портами використовуйте індекс.
  • Змінним прийнято давати назви, що починаються з малої літери.
  • Щоб використовувати змінну, необхідно її оголосити, що ми і робимо інструкцією:
    INT обертання, яскравість ;
  • Для оголошення змінної необхідно вказати її тип, тут - int(від англ. Integer) - цілочисельне значення в діапазоні від -32 768 до 32 767, з іншими типами ми познайомимося пізніше
  • Змінні одного типу можна оголосити в одній інструкції, перерахувавши їх через кому, що ми і зробили
  • Функція analogRead(pinA) повертає цілочисельне значення в діапазоні від 0 до 1023, пропорційна напрузі, поданим на аналоговий вхід, номер якого ми передаємо функції як параметр pinA
  • Зверніть увагу, як ми отримали значення, повернене функцією analogRead(): ми просто помістили його в змінну rotation за допомогою оператора присвоювання =, який записує те, що знаходиться праворуч від нього в ту змінну, яка стоїть зліва