помогите разобраться пожалуйста .(считать и сэмулировать испульсы)
- Войдите на сайт для отправки комментариев
Пнд, 03/06/2013 - 00:39
Есть фото датчик на голове принтера. на нём в спокойном состоянии 3 вольта . когда он видит лист бумаги напряжение опускается до 0 вольт . Голова делает определённую последовательность движений исследуя ширину листа. Как считать их и скормить Arduino чтобы она воиспроизводила их по нажатию кнопки ?. Готов за помощь сказать спасибо материально. Правда хочется разобраться . Занимаюсь ремонтом Электроники в програмировании полный ноль.
есть ли там вообще импульсы... м/б там просто 0 или 1 - есть лист, нет листа...
Да ,там и есть только 0 и 1 . Там по умолчанию постоянно висит 1. Я смотрел осцилом , думал посчитать время самому. Но очень геморно. Попробывал считать в serial. Читается но вот тут я затупил. Мне как то нужно вычислить длину. Можно же просто постоянно слать единицу и в нужный момент нули. Там есть алгоритм голова проходит по краю листа , двигает его вперед назад. Поэтому думал записать всё в serial порт и потом скормить arduino.
Вероятно "мозги" принтера находят один край листа по перепаду уровней от датчика. Затем шаговый двигатель перемещает головку до обнаружения следующего перепада уровней. Количество шагов двигателя и даёт искомый размер бумаги.
Встречаются принтеры, где применяется прозрачная лента натянутая вдоль оси по которой перемещается головка.На ленте нанесены штрихи, а на каретке головки есть фотодатчики. Возможно с них можно снять информацию.
пишу алгоритм . пошла печать . замкнулся концевик листа подачи. мотор докрутил лист до глаза , глаз поймал его появилось 0 на глазу . дальше голова идет в право проверяя ширину листа доходит до угла поймала 1 опять идет в начало . отодвигает лист назад ловит 1 пододвигает обратно 0 и пошел печатать. К моторам даже и привязоваться не хочется . Я просто хочу скормить мозгам последовательность 0 и 1 с помощью ардуино.
Alexjustas, зачем ардуина принтеру? Принтер неисправен? Опишите большую задачу.
Делаю сувенирный , планшетный принтер для печати на любых материалах. хоть на текстиле , хоть на пластике . пока датчик не поймает лист печатать не будет. вот нужно его обмануть.
Я просто хочу скормить мозгам последовательность 0 и 1 с помощью ардуино.
digitalWrite
delay
А вообще - не очень понятно что именно вызывает у вас проблему (если предположить, что вы разобрались с базовыми ардуино примерами, типа "мигаем диодом", "читаем кнопки" и т.п.)
Спасибо , осталось считать последовательность .
Ну, у вас же вроде осцилограф был. Можно им считать.
Можно, все-таки, пойти в раздел програмирования Программирование и попытатся там найти что-то подходящие
Например pulseIn или millis
C digitalRead вы уже знакомы.
Ну и, что-бы выводить, ознакомится с Serial
Сегодня обязательно попробую . Я написал скетч с serial и Millis. Но не успел протестировать. Подсказали на roboforum. Если всё получится буду должен. Очень Вам благодарен за помощь.
01
#define BTN 2 // кнопка подключена от пина к земле
02
#define OUT 3 // выдывать имульсы будем на D3
03
#define LED 13 // встроенный светодиод, будем использовать его для индикации ошибки
04
05
unsigned
long
pulses[]={100,200,300};
// длина импульсов в миллисекундах
06
unsigned
long
pauses[]={500,600,700};
// паузы между импульсами
07
08
09
// вычисляем сколько у нас импульсов, и сколько пауз
10
#define TOTAL_PULSES (sizeof(pulses)/sizeof(unsigned long))
11
#define TOTAL_PAUSES (sizeof(pauses)/sizeof(unsigned long))
12
13
14
15
void
setup
(){
16
17
digitalWrite(2,HIGH);
// включаем внутренюю подтяжку на кнопке
18
19
// настраивыаем выходы
20
pinMode(LED,OUTPUT);
21
pinMode(OUT,OUTPUT);
22
23
digitalWrite(OUT,HIGH);
// по умолчанию на выходе 1-ница
24
25
// проверяем что количество пульсов и пауз у нас совпадает
26
if
(TOTAL_PULSES!=TOTAL_PAUSES){
// если нет, то
27
digitalWrite(LED,HIGH);
// зажигаем ошибку
28
while
(
true
){};
// останавливаем скетч
29
}
30
31
32
}
33
34
void
loop
(){
35
if
(!digitalRead(BTN)){
// если кнопка нажата
36
for
(
byte
i=0;i<TOTAL_PULSES;i++){
// выдаем TOTAL_PULSES импульсов
37
38
// ипмульс
39
digitalWrite(OUTPUT,LOW);
40
delay(pulses[i]);
41
42
// пауза
43
digitalWrite(OUTPUT,HIGH);
44
delay(pauses[i]);
45
46
47
}
48
}
49
}
импульсы не идут (
[/quote]
импульсы не идут (
1. А где вы их ждете? Почему вы решили что "не идут"? Опишите как вы это проверяли.
2. Выкинте из моего примера "
if
(!digitalRead(BTN)){
// если кнопка нажата" ,
что-бы было как в вашем примере, без кнопки. Может у вас с кнопкой проблема? если после этого "пойдут", то тогда уже с кнопкой разбиратся.И прикрепленную тему прочитайте Вставка программного кода в тему/комментарий
Нашел очепятку (OUTPUT вместо OUT).
Попробуйте вот это:
Большое Вам Человеческое спасибо . Респект Вам и Уважуха. Импульсы побежали. Я сейчас мучаюсь с проблемой , у датчика много Паразитных иппульсов, а мне нужны только глобальные . Осцилографом смотреть можно но считать очень не удобно . наверное придется собирать лог анализатор на atmega.
наверное придется собирать лог анализатор на atmega.
Ну так скетч #11 это же и есть самый тупой вариант "логического анализатора" :)
Можно сделать что-то типа такого, обернуть все что loop() в такое:
Тогда, после смены состоянию, на 500 милисекунд, скетч перестанет слушать импульсы. Станет глухим. Соотвествено все импульсы короче полуcекунды - уйдут в трубу.
Или еще проще.
Добавте, delay() внутрь if-
Выйдет тот же эффект - 500 милесекунд на все забить болт :)
Спасибо , попробую !
Вот с осцилографа .
Самый простой вариант - отключить датчки. В каретке возле ПГ откручиваем маленький винтик, достаем из датчика шлейф , радуемся.
Ну и вобще это обсосано на printmod.ru
К сожалению , не всё так просто . R230 так никогда так не заработает . Printmod читаю постоянно . Буквально вчера, всё победил. Зато теперь могу переделать практически любой принтер. И спасибо этому Форуму за помощь . особенно leshak.( скиньте мне вашу почту пожалуйста, я обещал Вам благодарность за помощь)
Энкодер ПГ желательно слушать через прерывание, как и основной. Плюс через делитель слушать движок каретки. Когда на двигатель идет сигнал, а на энкодер нет - это ноль (именно так принтер его и определяет, упираясь в капу)
Дальше все просто - отслеживаем по сигналам положение и, когда надо - эмулируем бумагу.