ИК датчик движения на фотодиоде для arduino

Существуют специальные аппаратные модули, автономно выполняющие роль датчика движения. В этой теме мы рассмотрим реализацию необходимого функционала с минимальными дополнительными вложениями. А именно, используя всего-лишь один фотодиод, непосредственно подключаемый к аналоговому входу (масса + сигнал). Были приобретены два ИК фотодиода: ФД263 и BPD-BQB934 — 940нм, показавшие на практике примерно одинаковые эксплутационные свойства. Стоит отметить, что присутствие линзы Френеля должно, безусловно, улучшить чувствительность, но и в её отсутствии результаты вполне удовлетворительны. В абсолютной темноте эксперименты не были проведены, т.к. всегда присутствовала подсветка на плате arduino.
Далее, будет приведён код, включающий по наличию движения на 1 секунду подсветку LCD дисплея и поддерживающий её во включенном состояние до момента окончания движения.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // select the pins used on the LCD panel

void setup(){
  lcd.begin(16, 2); //инициализация LCD
  pinMode(10, OUTPUT); //инициализация режима управления подсветкой LCD
}

//взятие усреднённого значения с фотодиода
//реализация подстраивается под конкретный случай через
//изменение значения N и задержки
int GetV()
{
 long long H = 0, N = 300;

 for( int i=0; i < N; i++ )
 {
  delay(1);
  H += analogRead(A5);
 }
 
 return H/N;
}

//включение-выключение подсветки
boolean onoff( boolean oo )
{
 if( oo ) digitalWrite( 10, HIGH);
  else digitalWrite( 10, LOW);
 return oo;
}

int V = 0;//текущее значение с фотодиода
boolean S = false;//текущее значение состояния подсветки
unsigned long M = 0;//текущее значение времени

void loop(){

  int v = GetV();

  if( V != v )
  {
   M = millis();

   if( !S )
    S = onoff( true );

   V = v;
  }
  
  if( S && millis()-M > 1000 )
  {
   S = onoff( false );
   V = GetV();
  }

  lcd.setCursor(0,1);
  lcd.print("--------");
  lcd.setCursor(0,1);
  lcd.print( v );
}

8 комментариев

комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
комментарий был удален
avatar
Спам на videosecurity.md удалён, можно ведь было ограничиться и одним комментом ;)

Оставить комментарий