У цій частині нашого гайду ви дізнаєтесь, як створити власний інтерфейс космічного корабля за допомогою Arduino. Ми крок за кроком розглянемо, як підключити світлодіоди, кнопки та запрограмувати їх так, щоб вони працювали, як у справжньому фантастичному фільмі 70-х. Arduino – це універсальний інструмент для створення електронних проектів, що дозволяє керувати різними компонентами, зокрема світлодіодами, за допомогою простого коду.
Тепер, коли ви маєте під контролем основи електрики, настав час перейти до керування за допомогою Arduino. У цьому проекті ви будете будувати щось, що могло б бути інтерфейсом космічного корабля в науково-фантастичному фільмі 1970-х років. Ви зробите класну панель керування з перемикачем і світлом, яке вмикається, коли ви натискаєте перемикач. Ви можете вирішити, чи означатимуть індикатори: «Ввімкніть гіперпривід» чи «Вогонь лазерами!». Зелений світлодіод горітиме, доки ви не натиснете кнопку. Коли Arduino отримає сигнал від кнопки, зелене світло вимкнеться, а 2 інші індикатори почнуть блимати.
Цифрові виводи Arduino можуть зчитувати лише два стани: коли на вхідному виводі є напруга та коли її немає. Цей вид введення зазвичай називають цифровим (або іноді двійковим, для двох станів). Ці стани зазвичай називають ВИСОКИЙ і НИЗЬКИЙ. HIGH — це те саме, що сказати «тут напруга!» і LOW означає «на цьому виводі немає напруги!». Коли ви перемикаєте висновок OUTPUT у HIGH за допомогою команди під назвою digitalWrite(), ви вмикаєте його. Виміряйте напругу між контактом і землею, ви отримаєте 5 вольт. Коли ви перемикаєте висновок OUTPUT на LOW, ви вимикаєте його.
Цифрові контакти Arduino можуть працювати як входи, так і виходи. У своєму коді ви налаштуєте їх залежно від того, якою буде їхня функція. Коли контакти є виходами, ви можете вмикати такі компоненти, як світлодіоди. Якщо ви налаштуєте контакти як входи, ви можете перевірити, чи натиснутий перемикач чи ні. Оскільки контакти 0 і 1 використовуються для зв’язку з комп’ютером, найкраще почати з контакту 2.
Підключіть свою макетну плату до 5 В Arduino та заземлення, як і в попередньому проекті. Розмістіть два червоних і один зелений світлодіоди на макетній платі. Приєднайте катод (коротку ніжку) кожного світлодіода до землі через резистор на 220 Ом. Підключіть анод (довгу ніжку) зеленого світлодіода до контакту 3. Підключіть аноди червоних світлодіодів до контактів 4 і 5 відповідно.
Розмістіть перемикач на макетній платі так само, як у попередньому проекті. Під’єднайте одну сторону до живлення, а іншу – до цифрового контакту 2 на Arduino. Вам також потрібно буде додати резистор 10 кОм від землі до контакту перемикача, який підключається до Arduino. Цей висувний резистор з’єднує штифт із землею, коли перемикач розімкнуто, тому він показує LOW, коли через вимикач не надходить напруга.
Ви можете покрити макетну дошку за шаблоном, який входить у комплект. Або ви можете прикрасити його, щоб створити власну систему запуску. Індикатори, які вмикаються та вимикаються, самі по собі нічого не означають, але коли ви розміщуєте їх на панелі керування та надаєте їм мітки, вони набувають значення. Що означає зелений світлодіод? Що означають миготливі червоні світлодіоди? Ви вирішуєте!
Деякі примітки перед початком.
Кожна програма Arduino має дві основні функції. Функції — це частини комп’ютерної програми, які виконують певні команди. Функції мають унікальні імена та «викликаються» за потреби. Необхідні функції в програмі Arduino називаються setup() і loop(). Ці функції потрібно оголосити, що означає, що вам потрібно повідомити Arduino, що ці функції будуть робити. setup() і loop() оголошено, як ви бачите праворуч.
У цій програмі ви збираєтеся створити змінну перед тим, як перейти до основної частини програми. Змінні — це імена, які ви даєте місцям у пам’яті Arduino, щоб ви могли відстежувати, що відбувається. Ці значення можуть змінюватися залежно від інструкцій вашої програми.
Імена змінних повинні описувати значення, які вони зберігають. Наприклад, змінна з назвою switchState повідомляє вам, що вона зберігає: стан комутатора. З іншого боку, змінна з назвою «x» не говорить вам багато про те, що вона зберігає.
Почнемо кодування:
Щоб створити змінну, вам потрібно оголосити її тип. Тип даних int буде містити ціле число (також називається цілим числом); це будь-яке число без коми. Коли ви оголошуєте змінну, ви зазвичай також надаєте їй початкове значення. Оголошення змінної, оскільки кожен оператор має закінчуватися крапкою з комою (;).
Налаштуйте функцію PIN-коду:
Setup() запускається один раз, коли Arduino вперше вмикається. Тут ви налаштовуєте цифрові контакти як входи або виходи за допомогою функції під назвою pinMode(). Контакти, підключені до світлодіодів, будуть ВИХОДАМИ, а контакт перемикача буде входом.
Створіть функцію циклу:
loop() працює безперервно після завершення setup(). У loop() ви перевіряєте наявність напруги на входах і вмикаєте та вимикаєте виходи. Щоб перевірити рівень напруги на цифровому вході, ви використовуєте функцію digitalRead(), яка перевіряє вибраний контакт на наявність напруги. Щоб знати, який пін перевірити, digitalRead() очікує аргумент. Аргументи — це інформація, яку ви передаєте функціям, повідомляючи їм, як вони мають виконувати свою роботу. Наприклад, digitalRead() потребує одного аргументу: який пін перевірити. У вашій програмі digitalRead() перевірить стан:
void setup(){
}
void loop(){
}
{ Фігурні дужки } Будь-який код, який ви пишете всередині фігурних дужок, буде виконано під час виклику функції.
int switchState = 0
void setup(){
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
}
Чутливість до регістру. Зверніть увагу на чутливість до регістру у вашому коді. Наприклад, pinMode — це назва команди, але pinmode спричинить помилку.
void loop(){
switchState = digitalRead(2);
// this is a comment
Коментарі. Якщо ви коли-небудь захочете включити природну мову у свою програму, ви можете залишити коментар. Коментарі – це нотатки, які ви залишаєте собі, які комп’ютер ігнорує. Щоб написати коментар, додайте дві косі риски // Комп’ютер ігноруватиме все в рядку після цих косих риск.
Пін 2 зберігає значення у змінній switchState. Якщо на піні є напруга під час виклику команди digitalRead(), змінна switchState отримає значення HIGH (або 1). Якщо напруги немає, змінна отримає значення LOW (або 0).
У прикладі ви використали слово if, щоб перевірити стан певного елемента (зокрема, положення кнопки). Оператор if() у програмуванні порівнює два значення та визначає, чи є порівняння істинним або хибним. Якщо умова виконується, програма виконує задані вами дії.
Для порівняння двох значень у програмуванні використовується подвійний знак рівності ==. Якщо ви помилково використаєте один знак =, то замість порівняння значень ви присвоїте змінній нове значення.
digitalWrite() — це команда, яка дозволяє надсилати 5 В або 0 В на вихідний контакт. digitalWrite() приймає два аргументи: який пін контролювати та яке значення встановити для цього піну, HIGH або LOW. Якщо ви хочете ввімкнути червоний світлодіод і вимкнути зелений світлодіод у операторі if(), ваш код виглядатиме так.
Якщо ви запустите програму зараз, світло зміниться, коли ви натиснете перемикач. Це досить гарно, але ви можете трохи ускладнити програму для більш цікавого результату.
Ви сказали Arduino, що робити, коли перемикач розімкнуто. Тепер визначте, що відбувається, коли перемикач замкнено. Інструкція if() має додатковий компонент else, який дозволяє щось трапитися, якщо вихідна умова не виконується. У цьому випадку, оскільки ви перевірили, чи перемикач був LOW, напишіть код для умови HIGH після оператора else.
Щоб червоні світлодіоди блимали під час натискання кнопки, вам потрібно буде вимкнути та ввімкнути світло в операторі else, який ви щойно написали. Для цього змініть код таким чином.
Тепер ваша програма блиматиме червоними світлодіодами, коли натискається кнопка перемикання.
Після встановлення світлодіодів у певний стан, ви захочете, щоб Arduino призупинився на мить, перш ніж змінити їх назад. Якщо ви не чекатимете, світло буде гаснути вперед і назад так швидко, що здаватиметься, ніби воно трохи тьмяне, а не вмикається і не вимикається. Це тому, що Arduino проходить через цикл loop() тисячі разів кожну секунду, і світлодіод вмикатиметься та вимикатиметься швидше, ніж ми можемо сприйняти.
Функція delay() дозволяє зупинити Arduino від виконання будь-яких завдань на певний період часу. delay() приймає аргумент, який визначає кількість мілісекунд перед виконанням наступного набору коду. В одній секунді 1000 мілісекунд. delay(250) призупиниться на чверть секунди.
if (switchState == LOW) {
// the button is not pressed
digitalWrite(3, HIGH); // green LED
digitalWrite(4, LOW); // red LED
digitalWrite(5, LOW); // red LED
}
else { // the button is pressed
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(250); // wait for a quarter second
// toggle the LEDs
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
delay(250); // wait for a quarter second
}
} // go back to the beginning of the loop
Може бути корисно написати потік вашої програми в псевдокоді: це спосіб опису того, що ви хочете, щоб програма робила простою мовою, але структурований таким чином, щоб було легко написати з нього справжню програму. У цьому випадку ви збираєтеся визначити, чи switchState має значення HIGH (що означає, що кнопку натиснуто) чи ні.
Якщо натиснути перемикач, ви вимкнете зелений світлодіод і ввімкнете червоний. У псевдокоді оператор може виглядати так: якщо switchState НИЗЬКИЙ: увімкніть зелений світлодіод, вимкніть червоні світлодіоди
якщо switchState має значення HIGH: вимкніть зелений світлодіод, увімкніть червоні світлодіоди
Після того, як Arduino буде запрограмовано, ви побачите, що засвітиться зелене світло. Коли ви натискаєте перемикач, червоні індикатори починають блимати, а зелені вимикаються. Спробуйте змінити час двох функцій delay(); зверніть увагу на те, що відбувається з вогнями та як змінюється реакція системи залежно від швидкості блимання. Коли ви викликаєте delay() у своїй програмі, він зупиняє всі інші функції.
Жодні показання датчиків не відбуватимуться, доки не мине цей період часу. Хоча затримки часто корисні, під час розробки власних проектів переконайтеся, що вони без потреби не заважають вашому інтерфейсу.
Як змусити червоні світлодіоди блимати під час запуску програми? Як ви можете створити більший або складніший інтерфейс для ваших міжзоряних пригод за допомогою світлодіодів і перемикачів?
Коли ви починаєте створювати інтерфейс для свого проекту, подумайте про очікування людей під час його використання. Коли вони натиснуть кнопку, чи захочуть вони отримати негайний відгук? Чи має бути затримка між їх дією та тим, що робить Arduino? Спробуйте поставити себе на місце іншого користувача під час проектування та перевірте, чи збігаються ваші очікування з реальністю вашого проекту.
У цьому проекті ви створили свою першу програму Arduino для керування поведінкою деяких світлодіодів на основі перемикача. Ви використовували змінні, оператор if()…else і функції для читання стану вхідних даних і керування виходами.
Значення резисторів позначені кольоровими смугами відповідно до коду, розробленого в 1920-х роках, коли було надто важко писати цифри на таких крихітних предметах. Кожен колір відповідає числу, як ви бачите в таблиці нижче. Кожен резистор має 4 або 5 смуг. У 4-канальному типі перші дві смуги вказують на перші дві цифри значення, а третя вказує на кількість нулів, які слідують за ними (технічно це позначає ступінь десяти). Остання смуга визначає допуск: у наведеному нижче прикладі золото вказує на те, що номінал резистора може становити 10 кОм плюс або мінус 5%.
Резистори входять у стартовий комплект 5 суміжних:
