Система фильтрации воздуха для кошачьих туалетов
Автоматизированная система фильтрации воздуха для кошачьих туалетов — универсальная, настраиваемая
Это универсальная система фильтрации воздуха на базе Arduino, предназначенная для установки практически на любой кошачий туалет. Цель проекта проста: автоматически удалять запахи после того, как ваша кошка использует наполнитель, обеспечивая при этом максимальную безопасность и минимальный дискомфорт.
По своей сути система питается от Arduino UNO и датчика приближения VL6180X. Когда ваша кошка входит в туалетный лоток, датчик обнаруживает ее присутствие и активирует оранжевый светодиод, указывая, что лоток используется. Как только ваша кошка выйдет, система ждет 15 секунд в целях безопасности, затем активирует вентилятор 12 В через реле 5 В, вытягивая воздух в течение 2,5 минут. Если в это время кошка возвращается, вентилятор немедленно отключается, и цикл возобновляется, как только подстилка снова освобождается.
Время ожидания и извлечения можно настроить в коде Arduino.
Электроника построена на перфорированной плате, все соединения компонентов припаяны вручную. Питание подается через блок питания 12 В, подключенный непосредственно к Arduino, но он также поддерживает питание от батареи 12 В. При работе от аккумулятора соответствующий код включает систему контроля напряжения: если уровень заряда аккумулятора падает ниже безопасного порога, система ��втоматически отключается, чтобы предотвратить чрезмерную разрядку, а оранжевый светодиод быстро мигает три раза, указывая на необходимость подзарядки аккумулятора.
Управление вентилятором с ШИМ — задача
На ранних этапах разработки я пытался использовать ШИМ (широтно-импульсную модуляцию) для плавного увеличения скорости вращения вентилятора, надеясь не спугнуть кота. Однако с моим вентилятором Noctua 12 В, даже при использовании рекомендованной производителем частоты ШИМ, вентилятор никогда не выключался полностью, он всегда оставался на минимальной скорости. По этой причине я перешел на релейное управление, но если у кого-нибудь есть советы по обеспечению надежной работы ШИМ с вентиляторами Noctua и Arduino UNO, буду рад вашему мнению!
Совместимость фильтров
Корпус фильтра предназначен для фильтров Zortrax HEPA + Carbon, которые у меня уже были в наличии. Если вы используете разные фильтры, не стесняйтесь менять корпус фильтра в соответствии с вашими конкретными размерами.
НАСТРОЙКА ПРОГРАММЫ — ARDUINO IDE
#include
#include
const int fanRelay = 8; // Релейный контакт для включения/выключения вентилятора
const intledRed = 10; // Красный светодиод (мигает, когда вентилятор включен)
const intledGreen = 11; // Зеленый светодиод (есть помет)
const int minDistance = 200; // Порог обнаружения присутствия кошки (мм)
const int waitTime = 15000; // Время ожидания безопасности после выхода кота (мс)
const int fanRunTime = 150000; // Время удаления воздуха (мс)
Adafruit_VL6180X vl6180x = Adafruit_VL6180X(); // Создаем объект датчика
// Переменные состояния
Bool isCatInside = ложь; // Истина, если в данный момент обнаружен кот
Bool isWaitingExit = ложь; // Истина, если ожидается подтверждение ухода кота
беззнаковый длинный выходTimerStart = 0; // Время начала ожидания выхода
// Функция инициализации
недействительная настройка() {
// Устанавливаем контакты
pinMode (fanRelay, ВЫХОД);
pinMode (ledRed, ВЫХОД);
pinMode (ledGreen, ВЫХОД);
digitalWrite(fanRelay, LOW); // Убедитесь, что вентилятор изначально выключен
// Начинаем последовательную связь
Serial.begin(115200);
если (!vl6180x.begin()) {
Serial.println(«Не удалось обнаружить датчик VL6180X!»);
пока (1); // Остановимся, если датчик не найден
}
// Исходное состояние светодиода: зеленый включен (помет доступен), красный выключен
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, ВЫСОКИЙ);
}
// Функция основного цикла
недействительный цикл() {
int distance = vl6180x.readRange(); // Читаем текущее расстояние от датчика
// Если обнаружен кот (ближе порога)
если (расстояние < minDistance) {
если (!isCatInside) {
isCatInside = правда; // Обновляем состояние
Serial.println(«Кошка в туалетном лотке»);
digitalWrite(ledRed, ВЫСОКИЙ); // Включаем красный светодиод
digitalWrite(ledGreen, LOW); // Выключаем зеленый светодиод
isWaiting



























