Работа с оптопарой.

denis87
Offline
Зарегистрирован: 02.07.2015

Разобрал струйный принтер, в нем перемещением каретки управляет оптопара, которая стоит на каретке и перемецается вдоль прозрачной ленты, на которую нанесены непрозрачные вертикальные полоски, решил я эту оптопару подключить к ардуино и поуправлять перемещением каретки. Т.к. напряжение на этой оптопаре крошечное, решил использовать analogRead и уже потом сравнивать значения и считать эти вертикальные черточки, но столкнулся с проблемой. Если быстро переместить каретку, то скетч насчитывает всего ~100 импульсов на оптопаре, а если перемещать медленно, то при прохождении такого же пути кареткой насчитывается ~1000 импульсов. В чем проблема, analogRead слишком медленно работает? Он не успевает снять значение входного напряжения несколько тысяч раз за секунду?

denis87
Offline
Зарегистрирован: 02.07.2015

Решил проблему, поднял скорость serial порта до 250000 и стало норм.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

И какое значение последовательный порт имеет к перемещению каретки?

Или Вы пытались выводить данные в порт прямо во время измерений?

 

Чтение аналогового сигнала по моим оценкам примернео 110 мкс. Т.е. 9 раз за мс прочитать можно.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

andriano пишет:

И какое значение последовательный порт имеет к перемещению каретки?

ну не успевал он протолкнуть на скорости 9600 всю и инфу :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А читать глазами успеваем?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

andriano пишет:

А читать глазами успеваем?

ток если пальцем по строякам водить. но потом экран мыть приходиться.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А мыть руки не пробовали?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на прерываниях наверно еще больше бы поймал 

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Фууу... Троли  противныыыеее...

denis87
Offline
Зарегистрирован: 02.07.2015

andriano пишет:

Или Вы пытались выводить данные в порт прямо во время измерений?

Да, что не правильно. Сейчас сделал иначе.

denis87
Offline
Зарегистрирован: 02.07.2015

А вывод занимает много времени, analogRead выполняется с промежутками на выводы и во время вывода в потр не обраьатывает сигнал с оптопары. Вот каретки и уезжает дальше чем надо.

denis87
Offline
Зарегистрирован: 02.07.2015

Вот видео как это все работает https://yadi.sk/i/Wft74dvBhfz7c , но в данном виде оно не пригодно для лазерной резки т.к. моторчик слишком резко включается и по энерции проскакивает больше, чем 100 шагов, которые заданы на кнопку 2. Надо более тихиходный мотор ставить.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

denis87 пишет:
Надо более тихиходный мотор ставить.
Либо использовать ШИМ.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Ищите раму от старых принтеров.
Там стоят обычные шаговики.

И вообше если вы желаете резать точно- часто на  моторе стоит прозрачный диск с рисками
или на раме натянута прозрачная лента с рисками.

Это возможность для вас читать импульсы движения  мотора (подвижной части.)
Но управлять по этому "энкодеру" не так просто получится. Как бы ПИД не потребовался...

А на оптопаре напряжение не крошечное. С неё можно снять напряжение почти равное пробивному напряжению транзистора. Подвесив нужный резистор.

И считать сигнал импульсной  оптопары аналоговым - это извращение

denis87
Offline
Зарегистрирован: 02.07.2015

trembo пишет:

Ищите раму от старых принтеров.
Там стоят обычные шаговики.

Это насколько старые принтеры? Матричные?

Кстати да, надо попробовать шим управление двигателем.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Матричные- там 100 % шаговики.
Да и струйники первые тоже шагали.
Сканеры вроде все на слабеньком шаговике.
А какую НЕМУ найти и к вашей шестерне пристоить нельзя?

А если ваш..... 
Не знаю как плавно стронуть с места под нагрузкой  и  не дать ему разогнаться ....

На выход оптрона 10 кОм повесили к питанию?
DigitalRead пробовали?

denis87
Offline
Зарегистрирован: 02.07.2015

Можно как-нибудь организовать шим управление DC двигателем без delay?

У меня если вставить delay в цикл loop, начинаются пропуски меток оптопарой и каретка проходит путь в несколько раз больше.

Жирным в коде выделил "ШИМ", просто analogWrite, это же не шим, как говорят во многих видео, это установка определенного напряжения на выводе всего лишь.

/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor

This example code is in the public domain.
*/
#define FASTADC 1

// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#include <Wire.h>
#include <HMC5883L.h>  // для компаса
#include <IRremote.h>
int Data;
int i;
int n;
int lasti;
int a;
int b;
int c;
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;

void setup() {
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
Wire.begin();
Serial.begin(250000);
irrecv.enableIRIn(); // Start the receiver

Serial.println(11111, DEC);
pinMode(14, OUTPUT);
a=0;
}

void loop() {

Data  =  analogRead(4);

if(Data<280)
i=0;

if(Data>295)
  i=1;

if(lasti!=i) {
n=n+1;
lasti=i;
if (n>=a) {
analogWrite(14, 0);
Serial.println(n, DEC);
}
else {
analogWrite(14, 150);
delay(1);
analogWrite(14, 0);
delay(1);
analogWrite(14, 150);

}

}
 
//delay(100);
 if (irrecv.decode(&results)) {
  Serial.println(results.value);
 if (results.value==553536955) {
 Serial.println(n, DEC);
 n=0;
 irrecv.resume();// Receive the next value
 analogWrite(14, 150);
 }
 if (results.value==2534850111) {
 Serial.println(n, DEC);
 n=0;
 a=10;
 irrecv.resume();// Receive the next value
 analogWrite(14, 150);
 }
 if (results.value==1033561079) {
 Serial.println(n, DEC);
 n=0;
 a=100;
 irrecv.resume();// Receive the next value
 analogWrite(14, 150);
 }
 if (results.value==1635910171) {
 Serial.println(n, DEC);
 n=0;
 a=1000;
 Serial.println(a, DEC);
 irrecv.resume();// Receive the next value
 analogWrite(14, 150);
 }
 else {
irrecv.resume();// Receive the next value
 }
}

}

denis87
Offline
Зарегистрирован: 02.07.2015

И да, analogRead для оптопар не правильно, согласен, но в принтере hp стоят какие-то странные оптопары, если она открыта, то analogRead возвращает всего лишь 300, а если закрыта, то 260. Как такую крошечную разницу привести к логическим 0 и 1? Схема будет сложная очень.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

смотря как питать оптопару

да и компараторы никто не отменял

denis87
Offline
Зарегистрирован: 02.07.2015

Ну это все равно не решит мою проблему, ну будет digitalRead вместо analogRead, все равно будет пропкускать метки при движении мотора во время delay

denis87
Offline
Зарегистрирован: 02.07.2015

А, разобрался, надо делать analogWrite на ЦИФРОВОЙ выход, тогда он работает как шим. Только вот мой транзистор этого не оценил и сгорел.

bwn
Offline
Зарегистрирован: 25.08.2014

denis87 пишет:

Жирным в коде выделил "ШИМ", просто analogWrite, это же не шим, как говорят во многих видео, это установка определенного напряжения на выводе всего лишь.

Ой.....

denis87
Offline
Зарегистрирован: 02.07.2015

Сейчас работает отлично, только мощному полевеку из матплаты очень неприятно.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

denis87 пишет:

Жирным в коде выделил "ШИМ", просто analogWrite, это же не шим, как говорят во многих видео, это установка определенного напряжения на выводе всего лишь.

Не знаю, кто и где такое говорит, но analogWrite это и есть ШИМ. Вот, хоть справку почитайте - AnalogWrite. А циферками от 0 до 255 меняется скважность от 0% до 100%. К тому же, хардварный ШИМ можно вывести не на все ппины, а только на определенные (например для UNO, Nano и др. - 3, 5, 6, 9, 10, и 11). 

Для установки "определенного напряжения на выводе" без ШИМ нужен ЦАП, а его нет.

 

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

denis87 пишет:

Сейчас работает отлично, только мощному полевеку из матплаты очень неприятно.

Как полевик подключали? Что за полевик, открывается логическим уровнем?

denis87
Offline
Зарегистрирован: 02.07.2015

K3639, логическим, да.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Если из-за медленного переключения греется ( ёмкость затвора 2400 пФ) попрбуйте что-то простое типа:
http://www.eetimes.com/author.asp?doc_id=1279277