RSS блога
Подписка
Подсветим темные углы - инфракрасный датчик движения (HC-SR501) с доработкой, часть 2
- Цена: $0.99
- Перейти в магазин
Я уже писал про плавное включение подсветки. Описанное в том обзоре решение хорошо себя зарекомендовало, и я решил его доработать и заказать платы в Китае. Что из этого вышло — под катом. Приглашаю самоделкиных, любителей попаять и всех кто хочет сделать среду своего обитания более комфортной.
Про данный датчик движения было немало обзоров, в том числе и мой. Поэтому очень кратко:
— максимальная дальность обнаружения движения под прямым углом к сенсору составила 6,7 метров;
— под углом в 160 градусов — 5 метров;
— крутилка Sx — меняет расстояние обнаружения под прямым углом с 2,8 до 6.7 метров;
— крутилка Tx — меняет время удержания 1 на выходе OUT c 6 до 290 секунд.
Обозначения крутилок есть не на всех платах поэтому вот они:
Перейдем к применению. Схему из прошлого обзора доработал до более функциональной:
Теперь на ней есть поддержка выключателя и датчика освещенности. Да, фоторезистор можно припаять непосредственно к самому исходному датчику, но: нужен будет подстроечный резистор, висящий в виде сопли и компактность будет под вопросом, к тому же, мне проще чувствительность настроить программно в широком диапазоне. Поэтому я не стал так делать, а подключил его к контроллеру. Второй момент, относительно прошлого варианта — возможность подключить выключатель. Иногда датчик считает что свет включать еще рано, но пользователю уже сейчас хочется больше света без его автоматического отключения — именно в этом случае поможет такое решение. Благодаря подключению выключателя к контроллеру, по проводу к выключателю текут очень малые токи, что повышает безопасность итогового решения.
Керамический конденсатор С1 гасит высокочастотные импульсные помехи во входном питании. Линейный стабилизатор ams1117-5 позволяет получить 5 вольт из исходных 12. Из-за малых токов, потребляемых устройством я решил использовать линейный преобразователь, на выходе которого также стоит керамический конденсатор и электролит. К PIR датчику подключается земля, питание и вход контроллера PB4. В качестве контроллера можно использовать ATTiny85, ATTiny45 или ATTiny13, программа не сложная и все они справятся. В качестве ключевого элемента для плавного включения света используется n-канальный полевой транзистор (MOSFET). Так как затвор, фактически, является конденсатором, то в моменты переключения транзистора через него текут большие токи (кратковременно). Для того чтобы ограничить эти токи в затвор ставиться ограничивающий резистор R3. Транзистор управляется малыми токами и если выход микроконтроллера, к которому подключен затвор, окажется в высокоимпедансном Z-состоянии полевик начнет открываться-закрываться непредсказуемо, вылавливая помехи. Для устранения такого поведения ножку микроконтроллера нужно «прижать» к земле резистором R2. Ключевой элемент подключен к выходу контроллера PB0. Ко входу контроллера PB1 подключен выключатель, который в включенном состоянии соединяет этот вход с питанием. Для избегания неопределенных состояний PB1 подтянут резистором R4 к земле. Ко входу PB2 (A1) подключен фоторезистор, позволяющий определить текущую освещенность. Этот вход также подтянут к земле резистором R5, который гарантирует присутствие нуля в темноте. Вход контроллера PB5, являющийся одновременно входом сброса контроллера в исходное состояние (RESET) подтянут к питанию резистором R1.
Изначально печатную плату я изготовил методом «лазерного утюга» (ЛУТ), но поняв что таких устройств требуется много и не только мне (многие обратились с просьбой изготовить такое для них), разработал плату под заводское производство в программе SprintLayout:
Такая конструкция без проблем позволяет подключать нагрузку порядка 5А (60 Вт).
Посмотрим на устройство, мне показалось удобнее всего видеть модель на сайте mayhewlabs.com/3dpcb:
Для программирования через Arduino, с предварительно прошитой программой ArduinoISP и подключенным электролитическим конденсатором между выводами RST и GND (емкость 10-100 мкФ):
Следует использовать такое подключение (10, 11, 12 и 13 — пины arduino):
В рабочем режиме нужно установить перемычки (указаны желтым) и, при необходимости, подключить фоторезистор и выключатель, черным показаны пины земли, а красным питания:
Такие платы были заказаны в Китае, на известном многим сайте dirtypcbs.com. Никаких проблем с платами на этот раз не было. Как видно, я использовал панелизацию для оптимального использования пространства.
Элементы я припаивал без разделения плат, так удобнее:
Флюс на картинке еще не смыт. Далее прямо к этой плате припаивается PIR-датчик.
Так выглядит готовое устройство:
Для программирования ATTiny85 в среде arduino рекомендую воспользоваться этой статьей. Если же у вас ATTiny13 то этой.
Далее зашиваем нехитрый код в контроллер:
Я оптимизировал код для возможности загрузки в ATTiny13. Краткие пояснения:
Наши используемые выводы контроллера (A1 — это вывод контроллера PB2):
LIGHT_BARRIER — порог освещенности, ниже которого при наличии сигнала датчика PIR включится свет (0-255 — диапазон значений).
SPEED_ON и SPEED_OFF — задают временной интервал между переходами к следующей градации при включении и выключении (в мс).
TIMEOUT_LED — интервал, в течении которого свет будет включен после последнего срабатывания детектора движения, задается в мс. Данное значение следует прибавлять ко времени выставляемом потенциометром на датчике.
TIMEOUT_DEBOUNCE — защитный интервал в мс, позволяет избежать дребезга контакта выключателя, если взять небольшое значение, то переходные процессы могут сказаться на включении и выключении, большое значение приведет к «тормозности» выключателя.
CurrentTime — значение текущего времени, позволяет избежать множественных запросов времени.
AutoTimeOn — время последней активности, обнаруженной PIR датчиком.
ButtonTimerDebounce — время изменения положения выключателя, для избегания дребезга контактов.
Для экономии памяти я использовал один байт для хранения всех признаков в программе — FLAGS, под каждый используемый признак задействован один бит, в частности: AUTO_ON_F (0) — бит, показывающий было ли автоматическое включение, MANUAL_ON_F (1) — бит, показывающий было ли ручное включение, AUTO_MODE_F (2) — бит, определяющий включен ли автоматический режим — сбрасывается при нажатии выключателя. Таким образом, для хранения признаков я задействовал 3 бита. По умолчанию: автоматический режим включен, остальные признаки не установлены.
При запуске программы производится инициализация портов: DDRB = 0b00000001 — означает, что все порты кроме нулевого используются как входы. PORTB = 0b00000000 — сбрасываем значение всех пинов.
Функция on() производит плавное включение нагрузки. Для того, чтобы перебрать 255 значений и в качестве переменной цикла использовать один байт, я использовал цикл do… while. Функция off() производит плавное выключение нагрузки. Я использовал analogWrite для выдачи нужного значения в порт управления, предварительно посмотрев ее реализацию — не увидев там особо лишнего кода, при желании можно оптимизировать, но для текущей программы памяти ATTiny13 вполне хватает.
В основном цикле (функция loop() ) вначале в переменную CurrentTime считывается текущее время, так как оно много где используется.
Далее обрабатывается код выключателя с защитой от дребезга контактов. Конструкция вида PINB & _BV(BUTTON_PIN) позволяет проверить текущее значение пина BUTTON_PIN на установленный высокий уровень более экономно по памяти, по сравнению с DigitalRead, принятой в среде arduino. Аналогично, FLAGS & _BV(MANUAL_ON_F) — позволяет проверить установлен ли нужный признак в переменной флага. Я реализовал программу так, что при включенном выключателе свет непрерывно горит и обработка сенсоров выключена, при выключенном — включается обработка сенсоров.
После этого идет обработка данных с PIR-сенсора, которая при необходимости включает и выключает свет, а также продлевает таймаут актуализируя значение AutoTimeOn при обнаружении движения.
Собственно, вот и вся нехитрая программная часть для данного устройства. Ее конечно можно оптимизировать по памяти и далее, но я в этом смысла не вижу (не люблю оптимизаций ради оптимизаций — к тому же в ущерб наглядности).
Использованные детальки:
PIR-датчик HC-SR501 10 — US $8.63
Контроллер attiny85 10 —US $7.70 либо attiny13 10 — US $3.00
Клеммная Колодка 20 — US $3.76
Полевой транзистор AOD472 D472 (MOSFET) 10 — US $8.51
Линейный стабилизатор ams1117-5 10 — US $2.63
Фоторезистор 20 — US $0.70
пины 10 — US $2.83
Резисторы и конденсаторы smd1206, а также электролит на 47 мкФ.
Плата изготовленная в домашних условиях или заказанная на заводе, у меня остались платы от заказа, при необходимости, могу выслать готовую или заготовку, пишите в личку.
Помимо светодиодной ленты или иного светильника, к данной плате можно подключить иное устройство 12 В, например, сирену или модем отправляющий сигнал хозяину, тогда это будет сигнализацией.
Видео работы из прошлого обзора (там есть монтаж в конкретных условиях прошлой версии):
Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной. всем света и добра!
Про данный датчик движения было немало обзоров, в том числе и мой. Поэтому очень кратко:
— максимальная дальность обнаружения движения под прямым углом к сенсору составила 6,7 метров;
— под углом в 160 градусов — 5 метров;
— крутилка Sx — меняет расстояние обнаружения под прямым углом с 2,8 до 6.7 метров;
— крутилка Tx — меняет время удержания 1 на выходе OUT c 6 до 290 секунд.
Обозначения крутилок есть не на всех платах поэтому вот они:
Перейдем к применению. Схему из прошлого обзора доработал до более функциональной:
Теперь на ней есть поддержка выключателя и датчика освещенности. Да, фоторезистор можно припаять непосредственно к самому исходному датчику, но: нужен будет подстроечный резистор, висящий в виде сопли и компактность будет под вопросом, к тому же, мне проще чувствительность настроить программно в широком диапазоне. Поэтому я не стал так делать, а подключил его к контроллеру. Второй момент, относительно прошлого варианта — возможность подключить выключатель. Иногда датчик считает что свет включать еще рано, но пользователю уже сейчас хочется больше света без его автоматического отключения — именно в этом случае поможет такое решение. Благодаря подключению выключателя к контроллеру, по проводу к выключателю текут очень малые токи, что повышает безопасность итогового решения.
Керамический конденсатор С1 гасит высокочастотные импульсные помехи во входном питании. Линейный стабилизатор ams1117-5 позволяет получить 5 вольт из исходных 12. Из-за малых токов, потребляемых устройством я решил использовать линейный преобразователь, на выходе которого также стоит керамический конденсатор и электролит. К PIR датчику подключается земля, питание и вход контроллера PB4. В качестве контроллера можно использовать ATTiny85, ATTiny45 или ATTiny13, программа не сложная и все они справятся. В качестве ключевого элемента для плавного включения света используется n-канальный полевой транзистор (MOSFET). Так как затвор, фактически, является конденсатором, то в моменты переключения транзистора через него текут большие токи (кратковременно). Для того чтобы ограничить эти токи в затвор ставиться ограничивающий резистор R3. Транзистор управляется малыми токами и если выход микроконтроллера, к которому подключен затвор, окажется в высокоимпедансном Z-состоянии полевик начнет открываться-закрываться непредсказуемо, вылавливая помехи. Для устранения такого поведения ножку микроконтроллера нужно «прижать» к земле резистором R2. Ключевой элемент подключен к выходу контроллера PB0. Ко входу контроллера PB1 подключен выключатель, который в включенном состоянии соединяет этот вход с питанием. Для избегания неопределенных состояний PB1 подтянут резистором R4 к земле. Ко входу PB2 (A1) подключен фоторезистор, позволяющий определить текущую освещенность. Этот вход также подтянут к земле резистором R5, который гарантирует присутствие нуля в темноте. Вход контроллера PB5, являющийся одновременно входом сброса контроллера в исходное состояние (RESET) подтянут к питанию резистором R1.
Изначально печатную плату я изготовил методом «лазерного утюга» (ЛУТ), но поняв что таких устройств требуется много и не только мне (многие обратились с просьбой изготовить такое для них), разработал плату под заводское производство в программе SprintLayout:
Такая конструкция без проблем позволяет подключать нагрузку порядка 5А (60 Вт).
Посмотрим на устройство, мне показалось удобнее всего видеть модель на сайте mayhewlabs.com/3dpcb:
Для программирования через Arduino, с предварительно прошитой программой ArduinoISP и подключенным электролитическим конденсатором между выводами RST и GND (емкость 10-100 мкФ):
Следует использовать такое подключение (10, 11, 12 и 13 — пины arduino):
В рабочем режиме нужно установить перемычки (указаны желтым) и, при необходимости, подключить фоторезистор и выключатель, черным показаны пины земли, а красным питания:
Такие платы были заказаны в Китае, на известном многим сайте dirtypcbs.com. Никаких проблем с платами на этот раз не было. Как видно, я использовал панелизацию для оптимального использования пространства.
Элементы я припаивал без разделения плат, так удобнее:
Флюс на картинке еще не смыт. Далее прямо к этой плате припаивается PIR-датчик.
Так выглядит готовое устройство:
Для программирования ATTiny85 в среде arduino рекомендую воспользоваться этой статьей. Если же у вас ATTiny13 то этой.
Далее зашиваем нехитрый код в контроллер:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// yurok (last change 25.09.2016)
// PIR - control (draft)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <util/delay.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PIN configuration
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define PIR_PIN PB4
#define LED_PIN PB0
#define BUTTON_PIN PB1
#define LIGHT_PIN A1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Set constants and global variables
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 0-255
#define LIGHT_BARRIER 200
#define SPEED_ON 12
#define SPEED_OFF 24
// for PIR sensor
#define TIMEOUT_LED 30000UL
// for button
#define TIMEOUT_DEBOUNCE 70
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Timers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned long CurrentTime = 0;
unsigned long AutoTimeOn = 0;
unsigned long ButtonTimerDebounce = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FLAGS
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 0 - auto on
// 1 - manual on
// 2 - auto mode
#define AUTO_ON_F 0
#define MANUAL_ON_F 1
#define AUTO_MODE_F 2
uint8_t FLAGS=0b00000100;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// init
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// pin 0 - is output, others is input
DDRB = 0b00000001;
PORTB = 0b00000000;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// main loop
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
CurrentTime = millis();
//////////////////////////////////////////////////////////////////////////
// BUTTON CONTROL
//////////////////////////////////////////////////////////////////////////
if((PINB & _BV(BUTTON_PIN)) && !(FLAGS & _BV(MANUAL_ON_F))){
if(ButtonTimerDebounce==0) ButtonTimerDebounce=CurrentTime;
if((unsigned long)(ButtonTimerDebounce + TIMEOUT_DEBOUNCE) < CurrentTime){
if(!(FLAGS & _BV(AUTO_ON_F))) on();
FLAGS=0b00000010; // set manual on
ButtonTimerDebounce = 0;
}
}else if(!(PINB & _BV(BUTTON_PIN)) && (FLAGS & _BV(MANUAL_ON_F))){
if(ButtonTimerDebounce==0) ButtonTimerDebounce=CurrentTime;
if((unsigned long)(ButtonTimerDebounce + TIMEOUT_DEBOUNCE) < CurrentTime){
off();
FLAGS=0b00000100; // set auto mode on
ButtonTimerDebounce = 0;
}
}else{
ButtonTimerDebounce = 0;
}
//////////////////////////////////////////////////////////////////////////
// PIR sensor
//////////////////////////////////////////////////////////////////////////
if(FLAGS & _BV(AUTO_MODE_F)){
if(PINB & _BV(PIR_PIN)){
if(!(FLAGS & _BV(AUTO_ON_F)) && analogRead(LIGHT_PIN) <= LIGHT_BARRIER){
on();
FLAGS |= _BV(AUTO_ON_F);
}
AutoTimeOn = CurrentTime;
}else if (!(PINB & _BV(PIR_PIN)) && (FLAGS & _BV(AUTO_ON_F)) &&
((unsigned long)(AutoTimeOn + TIMEOUT_LED)) < CurrentTime){
off();
FLAGS &= ~_BV(AUTO_ON_F);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// on led
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void on(){
uint8_t i = 0;
do{
analogWrite(LED_PIN, i);
_delay_ms(SPEED_ON);
}while (++i);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// off led
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void off(){
uint8_t i = 255;
do{
analogWrite(LED_PIN, i);
_delay_ms(SPEED_ON);
}while (i--);
}
Я оптимизировал код для возможности загрузки в ATTiny13. Краткие пояснения:
Наши используемые выводы контроллера (A1 — это вывод контроллера PB2):
#define PIR_PIN PB4
#define LED_PIN PB0
#define BUTTON_PIN PB1
#define LIGHT_PIN A1
LIGHT_BARRIER — порог освещенности, ниже которого при наличии сигнала датчика PIR включится свет (0-255 — диапазон значений).
SPEED_ON и SPEED_OFF — задают временной интервал между переходами к следующей градации при включении и выключении (в мс).
TIMEOUT_LED — интервал, в течении которого свет будет включен после последнего срабатывания детектора движения, задается в мс. Данное значение следует прибавлять ко времени выставляемом потенциометром на датчике.
TIMEOUT_DEBOUNCE — защитный интервал в мс, позволяет избежать дребезга контакта выключателя, если взять небольшое значение, то переходные процессы могут сказаться на включении и выключении, большое значение приведет к «тормозности» выключателя.
CurrentTime — значение текущего времени, позволяет избежать множественных запросов времени.
AutoTimeOn — время последней активности, обнаруженной PIR датчиком.
ButtonTimerDebounce — время изменения положения выключателя, для избегания дребезга контактов.
Для экономии памяти я использовал один байт для хранения всех признаков в программе — FLAGS, под каждый используемый признак задействован один бит, в частности: AUTO_ON_F (0) — бит, показывающий было ли автоматическое включение, MANUAL_ON_F (1) — бит, показывающий было ли ручное включение, AUTO_MODE_F (2) — бит, определяющий включен ли автоматический режим — сбрасывается при нажатии выключателя. Таким образом, для хранения признаков я задействовал 3 бита. По умолчанию: автоматический режим включен, остальные признаки не установлены.
При запуске программы производится инициализация портов: DDRB = 0b00000001 — означает, что все порты кроме нулевого используются как входы. PORTB = 0b00000000 — сбрасываем значение всех пинов.
Функция on() производит плавное включение нагрузки. Для того, чтобы перебрать 255 значений и в качестве переменной цикла использовать один байт, я использовал цикл do… while. Функция off() производит плавное выключение нагрузки. Я использовал analogWrite для выдачи нужного значения в порт управления, предварительно посмотрев ее реализацию — не увидев там особо лишнего кода, при желании можно оптимизировать, но для текущей программы памяти ATTiny13 вполне хватает.
В основном цикле (функция loop() ) вначале в переменную CurrentTime считывается текущее время, так как оно много где используется.
Далее обрабатывается код выключателя с защитой от дребезга контактов. Конструкция вида PINB & _BV(BUTTON_PIN) позволяет проверить текущее значение пина BUTTON_PIN на установленный высокий уровень более экономно по памяти, по сравнению с DigitalRead, принятой в среде arduino. Аналогично, FLAGS & _BV(MANUAL_ON_F) — позволяет проверить установлен ли нужный признак в переменной флага. Я реализовал программу так, что при включенном выключателе свет непрерывно горит и обработка сенсоров выключена, при выключенном — включается обработка сенсоров.
После этого идет обработка данных с PIR-сенсора, которая при необходимости включает и выключает свет, а также продлевает таймаут актуализируя значение AutoTimeOn при обнаружении движения.
Собственно, вот и вся нехитрая программная часть для данного устройства. Ее конечно можно оптимизировать по памяти и далее, но я в этом смысла не вижу (не люблю оптимизаций ради оптимизаций — к тому же в ущерб наглядности).
Использованные детальки:
PIR-датчик HC-SR501 10 — US $8.63
Контроллер attiny85 10 —US $7.70 либо attiny13 10 — US $3.00
Клеммная Колодка 20 — US $3.76
Полевой транзистор AOD472 D472 (MOSFET) 10 — US $8.51
Линейный стабилизатор ams1117-5 10 — US $2.63
Фоторезистор 20 — US $0.70
пины 10 — US $2.83
Резисторы и конденсаторы smd1206, а также электролит на 47 мкФ.
Плата изготовленная в домашних условиях или заказанная на заводе, у меня остались платы от заказа, при необходимости, могу выслать готовую или заготовку, пишите в личку.
Помимо светодиодной ленты или иного светильника, к данной плате можно подключить иное устройство 12 В, например, сирену или модем отправляющий сигнал хозяину, тогда это будет сигнализацией.
Видео работы из прошлого обзора (там есть монтаж в конкретных условиях прошлой версии):
Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной. всем света и добра!
Самые обсуждаемые обзоры
+73 |
3675
145
|
+53 |
3870
69
|
+34 |
2955
55
|
простой тест. что вы видите на листочке бумаги? Те кто знает этот тест, не пишите
Что на листочке бумаги???
И потом ну любой человек может кликнуть правой кнопкой на картинке и нажать строчку Найти картинку. Там и ответ будет
Но как только вы узнаете ответ. ты уже ничего другого на этом фото и не видите
Нажал. Ничего подобного не увидел. ЧЯДНТ?
P.S. На самом деле я понял, ЧТО Вы имеете в виду. Просто НЕ ВСЕ пользуются Google Chrom'ом. В Мозилле (он же FireFox, он же Огнелис) ничего подобного (скриншот прилагается). Так что НЕ ЛЮБОЙ и НЕ В ЛЮБОМ брауззеое.
Хром есть. И мне им иногда ПРИХОДИТСЯ пользоваться.
Но предпочитаю Мозиллу. На всех устройствах (синхронизация включена).
P.S. Ладно, не будем разводить холивар. Каким браузером пользоваться — дело вкуса и привычки.
Поверьте мне я еще даже и не начинал «хамить» как вы выразились.
Хотя я живу по принципу что два минуса это уже плюс
… пошёл я спать.
Костерок только не удачный выбрал, ну да ладно.
P.S. Хороший обзор — спасибо за труд.
вот я ничего другого там увидеть не смог :)
но мы действительно знаем чего ожидать в обзоре))
Котэ нет.
хотелось бы увидеть реализацию на esp8266.
для большего круга читателей без травления плат… исключительно на готовых изделих
п.с. опыта нет — начинающий…
вот пример его использования, если нужно поделку как в обзоре, то ключ нужен — примерно как в прошлом сообщении
У меня вопрос, как правильно подключить обозреваемый датчик?
п.с. обозреваемые датчики скоро должны прибыть ко мне, и пока обзор «горячий», спрашиваю… Заинтересовало плавное включение. В моём случае, управлять нужно светодиодными потолочными панелями с подержкой dimmer.
В случае подсветки — да и фиг с ним. А если где-то в сигнализации?
тем более «микроволновый» стоит копейки)
для управления включением света по WiFi?
во вторых — от этого ответа будет зависеть дальнейшая цепочка развития))
подключения других датчиков.
а минус зачем?
я кроме плюсов за избранные мне интересом обзоры вообще никакие оценки никому не ставлю ;)
возможно за бесполезность девайса или изворотливость в ответов…
Базовый функционал обойдётся дорого°, а вот всякие алгоритмические «плюшки» к нему потом прикручиваются относительно легко
_____
° времени — на — разработку
Wemos полноразмерный стоит дороже UNO, а даже если обойтись только модулем и будет разница в пару долларов экономии, то не копеечная ли это разница для оформления одного — тройки устройств?))
Обратите внимание на режим «Фотовид» и в нём переключатель сторон.
стало бы
в avr studio по крайней мере… неожиданно)
Я покупал вот это https://aliexpress.com/item/item/1pcs-New-USBASP-USBISP-AVR-Programmer-USB-ISP-USB-ASP-ATMEGA8-ATMEGA128-Support-Win7-64K/32653187143.html
и прищепку. Но у прищепки 10 контактов, а этой штуки 8 и 8 у ATTiny13А. Пробовал использовать даташит от ATTiny13А и подключать по отдельности каждый провод. Но у програматора оказалось 3 или 4 GND а у ATTiny13 всего 1 и я даже не смог считать содержимое микросхемы…
Цель такая, есть плата на которой установлена ATTiny13А, нужно с неё считать прошивку ( или что там залито ) и когда она „наё“ перепрошивать или перепаивать с предварительно заливкой копии прошивки.
Почти всё что нашел в нете — это работа с arduino, и мне кажется там очень сложно. Или тоже софт в стиле „считать/записать“? Именно софт вызывает вопросы.
Все заработало с первого раза.
Оно написано применительно к драйверам фонарей, но это значения не имеет. Думаю, готовые платы из обзора будут так же лихо прошиваться USB-программатором с прищепкой.
Еще одно руководство: budgetlightforum.com/node/36216
Если нужно на русском, то вот: forum.fonarevka.ru/showthread.php?t=4671 Но тут все размазано тоооонким слоем на десятки страниц.
Софт в стиле «считать/записать» — это avrdude, больше ничего не нужно. Но можно и Atmel Studio поставить, если привыкли к IDE.
P.S. Прищепка с 10 контактами? Хм… Сточить лишние не получится? А то могут мешать при присоединении при плотном монтаже.
Прищепку я уже раздербанил, там распиновка была в другом порядке.
https://aliexpress.com/item/item/Free-Shipping-New-1Pcs-SOIC8-SOP8-Flash-Chip-IC-Test-Clips-Socket-Adpter-BIOS-24-25/1844300545.html
aliexpress.com/item/5-8GHZ-Microwave-Radar-Module-Smart-Sensoring-Switch-6-9M-Home-Control/32602485648.html
в описании
мощность передатчика: < 2 МВт;
у меня на даче боюсь мощности не хватит :)
— это в отзывах
придётся дачу продавать для оплаты энергии.
На PIR-датчики теперь даже не смотрю.
— настраиваемое время программно (маловероятно, что за 15 минут вы не пошевелитись) — штатное время меня не устроило
— возможность подключения выключателя — включли в тяжелых случаях и все
а про выключатель!!! я буду придумывать скетчи мучать на форумах сообщество чтобы получить не рабочую хрень и поставить в обход выключатель-браво умный дом российского разлива. я думаю сделать вместо датчика движения датчик расстояния в проёме двери. но тут проблема если более 1 человека. возможно датчик должен быть направлен по направлению от кухни. и тогда заходящего в кухню можно определить по приближению к датчику, а выходящий с кухни будет появляться в датчике внезапно. и на основании этого завязать алгоритм программы
2 — Какую хрень (рабочую или нет) сделаете — такая и будет, эта штука работает — мне удобно вот и поделился
пункт 2 вы скорее всего получите считая людей на входе :)
2) «лазерные указки» тогда Вам в помощь))
выше я уже упоминал «UWD», и наоборот считаю делать такое логичнее всего именно на нём…
у меня в авто стоит версия PIT на сигналке, так вот она от пота на лбу не срабатывает, исходя из неё я выводы и делал ;)
сам хочу HB100 взять на пробу в ещё два авто)
WiFi — кстати тоже принципиально не юзаю :))
Через щель дверцы микроволновки утекает при использовании больше.
WiFi тоже работает кратковременно, максимальная мощность 800 мВт, но средняя намного меньше, у меня он нагружен на 0.01% от максимальной способности (раз в несколько дней фильм через него смотрим), и мощность в настройках выставил 10%, для дома хватает.
Опять же постоянные 2 мВт от радиодатчика могут дать больше в общем в доме, чем WiFi, который почти всегда «молчит».
Я вижу только 2 варианта — либо я включаю свет 1 раз и он там потом горит круглосуточно, либо он включается сам когда нужно и выключается, когда получится.
Второй вариант более экономичный и при этом не доставляет никаких неудобств.
У меня светильники по 70 Ватт стоят, лишние несколько минут никого не разорят.
Очень даже автоматизация, потому что в прихожке, ванне и кухне выключателей вообще нет.
это разве что, если в ванной заснуть часа на пол — оно конечно вырубится… а так на кухне / коридоре / ванной совсем без движений за 5 минут как-то не обходится…
Вы вдвоём меня очень удивили)
видео заснять что-ли?))
Ультразвуковой если и заработает — потребует десятков часов программирования. Но у меня ощущение, что баги будут все равно. Если вы знаете как сделать точно и дешево — продайте магазинам, они будут считать покупателей на входе.
с UWD будет возня по прошивке + нужна ардуина, но это не так всё дорого и долго, если есть нужда / стремление — то почему бы и нет…
при этом мне не известно, какой обхват у HС-SR04, если их там придётся цеплять на несчастную кухню в 4ре угла, так это вообще убого как-то выйдет результатом))
диммер позволяет плавно включить руками нагрузку
Хотелось бы какой-нибудь готовый модуль, скажем, чтобы вот такой светильник ночью плавно включал свет, а не бил по глазам.
На али есть куча светильников с сенсором движения и с литиевой батарейкой:
https://aliexpress.com/item/item/DBF-4leds-Rechargeable-PIR-Motion-Sensor-LED-Night-Light-Lamp-With-For-Hallway-Pathway-Staircase/32707449363.html
https://aliexpress.com/item/item/2016-New-Rechargeable-PIR-12-LED-Auto-Motion-Sensor-Night-Light-for-bedroom-bathroom-kitchen-White/32720318857.html
https://aliexpress.com/item/item/Free-shipping-wireless-PIR-motion-sensor-night-lights-rechargeable-Led-Kids-Lamp-Bulb-Nightlight-for-Children/32727393180.html
и т.д.
Там одна батарея АА:)
если разобраться, то он и не конкретизировался конкретно на этом светильнике))
при большом желании и ради спора, можно туда повесить литий через гасящий резистор и всё будет нормально работать ;)
Зачем придираться по мелочам?
А вот этот
работает без замечаний
15 минут потратил толку никакого блин((
Там придумана такая логика.
Сигнал с датчика движения — плавно зажигается свет
Больше какого то времени нет сигнала с датчика движения — свет тухнет на половину
И только после следующего таймаута свет плавно гаснет до конца.
Этот период, когда свет притух наполовину нужен чтобы пошевелиться и дать сигнал датчику.движения
На мой взгляд, вполне себе нормальная логика для дежурного света. В полной темноте не остаешься. Раз уж в управлении микроконтроллер, то можно и не такое придумать
2 — датчик освещенности с легкой сменой чувствительности в заданном диапазоне
3 — плавное включение и выключение
4 — ручной выключатель
вот для этого и сделал
Я добавил две функции в подобное
1. Логарифмическую зависимость регулировки ШИМ в связи с нашим устройством глаза.
2. Еще одну кнопочку на плате (нога свободная есть у тиньки), через которую можно задавать параметры (время нарастания и убывания ШИМ, время горения). По принципу настройки машинной сигнализации с брелка. Можно использовать прибор более универсально и не нужно постоянно программатором лазить на плату
Логарифмическую зависимость вполне можно, позже, пока результат устраивает
Кому как. Я не люблю однокнопочный интерфейс, мне проще выставить программатором
Правда можно задавать параметры подстроечными или переменными резисторами, как здесь:
64 байт у 13-й тиньки вполне хватит сохранить конфигурацию.
+ за подсказку.
Я обычно тоже 100Ом ставлю, хотя наверное можно и 10К.
мегаэксперт считает что там вообще не нужно резисторов :)
схемка из обзора трудится исправно
У меня без него любая тинька и мега шьется
У меня похожая схема более года работает на кухне.
Чтобы схема, при необходимости работала в светлое время суток, выключатель датчика освещенности поставил в разрыв фоторезистора, сэкономив при этом вывод микроконтроллера.
Тоже хочу переделать ее на 13-ю тиньку. Программу переделал, на монтажной плате все работает, но никак руки не дойдут сделать печатную плату.
Выключатель в разрыв фоторезистора будет его отключать, но не включать свет, если вас такая логика устраивает, норм. В данном случае, выключатель независим от пир, можно включить и не двигаться пару часов, свет будет гореть. Совсем другая логика. Ну и экономить пины в данном случае смысла не вижу, а у вас вообще целая ардуино — зачем экономить там, даже не знаю
По поводу экономии вывода — я имел ввиду Вашу тиньку.
Ну и мне не нужна вечная ночь — мне нужен выключатель
хотя конечно повторить обозреваемое не взялся бы,
я готовенькое больше практикую :-)
Первая поделка на ардуино. И заработала, блин с первого раза!
добрался до домашнего ноута. опишу свою поделку. На полноценный обзор вряд ли потянет, поэтому скромно в камментах.
Схема подключения накидана в каменте
Датчик — сабжевый
Мосфет, понижайка, ардуино нано, первые попавшиеся фоторезисторы. 12В питальник из запасов от мертвого роутера.
Скетч (из статьи на гиктаймс. Убрал лишь обработку фоторезистора. Он замечательно обрабатывается самим датчиком. куда припаять — ниже на картинке видно):
ну и тут все таки иное устройство чем в обзоре
Повторюсь, это моя первая поделка на Ардуино. Устройство категорически иное, но выполняет аналогичные вещи.
Я и многие здесь вряд ли когда-нибудь хотя бы попытаются воспроизвести Ваши изделия. Как бы ни хотелось, но подготовка не та.
С мая месяца (дата публикации вышеупомянутой статьи на ГТ) вынашивал идею автоматический подсветки плинтуса. Но даже там все было сложно для меня. Более того, критика в камментах навела меня на поиски альтернативного безардуинового решения. Я донимал знакомых хоть как-то связанных со схемотехникой, понакупил радиодеталек, но в итоге собрал-таки схему на ардуино, ибо так проще. Код не мой. Я вообще в сях как свинья в апельсинах — это же С язык, верно? Я когда-то в универе на паскале кодил… Разобраться в готвом коде с ГТ было не сложно, но сам бы я вряд ли его написал. Я просто выбросил обработку фоторезистора, ибо впаял его в датчик.
В итоге я получил то, что хотел. И если кто-то ищет аналогичное решение, но не готов травить плату и делать Ваш вариант устройства, но справится с моим — я только за.
хорошо получилось
просто странно выглядит код, когда с цифрового датчика с помощью ацп читают данные
motion = analogRead(motionSensorPin);
и еще ряд моментов
Впрочем — работает, разработчика устраивает — и хорошо
впайка в пир фоторезистора ограничивает возможности настройки порогов… хорошо если они у вас удачно совпали с требуемыми
Можете просмотреть переписку ниже мою с «SterX», может подскажите или дополните если я ерунду говорю.
Спасибо!
Вот все что есть на руках:
В первом случае пригодится одна из двух одинаковых AMS1117 для ее питания.
Во втором же они лишние и питаться она будет от LM2596, что выше на фото. Обязательно прежде, чем подавать питание, настроить напряжение на ней!
И не вижу фоторезистора. Без него схема будет работать при любом освещении. С резистором — только в темноте.
Итак, резюмируя:
1. Ищем UART
2. Разбираемся с напряжением питания ардуины
3. Думаем, нужен ли фоторезистор.
4. Источник питания 12В и светодиодная лента уже есть?
Читаю, что можно и запитать от 12В через «RAW» arduino.ua/ru/hardware/ProMini
Сейчас буду заказывать уарт для прошивки «CP2102 Module».
А ленты и блоков питания хватает… этого добра набрался) 5630, 5730, 3014, 3528…
А насчет фоторезистора, то решил без него. Это коридор, пускай всегда вкл при наличии движения.
ПС. Смущает лишь одно. Блок 12В всегда включен( на долго ли его хватит…
Может быть, стоит потренироваться на ардуино нано? Она попроще — прошиваеться по USB безо всяких UART…
Насчет 12 В питания — не знаю. надо пробовать или гуглить.
Запилил видео и схему набросал, чтобы тебе проще было.
Отладку кода — плавность включения/выключения и задержку буду делать когда соберу уже по месту. Пока ждал запчасти — решил переехать в частный дом. Вот там и развернемся :)
Плавность чуть отредактировать, а то быстро вкл/выкл)
Спасибо за потраченное на меня время)
Просто вкл и выкл по датчику свети и движение делается с помощью одного девайса да 3 дол и там паяльник и комп не нужен…
Верно ведь? Или у Вас другие цели?
И он работает. днем датчик молчит, в темноте — работает
Пара вопросов: как панелизацию в Спринте сделал и как функции On-Off работают, переполнения со сбросом в do не происходит? Ну видимо нет раз работает.
Совет: делал проект другой на Attiny с компактным кодом. Один и тот же скетч скомпилированный в Arduino IDE под Linux в виде готового .hex весил на 500 байт меньше, чем скетч, скомпилировааный в Винде. Наверное сам компилятор по другому работает в никсах.
так при переполнении 0 будет, про линукс гляну — когда раньше смотрел одинаково было
Датчик включит блок питания, а по светодиодам уже отдельно надо думать, по схеме включения и прочему, то есть датчик тут не причем