photoresist-speedup/

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

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

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

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

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

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

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

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

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

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

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

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

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 .

EnglishRussianUkrainian