Скільки цифрових пінів в Ардуїно
Піни Ардуїно: опис, характеристики, приклади скетчів
На платі Ардуїно є кілька видів пінів (з англійської pin - контакт, висновок). Їхня кількість може відрізнятися на різних платах, але завжди присутні такі типи: піни живлення, цифрові піни, аналогові піни. Про призначення цих висновків та роботу з ними і йтиметься у статті.
Короткий зміст:
- Піни харчування
- Цифрові піни в режимі входу
- Як підключити світлодіод до Ардуїно
- Цифровий пін у режимі входу
- Як підключити кнопку до Ардуїно
- Підтягуючий резистор
- ШИМ-піни
- Аналогові піни
- Аналогові піни в режимі цифрових
- Обмеження струму. Підключення потужного навантаження
- Піни комунікації
Піни Ардуїно на прикладі Arduino UNO
Піни харчування
Режим роботи пінів живлення жорстко заданий, його не можна міняти програмно. Сюди входять:
- GND - Це «земля» (англ. ground), нуль, загальний провід. Таких пінів може бути кілька. Сюди підключається мінусовий висновок джерела живлення.
- Vin - Пін для підключення плюса від зовнішнього джерела живлення. Напруга може бути від 5 до 12 Ст.
- 5v - Стабілізовані 5 вольт, які видає плата. Сюди можна підключити малопотужних зовнішніх споживачів, які потребують стабільного харчування (датчики тощо)
- 3.3v - Стабілізовані 3.3 вольта.
Зауважимо також, що Ардуїно може отримувати живлення і через usb-роз'єм, у цьому випадку не потрібно підключати зовнішнє джерело.
Цифрові піни. Режим виходу
Ця група пінів позначена на платі словом digital (англійською digital - цифровий).
Цифровий пін працює з двома станами: 0 (еквівалентно землі) та 1 (еквівалентно напрузі живлення). Причому будь-який цифровий пін може працювати як вхід, і як вихід.
Спочатку розберемося з режимом "вихід". Зберемо ось таку просту схему, де цифровий pin №5 керуватиме світлом світлодіода:
Схема 1. Підключення світлодіода до цифрового піну Ардуїно
Номінал резистора у цій схемі залежить від моделі світлодіода. Зазвичай тим світлодіодів, що у різних наборах Ардуино, потрібен резистор 330 Ом.
А ось скетч для цієї схеми:
void setup() < // Код у цьому методі виконається лише один раз при запуску Arduino pinMode(5, OUTPUT); // Перемикаємо пін №5 в режим виходу >void loop() < // Код у цьому методі буде виконуватися в циклі нескінченне кількісно раз digitalWrite(5, HIGH); // Встановлюємо високий рівень - світлодіод спалахує delay (500); // Затримка у мілісекундах. Весь цей час світлодіод горить. digitalWrite(5, LOW); // Встановлюємо низький рівень - світлодіод гасне delay (500); // І знову затримка >
Якщо все правильно зібрано, світлодіод моргатиме з частотою приблизно 1 Гц (цикл горить - не горить займає 1 секунду).
Ну і давайте відразу звикати програмувати правильно. У нашому скетчі в трьох місцях використовується магічне число 5 - номер нашого піна. А якщо ми вирішили змінити схему та підключити світлодіод до піну 6? Добре, коли скетч такий невеликий, і можна швидко знайти всі місця, де згадується п'ятірка і поміняти її на 6. А якщо скетч великий? Можна, по-перше, забути десь поміняти номер піна, а ще гірше випадково замінити сторонню п'ятірку, яка мала зовсім інший зміст.
Все це призводить до помилок у програмі. Але є спосіб зменшити ймовірність їхньої появи. У даному випадку можна запам'ятати номер піна в змінній, а потім скрізь використовувати її.
int ledPin = 5; //пін підключення світлодіода int dl = 500; // затримка void setup() <pinMode(ledPin, OUTPUT); >void loop()
Тепер ми можемо за необхідності змінювати параметри в секції ініціалізації і не чіпати решту коду. Та й саму програму читати легше — на ім'я змінної стає зрозуміло, що відбувається в тому чи іншому рядку коду.
Цифровий пін у режимі входу
Як говорилося вище, цифровий пін може працювати у режимі входу. З нього можна зчитувати його поточний стан за допомогою методу digitalRead(). Але оскільки варіантів всього два (1 і 0), то і підключити до нього можна якийсь пристрій, який має два стани, типу кнопки (натиснута / не натиснута).
І знову розберемо на прикладі. Покажемо, як підключити кнопку Ардуїно:
Схема 2. Підключення кнопки до цифрового входу Ардуїно
int ledPin = 13; // Пін 13 – це пін вбудованого світлодіода int buttonPin = 2; // Пін, якого підключена кнопка void setup() < pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); >void loop() < if (digitalRead(buttonPin) == HIGH) < // Перевіряємо: якщо є високий рівень на вході (кнопка натиснута). digitalWrite(ledPin, HIGH); // … то включаємо світлодіод. >else < // … інакше. digitalWrite(ledPin, LOW); // … світлодіод вимикаємо >>
При натисканні кнопки повинен світитися світлодіод на платі Ардуїно.
Підтягуючий резистор
Ви маєте право запитати, навіщо в схемі резистор? Це так званий резистор, що підтягує, за допомогою якого можна задати стан на вході «за замовчуванням».
Справа в тому, що входи Ардуїно мають дуже високий вхідний опір. Тому, ні до чого не підключений, «висить» вхід може виявитися в стані 1 за рахунок, наприклад, статичної електрики.Це спричинить помилкові спрацьовування: кнопка не натиснута, але програма зчитує з піна високий рівень.
Щоб цього уникнути, вхід підтягують (у даному випадку до нуля) резистором номіналом 10-20кОм. Коли кнопку відпущено, цей резистор встановлює 0 на вході. Але, при цьому його опір занадто велике, щоб перешкодити натиснутій кнопці встановити на вході 1: струм через резистор буде дуже малий, і, разом з великим вхідним опором піна, на ньому встановиться практично напруга живлення.
До речі, мікроконтролер ATmega має програмовані вбудовані підтягуючі резистори 20 кОм. Включення даних резисторів здійснюється так:
pinMode(buttonPin, INPUT); // перемикаємо пін у режим входу digitalWrite(buttonPin, HIGH); // Включаємо підтягуючий резистор - в даному випадку, підтягуємо до 1
ШИМ-піни
Ви могли звернути увагу, що на платі навпроти деяких цифрових пін стоїть знак ~ (тильда).
Так позначені піни, які можуть працювати в режимі ШІМ – широтно-імпульсної модуляції (англійською PWM).
Тобто на такий пін можна вивести псевдо-аналогову напругу. Технічно, це будуть прямокутні імпульси частотою 488,28 Гц та амплітудою 5 вольт. Але, рахунок регулювання шпаруватості (співвідношення довжини імпульсу і паузи між імпульсами), можна плавно регулювати ефективну потужність на навантаженні. Тема ШІМ заслуговує на окрему статтю, а поки, можливо, вищесказане стане трохи зрозуміліше з малюнка:
Графік ШІМ-сигналу. У разі пауза довше імпульсу втричі, тобто період заповнений імпульсом на 25%. Це відповідає постійній напрузі 0.25 * 5 = 1.25 Вольт
Для встановлення ШІМ-режиму на піні служить метод analogWrite(, ).
Значення може змінюватися від 0 до 255, причому 255 відповідає напруги живлення. Таким чином, наприклад, 128 - це половина напруги живлення, 2.5 Ст.
Давайте змусимо наш світлодіод з першого прикладу плавно набирати яскравість і плавно гаснути:
int ledPin = 5; // пін підключення світлодіода void setup() <pinMode(ledPin, OUTPUT); >void loop() < for(int i=0;i<=255;i++) < // Плавне включення світлодіода. Змінна i послідовно набуває всіх значень від 0 до 255 analogWrite(ledPin, i); // встановлюємо поточні значення змінної i delay (10); // невелика затримка для плавності включення світлодіода > for (int i = 255; i> = 0; i--) < // Плавне вимикання світлодіода. Перебираємо всі значення від 255 до 0 analogWrite(ledPin, i); delay(10); >>
Аналогові піни
У їхньому позначенні присутня літера А: А0, А1 і т.д. Працюють ці піни на вхід, тому немає необхідності задавати режим через pinMode(). Щоб вважати показання, застосовується метод analogRead(). По суті, цей метод вимірює напругу на аналоговому піні, розбивши діапазон від нуля до напруги живлення на 1024 шматочки. Наприклад, якщо analogRead повернув значення 512 це відповідає половині напруги живлення.
Аналогові піни в режимі цифрових
Усі аналогові піни можна переключити в режим цифрового виходу (але не режим ШИМ-виходу). Достатньо переключити пін у режим OUTPUT:
pinMode(A3, OUTPUT); // Перемикаємо пін A3 режим цифрового виходу
До речі, можна використовувати чисто цифрову нумерацію, без букв. Піну A0 відповідає цифровий пін 14, A1 - 15 і так далі.
Обмеження струму
Під час роботи пінів у режимі виходів не слід забувати про обмеження максимального струму. Для одного піна воно становить 40 мА (або 50 мА для плат, які працюють від харчування 3.3).А сумарний струм з усіх пінів не повинен перевищувати 200 мА, інакше Ардуїнка може вийти з ладу.
Якщо потрібно підключити до плати Ардуїно потужнішого споживача, що перевищує зазначені граничні струми, слід підключати його через релейні модулі або підсилювальні ключі з використанням зовнішнього джерела живлення:
Приклад підключення потужного навантаження до Ардуїно через релейний блок: реле підключає до навантаження зовнішнє джерело живлення, від нього живиться сама плата Ардуїно.
Піни комунікації
Для повноти картини залишилося згадати про піни комунікації.
Піна SDA та SCL використовуються для підключення пристроїв, що підтримують протокол I2C. Аналогічно, піни TX та RX використовуються для комунікацій за протоколом UART.
Коментарі (4)
UART - Universal Asynchronous Reciver-Transmitter інтерфейс на пінах RX, TX
На Ардуїно комунікація відбувається за допомогою класу Serial.
Якщо не підключати комп'ютер, можна , наприклад підключити блютуз-модуль.
I2C - протокол синхронного зв'язку, що дозволяє підключити до однієї шини з двох проводів (SDA і SDL) кілька пристроїв. Наприклад, модуль GPS та/або РК-дисплей. Master-джерело сигналу один.
На Ардуїно - клас Wire, A4 - SDA, A5 - SCL