Сенсорный выключатель LED на Arduino UNO: простой DIY-проект
Компоненты и материалы
| Arduino UNO | 1 шт. |
| LED (любой) | 1 шт. |
| Перемычки | 4 шт. |
| Резистор 1 МОм | 1 шт. |
| Алюминиевая фольга или монета | 1 шт. |
Приложения и сервисы
- Arduino IDE
О проекте
Сделан сенсор касания из монеты, работающий на библиотеке Capacitive Sensing. Сенсор включает/выключает LED при касании. Ёмкостные сенсоры детектируют проводящие объекты или те, у которых диэлектрическая проницаемость сильно отличается от воздуха (человеческое тело, рука).
Библиотека CapacitiveSensor превращает два и более пинов Arduino в ёмкостной сенсор, чувствующий ёмкость тела. Нужен резистор среднего/высокого номинала, провод и кусок алюминиевой фольги на конце. В максимальной чувствительности сенсор срабатывает на расстоянии нескольких дюймов.

Схема и принцип работы
Простая RC-цепочь (резистор-конденсатор). Измеряя время перехода из одного состояния в другое, получаем приблизительную дистанцию (известны ёмкость тела, резистор, материал сенсора). Высокоомный резистор обеспечивает значительное время разряда.
В качестве сенсорного материала можно использовать любые металлические предметы: монету, фольгу и т.д.

Программное обеспечение
Функция включения/выключения света касанием реализована в скетче. Перед загрузкой установите библиотеку CapacitiveSensor: GitHub.
Сборка железа
Установите резистор 1 МОм между пинами 2 и 4 Arduino. По программе пин 4 — приёмный, подключите монету (сенсор) к пину 4. Соедините LED между GND и пином 8.
Тестирование
При касании сенсора меняется предыдущее состояние: LED включается или выключается. Большие резисторы делают сенсор более чувствительным, работает как датчик приближения.
Код
Arduino код
#include <CapacitiveSensor.h>
CapacitiveSensor cs_2_4 = CapacitiveSensor(2,4); // 1M резистор между пинами 2 и 4, пин 4 — сенсор, добавить провод и/или фольгу
int in = 2;
int out = 4;
int state = HIGH;
int r;
int p = LOW;
long time = 0;
long debounce = 200;
void setup() {
pinMode(4, INPUT);
pinMode(8, OUTPUT);
}
void loop() {
r = digitalRead(4);
if (r == HIGH && p == LOW && millis() - time > debounce) {
if (state == HIGH) state = LOW;
else state = HIGH;
time = millis();
}
digitalWrite(8, state);
p = r;
}
Схемы

Производственный процесс
- Управление светодиодом с PIR-датчиком движения на Raspberry Pi
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Датчик занятости ванной комнаты на Raspberry Pi с голосовыми и SMS-уведомлениями через Twilio
- Цифровой датчик света — управление светодиодом по освещённости на Windows 10 IoT Core
- Передача данных температуры и влажности между двумя Arduino через Firebase
- Настольная RGB-лампа с управлением жестами – Интерактивное беспроводное освещение
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- Надежный ИК-датчик пульса на Arduino: пошаговое руководство
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени