Два датчика движения, с логикой

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Помогите пожалуйста, затеял задачу, а решить не могу:

На проходе в магазин хочу поставить 2 датчика движения, которые срабатывают от входа 1, 2 - включается mp3 плеер с записью приветствия посетителя. на реакцию одновременно сработавших или 2,1 - никакой реакции быть не должно. Также, при срабатывании датчиков хотел подключить диоды, чтобы видеть работу датчика.

у меня ардуина нано, 2 pir датчика и mp3 плеер с динамиком.

Вот код, с которым плеер срабатывает когда одновременно срабатывают оба датчика.

#include "DFRobotDFPlayerMini.h"
#include "SoftwareSerial.h" // программный порт
DFRobotDFPlayerMini Player; // сокращаем для удобства
int pirPin_1 = 4;  // инициализируем пин для получения сигнала от пир
int pirPin_2 = 5;  // инициализируем пин для получения сигнала от пир
int ledPin_1 = 6;
int ledPin_2 = 7;
 
void setup()
{
  SoftwareSerial Serial2(10, 11); // RX, TX
  Serial2.begin(9600);
  pinMode(pirPin_1, INPUT); //Устанавливаем PIR как вход
  pinMode(pirPin_2, INPUT); //Устанавливаем PIR как вход
  pinMode (ledPin_1, OUTPUT);
  pinMode (ledPin_2, OUTPUT);
  digitalWrite(pirPin_1, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(pirPin_2, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(ledPin_1, LOW);
  digitalWrite(ledPin_2, LOW);
  pinMode(8, INPUT);//8 пин подключаем на busy (16 pin mp3 модуля)
  Player.begin(Serial2);//Запускаем плеер
  Player.volume(20);  //Устанавливаем громкость от 0 до 30
  Player.play(1);  
}
 
void loop()
{
  if(digitalRead(pirPin_1)==HIGH && digitalRead(pirPin_2)==LOW)
          { 
          if(digitalRead(pirPin_1)==HIGH && digitalRead(pirPin_2)==HIGH && digitalRead(8)==HIGH)
                 {
                  Player.play(1);
                 }     
          } 
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, что ж Вы так? Уж полгода на форуме, а код вставлять не научились. Вставьте нормально.

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016
#include "DFRobotDFPlayerMini.h"
#include "SoftwareSerial.h" // программный порт
DFRobotDFPlayerMini Player; // сокращаем для удобства
int pirPin_1 = 4;  // инициализируем пин для получения сигнала от пир
int pirPin_2 = 5;  // инициализируем пин для получения сигнала от пир
int ledPin_1 = 6;
int ledPin_2 = 7;
 
void setup()
{
  SoftwareSerial Serial2(10, 11); // RX, TX
  Serial2.begin(9600);
  pinMode(pirPin_1, INPUT); //Устанавливаем PIR как вход
  pinMode(pirPin_2, INPUT); //Устанавливаем PIR как вход
  pinMode (ledPin_1, OUTPUT);
  pinMode (ledPin_2, OUTPUT);
  digitalWrite(pirPin_1, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(pirPin_2, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(ledPin_1, LOW);
  digitalWrite(ledPin_2, LOW);
  pinMode(8, INPUT);//8 пин подключаем на busy (16 pin mp3 модуля)
  Player.begin(Serial2);//Запускаем плеер
  Player.volume(20);  //Устанавливаем громкость от 0 до 30
  Player.play(1);  
}
 
void loop()
{
  if(digitalRead(pirPin_1)==HIGH && digitalRead(pirPin_2)==LOW)
          { 
          if(digitalRead(pirPin_1)==HIGH && digitalRead(pirPin_2)==HIGH && digitalRead(8)==HIGH)
                 {
                  Player.play(1);
                 }     
          } 
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

что то условие странно написано

кстати вместо 13, 14, 17, 18 строки проще написать INPUT_PULLUP. и сразу понятно что вход с подтяжкой

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Спасибо, но всёже... Кто нибудь может помочь?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

возьми листок ручку и продумай что и когда должно происходить по каким условиям. когда будешь четко представлять можно будет оформить в коде

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Gurish пишет:

Спасибо, но всёже... Кто нибудь может помочь?

Вам jeka_tm уже помог! 

Он ведь сказал, что у Вас бредовое условие! Посмотрите на него сами и исправьте. Какой помощи Вы ещё ожидаете?

Или это не Ваш код и Вы вообще не понимаете, что там написано?

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Вот логика: 

после импульса с 1 датчика включается таймер в ожидании импульса второго датсика на 1000мс. если импульса нет, всё повторяется (ложь), если импульс второго датчика получен, срабатывает MP3 плеер (истина). Как прописать такое в программе?

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

понимал бы, не спрашивал.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

начинай писать условие я тебе подскажу. весь код не кидай только условие

а вообще почитай этот пост и ниже

http://arduino.ru/forum/programmirovanie/taimer-dlya-teplitsy?page=1#com...

это должна быть так построена твоя логика. вроде достаточно доступно объяснил. там и millis есть

griin
Offline
Зарегистрирован: 19.04.2015

Поставь реверсивный счетчик на лазерах. 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Gurish пишет:

Вот логика: 

после импульса с 1 датчика включается таймер в ожидании импульса второго датсика на 1000мс. если импульса нет, всё повторяется (ложь), если импульс второго датчика получен, срабатывает MP3 плеер (истина). Как прописать такое в программе?

 

Попробуйте так

#define pirPin_1 4  // инициализируем пин для получения сигнала от пир
#define pirPin_2 5  // инициализируем пин для получения сигнала от пир
#define ledPin_1 6
#define ledPin_2 7

unsigned long currentTime;
bool flagTime = 0;

void setup() {
  pinMode(pirPin_1, INPUT); //Устанавливаем PIR как вход
  pinMode(pirPin_2, INPUT); //Устанавливаем PIR как вход
  pinMode (ledPin_1, OUTPUT);
  pinMode (ledPin_2, OUTPUT);
  digitalWrite(pirPin_1, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(pirPin_2, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(ledPin_1, LOW);
  digitalWrite(ledPin_2, LOW);
}

void loop() {
  if (digitalRead(pirPin_1) == HIGH && !flagTime) {
    currentTime = millis();
    flagTime = 1;
  }
  if (flagTime && millis() - currentTime <= 1000) {
    if (digitalRead(pirPin_2) == HIGH) {
      digitalWrite(ledPin_1, HIGH);
      //      Player.play(1);
    }
  }
  else flagTime = 0;
}

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

vosara пишет:

Попробуйте так

#define pirPin_1 4  // инициализируем пин для получения сигнала от пир
#define pirPin_2 5  // инициализируем пин для получения сигнала от пир
#define ledPin_1 6
#define ledPin_2 7

unsigned long currentTime;
bool flagTime = 0;

void setup() {
  pinMode(pirPin_1, INPUT); //Устанавливаем PIR как вход
  pinMode(pirPin_2, INPUT); //Устанавливаем PIR как вход
  pinMode (ledPin_1, OUTPUT);
  pinMode (ledPin_2, OUTPUT);
  digitalWrite(pirPin_1, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(pirPin_2, LOW);//По умолчанию PIR в состояние 0
  digitalWrite(ledPin_1, LOW);
  digitalWrite(ledPin_2, LOW);
}

void loop() {
  if (digitalRead(pirPin_1) == HIGH && !flagTime) {
    currentTime = millis();
    flagTime = 1;
  }
  if (flagTime && millis() - currentTime <= 1000) {
    if (digitalRead(pirPin_2) == HIGH) {
      digitalWrite(ledPin_1, HIGH);
      //      Player.play(1);
    }
  }
  else flagTime = 0;
}

Уважаемый vosara, подскажите по своему коду плиз: когда  условие в if,  в 25 строке, станет равно true?

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

А у меня два вопроса - датчики движения запомнают свое состояние или нет и как долго далжен играть мп3?

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Датчикам запоминать ничего не нужно, мелодия играет 4 сек., или 1 mp3 трэк

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

А что делать, если во время этих 4-х секунд еще раз сработает первый датчик?

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

T.Rook пишет:

Уважаемый vosara, подскажите по своему коду плиз: когда  условие в if,  в 25 строке, станет равно true?

После сработки первого датчика - флаг=1 и запоминаем время милис
25я строка проверяет - флаг на единицу и прошедшее время (после запоминания)меньше 1 секунды? Если да то - true
Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

работает последовательная реакция датчиков, но в обе стороны, а нужно в одну.

Alex9944
Offline
Зарегистрирован: 30.10.2018

Добрый день уважаемый Vosara,
помогите пожалуйста в моём случае. У меня есть код и все прекрасно работает. Свет для коридора.
Но я хочу добавить ещё 2 датчика движения на пин. 2 и 4. Понимаю что нужно прописывать для каждого пина свой код и на этом всё! Код оигинальный который работает:
#include <Bounce2.h>

#define piro 8
#define mosfet 9
#define foto A0
#define pot A1
#define switch1 7

#define nightVAL 200
#define minPWM 5
#define smooth 7

byte pwm;

Bounce debouncer = Bounce();

void setup() {

pinMode (piro, INPUT);
pinMode (mosfet, OUTPUT);
pinMode (switch1, INPUT_PULLUP);

debouncer.attach(switch1);
debouncer.interval(5);

TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;

}

void loop() {

debouncer.update();

pwm = map (analogRead (pot), 0, 1023, 0, 255);

if (digitalRead (switch1) == LOW)
    if (debouncer.fell())
       {
        for (int i1 = 0; i1 < pwm; i1++)
         {
          analogWrite (mosfet, i1);
          delay(smooth);
         }
       }
    else if (debouncer.read() == LOW)
       {
        analogWrite (mosfet, pwm);
       }

if (digitalRead (switch1) == HIGH)    
    if (debouncer.rose())
       {
        for (int i2 = pwm; i2 >= 0; i2--)
         {
          analogWrite (mosfet, i2);
          delay (smooth);
         }
       }
    else if (debouncer.read() == HIGH)
       {
        if ((analogRead (foto) < nightVAL) && (digitalRead (piro) == HIGH))
           {
            analogWrite (mosfet, minPWM);
           }

        else if (digitalRead (piro) == LOW)
           {
            digitalWrite (mosfet, LOW);
           }
       }
}

По вашей аналогии добавил пины и переименовал 8, но что то не то?

#include <Bounce2.h>

#define piro_1 8
#define piro_2 2
#define piro_3 4
#define piro1 10
#define mosfet 9
#define foto A0
#define pot A1
#define switch1 7

#define nightVAL 200
#define minPWM 5
#define smooth 7

byte pwm;

Bounce debouncer = Bounce();

void setup() {

pinMode (piro_1, INPUT);
pinMode (piro_2, INPUT);
pinMode (piro_3, INPUT);
pinMode (mosfet, OUTPUT);
pinMode (switch1, INPUT_PULLUP);

debouncer.attach(switch1);
debouncer.interval(5);

TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;

}

void loop() {

debouncer.update();

pwm = map (analogRead (pot), 0, 1023, 0, 255);

if (digitalRead (switch1) == LOW)
    if (debouncer.fell())
       {
        for (int i1 = 0; i1 < pwm; i1++)
         {
          analogWrite (mosfet, i1);
          delay(smooth);
         }
       }
    else if (debouncer.read() == LOW)
       {
        analogWrite (mosfet, pwm);
       }

if (digitalRead (switch1) == HIGH)    
    if (debouncer.rose())
       {
        for (int i2 = pwm; i2 >= 0; i2--)
         {
          analogWrite (mosfet, i2);
          delay (smooth);
         }
       }
    else if (debouncer.read() == HIGH)
       {
        if ((analogRead (foto) < nightVAL) && (digitalRead (piro_1) == HIGH))
        if ((analogRead (foto) < nightVAL) && (digitalRead (piro_2) == HIGH))
        if ((analogRead (foto) < nightVAL) && (digitalRead (piro_3) == HIGH))
           {
            analogWrite (mosfet, minPWM);
           }

        else if (digitalRead (piro_1) == LOW)
        else if (digitalRead (piro_2) == LOW)
        else if (digitalRead (piro_3) == LOW)
           {
            digitalWrite (mosfet, LOW);
           }
       }
}

Пишет мне что эти строчки неправильно:
else if (digitalRead (piro_2) == LOW)
        else if (digitalRead (piro_3) == LOW)
Я вас прошу помочь в этом вопросе!!!
Спасибо!
 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Смотрите - Если Вы делаете по АНАЛОГИИ первой (рабочей) программы, то надо так и делать как там. Приблизительно так

#include <Bounce2.h>

#define piro_1 8
#define piro_2 2
#define piro_3 4
#define piro1 10
#define mosfet 9
#define foto A0
#define pot A1
#define switch1 7

#define nightVAL 200
#define minPWM 5
#define smooth 7

byte pwm;
Bounce debouncer = Bounce();

void setup() {
  pinMode (piro_1, INPUT);
  pinMode (piro_2, INPUT);
  pinMode (piro_3, INPUT);
  pinMode (mosfet, OUTPUT);
  pinMode (switch1, INPUT_PULLUP);
  debouncer.attach(switch1);
  debouncer.interval(5);

  TCCR1A = TCCR1A & 0xe0 | 1;
  TCCR1B = TCCR1B & 0xe0 | 0x09;
}

void loop() {
  debouncer.update();
  pwm = map (analogRead (pot), 0, 1023, 0, 255);
  if (digitalRead (switch1) == LOW)
    if (debouncer.fell())
    {
      for (int i1 = 0; i1 < pwm; i1++)
      {
        analogWrite (mosfet, i1);
        delay(smooth);
      }
    }
    else if (debouncer.read() == LOW)
    {
      analogWrite (mosfet, pwm);
    }

  if (digitalRead (switch1) == HIGH)    
    if (debouncer.rose())
    {
      for (int i2 = pwm; i2 >= 0; i2--)
      {
        analogWrite (mosfet, i2);
        delay (smooth);
      }
    }
    else if (debouncer.read() == HIGH)
    {
      if ((analogRead (foto) < nightVAL) && (digitalRead (piro_1) == HIGH)){
	  
      }
      else if (digitalRead (piro_1) == LOW){
      
	  }

      if ((analogRead (foto) < nightVAL) && (digitalRead (piro_2) == HIGH)){
      
	  }
      else if (digitalRead (piro_2) == LOW){
      
	  }

      if ((analogRead (foto) < nightVAL) && (digitalRead (piro_3) == HIGH))
      {
        analogWrite (mosfet, minPWM);
      }
      else if (digitalRead (piro_3) == LOW)
      {
        digitalWrite (mosfet, LOW);
      }
    }
}

 В работоспособност самой програмы я не вникал!

Alex9944
Offline
Зарегистрирован: 30.10.2018

Спасибо большое за помощь и быстрый ответ.
Прийду домой и попробую.
Обязательно напишу.
Спасибо большое!

Alex9944
Offline
Зарегистрирован: 30.10.2018

Уважаемый Vosara ещё раз спасибо за помощь. Загрузил код без ошибок.
Датчики 1 и 3 заработали очень хорошо. Но 2 датчик не работает. Сам датчик подключал к пину 4 (где 3 датчик) срабатывает отлично, проблема не в датчике. Пробовал переименовать пин с 2 на 3 и 5. Не помогло. Наверное проблема в коде, может быть не хватает в нижней части скобок или какие то лишние. А так я очень уже доволен, сейчас у меня по краям коридора  стоят датчики и практически из каждой точки уже срабатывают. Если у Вас бедет ещё время и желание, посмотрите пожалуйста ещё код. Заранее Вам благодарен.
С уважением Alex9944

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Для того чтобы посмотреть код необходимо как минимум знать что он должен делать.
1. У Вас есть три датчика, так вот что должно произойти если сработал 1й датчик и как долго дожна быть включена эта сработка
2. что должно произойти если сработал 2й датчик и как долго дожна быть включена эта сработка.
3. что должно произойти если сработал 3й датчик и как долго дожна быть включена эта сработка.
Судя по Вашим высказываниям я догадуюсь что сработка любого датчика делает одно и тоже - плавно зажигает свет, если это так то тогда все просто ПОДКЛЮЧИТЕ все датчики к одному пину и проверяйте  первым кодом, который у Вас работает.
Если же каждый датчик должен делать чтото своё, тогда опишите задачу, только подробно.
Alex9944
Offline
Зарегистрирован: 30.10.2018

Спасибо за ответ!
Всё правильно, датчики срабатывают на один мосфет и плавно зажигают свет. Проблема была в том, что они не работаю в паралели. Напряжение 3,3 вольта падает до 1,5 вольт и arduino не срабатывает. Поэтому я и хотел подключить к каждому независимому пину. Хотел усложнить задачу. Сейчас я разделил 2 и 3 датчики диодами 4148 и все подключил к 4 пину, который работает. Так что сейчас срабатывают все 3 датчика и муха не пролетит незамеченной. Так можно подключать много датчиков и напряжение держится 3,3 вольта. Ёще раз спасибо за помощь.
С уважением Alex9944.

Lexa2000
Offline
Зарегистрирован: 10.10.2019

Уважаемьій Алекс. Не могли бьі Вьі подробней расказать и показать схемку подключения двух и более пир датчиков к одному пину на плате. Огромное спасибо.

Lexa2000
Offline
Зарегистрирован: 10.10.2019

Alex9944 пишет:

Спасибо за ответ!
Всё правильно, датчики срабатывают на один мосфет и плавно зажигают свет. Проблема была в том, что они не работаю в паралели. Напряжение 3,3 вольта падает до 1,5 вольт и arduino не срабатывает. Поэтому я и хотел подключить к каждому независимому пину. Хотел усложнить задачу. Сейчас я разделил 2 и 3 датчики диодами 4148 и все подключил к 4 пину, который работает. Так что сейчас срабатывают все 3 датчика и муха не пролетит незамеченной. Так можно подключать много датчиков и напряжение держится 3,3 вольта. Ёще раз спасибо за помощь.
С уважением Alex9944.

Уважаемьій Алекс. Не могли бьі Вьі подробней расказать и показать схемку подключения двух и более пир датчиков к одному пину на плате. Огромное спасибо.

Гриша
Offline
Зарегистрирован: 27.04.2014

Lexa2000 пишет:

Уважаемьій Алекс. Не могли бьі Вьі подробней расказать и показать схемку подключения двух и более пир датчиков к одному пину на плате. Огромное спасибо.

пока ждете ответ, почитайте про логическое ИЛИ на диодах ..ссылка может не сработать, так ищите.

 

Lexa2000
Offline
Зарегистрирован: 10.10.2019

Гриша пишет:

Lexa2000 пишет:

Уважаемьій Алекс. Не могли бьі Вьі подробней расказать и показать схемку подключения двух и более пир датчиков к одному пину на плате. Огромное спасибо.

пока ждете ответ, почитайте про логическое ИЛИ на диодах ..ссылка может не сработать, так ищите.

 

Спасибо большое, очень интересно, но всетаки хотелось посмотреть реализованую схему о которой говорил коллега. Спасибо

В tinkercad.com, например, данная схема работает. Реально подключать данным способом боюсь.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Lexa2000 пишет:

Спасибо большое, очень интересно, но всетаки хотелось посмотреть реализованую схему о которой говорил коллега. Спасибо

Так там же ясно сказано:

Цитата:
я разделил 2 и 3 датчики диодами 4148 и все подключил к 4 пину

А, вообще, если есть свободные пины, зачем два датчика на один пин сажать?

Lexa2000
Offline
Зарегистрирован: 10.10.2019

Спасибо за оперативный ответ

asam пишет:

Lexa2000 пишет:

Спасибо большое, очень интересно, но всетаки хотелось посмотреть реализованую схему о которой говорил коллега. Спасибо

Так там же ясно сказано:

Цитата:
я разделил 2 и 3 датчики диодами 4148 и все подключил к 4 пину

Так?

asam]</p> <p>[quote=Lexa2000 пишет:

А, вообще, если есть свободные пины, зачем два датчика на один пин сажать?

Нада

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Lexa2000 пишет:

Так?

Да, но может зависить от конкретной модели датчика. У вас какие?

Lexa2000
Offline
Зарегистрирован: 10.10.2019

asam пишет:

Lexa2000 пишет:

Так?

Да, но может зависить от конкретной модели датчика. У вас какие?

HC-SR501

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Lexa2000 пишет:

HC-SR501

Тогда диоды надо в обратную сторону развернуть и подтяжку внутреннюю на пине включить.

Lexa2000
Offline
Зарегистрирован: 10.10.2019

asam пишет:

Lexa2000 пишет:

HC-SR501

Тогда диоды надо в обратную сторону развернуть и подтяжку внутреннюю на пине включить.

Ну, катодами к пину должны стоять, нет?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Lexa2000 пишет:

Ну, катодами к пину должны стоять, нет?

Говорю же - рвзвернуть. Катодами к датчику. У него active Low

Lexa2000
Offline
Зарегистрирован: 10.10.2019

asam пишет:

Lexa2000 пишет:

Ну, катодами к пину должны стоять, нет?

Говорю же - рвзвернуть. Катодами к датчику. У него active Low

Ну, ок, и как тогда сигнал HIGh попадет на пин ардуино если его диод не пропустит?

SLKH
Offline
Зарегистрирован: 17.08.2015

Lexa2000 пишет:

asam пишет:

Lexa2000 пишет:

Ну, катодами к пину должны стоять, нет?

Говорю же - рвзвернуть. Катодами к датчику. У него active Low

Ну, ок, и как тогда сигнал HIGh попадет на пин ардуино если его диод не пропустит?

"подтяжку внутреннюю на пине включить."

Lexa2000
Offline
Зарегистрирован: 10.10.2019

SLKH пишет:

Lexa2000 пишет:

asam пишет:

Lexa2000 пишет:

Ну, катодами к пину должны стоять, нет?

Говорю же - рвзвернуть. Катодами к датчику. У него active Low

Ну, ок, и как тогда сигнал HIGh попадет на пин ардуино если его диод не пропустит?

"подтяжку внутреннюю на пине включить."

чем подтяжка поможет если на пине всегда LOW?

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Lexa2000 пишет:

SLKH пишет:

Lexa2000 пишет:

asam пишет:
Говорю же - рвзвернуть. Катодами к датчику. У него active Low

Ну, ок, и как тогда сигнал HIGh попадет на пин ардуино если его диод не пропустит?

"подтяжку внутреннюю на пине включить."

чем подтяжка поможет если на пине всегда LOW?

Подтяжка как раз делает на пине всегда HIGH покак его не "заземлили". У датчика, пока движения нет, на выходе тоже HIGH. При детектировании движения у датчика на пине появлется LOW, то есть притянут к земле. Пин ардуины оказывается заземленным через диод и пин датчика. И на нем детектируется LOW. Желательно брать диоды с минимальным падением напряжения. 

Lexa2000
Offline
Зарегистрирован: 10.10.2019

Спасибо большое. Кратко и понятно.