Скетч и схема не работает (PIR, датч. освещенности, полевик) постоянно светит светодиодная лента
- Войдите на сайт для отправки комментариев
Добрый день. Сделал подсветку, соединил как на схеме, при подключении постоянно светит лента, т.е. как только мы подаем 12 вольт лента включается и светит постоянно ни на что не реагируя. Светодиодную ленту пробовал 0,2 метра и 0,7 метра. Сопротивления оба по 0,5 ватта. Полевик не проверял (не знаю как это сделать). Датчик движения и освещенности проверял отдельно. В чём может быть дело? Заранее огромное спасибо.
#include <Arduino.h>
#include <stdint.h>
#define PIN_MOTIONONE 7 // Ноги для ИК датчиков
// #define PIN_MOTION02 6
#define PIN_NIGHT A0 // Нога для сенсора освещенности
#define PIN_PWM 4 // Сюда вешаем MOSFET
#define TIME_DELAY_LIGHT 1100 // Задержка включения подсветки
#define SENSOR_NIGHT 800 // Если выше - то ночь;
#define LIGHT_NIGHT 70 // Яркость свечения ленты
#define DELAY_TO_NEXT_LIGHT 30 // Плавность изменения света
bool nightNow = false; // Флаг ночь
bool gotMotion = false; // Флаг движение
bool lightIsSwitchedOn = false; // Флаг включения подсветки
uint8_t sensorA=0, sensorB = 0, sensorStep = 0; // Разные счетчики
int sensorNow;
unsigned long timeToNextDecision = 0; // Когда принять решение о выключении
void setup()
{
}
void loop()
{
//////////////////////// Check day or night //////////////////////////////////
if (!lightIsSwitchedOn) { // Проверяем день/ночь только если подсветка выключена
sensorNow = analogRead(PIN_NIGHT);
if (sensorNow > SENSOR_NIGHT) {
sensorA++;
}
if (sensorNow > (SENSOR_NIGHT + 5)) {
sensorB++;
}
sensorStep++;
if (sensorStep == 20) {
if (sensorA >18) {
nightNow = 1;
digitalWrite(13,1);
}
if (sensorB == 0) {
nightNow = 0;
digitalWrite(13,0);
}
sensorStep = 0; sensorA = 0; sensorB = 0;
}
}
///////////////////////// Night now ////////////////////////////////////
if (nightNow) {
if ( (digitalRead(PIN_MOTIONONE)) ) gotMotion = true;
if((!lightIsSwitchedOn) && (gotMotion)) {
for(int i = 0; i <LIGHT_NIGHT; i++) {
analogWrite(PIN_PWM, i);
delay(DELAY_TO_NEXT_LIGHT);
}
lightIsSwitchedOn = 1;
gotMotion = 0;
timeToNextDecision = millis() + TIME_DELAY_LIGHT;
}
if((!gotMotion) && (lightIsSwitchedOn) && (millis() > timeToNextDecision)){
for(int i = LIGHT_NIGHT; i >0; i--) {
analogWrite(PIN_PWM, i);
delay(DELAY_TO_NEXT_LIGHT);
}
analogWrite(PIN_PWM, 0);
lightIsSwitchedOn = 0;
timeToNextDecision = 0;
}
if((gotMotion) && (lightIsSwitchedOn) && (millis() > timeToNextDecision)) {
timeToNextDecision = millis() + TIME_DELAY_LIGHT;
gotMotion = 0;
}
}
}
Не могу удалить или переименовать тему, текст сообщения попал в код.
Для проверки полевика...
Вместо полевика просто подключи светодиод через резистор 1кОм.
На схеме у Вас ошибочка или датчик освещености такой?
GND и DO - перепутаны местами... Может от этого у Вас постоянно НОЧЬ!
Хотя Судя по скетчу сигнал должен подаватся аналоговый с датчика, а не цифровой после компаратора.