
Якщо ви хочете створити інноваційний пристрій на основі Arduino, сенсорна лампа стане чудовим варіантом. У цій частині ми використовуємо бібліотеку CapacitiveSensor, яка дозволяє вимірювати ємність людського тіла та керувати світлом за допомогою дотику.
Ви створите лампу, яка вмикатиме та вимикатиме світло при дотику до провідного матеріалу.
Ви будете використовувати бібліотеку CapacitiveSensor від Пола Беджера для цього проєкту. Ця бібліотека дозволяє вимірювати ємність вашого тіла. Ємність — це величина, що визначає, скільки електричного заряду може накопичувати об’єкт. Бібліотека перевіряє два піни на вашому Arduino (один передавач, інший приймач) і вимірює час, необхідний для того, щоб вони набули однакового стану. Ці піни будуть підключені до металевого предмета, наприклад, до алюмінієвої фольги. Коли ви наближаєтеся до об’єкта, ваше тіло поглинає частину заряду, змушуючи піни довше досягати однакового стану.
Останню версію бібліотеки CapacitiveSensor можна знайти тут: arduino.cc/capacitive. Завантажте файл на свій комп’ютер і розпакуйте його.
Відкрийте папку зі своїми скетчами Arduino (за замовчуванням вона знаходиться в папці “Документи”). У цій папці створіть новий каталог під назвою “libraries”. Перемістіть розпаковану папку CapacitiveSensor у цю директорію та перезапустіть програмне забезпечення Arduino.
Перейдіть до Файл > Приклади в програмному забезпеченні Arduino, і ви побачите новий запис для CapacitiveSensor. Бібліотека, яку ви додали, містить демонстраційний проєкт. Відкрийте приклад CapacitiveSensorSketch і скомпілюйте його. Якщо під час компіляції немає помилок, значить, бібліотеку встановлено правильно.
Підключіть світлодіод до піна 12 та з’єднайте його катод із землею через резистор 220 Ом, як показано.
Підключіть цифрові піни 2 і 4 до вашої макетної плати. З’єднайте ці два піни резистором 1 мегом. У тому ж ряду, що і пін 2, вставте довгий дріт (не менше 8-10 см), який виходить за межі макетної плати та не підключений до нічого іншого. Це буде ваш сенсор дотику.
У цьому проєкті немає потреби подавати 5В на макетну плату. Цифровий пін 4 постачає струм до сенсора.
Як і в інших світлодіодних проектах, розсіювання світла зробить це набагато привабливішим. Підійдуть кульки для пінг-понгу, абажури з паперу або пластику, все, що у вас під рукою. Ви можете заховати датчик за щось тверде, і він все одно працюватиме.
Ємність можна виміряти через непровідні матеріали, такі як дерево та пластик. Збільшення площі поверхні датчика з більшою провідною поверхнею зробить його більш чутливим; спробуйте приєднати до дроту алюмінієву фольгу або мідну сітку.
Ви можете зробити основу для лампи з картону, тонкого дерева або тканини, а внутрішню поверхню вистелити фольгою, прикріпленою до дроту датчика. Тоді вся основа лампи буде працювати як датчик дотику. Оновіть порогову змінну в коді, вносячи ці зміни, щоб переконатися, що ви все ще отримуєте надійний результат.
Імпорт бібліотеки CapacitiveSensor. На початку програми додайте бібліотеку CapacitiveSensor. Ви включаєте її так само, як і будь-яку стандартну бібліотеку Arduino, наприклад, Servo у попередніх проєктах.
Створення екземпляра бібліотеки. Створіть іменований екземпляр бібліотеки. При використанні цієї бібліотеки ви вказуєте, які піни будуть використовуватися для передачі та прийому інформації. У цьому випадку пін 4 передає сигнал до провідного сенсорного матеріалу через резистор, а пін 2 є приймальним.
Налаштування порогу спрацьовування. Створіть змінну для порогу чутливості, при якому лампа вмикатиметься. Ви зміните це число після тестування роботи сенсора. Також визначте пін, на якому буде підключений світлодіод.
Налаштування в setup(). У функції setup() відкрийте послідовне з’єднання (Serial) на 9600 бод. Це дозволить вам бачити значення, які отримує сенсор. Також зробіть ledPin вихідним (OUTPUT).
Вимірювання дотику. У функції loop() створіть змінну long, щоб зберігати значення сенсора. Бібліотека повертає значення сенсора за допомогою команди CapacitiveSensor(), яка приймає аргумент, що визначає кількість зразків для зчитування.
Якщо ви зчитуєте занадто мало зразків, можливі великі коливання показників сенсора. Якщо ж зчитувань занадто багато, може з’явитися затримка через багаторазове повторне зчитування сенсора. 30 зразків — гарний початковий варіант. Виведіть значення сенсора в послідовний монітор (Serial Monitor).
За допомогою конструкції if()…else перевірте, чи значення сенсора перевищує поріг.
Якщо так, увімкніть світлодіод (HIGH).
Якщо ні, вимкніть світлодіод (LOW).
Потім додайте невелику затримку (delay()) перед завершенням циклу loop().
#include <CapacitiveSensor.h> CapacitiveSensor capSensor = CapacitiveSensor(4,2); int threshold = 1000; const int ledPin = 12; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { long sensorValue = capSensor.capacitiveSensor(30); Serial.println(sensorValue); if(sensorValue > threshold) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } delay(10); }
Після програмування Arduino потрібно визначити значення, які отримує сенсор під час дотику. Відкрийте послідовний монітор (Serial Monitor) і подивіться на показники, коли сенсор залишається недоторканим. Потім легенько торкніться оголеного дроту, підключеного до макетної плати, і зверніть увагу, як число збільшується. Спробуйте натиснути сильніше, щоб перевірити, як змінюється значення.
Коли ви визначите діапазон значень, поверніться до скетчу та змініть змінну threshold. Встановіть її так, щоб вона була більшою за значення, коли сенсор не торкаються, але меншою за те, що фіксується при дотику. Завантажте оновлений код у Arduino. Лампа повинна надійно вмикатися при торканні до дроту і вимикатися, коли його не чіпають. Якщо світло не вмикається, спробуйте знизити threshold.
Ви, мабуть, помітили, що значення сенсора змінюються залежно від того, яка частина вашого пальця торкається провідника. Чи можна використати це для створення інших взаємодій із світлодіодом? Наприклад, що, якщо додати кілька сенсорів, які дозволять змінювати яскравість світла? Якщо між пінами 2 і 4 встановити резистор іншого номіналу, це змінить чутливість сенсора. Чи буде це корисним для вашого інтерфейсу?
Сторонні бібліотеки, такі як CapacitiveSensor від Пола Беджера, є корисними інструментами для розширення можливостей Arduino. Після встановлення вони працюють так само, як і бібліотеки, що входять до складу основного програмного забезпечення.