Предлагаю вашему вниманию поделку которую мне удалось собрать из мышки и шаговика от epson-овского принтера. Сама идея не нова и на различных форумах неоднократно обсуждалась, но step-by-step ниструкции мне найти не удалось, поэтому я решился на этот опус. Итак, имеем:
PS-ная мышь Genius и шаговик от принтера epson (не знаю точно какого) Для человека ничего не смыслящего в схемотехнике (а я таким и являюсь), выбрать мышь было делом не простым. Нужно было найти такую оптопару которую легко можно было бы прозвонить мультиметром. Отбор происходил следующим образом:
один щуп мультиметра ставился на минус, а второй на боковую ногу фототранзистора (черная штука). В открытом положении мультиметр должен показывать в районе +5 вольт, но если перекрыть пространство между ИК-светодиодом (прозрачная штука) и фототранзистором (или фотодиодом ?) , то напряжение должно упасть до нуля. Такоим образом из коробки со старыми грызунами была отобрана одна "правильная" мышь. В разобранном состоянии плата представляет следующую картину: из которой нужно выпилть кусок, так чтобы оптопара осталась в целости. На данной картинке именно нижняя отсутствующая часть пошла в дело.
Теперь разбираем шаговик от принтера: Чтобы снять крышку пришлось сделать надпилы ножовкой по металлу в местах сварки. После разборки корпуса удаляется обмотка и с вала выколачивается латунная втулка с магнитом (на рисунке уже отсутствует).
Далее колесико от мыши нужно аккуратно просверлить чтобы оно плотно надевалось на вал двигателя: Далее в одной из пластмассовых катушек делаем прорезь надфилем, чтобы кусок мышиной платы с оптопарой плотно заходил в полученный паз: С валом и колесом: Далее выводим провода наружу и припаеваем к ножкам катушки. На каждой катушке есть только три ноги, а нам нужно четыре: +, -, и два канала энкодера. Поэтому к этой катушке припаеваем только три любых провода, а четвертый оставляем подлиннее, чтобы после соединения обеих катушек припаять на свобдную ногу. Для того чтобы избавиться от продольного хода вала пришлось немало поколдовать с втулкой на вал между катушками. В итоге использовал изоляцию от гильзы, но результатом остался не очень доволен, поэтому эту часть процесса опускаю.
После того как вся проводка и резисторы "аккуратно" уложены в катушку заливаем все это силиконовым герметиком: и собираем двигатель: Подписываем полярность контаков, чтобы не пожечь чего-нибудь и "привариваем" крышку на холодную сварку. По уму нужно конечно прихватить точечной свркой, но это уж как получится. И теперь самый фокус!
подкючаем получившееся устройство к ардуино. Провод используем родной - от принтера: Заливаем в контроллер следующий скетч:
Код: Выделить всё
/*
old_encoder - предыдущее значение каналов энкодера
new_encoder - новое значение каналов энкодера
*/
byte old_encoder, new_encoder;
/*
Энкодер с двумя каналами при вращении будет выдавать коды Грея, например:
00 (0)
10 (2)
11 (3)
01 (1)
Ячейки массива ns содержат значения следующего кода для заданного индекса массива.
Например если текущее значение каналов энкодера равно 00, то в ячейке массива ns[0]
содержится следующее значение равное 2 (в бинарном виде - 10).
*/
byte ns[4] = {2,0,3,1};
/*
counter - текущее значение счетчика энкодера
*/
int counter;
/*
tmp - предыдущее значение счетчика
*/
int tmp;
void setup()
{
//start serial connection
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, INPUT);
// encoder pin on interrupt 0 (pin 2)
attachInterrupt(0, doEncoderAB, CHANGE);
// encoder pin on interrupt 1 (pin 3)
attachInterrupt(1, doEncoderAB, CHANGE);
counter = 0;
tmp = 0;
// присваиваем текущие значения каналов энкодера
old_encoder = (PINE&48)>>4;
new_encoder = old_encoder;
}
void doEncoderAB()
{
noInterrupts();
new_encoder = (PINE&48)>>4;
if (ns[old_encoder] == new_encoder)
{
counter++;
}
else if (ns[new_encoder] == old_encoder)
{
counter--;
}
old_encoder = new_encoder;
interrupts();
}
void loop()
{
if (tmp != counter)
{
Serial.print(counter);
Serial.print(' ');
Serial.println(new_encoder);
tmp = counter;
}
}
При вращении в одну сторону счетчик растет, а при вращении в другую - уменьшается.
Точно не замерял, но один оборот вала дает примерно 200 шагов.
Электрическая схема подключения легко находится в форуме ардуинщиков (где я собственно и почерпнул идею с энкодером из мыши). Единственный момент - +5 вольт я подавал на среднюю ногу фототранзистора, а с боковых получал цифровые сигналы уровня ttl и "подтягивал" их резисторами к земле.
Скетч настучал сам, поэтому наверное он не идеален, но для проверки - пойдет.
Теперь о применении:
для чего можно использовать такую штуку ? Например, для изготовлении актуатора. Видел здесь на форуме человек интересовался пультом для управления подачи бревна на пилораме. Так же я сам поднимал тему о замене асинхронного двигателя на двухголовой пиле для управления подвижной головой. Вот в подобных случаях и можно применить связку ардуины и подобного энкодера. Конечно, на промышленный станок лучше приобрести нормальный энкодер, а к ардуине прикупить еще и LCD-экран (можно маленький 1602), пленочную клавиатуру (самый дешевый вариант) и реле для управления нагрузкой. И тогда можно автомтизировать даже древний станок с асинхронным двигателем без особых затрат.