Фотограмма без фотобумаги

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Фотограмма — очень интересное искусство, в своё время его даже пропагандировали в телепередачах. Вы помещаете предметы на фотобумагу, экспонируете с направления, при котором получается наиболее интересный силуэт, проявляете, фиксируете — и готово произведение искусства. Но теперь фотобумагу на каждом шагу не купить. А что если и фотограмму вслед за фотографией сделать цифровой?

Для этого подойдёт давно известный сканер с бегущим лучом, только сегодня вместо ЭЛТ в нём будет удобнее применить светодиодную матрицу. Она даже лучше: у трубки небольшое послесвечение есть, у светодиодов — нет. Датчиком послужит фототранзистор TIL78, внешне неотличимый от светодиода (вывод базы наружу не выведен, но он и не нужен). Этот фототранзистор снят с производства, он может быть заменён многими аналогичными.

Фототранзистор необходимо подключить эмиттером к общему проводу, коллектором к входу A5 Arduino UNO, затем залить и запустить скетч:

#define SENSOR A5
void setup() {
  Serial.begin(9600);
  pinMode(SENSOR, INPUT_PULLUP);
}
void loop() {
  // Read analog value continuously and print it
  Serial.println(analogRead(SENSOR));
}

Программа, в частности, активирует встроенный в Arduino подтягивающий резистор, поэтому внешний не понадобится. В меню Arduino IDE выбираем Tools — Serial Plotter, и наблюдаем график освещённости. Поскольку цоколёвка фототранзистора на нём не обозначена, полярность его подключения определяем экспериментально.

Светодиодную матрицу 32х32 со встроенным устройством управления подключаем так:



Питаться от Arduino матрица не может, ей нужен внешний источник на 5 В, 4 А. Подключаем его так:



Всегда подаём питание сначала на матрицу, потом на Arduino, снимаем питание в обратном порядке. «Прокачиваем» Arduino IDE необходимыми библиотеками и проверяем матрицу как описано здесь. Когда всё заработает, заливаем скетч для получения фотограмм.

В нём можно попробовать варьировать параметры:

static constexpr uint8_t  READINGS_PER_PIXELS = 1;
static constexpr uint8_t  THRESHOLD           = 15;
static constexpr bool     INVERT              = false;
static constexpr bool     CLEAR               = true;

Первыми двумя параметрами можно регулировать чувствительность, третьим — переключаться между позитивом и негативом, четвёртым — включить наложение каждого последующего снимка на предыдущий. Смотрим большой анимированный GIF.

Наилучшим способом определения попадания на фототранзистор света именно от матрицы оказался такой: сравнивать результаты при отключённом и включённом светодиоде. Если светодиод над точкой объекта, считываемой в данный момент, перекрыт, они будут одинаковыми, если не перекрыт — разными. Светодиод включается и выключается несколько раз переключением линии OE (output enable), результаты считывания суммируются в двух аккумуляторах: в одном — при выключенном светодиоде, в другом — при включённом. Результат вычитания этих сумм сравнивается с пороговым значением.

Матрица содержит шесть сдвиговых регистров, соответствующих целым строкам красных, зелёных и синих светодиодов в верхней и нижней половинах. Линия LAT (latch) управляет буфером, переносящим значения из сдвиговых регистров в драйверы светодиодов. Четыре адресные линии A, B, C, D позволяют выбрать активную строку в верхней и нижней половинах, а линия OE даёт возможность отключать и включать драйверы.

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

Здесь же матрица используется не по назначению — для сканирования, поэтому сдвиговыми регистрами автор в этом режиме воспользовался, а буфером — нет. На линию LAT подаём единицу, и содержимое сдвигового регистра переносится в буфер сразу же при каждом импульсе на линии CLK. И после каждой перезаписи несколько раз мигаем светодиодом через OE, чтобы прочитать результаты фототранзистором и просуммировать двумя аккумуляторами, как описано выше. Наконец, определив, перекрыт ли светодиод, записываем результат в предусмотренный в библиотеке фреймбуфер.

Когда будет отсканированна вся фотограмма, окажется достаточным снова включить прерывания — и картинка из фреймбуфера стандартным способом запишется в матрицу и отобразится, после чего останется там до начала следующего сканирования.

Видеоролик:

Источник: https://habr.com/ru/post/454462/


Интересные статьи

Интересные статьи

Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.
Битрикс24 — популярная в малом бизнесе CRM c большими возможностями даже на бесплатном тарифе. Благодаря API Битрикс24 (даже в облачной редакции) можно легко интегрировать с другими системами.
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...