Умный автоматический дозатор санитайзера — бесконтактная гигиена на Arduino
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Nano R3 | 1 |
| Драйвер шагового двигателя DRV8825 | 1 |
| Провода-перемычки | 1 набор |
| Беспаечная макетная плата (2 мини-бريدборда) | 1 |
| Крона 9 В + держатель | 1 |
| Резистор 1 кОм | 1 |
| Конденсатор 100 мкФ (электролитический) | 1 |
| Шаговый двигатель 28BYJ-48 5 В (4 фазы) | 1 |
| Винты М3 (8–20 мм) | 19 |
| ИК-датчик препятствий (IR Obstacle Avoidance) | 1 |
| Конечный выключатель KW12-3 (микровыключатель с роликом) | 1 |
| Жёсткая муфта 5 мм → 8 мм (алюминий) | 1 |
| Трапециевидный винт T8-300 мм с бронзовым гайкой, шаг 2 мм | 1 |
| Выключатель вкл/выкл | 1 |
| Жидкий санитайзер / мыло (любой флакон с насосом) | 1 |
| Подшипник 688zz (8×16×5 мм) | 1 |
| Линейный подшипник LM8UU (8×15×24 мм) | 1 |
| Велкро-стяжки (липучки) | 1 комплект |
Необходимые инструменты
- 3D-принтер (Creality Ender 3 V2 или аналогичный)
- Паяльник (опционально)
- Металлопила (для подрезки винта T8)
Программное обеспечение
- Arduino IDE
- 3D-CAD (Onshape — автор использовал его, файлы .stl предоставлены)
- Ultimaker Cura (слайсер)
О проекте
Пандемия COVID-19 показала важность гигиены рук. Но нажатие на дозатор грязными руками сводит на нет смысл дезинфекции. Я, 14-летний разработчик, создал насадку на Arduino Nano, которая превращает почти любой дозатор мыла/санитайзера в полностью бесконтактный и автоматический. Устройство крепится на липучках за секунды.
Принцип работы
Механика: Шаговый двигатель через муфту вращает трапециевидный винт. На гайке винта закреплён прессер (нажиматель). Опорная штанга с линейным подшипником не даёт прессеру вращаться — он движется только линейно вверх/вниз. Это позволяет точно позиционировать нажатие.
Логика: При срабатывании ИК-датчика (рука под дозатором) прессер опускается на заданное расстояние, ждёт 2 сек, затем поднимается до срабатывания конечного выключателя (нулевая позиция). При включении питания прессер автоматически калибруется — поднимается до концевика.
Модернизация шагового двигателя 28BYJ-48 (увеличение момента в 2,5 раза)
Стандартный 28BYJ-48 — униполярный, момент ~300 г·см. Простой мод делает его биполярным с моментом 800+ г·см:
- Снимите синий чехол двигателя.
- Ножом перережьте центральную дорожку, идущую к красному проводу.
- Отпаяйте/отрежьте красный провод с обеих сторон.
- Соберите обратно (возможно, придётся подпилить опоры чехла).
- Теперь нужен биполярный драйвер (DRV8825). Напряжение 9 В от короны нормально переносится биполярной версией.
Самодельные велкро-стяжки (2 шт.)
Если нет готовых — сделайте сами: полоска жесткой стороны 30–40 см, мягкой 4–7 см. Соедините скобами так, чтобы одинаковые стороны смотрели в одну сторону. Нужно две такие стяжки.
Электрическая схема
- Крона 9 В → конденсатор 100 мкФ (полоса = минус) → тумблер → VIN Arduino. GND крона → GND Arduino.
- ИК-датчик: VCC → 5V, GND → GND, OUT → D9.
- Конечный выключатель: общий → 5V, нормально разомкнутый → D8 и через 1 кОм на GND.
- DRV8825: VMOT → VIN Arduino, GND → GND. DIR → D2, STEP → D3, EN → D4. RESET и SLEEP соединить вместе.
- Двигатель (после мода): синий → A2, жёлтый → A1, оранжевый → B1, розовый → B2.
Программный код (Arduino)
const int dirPin = 2;
const int stepPin = 3;
const int enablePin = 4;
const int stepsPerRevolution = 6000; // 360° = 2048 шагов, 6000 — полный ход прессера
int endStop = 8;
int irSensor = 9;
void setup() {
pinMode(endStop, INPUT);
pinMode(irSensor, INPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW); // включаем драйвер
// Калибровка: поднимаем прессер до концевика
while(digitalRead(endStop) == LOW) {
digitalWrite(dirPin, HIGH); // против часовой
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
digitalWrite(enablePin, HIGH); // выключаем драйвер в ожидании
}
void loop() {
if(digitalRead(irSensor) == 0) { // рука обнаружена (LOW = препятствие есть)
digitalWrite(enablePin, LOW);
digitalWrite(dirPin, LOW); // по часовой — вниз
for(int x=0; x
Сборка (этапы)
- Крышка с велкро: вставьте стяжку в щель, наложите держатель, затяните винтами (×2).
- Прессер: вставьте линейный подшипник в отверстие до середины. Затяните гайку T8 к прессеру 4 винтами.
- Корпус электроники: поместите собранную схему внутрь, выведите провода двигателя, концевика и ИК-датчика через отверстие.
- Держатель ИК-датчика: закрепите датчик винтом с гайкой для регулировки положения.
- Финальная сборка: установите опорный подшипник, вставьте винт T8 (70–82 мм, при необходимости подрежьте пилой) с прессером. Затяните муфту на вал двигателя и на винт. Прикрутите двигатель к базе (2 винта). Установите конечный выключатель. Закрутите крышку к базе (5 винтов). Прикрутите держатель ИК-датчика к фронту (2 винта). Закрутите корпус электроники к крышке (3 винта).
Заключение
Проект завершён! Насадка делает любой дозатор автоматическим и бесконтактным. Спасибо за внимание!
Схемы и 3D-модели
Все .stl файлы для 3D-печати и принципиальная схема доступны в разделе проекта.
Производственный процесс
- Игра «UFO Attack» на Arduino UNO и матрице MAX7219 — Собираем аркаду с джойстиком Atari
- Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда
- 3D RGB Arduclock — Bluetooth-часы на адресных LED с RTC
- Мониторинг состояния реки: Arduino-система контроля качества воды
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Интерактивная игра с джойстиком и LED-обратной связью на Arduino
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Маленький ровер на Arduino: собираем автономного робота своими руками
- Своё рулевое управление (джойстик) для игр на Arduino