Основная идея проекта — использовать механизм, связанный с движением магнитной головки старого жесткого диска, для создания дисплея, показывающего текущее время (или любую нужную информацию).
Заменив магнитную головку жесткого диска полосой светодиодов и включая светодиоды в нужное время, можно сформировать изображение. В устройстве используются светодиоды с пиксельной адресацией.
На первом фото демонстрируется работа устройства, но в силу особенностей фотографирования, цифры не видно. Лучше всего посмотреть демонстрацию работы устройства на видео.
Инструменты и материалы:
-Жесткий диск;
-Светодиоды с пиксельной адресацией WS2812B;
-Плата Arduino;
-Транзистор AO3401 — 2 шт;
-Транзистор AO3406;
-Модуль часов реального времени, работающий от 5 вольт;
-Два резистора 100 Ом;
-Два резистора 4700 Ом;
-Один конденсатор (> 220 мкФ,> 10 вольт);
-Два винта M2,5 и гайки;
-3D-принтер;
-Инструмент для разборки жесткого диска;
-Паяльные принадлежности;
-Пружина;
-Магниты;
Шаг первый: разборка
Для своей самоделки мастер использовал старый жесткий диск, как на фото. Механическая часть жестких дисков различны моделей отличается, поэтому, если кто-то решится повторить самоделку, то или нужно искать такой же диск или, опираясь на статью, работать со своим.
Жесткий диск нужно разобрать и демонтировать диск, мотор и плату. Детали эти можно использовать в других проекта, например, мастер из этих деталей сделал шлифовальный диск.
Шаг второй: рычаг
Затем нужно переделать рычаг. Головки нужно снять, а на рычаг закрепить деталь, на которую будет крепится светодиодная лента. Эту деталь мастере напечатал на 3D — принтере. Файл для печати можно скачать ниже, но нужно учитывать различные конструкции дисков.
Support.STL
Шаг третий: светодиодная лента
Для работы к светодиодной ленте необходимо подключить три провода: Vcc (5 вольт), GND и провод данных.
Одной из самых деликатных частей проекта является соединение светодиодных полос, поскольку полосы постоянно движутся и вибрируют, сильно нагружая соединения. По этой причине мастер решил использовать оригинальный плоский кабель, который подводит сигналы к головке. Он удалил интегральную схему, присутствующую на голове, и подключил кабели, идущие от светодиодной планки, к трем точкам плоской схемы, подключенной к разъему, который был прикреплен к электронной плате жесткого диска.
Шаг четвертый: пружина
Чтобы немного увеличить амплитуду движения рычага, он снял концевые упоры на держателе магнита.
Чтобы рычаг вернулся в центральное положение мастер установил пружину.
Он прикрепил пружину проволокой к уже имеющемуся винту. Пружина является причиной большого количества шума, и в следующем шаге он ее заменил. Хотя устройство работает и с ней.
Шаг пятый: магниты
Как видно на видео выше, пружина дребезжит при работе. Чтобы убрать шум можно напечатать специальный держатель и установить на его краях по магниту. Еще один магнит устанавливается в деталь, которая крепится к концу рычага.
Для точной регулировки концевые магниты крепятся к винтам и таким образом можно регулировать расстояние между магнитами.
Естественно, что магниты нужно устанавливать так, чтобы они отталкивались друг от друга. Т.е. одинаковыми полюсами друг к другу.
Файлы для печати можно скачать ниже.
Coil_magnet_support.STL
HD_magnet_support.STL
Шаг шестой: электроника
Электроника довольно простая.
Нужна плата микропроцессора, например, arduino-pro mini (мастер использовал клон WAVGAT, но подойдет любая другая плата).
Модуль для управления катушкой жесткого диска без перегрузки микропроцессора. Модуль состоит из двух двухтактных пар, образованных соответственно PMOS и NMOS. Особых требований нет, так как токи достаточно низкие. Важно только то, что MOS переключаются на логические уровни. В частности, я использовал AO3401 и AO3406 которые у него были под рукой. Рекомендуется добавить небольшое сопротивление (например, 100 Ом) последовательно к затвору, чтобы избежать резонансных эффектов, и понижающий резистор (например, 4,7 кОм).
Для контроля времени используется модуль часов реального времени RTC, подключенный к процессору через I2C.
Шаг седьмой: код
Обратите внимание, что файл platformio.c необходим только в том случае, если вы используете platformIO, и в этом случае его следует переименовать в platformio.ini. Мне пришлось переименовать его в .c, потому что по неизвестным причинам было невозможно загрузить файл .ini.
Время:
Для генерации управляющих сигналов для катушки он использовал TIMER1 микроконтроллера, запрограммированный на частоту 32 Гц. В коде можно увидеть, что он начинается с 75 Гц, медленно достигая 32 Гц для обеспечения плавного старта. Каждый раз, когда происходит прерывание, сигналы катушек инвертируются, генерируя форму волны с частотой 16 Гц. Это видно на фото.
TIMER2 отвечает за синхронизацию столбца. Он запрограммирован для работы на частоте 2 кГц (период = 0,5 мкс). Таким образом, за период 62,5 мкс (1/16 Гц) мы имеем 125 столбцов (= 62,5 / 0,5). Таймер 2 инициализируется на «92» при переключении таймера 1. Это 92 гарантирует, что количество столбцов не будет таким, чтобы столбец был равен 0 в середине сканирования. Затем столбец увеличивается при каждом прерывании TIMER 2, когда столбец достигает 124 (максимальное количество столбцов -1), он перезапускается с 0. Таким образом, вы можете в основном изменить количество столбцов, варьируя синхронизацию TIMER2 и 124.
Все эти «магические числа» зависят от оборудования и должны быть настроены на конкретный жесткий диск и пружину (в зависимости от диапазона, резонансной частоты системы и т. д.).
Вывод данных:
Отображение выполняется в два прохода: первый проход слева направо, а второй проход справа налево.
В первом проходе отображение начинается в столбце MINCOLUMN и заканчивается в столбце MAXCOLUMN (см. #Define в исходном файле).
Во втором проходе он начинается в столбце MINCOLUMN + DELTA_RETURN и заканчивается в столбце MAXCOLUMN + DELTA_RETURN.
Когда срабатывает TIMER2, он устанавливает метку: newcolumn.
В основном цикле тестируется newcolumn, когда он верен, он сбрасывается и, если диапазон столбцов соответствует диапазону, в котором мы хотим что-то показать, соответственно заполняется массив RGB (функциями copyString, copyLetters, copySeparators) и еще одна метка: newdata is set.
В подпрограмме обслуживания прерывания таймера 2, когда newdata имеет значение true, он сбрасывается, и массив RGB направляется на вывод Led функцией RGB_update_7. Таким образом, выходные данные синхроны с движением рычага.
Мастер не мог использовать стандартную библиотеку (Fastled или neopixel) для управления светодиодами WS2812B, потому что интенсивное использование прерываний несовместимо с такими библиотеками. Вместо этого был использован метод, объясненный Кевином Дарра в видео.
На втором фото можно увидеть форму волны катушки и пакет данных для светодиода, синхронный с TIMER2.
На третьем рисунке подробно показаны данные, управляющие светодиодом.
Создание данных.
Данные генерируются, начиная со значений времени, считываемых из RTC по шине I2C. Время обновляется каждые 500 мс. Большой массив Number включает представление (5 * 7) каждого числа. Согласно текущему столбцу, столбец числа, в зависимости от текущего времени, копируется в массив RGB.
Смещение
Когда мастер начинал проект, он думал, что все время можно отобразить за один проход. К сожалению, доступный угол довольно небольшой, поэтому пришлось отображать только часть времени и периодически сдвигать изображение влево и вправо (см. Видео).
Переменная xoffset содержит значение сдвига и альтернативно увеличивается или уменьшается в зависимости от состояния метки offsetincreasing.
main.cpp
platformio.C
Все готово. В дальнейшем мастер планирует произвести некоторые улучшения, но они скорее касаются внешнего вида устройства, т.е. улучшение дизайна.
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: