Нужна помощь в скетче для страбоскопа

Jyzi
Offline
Зарегистрирован: 04.03.2019

Ув. комрады,  Возникла необходимость соорудить стробоскоп, так что бы можно было бы энкодером регулировать частоту. В инете полно готовых скетчей, поэтому за основу взял самый распотранненый, но так как сам, очень не силен в коде, не могу его под себя допилить.

код:

// Выводы ЭНКОДЕРА
#define CLK 3  // Clock Подключаем к INT1, нельзя переназначать
#define DT 4  // второй вывод энкодера
#define SW 5  // switch кнопка энкодера

#define Min 1 // минимальное значение 
#define Max 20000 //максимальное значение
#define led_pin 12        // подключен светодиод
#define coil_pin A0

#define step_freq 1       // шаг изменения частоты плавно 0,1гц
#define step_timelght 100 // шаг приращивания в мкс
volatile int freq = 10; // частота в Гц умноженная на 10, для более плавной настройки
volatile uint32_t paus, time_light=100; // время свечения светодиода в мкс
uint32_t oldcount;
boolean DT_last; // последнее состояние энкодера

void setup()  
{
  pinMode(CLK,INPUT_PULLUP); // Clock Подключаем к INT1, нельзя переназначать
  pinMode(DT, INPUT_PULLUP); // второй вывод энкодера
  pinMode(SW, INPUT_PULLUP); // кнопка энкодера
  pinMode(led_pin, OUTPUT);    // управление симистором
  pinMode(coil_pin, OUTPUT);

  attachInterrupt(1, encoderTick, CHANGE); // прерывания от Энкодера
  
  DT_last = digitalRead(CLK);         // считываем положение CLK
}

void loop()
{
    paus=1000000/freq;
    digitalWrite(coil_pin, 1);
    digitalWrite(led_pin, 1);
    
    oldcount = micros();
    while( (micros() - oldcount) < time_light){}   // длительность импульса выдержки          
    digitalWrite(led_pin, 0);
    while( (micros() - oldcount) < paus){}  // положительный полупериод
    digitalWrite(coil_pin, 0);
    
    oldcount = micros();
    while( (micros() - oldcount) < paus){} //отрицательный полупериод
}

//********************обработчики прерываний Энкодера*******************************
void encoderTick()     // Обратка прерываний от Энкодера
{
  uint8_t DT_now = digitalRead(CLK);       // считываем текущее положение CLK
  
  if (DT_now != DT_last && digitalRead(SW))   // если предыдущее и текущее положение не равны, значит был поворот 
  {                     
    if (digitalRead(DT) != DT_now)    // если DT не равен CLK, значит вращение по часовой стрелке
    {                             
      if( freq < Max ) freq += step_freq;    // прибавить 
    } else {                                   // если DT равен CLK, значит вращение против часовой
             if( freq > Min ) freq -= step_freq;  // убавить            
            }
  } else 
          if (DT_now != DT_last && !digitalRead(SW)) //если нажата кнопка и было вращение
          {
           if (digitalRead(DT) != DT_now)         // если DT не равен CLK, значит вращение по часовой стрелке
            {                             
              if( time_light < paus ) { time_light += step_timelght; } // убавить длительность           
            } else  if( time_light > 0 ) time_light -= step_timelght;    // прибавить длительность импульса выдержки/
          }
          
  DT_last = DT_now;                   // сохранить положение CLK для следующей проверки
}  

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

Вышеуказанным скетчем сделать это не могу. 

Jyzi
Offline
Зарегистрирован: 04.03.2019

Подскажите, где туплю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Jyzi пишет:

Подскажите, где туплю.

Не прочитал начальную тему этого раздела. А если прочитали, то не следуете правилам. Я уж не говорю, что там требуется самописный код, Бог с ним, но уж хоть ... вопрос-то задайте.

Вот где в Вашем топике вопрос, на который кто-то мог бы ответить? "не могу" - это не вопрос, это утверждение. У Вас вопросы есть? Задавайте. А нет - так мы приняли к сведению, что Вы не можете и на том остановимся.

И, да, во избежание ... "Как это сделать?" - тоже по сути не вопрос. Вам ответят: сесть, почесать репу и сделать".

Вы уж будьте любезны описать как оно работает сейчас, как Вы хотите, чтобы оно работало, в чём разница между первым и вторым, и задайте конкретный вопрос по коду или по схеме.

svm
Offline
Зарегистрирован: 06.11.2016

Для того, чтобы вентилятор "остановился" -  период моргания стробоскопа должен равняться периоду вращения лопасти вентилятора или если вентилятор трехлопастной, то период моргания может быть в три раза меньше. Длительность вспышки должна быть такой, чтобы за это время лопасть переместилась на минимальное расстояние. Удовлетворяет-ли этим условиям Ваш скетч?

Jyzi
Offline
Зарегистрирован: 04.03.2019

Судь в общем то это понятно, я по техническим параметрам вентилятора выставлял частоту и время в коде , прямым указанием на канал, зажигать и гасить диод по таймеру. но все равно не могу подобрать точное значение, да и это не решение совсем. сама суть данной работы не связана не с вентилятором. он нужен для упрощения рабочего процесса. вот есть полоса бумаги (лента), на которою трафаретом наносятся рисунки разных цветов, при высокой скорости подачи ленты, иногда съезжает картинка, для визуального контроля надо установить стробоскоп, который будет руками синхронизироватьс со скоростью ленты, т.к. скорость ленты может быть разная, точную регулировку частоты необходимо делать патенциометром. Этот код из сети, я в нем принцип работы немного понимаю, но не могу подобрать наиболее точные параметры или делаю это не правильно.

Jyzi
Offline
Зарегистрирован: 04.03.2019

Думаю его сначала надо на ленте опробовать, а не эксперементировать на вентиляторе, все таки разные это механизмы. )))

ЗЫ. как только прочел про "трехлопасной вентилятор" все стало ясно, в чем была проблема проблема. СПСБ. слишком высокая частота работы вентилятора.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

А точно то зачем? Ну будет картинка медленно уплывать в ту или иную сторону ... всё равно же качество нанесения рисунка будет видно. В любом случае надо рассмотреть возможность установки датчиков на один из барабанов, двигающих ленту. Много вопросов отпадёт само собой. Ну и посмотри вот это видео https://www.youtube.com/watch?v=jUzeeG9tqmU

Jyzi
Offline
Зарегистрирован: 04.03.2019

Назначение устройства: Есть печатная машина, которая наносит трафаретом картинку на бумажную полосу, картинка соответсвенно повторяется регулярно, получается, что то наподобе фотопленки, только с одинаковым кадром по всей длине, так в один проход наносится рисунок, есть задача печатать несколько цветов, для печати каждого цвета нужно отдельно прогонять материал (ленту), скорость ленты может достигать (макс.) 150 м/с. кроме этого, сами кадры могут быть разного размера, при настройке во время запуска машины, цвета сводятся в ручную, оператором. но за время работы, сама лента может смещаться на несколько мм в разные стороны, для контроля этого параметра необходимо качесвенно видеть "кадр" (рисунок) на высокой скорости ленты.

Варианты решения:

1. страбоскоп, с регулируемой частотой вспышки. Но тут есть существенный минус, регулярно придется, вручную подстрайвать частоту потенциометром под скорость ленты.

2. снятие показаний с оптической метки, установленной на машине (при печати кадра, в различных местах, возможно нанесение цетографической метки.) Но тут есть так же минус, сколько смотрел примеров, скорость срабатывания и обработки сигнала недостаточная, для использования в данной ситуации. Распознование метки всегда будет существенно запаздывать на высокой частоте.

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

Jyzi
Offline
Зарегистрирован: 04.03.2019

Муж_Долговой пишет:

А точно то зачем? Ну будет картинка медленно уплывать в ту или иную сторону ... всё равно же качество нанесения рисунка будет видно. В любом случае надо рассмотреть возможность установки датчиков на один из барабанов, двигающих ленту. Много вопросов отпадёт само собой. Ну и посмотри вот это видео https://www.youtube.com/watch?v=jUzeeG9tqmU

Это и было взято за основу.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Jyzi пишет:

2. снятие показаний с оптической метки, установленной на машине (при печати кадра, в различных местах, возможно нанесение цетографической метки.) Но тут есть так же минус, сколько смотрел примеров, скорость срабатывания и обработки сигнала недостаточная, для использования в данной ситуации. Распознование метки всегда будет существенно запаздывать на высокой частоте.

 

Решение этого нашел господин Люмьер, как я помню, в конце позапрошлого века механически перекрывая источник света синхронно со сменой кадров.

Ну на современном виде - можно сделать без контроллера, повесив на вал диск с отверстиями, пересекающими оптопару, которая управляет стробоскопом.

Jyzi
Offline
Зарегистрирован: 04.03.2019

датчик препятствия был рассмотрен в самую первую очередь. Но это не вариант, причина в том, что на некоторых валах может быть два или три кадра, поэтому необходимо размещать несколько равноудаленных меток, тем более сейчас автомат, как раз печатают эту цветографическую метку для обрезки бумаги, почему бы ее не использовать для снятия показаний для страбоскопа. Для каждого оттиска изготавливается индивидуальный трафарет и клеиться на свой индивидуальный вал, поэтому их несколько (много))) штук, есть датчики, не ардуиновские, промышленные, на базе лазеров. В понедельник сниму с них показания и буду пробовать их прикрутить на входной сигнал. может кто поможет потом с написание кода к этим железкам.

 

ЗЫ. Про б.люмьер, правильно, именно на этом и основывалось решение,