Паяем таймер и матрицу из УФ-светодиодов для быстрой засветки фоторезиста

19 февраля 2018

Уж не помню, каким именно образом, но однажды я наткнулся на замечательное видео Дмитрия Дементьева о том, как он делает печатные платы при помощи пленочного фоторезиста. Я взял на вооружение многие из описанных им методик, в частности, нанесение фоторезиста «мокрым» методом, использование ламинатора, а также канцелярских зажимов. Но больше всего в видео меня поразила лампа из ультрафиолетовых светодиодов с таймором. Такая лампа засвечивает фоторезист за 21 секунду, тогда как у меня при использовании настольной лампы с УФ-лампочкой на это уходит 15 минут, и это еще если фоторезист свежий. В общем, я захотел себе такое же устройство. Далее будет описан процесс его изготовления и полученные результаты.

Важно! Смотреть на ультрафиолет не полезно для глаз. Не советую делать это слишком долго, а в идеале рекомендую использовать соответствующие защитные очки.

Почему бы просто не взять готовое?

Дмитрий описал свой проект в небольшой статье и выложил все исходники на GitHub. Однако Дмитрий разводил плату в Sprint Layout, который стоит денег. Меня не сильно прельщала перспектива покупки и изучения данного ПО, особенно учитывая, что оно не поддерживает используемый мной на десктопе Linux. Кроме того, не похоже, чтобы Sprint Layot чем-то превосходил кроссплатформенный и открытый KiCad.

Плюс к этому мне лично не сильно понравился внешний вид устройства Дмитрия. Впаивать Arduino Nano, использовать громоздкий экранчик 1602 и строить сэндвич из нескольких плат разного размера мне не хотелось. Уж если и делать какое-то устройство в домашних условиях, почему бы не сделать его таким, как нравится именно тебе, верно?

В общем, я прикинул, что это достаточно прикольный и не сложный проект, который мне проще повторить с нуля. И действительно, на изготовление устройства у меня ушло всего лишь несколько вечеров. Плюс к этому, в процессе родился занятный побочный проект. Так что, о принятом решении мне жалеть не пришлось.

Матрица из ультрафиолетовых светодиодов 10x10

Ультрафиолетовые светодиоды довольно просто найти на eBay. Лично я покупал здесь. Пакетик с сотней светодиодов вместе с доставкой обошелся мне в 220 рублей (3.90$).

Светодиоды я решил расположить в виде матрицы 10 на 10, рассчитанной на питание от 5 В. Плата была без труда разведена в KiCad. В каждом из рядов был использован один резистор для ограничения тока и 10 светодиодов, соединенных параллельно. Сопротивление резистора было подобрано так, чтобы светодиоды светили достаточно ярко, а резистор при этом не перегревался. Я остановился на сопротивлении 27 Ом.

Вот что у меня получилось в итоге:

Матрица из ультрафиолетовых светодиодов

Плата имеет размер 10x15 см. В обозримом будущем я вряд ли буду делать платы большего размера, а значит такая матрица сможет равномерно засветить любую из моих поделок. Углы у платы пришлось немного подрезать, так как иначе она не помещалось в моей ультразвуковой отмывочной ванне. Да и то, плату пришлось класть в ванну ребром, отмывая ее сначала с одной стороны, затем со второй. Так что, да, сейчас для меня 10x15 см — это предел.

Fun fact! Я использую ванну VGT-800 с отмывочной жидкостью Solins US. Это намного удобнее и быстрее, чем отмывать спиртом с зубной щеткой. Просто кидаешь плату в ванну, жмешь кнопку, ждешь пару минут, промываешь, и все!

Таймер на базе ATmega328

Матрица светодиодов создает интенсивное УФ-излучение. При ее использовании фоторезист легко по ошибке засветить сильнее, чем нужно. В этом случае его придется снимать и все переделывать заново. Поэтому нам нужен таймер, который включает матрицу ровно на заданный интервал времени.

На момент написания этих строк я умел работать с микроконтроллерами AVR и STM32. Использовать STM32 для простого таймера мне показалось оверкилом, поэтому я использовал восьмибитный микроконтроллер ATmega328. Сказать по правде, 32 Кб flash-памяти для этого проекта тоже оверкил, вполне хватило бы и ATmega48. Но у меня был некоторый запас микроконтроллеров ATmega328, а покупать микроконтроллер специально под этот проект мне не хотелось. Так что, я остановился на ATmega328.

Я заметил, что связка «микроконтроллер + четыре семисегментных индикатора + несколько кнопок» является довольно часто встречающимся паттерном. Например, если вы делаете электронные часы, розетку с таймером или паяльную станцию, вам почти наверняка понадобятся все эти компоненты. Поэтому вместо того, чтобы делать специальную плату для конкретной задачи, я решил сделать универсальную плату с областью для прототипирования, которую можно было бы использовать повторно в будущих проектах.

Вот что у меня получилось:

Плата-таймер с областью для прототипирования

Также я заказал пять аналогичных плат у JLCPCB на будущее. Заказ обошелся мне в 22$ вместе с доставкой. На момент написания этих строк платы мне еще не доехали, но выглядеть они будут примерно так:

3D-модель платы с таймером и областью для прототипирования

Собственно, говоря о занятном побочном проекте, я имел в виду эту плату.

На области для прототипирования я впаял МОП-транзистор с N-каналом IRF3205 для защиты от переполюсовки. Для включения и выключения светодиодной матрицы было использовано обычное реле (модель RT424005). Также я использовал сглаживающий конденсатор на 100 мкФ, чтобы микроконтроллер не вырубало при включении матрицы.

Прошивка для устройства была написана на языке C, без библиотек от Arduino. В прошивке мало нового для нас с вами. Работа с использованным здесь индикатором ранее рассматривалась в заметке Как я делал электронные часы на базе FPGA. Программирование под AVR на языке C нам знакомо по заметке Как я спаял электронные игральные кости на базе ATtiny85. Из того, что не рассматривалось ранее, в прошивке есть разве что работа с EEPROM. Работать с ним не сложно:

int8_t saved_timeout[4] EEMEM = {0, 2, 0, 0}; // 20 seconds

void setup() {
    // load timeout from the EEPROM
    eeprom_read_block(timeout, saved_timeout, sizeof(timeout));

    // ...
}

/* ... */

void loop() {
    // ...

    if(!countdown_active && save_pressed()) {
        if(save_was_released) { // debounce
            // save current timeout to the EEPROM
            eeprom_update_block(timeout, saved_timeout,
                                sizeof(timeout));
            save_was_released = false;
        }
    } else
        save_was_released = true;

    // ....
}

При этом в make.sh добавляется строчка:

avr-objcopy -j .eeprom --change-section-lma .eeprom=0 \
  -O ihex main.o main.eeprom

… а в flash.sh — строчка:

avrdude -P /dev/ttyUSB0 -b 19200 -c avrisp -p atmega328p \
  -v -U eeprom:w:main.eeprom

То есть, EEPROM прошивается программатором отдельным шагом.

Fun fact! Две платы суммарно имеют более 700 отверстий. Если сверлить их ручной мини-дрелью, получится долго и криво, а кончики пальцев вы перестанете чувствовать из-за вибрации еще на первой сотне. Для сверления отверстий я использую инструмент Dremel 3000 вместе со стойкой Dremel 220, которая превращает его в сверлильный станок. Комплект нормальных сверл по металлу был куплен в ближайшем хозяйственном магазине. Также Dremel подходит для резки (стеклотекстолита, пластика, оргстекала, алюминия, дерева, фанеры, …), гравировки, фрезерования, и ряда других задач. Например, с его помощью я снимал маску с печатных плат и подправлял пластиковые модели, напечатанные на 3D-принтере. В общем, крутейший инструмент.

Полученные результаты

Имея светодиодную матрицу и таймер, я провел обычный тест на определение оптимального времени экспонирования. На плату переносились цифры и буквы с толщиной 0.4 мм и 0.2 мм: «005 SEC», «010 SEC», …, «060 SEC», затем плата травилась перекисью водорода с лимонной кислотой. Соответственно, оптимальное время я искал в диапазоне от 5 до 60 секунд с шагом 5 секунд. Светодиодная матрица при этом держалась в 20 см над фоторезистом. В итоге оптимальным оказалось время в районе 15-20 секунд. В EEPROM таймера я сохранил выдержку в 17 секунд, как среднее. Примите во внимание, что для вашего фоторезиста, ваших светодиодов и даже вашего любимого метода травления оптимальное время может отличаться.

Задумайтесь над этим — было 15 минут, а стало 17 секунд. Сколько времени сэкономлено!

Все исходники к этой заметке вы найдете на GitHub. Как всегда, буду рад вашим вопросам и дополнениям.

Метки: , .

Понравился пост? Узнайте, как можно поддержать развитие этого блога.

Также подпишитесь на RSS, Facebook, ВКонтакте, Twitter или Telegram.