Как подключить несколько приводов CD-ROM к Arduino для создания интерактивной инсталляции. Какие сигналы нужны для открытия/закрытия лотков CD-ROM. Как использовать датчики для управления движением дисководов в кинетической скульптуре.
Подключение приводов CD-ROM к Arduino
Для управления несколькими приводами CD-ROM с помощью Arduino потребуется решить несколько технических задач:
- Подключение приводов к контроллеру
- Формирование нужных сигналов управления
- Организация питания для большого количества устройств
- Программирование логики работы
Рассмотрим основные способы подключения CD-ROM к Arduino:
1. Через кнопку извлечения
Самый простой способ — подключиться напрямую к кнопке извлечения привода. Для этого нужно:
- Найти на плате привода контакты кнопки извлечения
- Припаять провода к этим контактам
- Подключить провода к цифровым пинам Arduino через резисторы 220-330 Ом
При подаче сигнала HIGH на пин Arduino лоток будет открываться/закрываться.
2. Через IDE-интерфейс
Более сложный, но универсальный способ — управление через IDE-разъем привода:
- Подключить линии данных и управления IDE к пинам Arduino
- Реализовать программно протокол ATA для отправки команд приводу
- Отправлять команды EJECT/LOAD для открытия/закрытия лотка
Этот способ требует более глубокого понимания работы IDE-интерфейса.
Формирование сигналов управления CD-ROM
Для открытия/закрытия лотка CD-ROM требуется отправить определенную последовательность сигналов. Рассмотрим основные варианты:
Управление через кнопку извлечения
В этом случае достаточно подать импульс длительностью 100-200 мс на соответствующий пин Arduino:
void ejectDrive(int drivePin) {
digitalWrite(drivePin, HIGH);
delay(150);
digitalWrite(drivePin, LOW);
}
Отправка ATA-команд через IDE
Для управления через IDE-интерфейс нужно отправить команду EJECT/LOAD:
void sendATACommand(byte command) {
// Установка линий управления
digitalWrite(IDE_CS0, LOW);
digitalWrite(IDE_DA0, HIGH);
// Отправка команды на шину данных
PORTD = command;
// Строб записи команды
digitalWrite(IDE_DIOW, LOW);
delayMicroseconds(100);
digitalWrite(IDE_DIOW, HIGH);
}
void ejectDrive() {
sendATACommand(0x1B); // Команда EJECT
}
Подключение датчиков для управления CD-ROM
Для создания интерактивной инсталляции потребуется подключить различные датчики к Arduino. Рассмотрим основные варианты:
Микрофон
Для реакции на звук можно использовать электретный микрофон с усилителем:
- Подключить выход микрофона к аналоговому входу Arduino
- Считывать значение ADC и анализировать уровень звука
- При превышении порога активировать нужные приводы
int micPin = A0;
int soundLevel;
void loop() {
soundLevel = analogRead(micPin);
if(soundLevel > THRESHOLD) {
activateDrives();
}
}
Сенсорные датчики
Для управления касанием подойдут емкостные сенсорные датчики:
- Подключить выходы датчиков к цифровым пинам Arduino
- Считывать состояние датчиков в цикле
- Активировать соответствующие приводы при касании
int touchSensors[] = {2,3,4,5,6};
int drives[] = {7,8,9,10,11};
void loop() {
for(int i=0; i<5; i++) {
if(digitalRead(touchSensors[i]) == HIGH) {
activateDrive(drives[i]);
}
}
}
Питание большого количества CD-ROM приводов
Для питания 20-30 приводов CD-ROM потребуется мощный источник питания. Варианты организации питания:
- Использовать серверный блок питания на 500-750 Вт
- Подключить несколько компьютерных БП параллельно
- Применить промышленный источник питания 12В/5В большой мощности
Важно обеспечить отдельную линию питания для Arduino и датчиков, чтобы избежать помех.
Программирование логики работы инсталляции
Алгоритм работы кинетической скульптуры может быть следующим:
- Инициализация приводов и датчиков
- Циклическое считывание показаний датчиков
- Анализ данных и принятие решения об активации
- Отправка команд нужным приводам
- Добавление случайности в движения
Пример базовой структуры скетча:
void setup() {
initDrives();
initSensors();
}
void loop() {
readSensors();
analyzeData();
activateDrives();
delay(100);
}
Создание визуальных эффектов с помощью CD-ROM
Управляя группами приводов CD-ROM, можно создавать различные визуальные эффекты:
- Волны — последовательное открытие/закрытие приводов
- Случайное мерцание — хаотичная активация
- Симметричные узоры — синхронное движение парных приводов
- Отслеживание движения — активация ближайших к датчику приводов
Для реализации эффектов потребуется запрограммировать соответствующие алгоритмы управления группами приводов.
Оптимизация энергопотребления инсталляции
При большом количестве приводов важно оптимизировать энергопотребление:
- Использовать режим сна Arduino между циклами активности
- Активировать приводы группами, а не все сразу
- Применять ШИМ для плавного открытия/закрытия
- Отключать неиспользуемые компоненты приводов
Это позволит снизить нагрузку на блок питания и уменьшить тепловыделение.
Защита электроники от внешних воздействий
Для надежной работы инсталляции необходимо обеспечить защиту электронных компонентов:
- Поместить платы управления в защитный корпус
- Использовать пылевлагозащищенные датчики
- Применить экранирование для снижения электромагнитных помех
- Обеспечить эффективное охлаждение силовой электроники
Это повысит стабильность работы и продлит срок службы устройства.
Получаем изображение с оптического сенсора комьютерной мыши с помощью Arduino / Хабр
Для решения одной из задач мне потребовалось программно получать и обрабатывать изображения небольшого участка поверхности бумаги с очень близкого расстояния. Не получив достойного качества при использовании обычной USB камеры и уже на пол пути в магазин за электронным микроскопом, я вспомнил одну из лекций, на которой нам рассказывали как устроены различные девайсы, в том числе и компьютерная мышка.
Подготовка и немного теории
В подробности принципа работы современной оптической мыши я вдаваться не буду, очень подробно об этом написано вот тут (рекомендую прочитать для общего развития).
Погуглив информацию по этой теме и разобрав старую PS/2 мышку Logitech, я увидел знакомую по статьям из интернета картину.
Не очень сложная схема «мышей первого поколения», оптический сенсор по центру и чип интерфейса PS/2 чуть выше. Попавшийся мне оптический сенсор является аналогом «популярных» моделей ADNS2610/ADNS2620/PAN3101. Я думаю, они и их аналоги были массово произведены на одном и том же китайском заводе, получив на выходе разную маркировку. Документация на него нашлась очень легко, даже вместе с различными примерами кода.
Документация гласит, что этот сенсор до 1500 раз в секунду получает изображение поверхности размером 18×18 точек (разрешение 400cpi), запоминает его и с помощью алгоритмов сравнения изображений вычисляет смещение по координатам Х и Y, относительно предыдущей позиции.
Реализация
Для «общения с сенсором» я использовал популярную вычислительную платформу Arduino, а припаяться решил прямо к ножкам чипа.
Подключаем 5V и GND к соответствующим выходам Arduino, а ножки сенсора SDIO и SCLK к цифровым пинам 8 и 9.
Для получения смещения по координатам нужно прочитать значение регистра чипа по адресу 0x02 (X) и 0x03 (Y), а для дампа картинки нужно, сначала записать значение 0x2A по адресу 0x08, а потом 18×18 раз его прочитать оттуда же. Это и будет последнее «запомненное» значение матрицы яркости изображения с оптического сенсора.
Как я реализовал это на Arduino можно посмотреть тут: http://pastebin.com/YpRGbzAS (всего ~100 строк кода).
А для получения и отображения картинки была написана программа на Processing.
Исходник тут: http://pastebin.com/XqGyP5EA.
Результат
После небольшого «допиливания» программы для своего проекта, я смог получать картинку прямо с оптического сенсора и производить над ней все необходимые вычисления.
Можно заметить текстуру поверхности (бумага) и даже отдельные буквы на ней. Следует отметить, что такое четкое качество картинки получается из-за того, что разработчики этой модели мыши добавили в конструкцию специальную стеклянную подставку с небольшой линзой прямо под сенсором.
Если начать приподнимать мышку над поверхностью даже на пару миллиметров, четкость сразу пропадает.
Если вы вдруг захотите повторить это дома, для нахождения мышки с аналогичным сенсором рекомендую искать старые девайсы с интерфейсом PS/2.
Заключение
Хотя получаемое изображение и не очень большое, этого вполне хватило для решения моей задачи (сканнер штрих кода). Получилось очень даже экономично и быстро (мышка за ~100р + Arduino + пару дней на написание кода).
Оставлю ссылки на материалы, которые мне очень пригодились для решения этой задачи. Это реально было не сложно и делалось с большим удовольствием. Сейчас я ищу информацию о чипах более дорогих моделей современных мышек для получения качественных изображений с большим разрешением. Возможно, мне даже удастся собрать что-то вроде микроскопа (качество изображений с текущего сенсора для этого явно не подходит). Спасибо за внимание!
Теория
http://www.ixbt.com/peripheral/mice-sensor.shtml
Аналогичные работы
http://spritesmods.com/?art=mouseeye&page=1
http://www.bidouille.org/hack/mousecam
Документация
http://www. avagotech.com/docs/AV02-1184EN
Исходники
http://pastebin.com/YpRGbzAS
http://pastebin.com/XqGyP5EA
UPD от 23.09: добавил немного информации про линзу и номера пинов для ардуины.
Сделайте оптический датчик потока, используя Arduino, элементы CdS и коробку из-под обуви! — Блоги
Сделайте оптический датчик потока, используя Arduino, элементы CdS и коробку из-под обуви!
Автор: Джеффри Л. Бэрроуз, 5 декабря 2011 г., 15:25
Это устройство не может сравниться с датчиком Рэнди, но работает (минимально). Думайте об этом маленьком проекте как о забавном хаке больше, чем о чем-либо еще. Но с некоторой настройкой и уменьшением размера кто-то, вероятно, мог бы реализовать иногда работающий датчик удержания высоты для самолета с неподвижным крылом RC.
Этот оптический датчик потока использует ячейки CdS в качестве светочувствительных элементов. Напомним, что ячейка CdS — это, по сути, резистор, значение которого изменяется в зависимости от освещения — больше света приводит к меньшему сопротивлению. Фундаментальная чувствительная структура здесь представляет собой пару ячеек CdS, соединенных последовательно, чтобы сформировать делитель напряжения. Средний узел между ячейками CdS формирует выход. Когда обе ячейки освещены одинаково, выходное напряжение находится посередине между питанием и землей (при условии, что ячейки CdS совпадают). Если одна ячейка освещена больше, чем другая, соответственно изменяется выходное напряжение. Интересное качество этой пары ячеек CdS заключается в том, что если вы, скажем, удвоите количество света, падающего на обе ячейки, выходной сигнал изменится очень мало.
Девять из этих пар ячеек CdS расположены в ряд, как показано на видео. Обратите внимание на фото ниже, чтобы увидеть, как расположены ячейки CdS и как они перекрываются внутри массива. Девять результирующих выходов поступают на порты с A0 по A8 (аналоговые входы с 0 по 8) Arduino Mega. Для этого проекта потребовался Mega из-за большого количества аналоговых входных сигналов.
Для тех из вас, кто имеет опыт обработки изображений, вы можете сказать, что пара ячеек CdS образует простой аналоговый детектор краев, а соседние детекторы краев сдвинуты по фазе на 120 градусов.
По мере того, как световые узоры перемещаются по массиву CdS, девять аналоговых сигналов будут соответственно изменяться и могут быть интерпретированы с помощью базового алгоритма одномерного оптического потока. Например, если тень перемещается по массиву слева направо, импульсная или ступенчатая функция последовательно появляется через порты от A0 до A8 (или в другом направлении), что указывает на визуальное движение.
Для получения изображения я просто использовал щелевое отверстие, которое является разновидностью камеры-обскуры. Это отверстие щели было ориентировано перпендикулярно массиву CdS, что сохраняет визуальную информацию параллельно массиву CdS и сглаживает информацию перпендикулярно ему. Это помогает сделать массив более чувствительным к одномерному визуальному движению в нужном направлении. (В качестве грубой метафоры подумайте о штрих-коде.)
Я закрепил всю электронику в обувной коробке с помощью клейкой ленты. (Для более профессиональной и прочной версии используйте клейкую ленту!) Я также поместил темную плотную бумагу внутрь коробки, чтобы свет не отражался. Я вырезал щель в верхней части коробки, как показано, чтобы расположить ее над массивом CdS.
Выходной сигнал может быть прочитан двумя способами: порт Arduino D3 генерирует ШИМ-сигнал, который при подключении к показанной сети RC может генерировать аналоговый выходной сигнал, представляющий оптический поток (5 В = максимальное положительное значение, 0 В = максимальное отрицательное значение, 2,5 V = ноль). В качестве альтернативы вы можете прочитать его, используя последовательный дисплей среды Arduino.
Датчик несовершенен, но работает. Для работы ему требуется много света — он должен работать в ярко освещенном помещении, но лучше работает при естественном наружном освещении, скажем, в несколько сотен люкс и выше.
Эскиз Arduino прикреплен здесь: CdS_OF_Sensor_r1.pde
Удачи!
arduino — CD-ROM открываются/закрываются в ответ на датчики
Задай вопрос
спросил
Изменено 8 лет назад
Просмотрено 4к раз
\$\начало группы\$
Общий вопрос:
Как я могу открывать и закрывать приводы CD-Rom (около 20-30) в ответ на различные сигналы датчиков?
Несколько более конкретных вопросов (исходя из предположения, что я должен решить это с помощью Arduino):
Как мне выяснить, какие контакты на разъеме IDE должны принимать сигнал?
Как мне понять, какой сигнал нужно отправить на эти контакты? И как мне заставить ардуино отправлять этот сигнал?
Некоторый контекст:
Я работаю над кинетической скульптурой сосны, сделанной из старых приводов CD-ROM. По сути, каждая «ветвь» дерева представляет собой дисковод компакт-дисков, направленный в сторону от ствола. Приводы будут открываться и закрываться в зависимости от обратной связи через:
- Микрофон. Алгоритм будет открывать и закрывать диски на основе анализа аудиовхода. Одна идея, дуя в микрофон (как ветер), будет имитировать ветер, дующий ветками сосны (они будут открывать и закрывать ставни)
- Альтернативный (или, возможно, дополнительный ввод): маленькая модель дерева с сенсорными датчиками. Если обхватить рукой все маленькое дерево и закрыть все датчики, все приводы закроются. В основном каждый датчик сопоставляется с одним диском, закрываешь его и диск закрывается.
- ардуино
\$\конечная группа\$
1
\$\начало группы\$
Как это идет здесь грязный путь. У каждого компакт-диска есть кнопка извлечения, верно? Вырвите кнопку и подключите ее напрямую, используя любой вход, который у вас есть.