Створіть власний механічний індикатор настрою на Arduino за допомогою сервоприводу та потенціометра. Цей проєкт дозволить легко сигналізувати, чи готові ви до спілкування, чи вам краще не заважати. Сервомотори – це спеціальні двигуни, які обертаються на певний кут і залишаються у заданому положенні, поки їм не надійде нова команда. Використовуючи потенціометр, можна керувати положенням стрілки, що вказуватиме на відповідний напис: “Заходьте”, “Стукайте” або “Не турбувати”.
Покажіть свій настрій за допомогою Arduino.

Серводвигуни — це особливий тип двигунів, які не обертаються по колу, а рухаються в певне положення й залишаються там, доки ви не скажете їм рухатися знову. Сервоприводи зазвичай обертаються лише на 180 градусів (одна половина кола). Поєднавши один із цих двигунів із невеликим картонним виробом, ви зможете повідомити людям, чи варто їм приходити й просити вашої допомоги у своєму наступному проекті чи ні.
Подібно до того, як ви використовували імпульси для ШІМ світлодіода в проекті лампи змішування кольорів, серводвигуни очікують кількох імпульсів, які повідомляють їм, під яким кутом рухатися. Імпульси завжди надходять з однаковими інтервалами часу, але їх ширина коливається від 1000 до 2000 мікросекунд. Хоча можна написати код для генерації цих імпульсів, програмне забезпечення Arduino постачається з бібліотекою, яка дозволяє легко керувати двигуном.
Оскільки сервопривід обертається лише на 180 градусів, а ваш аналоговий вхід йде від 0-1023, вам потрібно буде використовувати функцію під назвою map(), щоб змінити масштаб значень, що надходять від потенціометра.
Однією з чудових переваг спільноти Arduino є талановиті люди, які розширюють її функціональність за допомогою додаткового програмного забезпечення. Кожен може писати бібліотеки для розширення функціональності Arduino. Існують бібліотеки для широкого спектру датчиків, приводів та інших пристроїв, які користувачі надали спільноті. Бібліотека програмного забезпечення розширює функціональні можливості середовища програмування. Програмне забезпечення Arduino постачається з низкою бібліотек, корисних для роботи з обладнанням або даними. Одна з включених бібліотек призначена для використання з серводвигунами. У свій код ви імпортуєте бібліотеку, і всі її функції будуть доступні вам.
Приєднайте 5 В і заземліть одну сторону макетної плати від Arduino.
Розмістіть потенціометр на макетній платі та підключіть одну сторону до 5 В, а іншу – до землі. Потенціометр – це різновид дільника напруги. Повертаючи ручку, ви змінюєте співвідношення напруги між середнім контактом і потужністю. Ви можете прочитати цю зміну на аналоговому вході. Підключіть середній контакт до аналогового контакту 0. Це керуватиме положенням вашого сервомотора.
Від сервоприводу виходять три дроти. Один — живлення (червоний), один — земля (чорний), а третій (білий) — лінія керування, яка отримуватиме інформацію від Arduino. Підключіть три роз’єми до роз’ємів проводів сервоприводу (див. мал. 3). Під’єднайте заголовки до макетної плати так, щоб кожен штифт знаходився в окремому рядку. Підключіть 5 В до червоного дроту, заземлення до чорного дроту, а білий провід до контакту 9.
Коли серводвигун починає рухатися, він споживає більше струму, ніж якби він уже рухався. Це призведе до падіння напруги на платі. Розмістивши конденсатор ємністю 100 мкФ між живленням і землею поруч із роз’ємами «папа», як показано на Мал. 1, ви можете згладити будь-які зміни напруги, які можуть виникнути. Ви також можете розмістити конденсатор між живленням і землею, що йде до вашого потенціометра. Вони називаються конденсаторами розв’язки, тому що вони зменшують або відокремлюють зміни, спричинені компонентами, від решти схеми. Будьте дуже обережні, щоб переконатися, що ви підключили катод до землі (це сторона з чорною смугою збоку), а анод до живлення. Якщо вставити конденсатори навпаки, вони можуть вибухнути.

Імпортуйте бібліотеку. Щоб використовувати бібліотеку сервосистеми, вам спочатку потрібно її імпортувати. Це робить доповнення з бібліотеки доступними для вашого ескізу.
Створення Servo об’єкта. Щоб звернутися до сервоприводу, вам потрібно буде створити іменований екземпляр бібліотеки сервоприводу в змінній. Це називається об’єктом. Коли ви робите це, ви створюєте унікальне ім’я, яке матиме всі функції та можливості, які пропонує сервобібліотека. З цього моменту в програмі щоразу, коли ви посилаєтеся на myServo, ви спілкуватиметеся з сервооб’єктом.
Оголошення змінної. Встановіть іменовану константу для штифта, до якого приєднаний потенціометр, і змінні для зберігання аналогового вхідного значення та кута, на який має рухатися сервопривід.
Зв’язування об’єкта Servo з контактом Arduino, ініціалізація послідовного порту. У setup() вам потрібно буде повідомити Arduino, до якого контакту під’єднано ваш сервопривід. Включіть послідовне з’єднання, щоб ви могли перевірити значення потенціометра та побачити, як вони відображаються на кути на серводвигуні.
Зчитування значення потенціометра. У loop() прочитайте аналоговий вхід і виведіть значення на монітор послідовного порту.
Відображення значення потенціометра на значення сервоприводу. Щоб створити придатне для використання значення для серводвигуна з вашого аналогового входу, найпростіше скористатися функцією map(). Ця зручна функція масштабує числа для вас. У цьому випадку він змінить значення між 0-1023 на значення між 0-179. Він приймає п’ять аргументів: число, яке потрібно масштабувати (тут це potVal), мінімальне значення вхідних даних (0), максимальне значення вхідних даних (1023), мінімальне значення вихідних даних (0) і максимальне значення вихідних даних (179). Збережіть це нове значення у змінній angle. Потім роздрукуйте зіставлене значення на монітор послідовного порту.
Обертання сервоприводу. Нарешті настав час перемістити сервопривід. Командний сервопривід. write() переміщує двигун на вказаний вами кут. У кінці циклу () поставте затримку, щоб сервопривод мав час переміститися в нове положення.
Зауважте, що інструкції #include не мають крапки з комою в кінці рядка:
1
2
#include <Servo.h>
Servo myServo;
int const potPin = A0;
int potVal;
int angle;
void setup() {
myServo.attach(9);
Serial.begin(9600);
}
void loop() {
potVal = analogRead(potPin);
Serial.print(“potVal: “);
Serial.print(potVal);
angle = map(potVal, 0, 1023, 0, 179);
Serial.print(“, angle: “);
Serial.println(angle);
myServo.write(angle);
delay(15);
}
Після того, як Arduino буде запрограмовано та включено, відкрийте монітор послідовного порту. Ви повинні побачити потік значень, подібний до цього:
potVal : 1023, angle : 179 potVal : 1023, angle : 179
Коли ви обертаєте потенціометр, ви повинні побачити зміни цифр. Що ще важливіше, ви повинні побачити, як ваш серводвигун переміститься в нове положення. Зверніть увагу на зв’язок між значенням potVal і кутом у послідовному моніторі та положенням сервоприводу. Ви повинні побачити постійні результати, повертаючи горщик.
Одне приємне у використанні потенціометрів як аналогових входів полягає в тому, що вони нададуть вам повний діапазон значень від 0 до 1023. Це робить їх корисними при тестуванні проектів, які використовують аналоговий вхід.
Серводвигуни – це звичайні двигуни з кількома передачами та кількома ланцюгами всередині. Механіка всередині забезпечує зворотний зв’язок із ланцюгом, тому він завжди знає своє положення. Хоча може здатися, що це обмежений діапазон рухів, його можна змусити виконувати широкий спектр різних типів рухів за допомогою деяких додаткових механізмів. Є багато ресурсів, які детально описують механізми, як-от robives.com/mechs і книга Making Things Move Дастіна Робертса.
Потенціометр – не єдиний датчик, який можна використовувати для керування сервоприводом. Використовуючи ту саму фізичну установку (стрілка, що вказує на кілька різних індикаторів) і інший датчик, який індикатор можна створити? Як це буде працювати з температурою (як у Love-o-Meter)? Чи можете ви визначити час доби за допомогою фоторезистора? Як значення картографування взаємодіють із такими типами датчиків?
Arduino може легко керувати серводвигунами за допомогою бібліотеки, яка є набором коду, який розширює середовище програмування. Іноді необхідно змінити призначення цінностей, відображаючи їх з одного масштабу на інший.
Тепер, коли ви почали працювати, настав час повідомити людям, чи готові ви допомогти їм у їхніх проектах, чи хочете, щоб вас залишили наодинці, щоб спланувати свою наступну творчість.
Ножицями виріжте шматок картону у формі стрілки. Розташуйте сервопривод на 90 градусів (перевірте значення кута на моніторі послідовного порту, якщо ви не впевнені). Приклейте стрілку так, щоб вона була орієнтована в тому ж напрямку, що й корпус двигуна. Тепер ви зможете повернути стрілку на 180 градусів під час повороту потенціометра.
Візьміть аркуш паперу, більший за сервопривід із прикріпленою стрілкою, і намалюйте на ньому півколо. На одному кінці кола напишіть «Залишатися». На іншому кінці напишіть «Заходьте». Ставте «Стукайте, будь ласка!» в середині дуги. Покладіть сервопривід зі стрілкою на папір. Вітаємо, у вас є спосіб повідомити людям, наскільки ви зайняті своїми проектами!
