Из Простоквашино, с любовью...
Два моих хороших товарища потратили несколько лет на разработку адаптивной автоматической системы управления. Управления эвакуацией людей из здания. При пожаре. Слово "адаптивная" здесь означает, что система должна уметь сама приспосабливаться к меняющейся ситуации.
Что же тут необычного? Мало ли тех, кто создаёт автоматические системы профессионально. За хорошую зарплату. Согласно словарю, профессионал - это тот, кто за работу получает деньги. Но тут - особый случай. Мои товарищи системой занимаются в свободное время, не получая ни рубля.
Почему они это делают? Из сочувствия к гибнущим на пожарах людям? Конечно. Но... бесплатно работать в течение нескольких лет... Всё ясно: любители. Не подумайте, что это означает некомпетентность. Мои товарищи компетентны. Ещё как! Нет, это означает, что они влюблены в задачу. Хотя временами ненавидят её. В любви это бывает: задача трудная.
Не знаю, хорошо это или плохо, но любительство - заразительно. Однажды, "эти двое" мне говорят: "Как здорово было бы, если бы система знала, как люди прямо сейчас распределены по зданию. Сколько их находится на каждом этаже. Эх, да чего там! Общее количество людей в здании знать - и то было бы полезно."
Я, не задумываясь даже, ответствую им: "Подумаешь, проблема какая! Надо лишь расставить кое-где инфракрасные счётчики людей. Вроде тех, что установлены на входах в магазины. Счётчик замечает человека, когда тот пересекает невидимый инфракрасноый луч. Если у счётчика два параллельных луча, один рядом с другим, то он может "сообразить", входит человек или выходит. Счётчики должны быть связаны в сеть, чтобы сеть суммировала людей по всем входам и выходам. Это же просто."
Конечно, я тут же и усомнился, что в реальности "это просто", но подумал: "Какая интересная задача! А я мог бы сделать сетевой счётчик? Или мне слабо?"
Вот и вляпался... Мой невидимый спортивный жеребец сразу взвился на дыбы: "Кому это слабо? МНЕ???"
Конечно, я давай сам себя отговаривать: "Да не нужно тебе изобретать велосипед! Счётчик он сделать хочет. Ха-ха! Да счётчики продаются в любом интернет-магазине."
Поздно... Поезд уже пошёл.
Что из того, что Генри Форд успел завалить мир надёжными и недорогими автомобилями? Феррари - наша фамилия... Хочу в отпуск. На природу. Поработать над счётчиком.
Так я и оказался в Простоквашино.
Сенсорная система счётчика
Приступая к конструированию девайса, я, конечно, должен хоть что-то о нём знать. К счастью, производители инфракрасных счётчиков, даже из страха конкуренции, не могут скрыть все свои тайны. Главная из них: сенсорная система счётчика состоит
из излучателя и приёмника. От излучателя к приёмнику идёт инфракрасный луч, как барьер, который должен пересечь человек. (Только этот барьер не мешает движению.) У двухлучевого счётчика два барьера и, естественно, два излучателя и два приёмника.
Этой информации мне уже достаточно для творчества. Как именно устроить излучатель и приёмник, я должен придумать сам, иначе мне будет неинтересно.
Здесь я расскажу не о проектировании счётчика людей в целом (это была бы долгая история), а лишь о проектировании инфракрасной сенсорной системы счётчика. О простейшей, первой её конструкции, которая родилась в моей голове тогда, лет пять назад. (С тех пор я перебрал их уже несколько.)
Выбор элементов
Думы об инфракрасном излучателе.
Вариант первый: подобрать в каталоге миниатюрный маломощный инфракрасный лазер. Для двухлучевого счётчика их нужно два. Получается такая идиллия: два тончайших параллельных инфракрасных лазерных луча упираются в два приёмника, каждый луч - в свой. На этом и хочется остановиться, но...
Устанавливать излучатель и приёмник в дверном проёме (или в коридоре) предстоит хорошему человеку: монтажнику. Я его даже вижу мысленно. У него есть семья: жена, дети. Они сегодня вечером ждут его домой: здоровым и весёлым. Но перед этим он должен надёжно прикрепить модуль излучателя к стене. Так прикрепить, чтобы инфракрасный лазерный луч угодил бы в маленький, диаметром всего 5 миллиметров, глазок приёмника.
Как мне примерить на себя эмоции этого чудесного человека? Попробую.
Вообразите, что вам нужно вдеть нитку в игольное ушко. Вам удалось это сделать? Поздравляю: у вас хорошее зрение и твёрдая рука. А теперь представьте, что нитку вы держите за полтора метра от иголки и, что хуже всего, эта ЧЁРТОВА нитка АБСОЛЮТНО НЕВИДИМА!!!
Ладно уж, ну его, этот лазер с тончайшим лучом.
Вариант второй: подобрать в каталоге инфракрасный светодиод. Вроде того, что используется в инфракрасных пультах дистанционного управления телевизором. Светодиод этот, в отличие от лазера, излучает широким пучком, как автомобильная фара. (О, счастье! - вскричал монтажник.) Светодиод безопасен и, кроме того, цену имеет смешную. Например, светодиод - TSAL6100 .
Прекрасно. Теперь можно подумать о приёмнике инфракрасного излучения.
Так и быть, тоже возьму диод (фотодиод). Не любой, а обладающий наибольшей чувствительностью в том диапазоне длин волн, в котором будет работать излучатель. В каталог что-ли заглянуть? Есть: фотодиод - BVP10NF. (Привираю я. В каталог я, конечно, заглянул. Но позже. А вначале просто взял светодиод и фотодиод из коробки, приготовленной для датчиков задымления.)
Всё, выбор элементов для излучателя и приёмника сделан! И, ни шагу в сторону!
Уф... Теперь можно и покаяться. Да, мужики, каюсь... Я умолчал о возможности выбрать в качестве фотоприёмника готовый модуль. Тот, что используется в телевизорах (и в наборах для весёлых затей с ARDUINO). Это инфракрасный приёмник команд с пульта дистанционного управления. Совершенно чудесный девайс: миниатюрный, недорогой, и содержит высокочувствительный усилитель сигнала.
Тогда - скажете вы - почему же я пренебрёг им, таким хорошим, нежным, чувствительным...?
- Потому, Шарик, что ты - балбес. Готовый модуль и надо было сразу выбрать! И мучиться не пришлось бы.
Хм... Может, и правда? Нет, мучиться пришлось бы. Именно высокая чувствительность готового модуля меня и насторожила. Она неуместна в моей задаче. Что хорошо для пульта дистанционного управления - нехорошо для счётчика. Я хочу считать людей. А при избыточной чувствительности счётчик, кроме людей, будет считать и случайные электромагнитные помехи. От молний, от трамваев и троллейбусов, от всего, что искрит.
Мне как раз выгоднее иметь более грубый приёмник.
Проблема независимости оптических каналов
Измерения показывают, что угловая ширина инфракрасного светового пучка выбранных светодиодов (по половинной интенсивности излучения) составляет около 20 градусов. Изрядная ширина пучка имеет свои плюсы (не требуется точная юстировка оптических каналов), и минусы (с расстоянием световой поток быстро ослабевает).
Но важно ещё и другое: оптические каналы должны быть обособлены друг от друга. Большая ширина светового пучка излучателей этому мешает . Каждый излучатель будет освещать и собственный фотоприёмник, и фотоприёмник соседнего канала. Преодолеть эту трудность можно, например, с помощью их попеременной работы. Когда работает первый измерительный канал, излучатель второго канала должен быть выключен. И наоборот: когда работает второй канал, должен быть выключен излучатель первого. Это нетрудно обеспечить подачей на излучатели импульсного напряжения, со сдвигом импульсов по времени.
Простейшие инфракрасный излучатель и инфракрасный приёмник
Используемый в излучателе инфракрасный светодиод по принципу действия разительно отличается от старомодной лампочки накаливания. Но, как и лампа накаливания, излучает он только тогда, когда через него протекает электрический ток. Какую силу тока можно к нему подвести, не опасаясь его "сжечь"?
Когда вы покупаете самолёт, в комплекте имеется руководство по производству полётов. Там написано, какие режимы полёта являются безопасными, и какие опасны для вашей жизни. Прежде, чем сесть в кресло пилота, прочтите руководство. (Некоторые разделы лучше даже выучить наизусть.)
Подобное руководство имеется и для электронных элементов, используемых в самоделках и
промышленных изделиях. На жаргоне, для краткости, его называют "даташит". В даташите на инфракрасный светодиод TSAL6100 указана максимальная величина силы тока,
безопасного для его "жизни". Она не должна превышать 150 мА. (В импульсном режиме работы этот светодиод выдерживает и гораздо большую силу тока, но, для начала, лучше воздержаться от экстрима.) На рисунке ниже приведена принципиальная схема излучателя с ограничением силы тока.
Излучающим элементом на схеме является инфракрасный светодиод TSAL6100 (или аналогичный). Светодиод включен в прямом направлении, то есть, в направлении,
в котором он может свободно пропускать электрический ток. (Чтобы не перепутать выводы светодиода при монтаже, достаточно помнить: положительный вывод светодиода
конструктивно длиннее отрицательного.)
Управление включением и выключением светодиода осуществляется с помощью биполярного транзистора BC547 (или аналогичного: bc548, bc549, КТ3102), работающего в режиме ключа. Управляющие импульсы с цифрового пина ARDUINO через резистор 330 Ом подаются на базу транзистора, открывая его на время действия импульса.
Продолжительность импульса выбирается достаточной для того, чтобы за это время ARDUINO мог прочитать аналоговый сигнал с выхода приёмника. (О приёмнике - позже. Чтение его сигнала занимает приблизительно 150 мксек).
Чтобы светодиод и транзистор излучателя успели "остыть", время "покоя" между импульсами должно быть порядка 1000 мксек или больше.
Максимальная сила импульсного тока через светодиод в этой схеме определяется резистором 27 Ом, и составляет приблизительно 100 мА. (Ограничивающий ток резистор должен выдерживать рассеиваемую мощность порядка 1-2 Вт.)
Электролитический конденсатор 100 мкФ в цепи питания излучателя предназначен для сглаживания пульсаций питающего всю схему тока. Большие пульсации тока могут быть неприемлемы для маломощного источника.
На рисунке ниже приведена принципиальная схема простейшего инфракрасного приёмника.
В приёмнике элементом, чувствительным к инфракрасному свету, является фотодиод BVP10NF (или аналогичный). Фотодиод включен в обратном направлении. Пока он не освещён фоновым светом или инфракрасными лучами излучателя, он не пропускает электрический ток.
Импульс инфракрасного излучения вызывает увеличение проводимости фотодиода и, соответственно, появление небольшого тока (фототока) в цепи базы транзистора BC557 (или аналогичного: bc558, bc559, КТ3107).
Транзистор включен по схеме с общим эмиттером и играет роль усилителя фототока. При появлении фототока транзистор открывается. Это приводит к увеличению падения напряжения на резисторе 10 Ком, который включен в цепь коллектора транзистора.
Падение напряжение на этом резисторе является для приёмника выходным. Оно может быть измерено с помощью цифрового вольтметра или аналого-цифрового преобразователя ARDUINO.
Нужно помнить, что фоновая засветка фотодиода обычным видимым светом тоже вызывает фототок некоторой величины. Поэтому измерение напряжения на выходе приёмника
нужно производить дважды: при включённом излучателе ("боевое" значение) и при выключенном излучателе (фоновое значение). Разность "боевого" и фонового значений
позволяет судить о том, проходит луч от излучателя к приёмнику или луч закрыт какой-то преградой.
Скетч для проверки работы сенсорной системы
// Проверка инфракрасной сенсорной системы (вывод в монитор среды Ардуино)
#define TRANSMITTER 6 // Пин D6 - выход для сигналов на излучатель
#define RECEIVER A0 // Пин A0 - вход для сигналов от приёмника
int fone_level, //величина фонового уровня на выходе приёмника при выключенном излучателе (возможный диапазон: 0-1023)
signal_level; //величина "боевого" сигнала на выходе приёмника при включенном излучателе
// Инициализация перед запуском теста -----------------------------
void setup() {
// Установка режима вывода на излучатель
pinMode(TRANSMITTER, OUTPUT);
digitalWrite(TRANSMITTER, LOW);
// Ожидание зарядки электролитических конденсаторов до рабочего уровня
delay(1000); //задержка в 1 секунду
// Настройка последовательного порта для вывода во встроенный монитор среды Ардуино
Serial.begin(9600);
Serial.println("Test is started.");
}
//Основной цикл (тестирование) ----------------------------------
void loop() {
fone_level = analogRead(RECEIVER); // измерение фонового уровня на выходе приёмника при выключенном излучателе (диапазон: 0-1023)
digitalWrite(TRANSMITTER, HIGH); // включение излучателя
signal_level = analogRead(RECEIVER); // измерение "боевого" сигнала на выходе приёмника при включенном излучателе
digitalWrite(TRANSMITTER, LOW); // выключение излучателя
// Вывод уровней сигнала в монитор среды Ардуино
Serial.print("fone_level = ");
Serial.print(fone_level);
Serial.print(" ");
Serial.print("signal_level = ");
Serial.println(signal_level);
// Задержка на 2 секунды для удобства чтения данных на мониторе
delay(2000);
}
Для проверки сенсорной системы подключите её к ARDUINO. Вход излучателя - к пину D6, выход приёмника - к пину A0. Загрузите скетч в микроконтроллер. Откройте встроенный монитор среды ARDUINO и убедитесь, что сигнал приёмника имеется и зависит от того, направлен ли излучатель на приёмник. Излучатель расположите не дальше, чем на расстоянии 1 метр от приёмника.
В заключение
В заключение мне хочется привести фотографию моего первого ( картонного) прототипа инфракрасного счётчика людей, в котором была использована описанная здесь самодельная сенсорная система.
(
Автор: samigon