Меню English Ukrainian російська Головна

Безкоштовна технічна бібліотека для любителів та професіоналів Безкоштовна технічна бібліотека


Arduino. Операції цифрового введення-виводу. Енциклопедія радіоелектроніки та електротехніки

Безкоштовна технічна бібліотека

Енциклопедія радіоелектроніки та електротехніки / Радіоаматор-конструктор

Коментарі до статті Коментарі до статті

Завантаживши середу розробки Arduino IDE, можна побачити, що у виведеній у вікні заготівлі майбутньої програми є дві функції: setup() і loop(). З функції setup() починається робота будь-якої програми. Вона виконує її один раз відразу після подачі живлення на плату, а також кожного разу після натискання на кнопку RESET, що є на платі, встановлює мікроконтролер у вихідний стан. Усередині цієї функції задають режими роботи портів, ініціалізують послідовний інтерфейс та інші периферійні пристрої, як всередині мікроконтролера, так і підключені до нього зовнішні. Ця функція, навіть якщо вона порожня, повинна бути обов'язково присутня в програмі.

Функція loop() містить нескінченний цикл, який мікроконтролер багаторазово виконує, аж до вимкнення живлення. У ньому опитують зовнішні датчики, подають команди виконавчим пристроям, виробляють обчислення та інші операції. Як приклад наведемо найпростішу програму, яка з періодом за одну секунду запалює, а потім гасить вбудований в плату Arduino світлодіод, позначений на ній буквою L і підключений до цифрового виводу D13.

Ця програма входить до стандартних прикладів, що додаються до середовища розробки Arduino IDE. У табл. 1 наведено її текст у тому вигляді, в якому він доданий. Врахуйте, що на прийнятому серед шанувальників Arduino жаргоні вихідний текст програми називають "скетчем" - ескізом.

Таблиця 1

Arduino. Операції цифрового введення-виводу

Фрагменти програми, які стосуються одного блоку, обмежують фігурними дужками { і }. Далі називатимемо їх операторними дужками. Текст програми може містити коментар, що пояснює її суть та нюанси роботи. Багаторядковий коментар обмежують поєднаннями символів /* (на початку) та */ (наприкінці). З символів // починають коментар, що закінчується наприкінці того ж рядка. При трансляції (перетворенні тексту програми зрозумілою людині мовою програмування на виконуваний мікроконтролером машинний код) ця частина тексту повністю ігнорується.

Єдиний рядок тіла, що виконується функції setup()

pinMode (13, ВИХІД);

переводить висновок D13 плати Arduino режим виходу.

Функція loop() починається з рядка

digitalwrite(13, HIGH);

Вона встановлює висновок D13 високий логічний рівень. В Arduino UNO він дорівнює напрузі живлення (+5) щодо загального проводу. Цим буде включено світлодіод.

За нею слідує рядок

delay (1000);

Вона змушує програму, що виконується, не переходити до наступного рядка протягом часу, зазначеного в дужках у мілісекундах. Витримавши паузу, програма встановлює на виході D13 низький логічний рівень, що відповідає потенціалу загального дроту, що вимикає світлодіод. Цю операцію описує рядок

digitalwrite(13, LOW);

Далі програма ще раз витримує паузу тривалістю 1 с, після чого повторює спочатку всю послідовність операцій, описаних у тілі функції loop(). Так триває до вимкнення мікроконтролера.

Функцією delay() слід скористатися з обережністю. Якщо протягом зазначеного в ній інтервалу часу станеться якась важлива подія (наприклад, короткочасно спрацює датчик), програма на цю подію не відреагує.

Слід пам'ятати, що максимальний струм, що віддається висновком Arduino, який працює як вихід, дорівнює 40 мА, при цьому загальний струм всіх виходів не повинен перевищувати 300 мА. Для живлення звичайних світлодіодів цього достатньо, можна безпосередньо підключити до виходу низьковольтне герконове реле або малопотужний вібромотор від стільникового телефону. Щось більш потужне підключити без підсилювача не вийде, та це й небезпечно – можна зіпсувати мікроконтролер.

Аналогові входи A0-A5 за необхідності можна використовувати поряд з D0-D13 як цифрові входи та виходи, звертаючись до них відповідно за номерами з 14 до 19.

Тепер трохи модифікуємо програму. Для простого алгоритму ці модифікації не принципові, але у складніших випадках подібні зміни важливі. Насамперед, замінимо коментар англійською мовою російською. Наприклад, рядок, що включає світлодіод, прокоментуємо так: "Включаємо світлодіод". Не слід писати: "Встановлюємо на лінії D13 високий рівень", це зрозуміло з тексту програми.

Звичайно, докладний коментар до кожного рядка, як правило, надмірний, але лінуватися писати його все ж таки не слід. Через деякий час подробиці роботи програми забудуться, навіть самому авторові лише коментар допоможе швидко розібратися в її суті.

Далі змінимо програму так, щоб блимав світлодіод, підключений не до виводу D13, а до виводу D12 Arduino. Оскільки на платі світлодіода, підключеного до D12, немає, буде потрібний зовнішній світлодіод з додатковим резистором. Підключити його потрібно за схемою, показаною на рис. 1. Додатковий резистор підбирають так, щоб токчерез світлодіод знаходився в межах 5...10 мА. Це забезпечить досить яскраве свічення більшості світлодіодів. Плата Arduino UNO із підключеним зовнішнім світлодіодом зображена на рис. 2.

Arduino. Операції цифрового введення-виводу
Рис. 1. Схема підключення світлодіода

Arduino. Операції цифрового введення-виводу
Рис. 2. Плата Arduino UNO із підключеним зовнішнім світлодіодом

Бажано виготовити кілька світлодіодів із додатковими резисторами. Вони стануть у нагоді не стільки для виготовлення автомата світлових ефектів, скільки для того, щоб швидко перевірити рівні напруги на виходах плати і простежити за їх зміною відповідно до програми, що налагоджується.

Щоб керувати світлодіодом, підключеним не до D13, а до D12, в даному випадку було б достатньо виправити в тексті програми всі числа 13 на 12. Крім коментарів, число 13 фігурує в тексті програми всього три рази, так що змінити його неважко. Однак із збільшенням обсягу програми ситуація принципово змінюється. Одна справа замінити три числа та зовсім інше кілька десятків однакових чисел у різних місцях довгої програми. До того ж може виявитися, що десь це число означає щось зовсім інше і змінювати його не потрібно.

Щоб подібні зміни проводити було простіше, оголосимо на початку програми змінну і надамо їй значення, що відповідає номеру потрібного висновку:

int LEDPIN = 12;

Крім того, скрізь, де зустрічається номер виведення 13, замінимо його ім'ям цієї змінної. Якщо тепер потрібно буде змінити підключення світлодіода, достатньо буде змінити всього одне число в описі змінної LEDPIN.

Модифікована програма наведена у табл. 2. Її необхідно завантажити на пам'ять мікроконтролера плати Arduino. Для цього потрібно вибрати в головному меню IDE пункт "Файл→Завантажити". Якщо набрана у вікні редагування програма не була збережена у файл заздалегідь, IDE попросить вказати ім'я файлу, в якому його збереже. Через деякий час, необхідний IDE Arduino на трансляцію програми в зрозумілі мікроконтролеру машинні коди, на платі почнуть блимати світлодіоди "Rx" і "Tx", сигналізуючи про прийом та передачу повідомлень через послідовний інтерфейс мікроконтролера.

Таблиця 2

Arduino. Операції цифрового введення-виводу

Якщо все було зроблено правильно, у нижній частині вікна програми з'явиться звіт про коректне завантаження. У ньому буде виведена інформація про те, яку частину з наявних 32 Кбайт програмної пам'яті мікроконтролера зайняла завантажена програма і скільки оперативної пам'яті потрібно розміщувати змінних. Світлодіод, підключений до виведення D12, почне блимати з періодом 2 с.

Якщо підключити до висновків D8-D12 Arduino лінійку із п'яти світлодіодів (рис. 3) і завантажити в мікроконтролер програму, наведену в табл. 3, вона буде по черзі включати на 500 мс кожен із цих світлодіодів і підключений до D13 світлодіод, встановлений на платі. Ця програма могла виявитися значно довшою, якби завдання вирішувалося "в лоб", простим повторенням потрібне число разів у функції setup() рядка з різними числовими номерами висновків, що налаштовує їх на вихід, а функції loop() - послідовності рядків, що включають черговий світлодіод, що витримує паузу і вимикає його. Скоротити програму допомогли оператори циклу for.

Arduino. Операції цифрового введення-виводу
Рис. 3. Лінійка із п'яти світлодіодів

Таблиця 3

Arduino. Операції цифрового введення-виводу

У круглих дужках після ключового слова for вказані початкове значення змінної циклу - LEDPIN=8, умова виконання тіла циклу - LEDPIN<14 та операцію, що виконується зі змінною циклу після кожного виконання його тіла - LEDPIN++, що означає збільшення значення змінної на одиницю. У разі потреби параметри циклу for можуть бути легко змінені.

Тіло циклу в операторних дужках слідує за умовою. У першому випадку (у функції setup()) воно складається з одного рядка, який буде виконано шість разів зі значеннями LEDPIN від 8 до 13. У другому випадку (у функції loop()) оператор циклу задає шестиразове виконання послідовності з трьох рядків з такими ж значення змінної.

Крім управління зовнішніми пристроями у будь-якій системі, необхідно отримувати інформацію від різних датчиків. Без них навіть найскладніший робот буде лише заводною іграшкою, яка не здатна змінювати свою поведінку залежно від зовнішніх умов.

При напрузі живлення 5 В, а в Arduino UNO воно саме таке, цифрові входи мікроконтролера гарантовано сприймають як логічно високу (відповідну логічній одиниці) напругу більше +3 В, а як логічно низьку (відповідну логічному нулю) - напругу менше +1,5 В .Проміжні значення (у тому числі, коли вхід нікуди не підключений) дають непередбачуваний, що залежить від екземпляра мікроконтролера, напруги його живлення, температури та інших факторів, що хаотично змінюється результат. Тому бажано, щоб на цифровий вхід завжди було подано напругу свідомо високого чи низького логічного рівня.

Найпростіший датчик - звичайна кнопка без фіксації, підключена за показаною на рис. 4 схемою одного з зовнішніх висновків плати Arduino, в даному випадку до D7. За відпущеної кнопки SB1 рівень напруги на вході мікроконтролера буде низьким (його забезпечить резистор R1), при натиснутій - високим. Якщо поміняти кнопку та резистор місцями (рис. 5), то поміняються місцями та рівні. Тепер резистор R1 забезпечить високий рівень за відпущеної кнопки, а натискання на неї встановить низький рівень.

Arduino. Операції цифрового введення-виводу
Рис. 4. Схема підключення датчика

Arduino. Операції цифрового введення-виводу
Рис. 5. Схема підключення датчика

Опір резистора R1 не повинен бути занадто малим, оскільки струм, що пливе через нього при натиснутій кнопці, споживається від джерела живлення та знижує економічність пристрою. У разі живлення від стаціонарного комп'ютера або мережного блоку живлення це не так важливо, але при батарейному варіанті живлення Arduino мале опір резистора R1 сильно зменшить можливу тривалість автономної роботи пристрою.

Зверніть увагу, що для виконання функції резистора R1 в мікроконтролері є внутрішні резистори. За замовчуванням вони вимкнені. Однак, щоб підключити, скажімо, до входу D2 внутрішній резистор, достатньо внести у функцію setup() рядок

pinMode(2, INPUT_PULLUP);

Розглянемо цифрове введення на прикладі наведеної в табл. 4 програми, що гасить підключений до виведення 13 світлодіод при натисканні на кнопку, підключену до виводу D7. Вона заснована на умовному операторі

if (Умова)

{

/*Дії у випадку, якщо умова виконана*/

}

ще

{

/*Дії у випадку, якщо умова не виконана*/

}

Таблиця 4

Arduino. Операції цифрового введення-виводу

Він служить для вибору дії залежно від того, виконано чи ні вказану умову. Якщо за невиконаної умови нічого робити не потрібно, фрагмент else {...} може бути опущений. Використання умовних операторів надає програмі гнучкість. Залежно від стану зовнішніх датчиків вони змінюють порядок дій програми та поведінку оснащеного мікроконтролером пристрою.

Власне перевірку стану кнопки виконує логічний оператор

digitalRead(BUT) = HIGH

У даному випадку він порівнює значення, що повертається функцією читання стану виведення BUT, до якого підключена кнопка, з логічною константою HIGH, і, якщо вони рівні, набуває значення TRUE (істина), а в іншому випадку - FALSE (брехня). Зверніть увагу, що операцію перевірки рівності позначені двома поспіль знаками рівності. А одним знаком рівності позначають операцію надання значення змінної. Не плутайте їх, це призводить до помилок, що важко виявлятися.

На прикладі щойно розглянутої програми легко переконатися, чого призводить неакуратне використання функції delay(). Якщо "розкомментувати" (прибрати дві попередні дробові риси) функцію delay( 10000) в передостанньому рядку програми, то після кожного виконання тіла функції loop() програма буде чекати 10 с, перш ніж продовжить свою роботу. Звичайно, всі натискання кнопки за цей проміжок часу будуть проігноровані.

Дуже корисною є здатність Arduino взаємодіяти з персональним комп'ютером через послідовний інтерфейс. Її можна використовувати не тільки для завантаження програми в мікроконтролер, але і для двостороннього обміну інформацією в процесі виконання. За цим інтерфейсом Arduino може передавати в комп'ютер зібрану інформацію для складної обробки або зберігання та отримувати від нього команди та вихідні дані. Так можуть взаємодіяти і два мікроконтролерні пристрої. Послідовний порт мікроконтролера використовує цифрові висновки плати D0 і D1, тому при організації та використанні зв'язку через послідовний порт їх не можна застосовувати ні для чого іншого.

Наприклад розглянемо програму, наведену у табл. 5, яка передає комп'ютер інформацію про стан виведення D12. Якщо рівень на ньому високий, програма надсилає в комп'ютер код символу H, а якщо він низький - код символу L. Приймати цю інформацію може будь-яка програма, яка може працювати з COM-портом комп'ютера. Середовище розробки Arduino IDE має вбудований дисплей послідовного порту, за допомогою якого комп'ютер може виводити на екран отримані від плати Arduino текстові повідомлення і передавати йому повідомлення, набрані користувачем на клавіатурі комп'ютера.

Таблиця 5

Arduino. Операції цифрового введення-виводу

Рядок Serial.begin(9600) у функції setup() ініціалізує послідовний порт мікроконтролера і встановлює швидкість передачі та прийому 9600 Бод. Можна ставити інші стандартні значення швидкості: 1200, 2400, 4800, 9600, 19200, 38400, 57600 або 115200 Бод. При цьому швидкість, встановлена ​​в мікроконтролері, повинна збігатися зі швидкістю, на яку налаштовано COM-порт комп'ютера або іншого пристрою, з яким повинен йти обмін інформацією. Допустима швидкість, при якій забезпечується надійний прийом інформації, залежить від довжини кабелю, що з'єднує Arduino з комп'ютером. Наприклад, за стандартним USB-кабелем завдовжки 1,8 м комп'ютер прийме від Arduino інформацію навіть зі швидкістю 115200 Бод. А якщо додати до цього кабелю п'ятиметровий подовжувач, допустима швидкість впаде до 4800 бод.

Надсилає інформацію до послідовного порту функція Seri-al.print(), де в круглих дужках вказують ім'я змінної, значення Надіслати якій потрібно передати, або рядок символів, що підлягають передачі. Для відмінності від імені змінної рядок символів укладають у лапки. Існує модифікація цієї функції Serial.println(). Вона відрізняється тим, що передавши інформацію, укладену в дужках (якщо вона є), доповнює її символами повернення каретки та перекладу рядка. Починає новий рядок і комбінація символів у рядку, що передається.

Використовуючи наведену програму, легко переконатися, що якщо на сконфігурований як вхід висновок мікроконтролера не подано ніяких зовнішніх сигналів, його стан може бути будь-яким і хаотично змінюватися в процесі роботи. Можна визначити фактичне значення напруги, яке мікроконтролер перестає сприймати як низький логічний рівень і починає сприймати як високий рівень.

Далі розглянемо програму (табл. 6), яка запалює та гасить наявний на платі світлодіод відповідно до команд, що надходять від комп'ютера через послідовний порт. Слід пам'ятати, що інформацію з послідовному порту передають байтами. Приймач послідовного порту, працюючи незалежно від мікроконтролера процесора, приймає ці байти і зберігає їх у своєму буфері об'ємом 64 байти.

Таблиця 6.

Arduino. Операції цифрового введення-виводу

Для того щоб програма могла визначити, чи в буфері прийняті байти, є функція Serial.available(), що повертає їх число. Якщо є, програма за допомогою функції Serial. read() читає байт із буфера і надає його значення (код прийнятого символу) змінної C типу char. Далі умовні оператори порівнюють код із зразками і при збігу включають або вимикають світлодіод.

Передавати команди можна за допомогою того ж монітора послідовного порту, який використовувався для отримання інформації. У верхній частині його вікна (рис. 6) є рядок введення символів, що передаються. Введіть у неї з клавіатури символ або їх послідовність, натисніть на екранну кнопку "Надіслати". На платі Arduino повинен швидко спалахнути світлодіод "Rx", що свідчить про прийом інформації мікроконтролером. Звичайно, передача кодів вручну – це простий, але далеко не найкращий метод управління. Зазвичай для цього пишуть спеціальну комп'ютерну програму, що управляє.

Arduino. Операції цифрового введення-виводу
Рис. 6. Вікно програми

Таким чином, за допомогою мікроконтролерної плати Arduino можна порівняно просто створити цілу низку нескладних електронних пристроїв. Якщо обмежитися лише цифровим введенням-виводом, це можуть бути автомати світлових ефектів, найпростіша охоронна сигналізація, вимірювачі різних параметрів із цифровими датчиками. Причому нескладно зробити так, щоб пристрій взаємодіяв із комп'ютером. Звичайно, можливості Arduino далеко не обмежені описаними в цій статті. Ця плата може працювати з аналоговими сигналами, про що буде розказано далі.

Згадані у статті програми для Arduino можна завантажити з ftp://ftp.radio.ru/pub/2016/08/diginout.zip.

Автор: Д. Лекомцев

Дивіться інші статті розділу Радіоаматор-конструктор.

Читайте та пишіть корисні коментарі до цієї статті.

<< Назад

Останні новини науки та техніки, новинки електроніки:

Машина для проріджування квітів у садах 02.05.2024

У сучасному сільському господарстві розвивається технологічний прогрес, спрямований на підвищення ефективності догляду за рослинами. В Італії було представлено інноваційну машину для проріджування квітів Florix, створену з метою оптимізації етапу збирання врожаю. Цей інструмент оснащений мобільними важелями, що дозволяють легко адаптувати його до особливостей саду. Оператор може регулювати швидкість тонких проводів, керуючи ним із кабіни трактора за допомогою джойстика. Такий підхід значно підвищує ефективність процесу проріджування квітів, забезпечуючи можливість індивідуального налаштування під конкретні умови саду, а також сорт та вид фруктів, що вирощуються на ньому. Після дворічних випробувань машини Florix на різних типах плодів результати виявились дуже обнадійливими. Фермери, такі як Філіберто Монтанарі, який використовував машину Florix протягом кількох років, відзначають значне скорочення часу та трудовитрат, необхідних для проріджування кольорів. ...>>

Удосконалений мікроскоп інфрачервоного діапазону 02.05.2024

Мікроскопи відіграють важливу роль у наукових дослідженнях, дозволяючи вченим занурюватися у світ невидимих ​​для ока структур та процесів. Однак різні методи мікроскопії мають обмеження, і серед них було обмеження дозволу при використанні інфрачервоного діапазону. Але останні досягнення японських дослідників із Токійського університету відкривають нові перспективи вивчення мікросвіту. Вчені з Токійського університету представили новий мікроскоп, який революціонізує можливості мікроскопії в інфрачервоному діапазоні. Цей удосконалений прилад дозволяє побачити внутрішні структури живих бактерій із дивовижною чіткістю в нанометровому масштабі. Зазвичай мікроскопи в середньому інфрачервоному діапазоні обмежені низьким дозволом, але нова розробка японських дослідників дозволяє подолати ці обмеження. За словами вчених, розроблений мікроскоп дозволяє створювати зображення з роздільною здатністю до 120 нанометрів, що в 30 разів перевищує дозвіл традиційних метрів. ...>>

Пастка для комах 01.05.2024

Сільське господарство - одна з ключових галузей економіки, і боротьба зі шкідниками є невід'ємною частиною цього процесу. Команда вчених з Індійської ради сільськогосподарських досліджень – Центрального науково-дослідного інституту картоплі (ICAR-CPRI) у Шимлі представила інноваційне вирішення цієї проблеми – повітряну пастку для комах, яка працює від вітру. Цей пристрій адресує недоліки традиційних методів боротьби зі шкідниками, надаючи дані про популяцію комах у реальному часі. Пастка повністю працює за рахунок енергії вітру, що робить її екологічно чистим рішенням, яке не вимагає електроживлення. Її унікальна конструкція дозволяє відстежувати як шкідливі, так і корисні комахи, забезпечуючи повний огляд популяції в будь-якій сільськогосподарській зоні. "Оцінюючи цільових шкідників у потрібний час, ми можемо вживати необхідних заходів для контролю як комах-шкідників, так і хвороб", - зазначає Капіл. ...>>

Випадкова новина з Архіву

Електричний самокат Xiaomi 18.12.2016

Компанія Xiaomi представила чергову новинку - електричний самокат, який можна придбати за орієнтовною ціною 240 доларів США.

Новинка має мінімалістський дизайн. Рама виготовлена ​​з алюмінію авіаційної якості. Важить транспортний засіб 12,5 кг.
Блок літій-іонних акумуляторів забезпечує запас ходу до 30 км. При цьому самокат здатний розвивати швидкість до 25 км/год.

Новинка характеризується складною конструкцією. І спереду, і ззаду встановлені дискові гальма. До речі, ефективність гальмування підвищує антиблокувальну систему E-ABS.

Самокат оснащений ходовими вогнями. Передбачено індикатор із чотирьох світлодіодів, що інформує про рівень заряду блоку акумуляторів.

Інформацію про стан транспортного засобу можна переглядати у супутньому мобільному додатку для смартфонів та планшетів.

Новинка надійде у продаж 15 грудня.

Інші цікаві новини:

▪ Гібрид нанотрубки та золота

▪ Радіоактивна гроза

▪ Рослинний бекон

▪ Ручка Livescribe 3 для оцифровування рукописних нотаток

▪ Управління лазером за допомогою звуку

Стрічка новин науки та техніки, новинок електроніки

 

Цікаві матеріали Безкоштовної технічної бібліотеки:

▪ розділ сайту Заводські технології вдома. Добірка статей

▪ стаття Це радість зі сльозами на очах. Крилатий вислів

▪ стаття Де розташований міст, відомий частими самогубствами собак? Детальна відповідь

▪ стаття Електромонтер. Типова інструкція з охорони праці

▪ стаття Скільки сонячної енергії потрапляє на землю? Енциклопедія радіоелектроніки та електротехніки

▪ стаття Коробок на мотузці. Секрет фокусу

Залишіть свій коментар до цієї статті:

ім'я:


E-mail (не обов'язково):


коментар:





All languages ​​of this page

Головна сторінка | Бібліотека | Статті | Карта сайту | Відгуки про сайт

www.diagram.com.ua

www.diagram.com.ua
2000-2024