Перший пристрій на Arduino

Готові? Сьогодні ми з вами створимо наш перший девайс на Arduino. Це буде не лише безкорисна забавка, він внесе свою невеличку частку в боротьбі з поширенням коронавірусу. Якщо ви не знаєте, що таке Arduino, раджу ознайомитися з першою частиною. Там також є перелік всього необхідного для сьогоднішнього “заняття”.

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

В першій статті ми писали, що нам знадобиться для пристрою. Продублюємо цей перелік і нагадаємо, що за посиланням нижче ви можете придбати все необхідне у наших партнерів. А по промокоду intRobots ще й отримати знижку!
1. Arduino UNO або Nano
2. Ультразвуковий датчик відстані HC-SR04
3. Модуль реле: або такий, або такий.
4. Бредборд
5. Набір провідків
6. Перемички
7. Роз’єм живлення від крони або блок для батарейок
8. Двостороння клейка стрічка

Отже, зраз ми крок за кроком пройдемо всі етапи створення власного пристрою на Arduino.

Постановка задачі. Доцільність і актуальність пристрою.
Що зараз? Коронаві… да ви і так в курсі. Карантину дотримуєтесь? В масках ходите? Руки миєте? Поверхні обробляєте? Фейки не розповсюджуєте? Молодці!
Так от, поверхні. В умовах карантину часто використовується вимикач світла в санвузлі. Саме його ми торкаємось спочатку брудними руками і вже через хвилину чистими. Це робить його небезпечним потенційним розповсюджувачем інфекції. Давайте позбудемось проблеми – зробимо вимикач світла безконтактним.
Наш пристрій буде в стильному компактному корпусі, працюватиме від однієї батарейки три роки, зможе керуватися по Bluetooth 5.0 зі смартфону і буде частиною екосистеми вашого розумного будинку. І ми обов’язково створимо такий пристрій, але… не сьогодні. Зараз ми обмежимося прототипом, мета якого навчити вас і познайомити зі світом любительської електроніки. Насправді це вже не мало. Але поступово ми оновлюватимемо його, доки не навчимося робити професійні пристрої, тож залишайтесь із нами. Але звичайно, у будь-який момент ви зможете зупинитися і сказати: “стоп, це хобі, я не хочу бути професіоналом в цьому, мені достатньо і такого рівня”.

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

Датчик відстані
Модуль реле з оптроном

1. Оскільки доведеться комутувати електрику освітлення, а зазвичай це наруга 220 вольт, нам знадобиться модуль реле – це пристрій, який за допомогою низької напруги з Arduino може комутувати контакти високої напруги і відносно великі струми. При виборі такого модуля зверніть увагу, щоб у ньому була оптична гальванічна розв’язка – такий підхід робить фізичне “розділення” низьковольтної і високовольтної частин. Це забезпечить додаткову безпеку.
2. Безконтактний датчик. Це може бути будь-що, аби на відстані фіксувало піднесення руки. Візьмемо ультразвуковий датчик відстані HC-SR04.
Живлення
Блок батарейок AA або AAA (від чотирьох до восьми) або роз’єм для батарейки “крона” 9 вольт. Але кращим був би блок живлення на 5 – 12 вольт або USB-зарядка від смартфонів якщо поряд є розетка: не розрядиться і для екології краще.

Монтаж
Його проводитимемо на бредборді – макетній платі з отворами для монтажу без пайки, (дивіться попередню статтю), а кріпити все за допомогою клейкої стрічки біля вимикача.
Корпус
Небезпечну частину 220 вольт, тобто реле, заховаємо під корпусом вимикача. Решту залишимо в безкорпусному варіанті. Але ви можете придумати щось креативне самостійно 🙂
Збірка

УВАГА! Не підключайте пристрій одразу до мережі 220 вольт! Спочатку знеструмте приміщення і переконайтеся, що напруги немає. Якщо у вас не має досвіду роботи з електрикою або ви сумніваєтесь, попросіть про допомогу у компетентних людей або працюйте з освітленням низької напруги, наприклад 24 вольта.
Пам’ятайте! При недотриманні техніки безпеки вас може вдарити током, а погано закріплені контакти можуть призвести до пожежі!

Перед тим, як збирати, розберемо дуже важливий момент: вам необхідно зрозуміти, як влаштований і як працює бредборд. Отвори на бредборді промарковані вертикально буквами (рядки) і горизонтально цифрами. Підключивши якийсь із виводів (Arduino, датчика, дисплея, чи будь-чого) безпосередньо або через перемичку до отвору на бредборді, усі сусідні з ним отвори, які мають таку ж цифру, теж до нього під’єднані. Тобто щоб з’єднати два чи більше виводів, їх відповідно треба підключити до отворів бредборду, які мають СПІЛЬНІ цифри та РІЗНІ букви. Виключення складають лінії живлення, вони позначені синьою та червоною лініями. Різниця лише в тому, що вони з’єднані не по цифрам, а вздовж всієї лінії.
1. Почнемо. Якщо у вас Arduino Uno, Mega, Leonardo або інша з виводами у вигляди роз’ємів (пластикові колодки по периметру плати), просто помістіть її біля бредборду. Якщо це Nano, Pro Mini, де виводи у вигляді набору штирків, вставте її у бредборд.

Тепер давайте перевіримо, чи ви правильно зрозуміли бредборд. Спробуйте підключити між собою через нього виводи Arduino A3 і Trig датчика відстані. Використайте для цього відповідні проводки.

 

Зробили? Тоді клікніть сюди і перевірте себе.

 

Якщо все правильно, розберіть (це був приклад) і приступимо.
2. Arduino має “поділитися” напругою з датчиком відстані та з реле. В попередній статті вже було про схему підключення, а зараз реалізуємо її практично.
Якщо ви не знаєте або не пам’ятаєте фізику електричного струму, то це коротке пояснення для вас. Живлення електричних пристроїв забезпечується двома (іноді більше, але зараз не про це) проводами чи контактами. Згадайте будь-яку батарейку, акумулятор, блок живлення або розетку – скрізь знайдете два контакти. Це різні потенціали, при замкнені яких через них почне протікати електричний струм. Це можна використовувати, “примусивши” струм крутити мотор, світити лампочку, заряджати телефон. Детальніше про електричну напругу і струм поговоримо в окремій статті.
Вивід Земля (мінус, від’ємний потенціал, нуль) на Arduino позначено як GND (тобто Ground) і їх може бути кілька. Знайдіть один з них і підключіть на шину “-” на бредборді, яка позначена синьою лінією.
Те саме зробимо з виводом живлення (плюс, позитивний потенціал), який на Arduino позначено як 5V. Його підключіть на шину “+” на бредборді, яка позначена червоною лінією.

 

Клікніть сюди і перевірте, чи ви все зробили вірно.

 

Тепер ми можемо під’єднати будь-які пристрої до отворів біля синьої і червоної ліній (GND до синьої, а Vcc до червоної) і отримати 5 вольт живлення з Arduino. Це і потрібно зробити з модулем реле та датчиком відстані. Причому останній має бути розміщений на самому бредборді, і вже від нього треба під’єднуватись до живлення, а реле має бути окремо на проводках. Це необхідно, щоб заховати його під корпус вимикача, так як воно буде пов’язано з небезпечною напругою.

 

Спробуйте зробити це самостійно, і перевірте себе тут.

 

3. Тепер підключимо решту. На Arduino є виводи позначені цифрами, це програмовані порти вводу-виводу, які ви можете налаштувати працювати (майже) як завгодно. До чого тут підключати виводи реле і дальноміра? В одній із статей ми розглянемо детально всі виводи Arduino, їх позначення, можливості і особливості. Зараз же лише скажу, що підійдуть будь-які, але є кілька нюансів, чому краще обрати наступні:
Датчик відстані вивід Trig -> Arduino вивід 2 (на деяких платах позначено як D2, але не A2 – це зовсім інший)
Датчик відстані вивід Echo -> Arduino вивід 3 (на деяких платах D3, але це не A3)
Реле In (або Input, S, Signal) -> Arduino вивід 13 (на деяких платах позначено як D13)

 

Підключіть все і перевірте. Має вийти так.

 

4. Живлення. Воно не знадобиться нам на етапі програмування, так як здійснюватиметься через USB порт вашого ПК. Коли ж пристрій відправиться у самостійне життя, про живлення доведеться все ж потурбуватись.
Найпростіше зробити це через роз’єм USB від блоку для зарядки телефонів, якщо поряд є розетка. В інакшому випадку наступні варіанти.
Якщо ваш вибір плати Uno, Mega, Leonardo або інша, вона має великий чорний роз’єм до якого можна підключити:
• блок батарейок AA або AAA(4 або більше);
• роз’єм для “крони” на 9 вольт;
• блок живлення до 12 вольт з відповідним роз’ємом.
Якщо ж ваша платка з штирками, така як Nano, і розміщується на бредборді, це все також можливо, але роз’єму живлення там немає, і доведеться підключати напругу зачистивши провідники від джерела живлення і під’єднати їх через бредборд: “-” до GND (зазвичай чорний провід) і “+” до Vin (звичайно червоний, або маркований білим провід). В кінці статті є фото.
Зібрали? Перевірте все ще раз і го кодити.
Програмування
Ми вже трохи розбирали це в першій частині, зараз же давайте пройдемо все крок за кроком.
1. Завантажте на сайті Arduino IDE – це середовище розробки – і встановіть його на свій ПК.
2. Для підтримки деяких плат завантажте драйвер чіпу CH340/CH341 і встановіть його.
3. Запустіть Arduino IDE і перейдіть в меню Інструменти->Порт (в англ. версії Tools->Port). Ви побачите там список портів пристроїв, які вже є у вашій системі.
4. Підключіть Arduino по USB до ПК.
5. Повторіть крок 3 і ви побачите, що до вже існуючих портів додався ще один. Це і є наша плата, оберіть її. Якщо новий порт не з’явився, щось не так з платою або драйвером. Спробуте перевірити USB кабель, під’єднання, на Arduino повинен світитися світлодіод. Спробуйте ще раз перевстановити драйвер.
6. Перейдіть в меню Інструменти->Плата (в англ. версії Tools->Board) і оберіть тип плати (Nano, Uno, Mega, пам’ятаєте? Дивіться попередню статтю).
7. Для деяких плат треба обрати ще Інструменти->Процессор (в англ. версії Tools->Processor). Уважно подивіться маркування чіпу на платі.
8. Нічого не змінюючи в коді, натисніть на кнопку завантаження (зелена стрілка стрілка згори). Якщо код ви вже редагували, виберіть меню Файл->Створити (в англ. версії File->New) і відкриєтся нове вікно і вже в ньому виберіть кнопку завантажити. Якщо ви все зробили вірно, IDE скомпілює код і завантажить його на плату. Якщо виникатимуть помилки – перевірте чи все зробили вірно. Спробуйте також в Інструменти->Процессор (Tools->Processor) обрати Atmega328P Old Bootloader.
9. Переходимо до програмування. Сьогодні ми не будемо детально розбирати цю тему, можете просто скопіювати код, вставити його в IDE і завантажити. Але уважно продивіться його і почитайте коментарі, щоб орієнтуватися, що там до чого. Для початку просто поклацаємо релешкою, щоб ви зрозуміли як працює код на Arduino.
// Це коментар. Кожна строка, яка починається з // ігнорується.
// Отже тут можна писати що завгодно. Тому запишемо в коментарях
// пояснення, підказки та іншу корисну інфонрмацію.

// Почнімо з того, що “запам’ятаємо” до якого вивода що підключено
#define TRIG 2
#define ECHO 3
#define RELAY 13

// Наступний код виконається лише один раз після включення. Тут зазвичай налаштування.
void setup() {
// Функція pinMode “пояснює” Arduino яку роль виконуватиме вивід
// OUTPUT означає, що цей вивід налаштовано як вихід.
// Іншими словами, Arduino керуватиме ним, і, відповідно, тим що до нього підключено.
// INPUT означає, що вивід налаштовано як вхід.
// Тобто Arduino буде зчитувати його стан, тобто підключеного пристрію.
pinMode(RELAY, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
// Таким чином, тепер Arduino готова керувати реле та Trig на датчику
// А “слухати” лише Echo з датчика
}

// Наступний код виконуватиметься постійно. Це і є основна робота Arduino.
void loop() {
// Функція digitalWrite подає (параметр HIGH) або знімає (параметр LOW)
// напругу живлення на виводі. Це означає, що реле увімкне чи вимкне світло
digitalWrite(RELAY, HIGH);
// Функція delay затримує виконання коду на вказану кількість мілісекунд
delay(3000);
digitalWrite(RELAY, LOW);
delay(3000);

// Таким чином даний код буде то вмикати то вимкати реле.
// Так ми перевіряємо його роботу.
}
// В кінці знову почнеться виконання loop з початку.

Якщо код не завантажується, IDE видає помилку, ще раз перевірте всі налаштування IDE.
Якщо все завантажилося, але реле не клацає, на платі має замиготіти світлодіод з позначкою L. Перевірте, чи правильно ви підключили реле.
10. Спробуйте змінити програму так, щоб поклацати релешкою раз в секунду. Що для цього треба змінити?
11. Тепер завантажте цей код. Він перевірить, чи працює датчик відстані. Знову уважно продивіться його і почитайте коментарі, щоб розуміти принцип роботи.
// Тут будуть коментуватися лише зміни відносно попередньої версії

#define TRIG 2
#define ECHO 3
#define RELAY 13

void setup() {
pinMode(RELAY, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);

// Serial – це послідовний порт, за допомогою якого, Arduino вміє
// спілкуватися з комп’ютером до якого під’єднана.
// begin – ініціація роботи порта.
// 9600 – швидкіть на якій буде проходити комунікація.
// Важливо щоб і на ПК була виьрана така ж сама.
Serial.begin(9600);
}

void loop() {
// Виставимо на Trig високий рівень. Це примусить датчик видавати
// ультразвуковий сигнал.
digitalWrite(TRIG, HIGH);
// Це працює як і delay, але затримка значно коротша – в мікросекундах
delayMicroseconds(10);
// Вимикаємо сигнал.
digitalWrite(TRIG, LOW);

// Тепер ультразвукова хвиля розповсюджується у просторі і,
// відбиваючись від об’єктів, повертається до датчика. Він реєструє
// надходження хвилі на виводі ECHO. Тепер необхідно заміряти час
// надходження хвилі: чим він довший, тим далі знаходиться перешкода.

// Для цього ми створимо змінну distance, яка вміє зберігати числа.
int distance;

// Тепер запишемо в distance час, коли на ECHO прийде сигнал (HIGH)
// Це вміє функція pulseIn
distance = pulseIn(ECHO, HIGH);

// Тпере передамо значення, яке “запам’ятала” distance на комп’ютер.
// Це здійснює println.
Serial.println(distance);

// Тепер залишилося дочекатися, поки запущена раніше ультразвукова
// хвиля повністю не погасне у просторі і, не відбившись від
// найвіддаленіших об’єктів, не завадить виміряти нове значення.
// До тогож затримка дозволить бачити результати трохи комфортніше.
delay(300);
}
Після завантаження оберіть Інструменти->монітор послідовного порту (в англ. версії Tools->Serial Monitor). З’явиться вікно відображення даних отриманих з Arduino. Спробуйте приблизити до датчика відстані долоню і переконайтеся, що результат показує реальну відстань до датчика.
Якщо ви не бачите результату, або замість цифр невідомі символи – справа знизу вікна виберіть потрібну швидкість 9600.
Якщо замість дальності ви бачите лише нулі – ще раз перевірте правильність підключення датчика відстані.
12. Спробуйте змінити код, щоб отримувати дальність у сантиметрах. Напишіть в коментах чи вийшло 😉
13. Настав час об’єднати дві написані вище програми в “бойову” версію! Ви можете спробувати зробити це самостійно, або скористайтеся готовим результатом. Як завжди, подивіться його уважно і спробуйте зрозуміти логіку його роботи.
// Тут будуть коментуватися лише зміни відносно попередньої версії

#define TRIG 2
#define ECHO 3
#define RELAY 13

void setup() {
pinMode(RELAY, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);

Serial.begin(9600);
}

void loop() {
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);

int distance;
distance = pulseIn(ECHO, HIGH);
Serial.println(distance);

// Цей умовний оператор if перевіряє чи відстань буде менша за 1000
// і в залежності від того, чи це так, пропускає або виконує наступне
if (distance < 1000)
{
// Цей код виконується лише якщо відстань буде менша за 1000
// 1000 підібрана експериментально, можете спробувати своє значення

// digitalRead зчитує стан в якому знаходиться реле (вкл або викл)
// if забезпечує вимкнення реле якщо воно включено або
// включено якщо вимкнено
if (digitalRead(RELAY) == HIGH)
{
digitalWrite(RELAY, LOW);
}
else
{
digitalWrite(RELAY, HIGH);
}
}

delay(500);
}

Монтаж
Ми на фінішній прямій! Лишилося прикріпити пристрій біля вимикача світла і під’єднати замість нього реле.

Ще раз нагадую про техніку безпеки при підключенні до вимикача світла! Спочатку знеструмте приміщення і переконайтеся, що напруги немає. Тільки після цього демонтуйте вимикач і під’єднайте замість нього реле. І ще раз: якщо у вас не має досвіду роботи з електрикою або ви сумніваєтесь, попросіть про допомогу у компетентних людей або під’єднайте реле до освітлення низької напруги.

Ось кілька порад:
• Заздалегідь продумайте розміщення компонентів так, щоб довжини усіх провідників вистачило розмістити реле замість вимикача.
• Почніть із закріплення бредборду, Arduino і батарейок.
• Кріплення Arduino і батарейок можна зробити за допомогою клейкої стрічки. Обирайте якісну, щоб не відклеїлась. У бредборда є власна клейка поверхня.
• Після збірки перевірте всі з’єднання. Могло статися, що перемички або проводки повідходили.
• Підігніть трохи виводи датчика відстані, щоб він “дивився” прямо, а не в сторону.
• Надійно закріпіть до реле провода освітлення 220 В, вони мають туго сидіти і не бовтатися. Це пожежонебезпечно!
• Надійно прикрийте реле корпусом вимикача. Переконайтеся, що до нього не зможуть дістатися діти.
• Фото для прикладу того, що має вийти.

Приклад на Arduino Mega і Arduino Nano. Реле під’єднано замість вимикача.

Дякуємо за увагу 🙂 Пишіть коментарі, якщо виникатимуть питання чи щось не вийде. В наступній статті розглянемо, що знаходиться на платах Arduino і навіщо, а також які бувають плати Arduino, для чого і коли обрати ту чи іншу з них. До зустрічі!

One thought on “Перший пристрій на Arduino

  1. Hey – I was checking out your site and I’m impressed with how clean and professional it looks.

    Adding video to your website has become an absolute MUST. Even something basic that clearly defines exactly what it is you’re offering & why work with your company vs competitors…

    My team, based out of Jerusalem and California, creates quality animated explainer videos. Our award-winning videos are proven to increase customer engagement and decrease user bounce rate.

    Email me back for some explainer video samples, pricing, or just to say hi!

    –Tara Campbell
    Email: Tara.c@vidthebiz.com
    Website: VidTheBiz.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.