Принципы работы :
Работа датчика движения основана на анализе волн различных типов (акустических, оптических или радиоволн), поступающих на датчик из окружающей среды. В зависимости от типа используемого излучения датчики движения делятся на:
инфракрасные,
ультразвуковые,
фотоэлектрические, в которых применяется видимый свет,
микроволновые,
томографические, где используются радиоволны.
В зависимости от того, излучает ли сенсор сам эти волны и анализирует их после отражения или только получает волны извне, датчики делятся на:
активные;
пассивные;
комбинированные, в таких датчиках одна часть датчика посылает волны, а удалённая от неё вторая часть получает их.
Большинство существующих датчиков движения представляет собой некоторую комбинацию физических принципов работы, причём датчики одного типа волн, как правило, используют один механизм для их создания и обработки.
Наиболее распространенные датчики:
пассивные инфракрасные датчики (PIR), самые доступные и распространенные датчики движения в принципе[2], инфракрасные датчики составляют около 50 % применяемых по всему миру сенсоров движения[3];
активные ультразвуковые, микроволновые и томографические датчики;
комбинированные фотоэлектрические и инфракрасные датчики.
Каждый принцип имеет свои недостатки, иногда допуская ложные тревоги и несрабатывания в нужных случаях. Чтобы снизить вероятность ложного срабатывания, датчики иногда объединяют две технологии в одном устройстве (например, инфракрасная и ультразвуковая). Но это, в свою очередь, повышает уязвимость датчика, поскольку он становится менее надёжным и может в результате не сработать, даже когда должен.
Поделитесь своими знаниями, ответьте на вопрос:
Приведите примеры натуральных моделей
const
nDay:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
type
Date=record
Day,Month,Year:integer
end;
function DOW(Dat:Date):integer;
// день недели по дате. 0-Вс. 1-Пн, 7-Сб
var
a,y,m:integer;
begin
With Dat do begin
a:=(14 - month) div 12;
y:=Year-a;
m:=month+12*a-2;
DOW:=(7000+(day+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7
end
end;
procedure DMY2Date(d,m,y:integer; var data:Date);
// Преобразует к дате заданные день, месяц и год
begin
data.Day:=d; data.Month:=m; data.Year:=y
end;
procedure LastDays(month,year:integer; var Wd,Fr:Date);
// даты последней среды (Wd) и пятницы (Fr) для месяца в году }
var
LastDay:Date;
n:integer;
begin
n:=nDay[month];
if (month=2) and (year mod 4 = 0) then Inc(n);
DMY2Date(n,month,year,LastDay);
n:=DOW(LastDay); // номер последнего дня недели
Wd.Month:=month; Wd.Year:=year;
if n<3 then Wd.Day:=LastDay.Day-(n+4)
else
if n=3 then Wd.Day:=LastDay.Day
else Wd.Day:=LastDay.Day+3-n;
Fr.Month:=month; Fr.Year:=year;
if n<5 then Fr.Day:=LastDay.Day-(n+2)
else
if n=3 then Fr.Day:=LastDay.Day
else Fr.Day:=LastDay.Day-1
end;
var
Wd,Fr:Date;
ff,mf:Text;
m:integer;
begin
Assign(ff,'father.txt'); Rewrite(ff);
Assign(mf,'mother.txt'); Rewrite(mf);
// Сентябрь-декабрь 2015 года
for m:=9 to 12 do begin
LastDays(m,2015,Wd,Fr);
if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2015 - 1 класс')
else Writeln(ff,Wd.Day,'.',m,'.2015 - 1 класс');
if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2015 - 5 класс')
else Writeln(ff,Fr.Day,'.',m,'.2015 - 5 класс')
end;
// Январь - май 2016 года
for m:=1 to 5 do begin
LastDays(m,2016,Wd,Fr);
if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2016 - 1 класс')
else Writeln(ff,Wd.Day,'.',m,'.2016 - 1 класс');
if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2016 - 5 класс')
else Writeln(ff,Fr.Day,'.',m,'.2016 - 5 класс')
end;
Close(ff); Close(mf)
end.
Содержимое выходных файлов:
father.txt
30.9.2015 - 1 класс
28.10.2015 - 1 класс
30.10.2015 - 5 класс
30.12.2015 - 1 класс
24.2.2016 - 1 класс
26.2.2016 - 5 класс
30.3.2016 - 1 класс
mother.txt
25.9.2015 - 5 класс
25.11.2015 - 1 класс
27.11.2015 - 5 класс
25.12.2015 - 5 класс
27.1.2016 - 1 класс
29.1.2016 - 5 класс
25.3.2016 - 5 класс
27.4.2016 - 1 класс
29.4.2016 - 5 класс
25.5.2016 - 1 класс
27.5.2016 - 5 класс