- Чому б просто не взяти готове?
- Матриця з ультрафіолетових світлодіодів 10x10
- Таймер на базі ATmega328
- Отримані результати
Вже не пам'ятаю, яким саме чином, але одного разу я натрапив на чудове відео Дмитра Дементьєва про те, як він робить друковані плати за допомогою плівкового фоторезиста . Я взяв на озброєння багато з описаних ним методик, зокрема, нанесення фоторезиста «мокрим» методом, використання ламінатора, а також канцелярських затискачів. Але найбільше в відео мене вразила лампа з ультрафіолетових світлодіодів з таймором. Така лампа засвічує фоторезист за 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 $ разом з доставкою. На момент написання цих рядків плати мені ще не доїхали, але виглядати вони будуть приблизно так:
Власне, кажучи про цікавинками побічному проекті, я мав на увазі цю плату.
На області для прототипування я упаяв МОП-транзистор з 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 . Як завжди, буду радий вашим питань і доповнень.
Мітки: AVR , електроніка .
Чому б просто не взяти готове?Чому б просто не взяти готове?
Вже якщо і робити якийсь пристрій в домашніх умовах, чому б не зробити його таким, як подобається саме тобі, чи не так?