roboforum.ru

Технический форум по робототехнике.


Датчик касания оптический, триангуляция

Обсуждение технологии печати на 3D принтерах. Самостоятельное изготовление и приобретение. RepRap и его последователи.

Re: Датчик касания оптический, триангуляция

Сообщение setar » 16 фев 2016, 12:39

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

Добавлено спустя 11 минут 37 секунд:
обновил
Вложения
Снимок экрана 2016-02-16 в 11.37.53.png
logic.xls
(68.5 КиБ) Скачиваний: 219
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение ilalexey » 16 фев 2016, 12:53

dccharacter писал(а):..добавлять не только описания успешных опытов в шапку, но и испробованные, но отвергнутые варианты. Ае?

Языком простым суть дела чётко изложил
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 16 фев 2016, 15:45

setar писал(а):набросал логику алгоритма который работает при постоянном регулировании мощи лазера:
сначала находит полку минимального значения регулирования путем таймаута при известной скорости приближения,
а при втором приближении ждет начала найденного порога.

Добавлено спустя 11 минут 37 секунд:
обновил


Может лучше не в 2 прохода делать,а при выходе лазера за кадр? На входе калибруешь, на выходе сигналишь.
Или я чего не так понял?
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение setar » 16 фев 2016, 16:09

идея основана на вот этих двух графиках forum107/topic15929-720.html#p347528
и контрольные точки тут такие:
Снимок экрана 2016-02-10 в 22.18.29.png

в общем пытаюсь привязаться к концу первого фронта регулирования лазера, для того чтобы знать уровень полки даю паузу от первого срабатывания для гарантированного нахождения пятна в центре датчика

Добавлено спустя 6 минут 29 секунд:
ales2k писал(а):Может лучше не в 2 прохода делать,а при выходе лазера за кадр? На входе калибруешь, на выходе сигналишь.
Или я чего не так понял?

тут есть нюансик. от входа до выхода большое расстояние, в зависимости от геомертии сенсора от 3 до 10-15 мм
это во первых очень долгое тестирование одной точки,
а во вторых у меня вообще точка за область не выходит - в стол сопло упирается (зазор между фокусом оптики и соплом =5мм)

Добавлено спустя 1 минуту 5 секунд:
для того чтобы эти графики снять я уровень стола накладкой поднимал, на видео видно
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 16 фев 2016, 16:20

А Max почему ровный??? Ты же на его изменение ориентируешься?

Ну да, в стол упираешься потому, что фокус у линзочек от мелких лазеров 5мм.

Ты все таки в 2 прохода ходишь? Может сделать 2 лазера одинаковых на расстоянии 2-3мм и последовательно включать?
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение setar » 16 фев 2016, 16:37

два раза работает стандартная прошивка марлина:
первое срабатывание, откат, и возврат с медленной скоростью

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

Добавлено спустя 1 минуту 26 секунд:
два лазера мне ставить не хочется, я пока не исчерпал задумки на простой схеме
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 16 фев 2016, 16:39

Я к марлину еще не прикручивал.
Тогда не понимаю по какому параметру срабатывание.
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение setar » 16 фев 2016, 16:50

наброски логики, пока не стабильно, но суть думаю понятна

конфиг
Код: Выделить всёРазвернуть
#define Algo_TimeBased        // режим обнаружения минимума регулирования мощности лазера основаный на ожидаемом времени попадания пятна в центр датчика
                              // экспериментальный, базируется на геометрических размерах датчика и скорости Z 3D принтера
#define TimeBased_wait_center 250 // время в милисекундах за которое пятно перемещается от срабатывания по алгоритму Algo_MaxPix до центра датчика
#define TimeBased_wait_second 5000 // время в милисекундах в течении которого ожидаем второго замера (на молой скорости)


логика
Код: Выделить всёРазвернуть
#if defined(laser_power_pwm_target)
void RefrPowerLaser(uint8_t power)
{
  if (power > laser_power_pwm_target && RegPowLaser > 1){
    RegPowLaser--;
    analogWrite(LASER_VCC_PIN,RegPowLaser);
  }
  if (power < laser_power_pwm_target && RegPowLaser < 255){
    RegPowLaser++;
    analogWrite(LASER_VCC_PIN,RegPowLaser);
  }
}
#endif


Код: Выделить всёРазвернуть
#if defined(Algo_TimeBased)
  unsigned long SensedTime;
  byte BasePowLaser;
  typedef enum {
    START,
    WAIT_FIRST,
    FIRST_TIMER,
    ERR_OUT,
    FIRST_SENSED,
    WAIT_SECOND,
    SECOND_SEARCH,
    SECOND_SENSED
  }state_machine;
  state_machine state=START;
#endif//Algo_TimeBased
//-------------------------------------------------------------------------------------------
#if defined(Algo_TimeBased)
    //порегулируем мощность лазера
    while( (dataMax = ADNS_read(ADNS_MAX_PIX)) &&
           ( dataMax > laser_power_pwm_target ||
           ( dataMax < laser_power_pwm_target && RegPowLaser < 255) ) ){
      RefrPowerLaser(dataMax);
      delay(2);
    }
    if (RegPowLaser < 255 ) {                // лазер в поле зрения
      switch(state){
        case START:
          PIN_HIGH(LED);                  // сбросим сигнал срабатывания
          // помигаем в знак ожидания работы 255=включить лазер , 0=выключить
          analogWrite(LASER_VCC_PIN, 0);
          delay(250);
          analogWrite(LASER_VCC_PIN, RegPowLaser);
          delay(250);
         break;
        case WAIT_FIRST:
          SensedTime=millis();              // начинаем замер времени
          state=FIRST_TIMER;                // работает таймер
         break;
        case FIRST_TIMER:
          currentTime=millis();             // текущее время
          if (currentTime >= (SensedTime + TimeBased_wait_center)){ // время вышло, останавливаемся
            PIN_LOW(LED);                   // сигнал срабатывания
            BasePowLaser=RegPowLaser;       // запоминаем значение регулировки лазера
            SensedTime=currentTime;         // начинаем замер времени
            state=FIRST_SENSED;             // первый подход сработал
          }
         break;
        case FIRST_SENSED:
          if (RegPowLaser >= (BasePowLaser + 50)){ //  отошли от базового уровня на достаточное расстояние
            PIN_HIGH(LED);                   // отключаем сигнал срабатывания
            state=SECOND_SEARCH;             // второй этап
          }
          currentTime=millis();             // текущее время
          if (currentTime >= (SensedTime + TimeBased_wait_second)){ // время вышло, повторно не тестировали
            state=START;                    // начинаем цикл по новой
          }
         break;
         case WAIT_SECOND:
           SensedTime=millis();             // начинаем замер времени
           state=SECOND_SEARCH;             // возврат пятна после удаления на первое срабатывание
          break;
         case SECOND_SEARCH:
           if (RegPowLaser <= (BasePowLaser+5)){//  подошли близко к базовому уровню : срабатываем
             PIN_LOW(LED);                  // включаем сигнал срабатывания
             state=SECOND_SENSED;           // второй подход сработал
             delay(10);
             PIN_HIGH(LED);                 // отключаем сигнал срабатывания
           }
           currentTime=millis();             // текущее время
           if (currentTime >= (SensedTime + TimeBased_wait_second)){ // время вышло, порог не найден
             state=START;                    // начинаем цикл по новой
           }
          break;
      } // end switch
    }else{                                  // лазер вне поля зрения
      switch(state){
        case START:
          PIN_HIGH(LED);                    // сбросим сигнал срабатывания
          state=WAIT_FIRST;                 // переходим к ожиданию первого вхождения
         break;
        case FIRST_TIMER:
          PIN_LOW(LED);                     // сигнал срабатывания
          state=START;                      // пролетели поле зрения, авария!
         break;
         case FIRST_SENSED:
           PIN_HIGH(LED);                   // отключаем сигнал срабатывания
           state=WAIT_SECOND;               // было удаление после первого срабатывания
          break;
         case WAIT_SECOND:
           PIN_HIGH(LED);                   // отключаем сигнал срабатывания
           state=SECOND_SEARCH;             // возврат пятна после удаления на первое срабатывание
          break;
          /*
         case SECOND_SEARCH:
           PIN_LOW(LED);                    // сигнал срабатывания
           state=START;                     // пролетели поле зрения, авария!
          break;
          */
         case SECOND_SENSED:
           PIN_HIGH(LED);                   // отключаем сигнал срабатывания
           state=START;                     // цикл замера успешно завершен
          break;
      } // end switch
    }
#endif //Algo_TimeBased


Добавлено спустя 3 минуты 47 секунд:
первое срабатывание как 250мс от времени начала уменьшения мощности лазера.
второе при приближении этой мощности к ожидаемому минимуму

Добавлено спустя 1 минуту 51 секунду:
я наверное запутал названием переменной laser_power_pwm_target
ее нужно было назвать laser_power_MaxPix_target
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 16 фев 2016, 17:10

Вот теперь понял. Спасибо за пояснение.

Как на разных поверхностях работает? Допустим одну половину стола полили лаком/пивом чуть больше чем другую и она темнее.
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение setar » 16 фев 2016, 17:17

за одинаковость срабатывания на разных поверхностях и борюсь,
надеюсь что фронты на разных поверхностях совпадают по дистанции.
но пока ответа нету.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 16 фев 2016, 18:24

ilalexey писал(а):Языком простым суть дела чётко изложил

Йо майо, я приветствую вас магистр на планете Земля.
Вот теперь все сходится :ROFL:
Нате вам шиповника плодов сироп, самый любимый ваш из всех... :)

Изображение
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение ilalexey » 16 фев 2016, 19:09

Dmitry__ писал(а):Нате вам шиповника плодов сироп, самый любимый ваш из всех

В точку. Ох люблю, ужас просто ..но курить больше(с) :)
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 17 фев 2016, 00:00

Что то с калибровкой на белом не ладится
В начале все как у Сергея на графике
Снижаем мощность лазера - чуть падает MaxPix
Продолжаем снижать мощность а MaxPix растет - похоже чип регулирует свою чувствительность...
2016-02-16.png


Добавлено спустя 3 минуты 46 секунд:
Причем на темном поле при повышении мощности лазера ничего такого не наблюдается...
Не нравится мне это
мда.jpg
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 17 фев 2016, 01:06

Посмотри на частоту этих "ростов maxPix", не 50 ли герц
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 17 фев 2016, 01:19

ales2k писал(а):Что то с калибровкой на белом не ладится

Так ты даже близко еще не подошел к линейному режиму пзс. Вот данные мощности лазера от типа поверхности:
Код: Выделить всёРазвернуть
Мощность лазера на разных поверхностях:
белая 12
черный сплошной тонер 120
черный пластик 170

Белый фон - мощность 12, а у тебя график закончился на 75. :shock:
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Пред.След.

Вернуться в 3D печать

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 36