Автоматическая кухонная подсветка по ультразвуковому датчику
- Войдите на сайт для отправки комментариев
Привет. Проект для управления светодиодной подсветкой.
При приближении человека на 1,2 метра плавно включается светодиодная лента на 12 Вольт. Если человек продолжает присутствовать в "поле зрения" датчика - лента светится. При покидании зоны через 30 секунд лента плавно гаснет. При поднесении руки к датчику на растояние менее 5 см - начинает увеличиваться яркость ленты и при достижении максимума сбрасывается на ноль.
Использованные компоненты: Arduino Pro mini, ультразвуковой дальномер HC-SR04, фоторезистор 1-20КОм, Мосфет с материнской платы, резистор 330 Ом.
Подключение: Датчик на пины 2,3,4,5. 2+, 3Trig, 4 Echo, 5-. Фоторезистор на + питания и A3. Резистор 330 Ом на А3 и минус. Мосфет затвор на 9, сток исток на минус и минус светодиодной ленты. Светодиодная лента вторым концом на +12В. Питание ардуино 12В на пин RAW.
#include "GyverFilters.h" GMedian testFilter; #include <EEPROM.h> #define trigPin 3 //Триггер #define echoPin 4 //Эхо #define Ledpin 9 //Светодиодная лента через транзистор годятся только 9 или 10 пины для ШИМ 32 кГц!!!! Иначе медленный ШИМ убъет глаза!! #define MinesPin 5 //- датчика #define PlusPin 2 //+ Датчика #define MinesPin 5 //- датчика #define delay_Led 30000 //Задержка выключения света в мс #define distOn 120//дистанция включения #define distSet 5//дистанция срабатывания #define analogSens 140// фотодатчик 0..1023. Не включаем подсветку днем byte LightLed = EEPROM.read(0);//Яркость ленты 0..255. При первом включении яркость максимальная 255 unsigned long next_time;//Переменная задержки выключения byte flag = LOW;// Флаг однократного плавного затухания void setup() { TCCR1A = 0b00000001; // 8bit TCCR1B = 0b00000001; // x1 phase correct//разгоняем ШИМ на 9,10 пинах до 31,4 кГц analogReference(INTERNAL);//устанавливаем максимальное измеряемое напряжение аналогового входа 1,1В. pinMode(trigPin, OUTPUT); //пин триггера в режиме выхода pinMode(echoPin, INPUT); //пин эхо в режиме входа pinMode(MinesPin, OUTPUT); digitalWrite(5, LOW); //питание датчика pinMode(PlusPin, OUTPUT); digitalWrite(2, HIGH);//питание датчика pinMode(9, OUTPUT);// светодиод } void loop() { if (testFilter.filtered(measure()) < distOn) {//Обнаружение if (analogRead(A3) < analogSens) { //Проверяем яркость вокруг после обнаружения for (byte i = 0; i < LightLed; i++) { analogWrite(Ledpin, i); delay(10); if (i < 20) delay (30); if (i < 5) delay (50); } flag = HIGH; presence: if (testFilter.filtered(measure()) < distOn) {// Светим пока присутствуем next_time = millis() + delay_Led; if (testFilter.filtered(measure()) < distSet) {//Управление ШИМ LightLed++; analogWrite(Ledpin, LightLed); if (LightLed == 255); delay (20000); //Остановка на макс яркости if (LightLed == 1); delay (5000); //Остановка на мин яркости goto presence; } else goto presence; } else goto Off; } else goto Off; } else goto Off; Off: if (next_time > millis())goto presence; for (int i = LightLed * flag; i != 0; i--) { analogWrite(Ledpin, i); delay(20); if (i < 20) delay (30); if (i < 5) delay (50); } if (flag) EEPROM.update(0, LightLed); flag = LOW; analogWrite(Ledpin, 0); } long measure() { //блок, измеряющий расстояние delay(50);//рекомендуемая задержка измерений digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(15); digitalWrite(trigPin, LOW); return (pulseIn(echoPin, HIGH) / 66); //получаем расстояние с датчика }
Библиотека цифровой фильтрации тут https://github.com/AlexGyver/GyverLibs
Немного подправил код.
Теперь 5-8 см увеличивают яркость, менее 5см уменьшает яркость. Также добавил защиту от переполнения millis.
добавил защиту от переполнения millis.
Нахуа? Она прекрасно защищена грамотным программированием. А если ее надо защищать принудительно, то чота не в порядке в консерватории, например, программирование вапще не преподавают.
Дык, школа-ж!
Дык, школа-ж!
Он неоспоримый бог микроконтроллеров. Принимайте "Бомбит" и больше НЕБОМБИТ))) Лучше б goto покритиковали. Гайвер себе такого не позволяет.
Ну а по серйозному, какая разница кто библиотеку фильтра собрал. Фильтрует себе тихонько и кушать не просит. Проект рабочий.
С тех пор, как Гиверу показали грубую ошибку в этой библиотеке (см. #52) он попытался её исправить (см. ту же функцию здесь). Но, исправил неправильно. Так что ... «фильтрует, не сомневайтесь» :=)
Лучше б goto покритиковали. Гайвер себе такого не позволяет.
Да без проблем - вместо goto нужный блок кода выносится в отдельную процедуру, которая и вызывается при необходимости. Не верите? Спросите у Гайвера ))
Я в их религиях не силен ))
здравствуйте
помогите пожалуйста разобраться со скетчем
,библиотеку по ссылке скачал положил в библиотеки,не компилируется,пишет ошибку
invalid use of template-name 'GMedian' without an argument list
Скетч - подключить библиотеку - добавить zip библиотеку.
спасибо p-a-h-a,попробывал этот вариант,теперь кампилятор ругается на это
может библиотека обновленная?
столько всего кампилировалось,а это ни какую,что вообще происходит
столько всего кампилировалось,а это ни какую,что вообще происходит
Попробуй компилировать, может удачнее будет.
вы какую версию GyverFilters использовали:
1.6
1.7
1.8
2.0
??
так вот и так и так пробовал.
столько всего кампилировалось,а это ни какую,что вообще происходит
Попробуй компилировать, может удачнее будет.
может кому пригодится:
GyverFilters V 1.3
файлы с расширением "h";"ccp"
положить туда где лежит файл скетча.
Скетч - подключить библиотеку - добавить zip библиотеку.
p-a-h-a вы можете поправить код,под новую библиотеку фильтров или помочь разобраться с этим?
ещё подсветка выключается и обратно включается,хотя и находишся в поле зрения дальномера 30 см (уставка 80 см)
задержка выключения 3 сек(3000)
ещё бы,индикацию ввести при регулировке яркости (на цыфровые пины)когда прибавляешь и убавляешь,и ночной режим,допустим в % от максимальной яркости,
может кому пригодится:
GyverFilters V 1.3
Интересно, кому может пригодится неработающий код? GyverFilters же цену на прошлогодний овёс выдаёт, это давно известно.
Да выкиньте вы этот фильтр, скользящее среднее вставьте вместо него да и все. А еще лучше на прерываниях сделать измерение с фильтром. Что было под рукой то и взял. Кому не нравится, тот сам делает устройство своим кодом. На коленке за пол часа набросал код да и все. Хоть кто то бы альтернативу предложил. Что ж все такие недоброжелательные профессионалы, диванные критики тут?
1.вариант подсветки супер,по памяти влезет в атмегу 8,клаас.
2.я вообще код не могу писать,тем более какие то фильтры вставлять)))
3.поэтому и задаю вопросы,вот так,можете попинать малехо))
проект классный ,забрасывать ненужно,на критиков обращать внимание не надо,пусть лают.
... Что было под рукой то и взял. ...
... На коленке за пол часа набросал код да и все....
Гайвер-стиль - "тяп-ляп - в продакшн?"
Что ж тогда удивлятся на реакцию сообщества?
Три светодиода добавились. На 10,11,12 пины. Два показывают в какую сторону яркость изменяется, третий (10) изменяет свою яркость в зависимости от расстояния. Гайвер фильтр заменен функцией скользящего среднего.
Во красавчик p-a-h-a .
А есть схема всего? Куда и чего цеплять?
А есть схема всего? Куда и чего цеплять?