Неправильно срабатывает датчик движения

Товарищи, нужна помощь. В общем идея следующая. При входе на кухню включается подсветка на адресной светодиодной ленте. Используется датчик движения sr-505, датчик освещения ky-018 и две ленты ws-2812.
Вот схема подключения:


Вот код

int pirPin = 3; // назначение пина для ИК датчика
int value;// переменная для хранения положения датчика
int sensorvalue;// переменная для хранения датчика движения
// лента
#define LED_PIN1 2     // пин подключения первой ленты
#define LED_PIN2 4     // пин подключения второй ленты
#define LED_NUM 60    // количество светодиодов
  int countR=30;
  int countL=29;
  int mode=2; // режим движения 0 - от середины к краю, 1 - от края к середине, 2 - выключение
  int i;
  long previousMillis;  // храним время последнего переключения светодиода
  long interval = 30; //скорость движения светодиода
  long worktime = 20000; //время работы ленты до выключения
  byte sensorPin = A0; // переменная входа А0 датчика освещения
  
#include "FastLED.h"
CRGB leds[LED_NUM];
void setup() {
  FastLED.addLeds<WS2812, LED_PIN1, GRB>(leds, LED_NUM); // первая лента
  FastLED.addLeds<WS2812, LED_PIN2, GRB>(leds, LED_NUM); // вторая лента
  FastLED.setBrightness(255);
  Serial.begin (9600);

  Serial.print("countR=");
Serial.println(countR);
Serial.print("mode=");
Serial.println(mode);

pinMode (pirPin, INPUT) ; // пин датчика движения работает как вход
pinMode(sensorPin, INPUT); // пин датчика освещения работает как вход
}

void loop () {
 sensorvalue = analogRead(sensorPin); // значение с датчика освещения в диапазоне от 0 до 1023
value = digitalRead (pirPin) ;// чтение значения с датчика движения 
if (value == HIGH && sensorvalue>900 ) // когда с ИК сенсора появляется высокий уровень и уровень датчика света больше значения, светодиод загорается
  {mode=0;
    Serial.println("movement");}
  else
  { mode=2;
  Serial.println("no movement"); }



if (mode==2) // выключение
  {
  for (int i = 0; i < LED_NUM; i++)
  leds[i] = CHSV(0, 0, 0);
  FastLED.show();
  //mode=1;
  }  


if (mode==0) // от середины до конца

{delay (2000); // пауза 2 секунды перед включением
  do 
{    
  {leds[countR] = CHSV(255, 0, 255);
  leds[countL] = CHSV(255, 0, 255);
  leds[countR - 3] = CHSV(0, 0, 0);
  leds[countL + 3] = CHSV(0, 0, 0);
  FastLED.show();
  delay (30);
  countR++;
  countL--;
  }
   // Serial.print("countR=");
//Serial.println(countR);
}
  while (countR < LED_NUM);
mode=1;
}
Serial.print("mode=");
Serial.println(mode);


if (mode==1) // от конца к середине
  {
  do {
  leds[countR] = CHSV(255, 0, 255);
  leds[countL] = CHSV(255, 0, 255);
  //leds[countR + 1] = CHSV(0, 0, 0);
  FastLED.show();
  delay (30);
  countR--;
  countL++;
  }
  while (countR > LED_NUM/2-1);
  delay(120000); // сколько времени будет включенной
  }
{mode=2;};




Serial.print("countR=");
Serial.println(countR);
Serial.print("mode=");
Serial.println(mode);
Serial.print("sensorvalue=");
Serial.println(sensorvalue);
//mode=2;


}

Проблема следующая. Когда я всё это настраивал и ардуина была подключена к компу через usb то всё работало нормально. Лента включалась если пройти мимо датчика движения и если темно. Когда я перетащил всё на кухню и подключил ардуину к блоку питания, то лента перестала выключаться. Отрабатывает она по алгоритму, зажигается как и прописано в коде. Но как только она гаснет по истечении установленного времени, то тут же включается снова. Думал датчик движения цепляю, для эксперимента закрыл его в шкаф, там он точно не мог бы сработать, но всё равно лента включается. Подскажите пожалуйста в какую сторону копать.
Я новичок в ардуине, это мой первый опыт и я не программист, поэтому если можно объясните всё на пальцах.

Привет.
Ну, а сам то разве не догадываешься, что сначала у тебя ардуино и силовая часть питались от разных блоков питания…

Догадываюсь. Но что с этим делать не понимаю. Говорю же я новичок.

Конкретно ! Как подключена плата ардуино сейчас ? Что куда …
Если как на картинке, то сколько вольт идет от БП на ардуино ?
5 вольт от БП (он же 5 вольтовый у вас раз лена 2812 ?) надо подавать на ножки 5V ардуино.

Думается нужно разбираться с твоим блоком питания. Как минимум - фильтр в цепь питания ардуино.
И да, что за БП?

Да, сейчас как на картинке. На ардуино как и на ленту идёт 5В.

На тот разъём ардуины пять вольт подавать нельзя, туда минимум7 вольт

БП вот такой

А что за фильтр и как подключать?

Не надо фильтр ! Подайте 5 вольт на входы 5V ардуино (там же где подключены датчики), а из гнезда отключите. В это гнездо подают 7+ вольт и они идут на преобразователь, на выходе которого получается 5 вольт. Вы же подали туда 5 вольт и на выходе получили ХЗ сколько 3-4 нестабильных вольт …

На оба подавать?

Он один, запараллеленный. На любой

Попробую. Спасибо!

Всё получилось. Работает :slight_smile: Всем большое спасибо за помощь!