roboforum.ru

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

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

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

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

Сообщение Dmitry__ » 24 дек 2015, 06:40

Ок, понял, но мне сейчас надо графики строить как тут, чтоб сравнивать картинки фиксир. опусканий головы (проход всего поля), но на разных поверхностях. Т.е. мне надо графики со строго фиксир. шириной. Надо щто, чтоб вычислить оптимальный порог для разных контрастов. Если скорость опускания всегда одинаковая и считывание пзс тоже равномерное, то колич. строк должно быть тоже одинаковым, ну плюс минус. Кста и проверим. Твой вариант, да, строгое колич строк, но если там все неравномерно, то и полученные данные тоже будет плавать.
Кста, если чтение пзс будет неравномерным, то твой способ хорош для значения NUM_SAMPLES_PER_MEASURE равным "1", и делать кучу опусканий с паузами. Тогда графики по оси х будут точно привязаны к расстоянию. Это если прямой импорт лога в электр. таблицу. Если делать усреднение, то твой вариант полностью работает, но я не готов возиться с обработкой на стороне компа. И непонятно кто щту обработку будет делать в итоговом датчике (если так данные скачут).

Добавлено спустя 5 минут 42 секунды:
Во, точно, можно сделать uint16_t для этого параметра, кому нужно фиксир.колич. строк, заносят реальное значения, остальным 65535. Будет всем хорошо, принято.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение dccharacter » 24 дек 2015, 06:52

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

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

Сообщение Angel71 » 24 дек 2015, 07:05

Dmitry__, какие платы, а по старинке проводочками
37d9e6.jpg
37d9e6.jpg (36.34 КиБ) Просмотров: 1884

:D или 3д монтаж
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение Dmitry__ » 24 дек 2015, 07:11

Ок, сделал, но перенаворот жесткий, еще надо учитывать состояние TRIGGER_PIN.
Пока так:
Код: Выделить всёРазвернуть
#elif flg_serial_debug ==4
//-----------------------------------------------------------------------
   //Как 3-й режим, но по разрешению сигнала pin_TRIG (лог точно ограничен сигналом z_probe)
   byte Frame[(ARRAY_WIDTH * ARRAY_HEIGHT)+1];
   while(1)
   {
      while(!(pin_TRIG_IN)){}   //ждать "1"
      //заголовок
      #if !defined(__AVR_ATtiny85__)
         Serial.println         ("squal:\tMax_Pix:\tMin_Pix:\tPix_Sum:\tShutter:");
      #else
         MyDbgSerial.println   (F   ("Squal:\tMax:\tMin:\tSum:\tShutter:"));
      #endif

      for (uint16_t i = 0; i < NUM_SAMPLES_PER_MEASURE; i++)
      {
         Frame[0] = ADNS_read(squal);
         Frame[1] = ADNS_read(Maximum_Pixel);
         Frame[2] = ADNS_read(Minimum_Pixel);
         Frame[3] = ADNS_read(Pixel_Sum);
         Frame[4] = ADNS_read(Shutter_Upper);
         Frame[5] = ADNS_read(Shutter_Lower);
         
         #if !defined(__AVR_ATtiny85__)
            ByteToString(Frame[0]); Serial.write(Str[2]); Serial.write(Str[1]); Serial.write(Str[0]); Serial.write(0x09);
            ByteToString(Frame[1]); Serial.write(Str[2]); Serial.write(Str[1]); Serial.write(Str[0]); Serial.write(0x09);
            ByteToString(Frame[2]); Serial.write(Str[2]); Serial.write(Str[1]); Serial.write(Str[0]); Serial.write(0x09);
            ByteToString(Frame[3]); Serial.write(Str[2]); Serial.write(Str[1]); Serial.write(Str[0]); Serial.write(0x09);
            Uint16ToString(Frame[4] *256 + Frame[5]); Serial.write(Str[4]); Serial.write(Str[3]); Serial.write(Str[2]); Serial.write(Str[1]); Serial.write(Str[0]); Serial.write(0x0a);// Serial.write(0x0d);
            delay(20);
         #else
            ByteToString(Frame[0]); MyDbgSerial.write(Str[2]); MyDbgSerial.write(Str[1]); MyDbgSerial.write(Str[0]); MyDbgSerial.write(0x09);
            ByteToString(Frame[1]); MyDbgSerial.write(Str[2]); MyDbgSerial.write(Str[1]); MyDbgSerial.write(Str[0]); MyDbgSerial.write(0x09);
            ByteToString(Frame[2]); MyDbgSerial.write(Str[2]); MyDbgSerial.write(Str[1]); MyDbgSerial.write(Str[0]); MyDbgSerial.write(0x09);
            ByteToString(Frame[3]); MyDbgSerial.write(Str[2]); MyDbgSerial.write(Str[1]); MyDbgSerial.write(Str[0]); MyDbgSerial.write(0x09);
            Uint16ToString(Frame[4] *256 + Frame[5]); MyDbgSerial.write(Str[4]); MyDbgSerial.write(Str[3]); MyDbgSerial.write(Str[2]); MyDbgSerial.write(Str[1]); MyDbgSerial.write(Str[0]); MyDbgSerial.write(0x0a);// MyDbgSerial.write(0x0d);
            delay(60);   //задержка больше из-за низкой скорости Digispark
         #endif
      }
      while(pin_TRIG_IN){}   //ждать "0"
   }
//-----------------------------------------------------------------------

При
Код: Выделить всёРазвернуть
#define NUM_SAMPLES_PER_MEASURE 5 //для 4-го режима

так :)
Код: Выделить всёРазвернуть
Squal:   Max:   Min:   Sum:   Shutter:
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
Squal:   Max:   Min:   Sum:   Shutter:
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
Squal:   Max:   Min:   Sum:   Shutter:
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392
000   000   000   000   03392

Щаз перезалью исходник и баиньки. Визуализатор даже не тронул :(

Добавлено спустя 1 минуту 44 секунды:
Angel71 писал(а):Dmitry__, какие платы, а по старинке проводочками

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

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

Сообщение dccharacter » 24 дек 2015, 07:54

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

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

Сообщение Madf » 24 дек 2015, 11:55

Dmitry__ писал(а):Кто-нибудь зайдет в эту тему, скажет: народ совсем сбрендил, микросхемы чинит :D

Не, скажет "столько нафлудили, что спрашивать приходится очевидные вещи". :D

А какой в итоге используете протокол обмена с матрицы по USB/СОМ?
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение Dmitry__ » 24 дек 2015, 15:06

dccharacter писал(а):Че-т я не понял, че ты понаворотил, зачем-то z-probe прицепил и при этом количество сэмплов.

Ну так ты сначала смотришь на z_probe, он стал "1" - поехали, дали 5 сэмплов, вернулись в начало цикла, а там z_probe = 1. Надо ждать ноль. Можно конечно z_probe делать очень коротким, но могут быть другие сбои (пропуск тестирования входа) и алгоритм надо отрабатывать весь, дефолт не должен быть неожиданностью (мыж программисты :))

Madf писал(а):Не, скажет "столько нафлудили, что спрашивать приходится очевидные вещи".

Это все не я, это все другие. Расфлуживать будем, если все получится. В первом сообщении собрана вся актуальная информация.
Madf писал(а):А какой в итоге используете протокол обмена с матрицы по USB/СОМ?

А вы с какой целью интересуетесь? :roll:
Зависит от flg_serial_debug. Где текстовые данные сыпятся в терминалку, где таймаутный - фиксир. колич. байт картинки и пауза между кадрами. Но это все для залаза на елку/настройки. Отлаженный датчик ничего в USB/СОМ не дает (закомментен flg_serial_debug), он тупо смотрит в пол и дергает pin_led.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Madf » 24 дек 2015, 15:34

Dmitry__ писал(а):А вы с какой целью интересуетесь? :roll:

А чтобы, если этой "заразой" займусь (когда время появится и матрицы придут), чтобы не своё что-то городит, а под ваш "стандарт" делать, хотя какой должен быть конечный результат-то? На выходе должны сыпаться просто цифры/текст с результатами некоторого измерения или тупо расстояние в миллиметрах (с точностью до 3-го знака)?
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение Dmitry__ » 24 дек 2015, 15:59

Madf писал(а):какой должен быть конечный результат-то?

Вот этот:
Madf писал(а):или тупо расстояние в миллиметрах (с точностью до 3-го знака)?


Все, отдаю первую версию на тесты, который с обьективом от камеры. Стекло жжжжооот, белый фон совсем не работает - скорее всего передоз. Настроить фокус так и не смог на нем, adns5020 как-то очень медленно отдает кадры, разобранный обьектив (с одной линзой) очень большое дает пятно от лазера. Главное назначение этого датчика - пинок под зад в нужном направлении от людей кто сьел тонну пластика на щтом деле. В датчике распаян z_probe (4 режим оттестирован), pin_led. Загрузка скетчей через юсб, отдача логов на комп через pin_led (раскомментировать flg_serial_debug). В первом сообщении исходник с установками по умолчанию - под этот датчик, режим - отработка порога.
Логи:
Код: Выделить всёРазвернуть
стекло:
14:35:18.881 : 1 of 10   z: 6.842813
14:35:30.647 : 2 of 10   z: 6.842813
14:35:42.406 : 3 of 10   z: 6.847187
14:35:54.163 : 4 of 10   z: 6.850937
14:36:05.916 : 5 of 10   z: 6.851250
14:36:17.671 : 6 of 10   z: 6.847187
14:36:29.425 : 7 of 10   z: 6.849375
14:36:41.183 : 8 of 10   z: 6.848750
14:36:52.941 : 9 of 10   z: 6.840625
14:37:04.698 : 10 of 10   z: 6.851562
14:37:11.038 : Mean: 6.847250
14:37:11.041 : Standard Deviation: 0.003718

синий маркер на белой пленке:
14:39:53.951 : 1 of 10   z: 7.507812
14:40:05.723 : 2 of 10   z: 7.554062
14:40:17.482 : 3 of 10   z: 7.540625
14:40:29.265 : 4 of 10   z: 7.529687
14:40:41.028 : 5 of 10   z: 7.546563
14:40:52.781 : 6 of 10   z: 7.547812
14:41:04.540 : 7 of 10   z: 7.550938
14:41:16.317 : 8 of 10   z: 7.536875
14:41:28.076 : 9 of 10   z: 7.542812
14:41:39.843 : 10 of 10   z: 7.545938
14:41:46.181 : Mean: 7.540313
14:41:46.182 : Standard Deviation: 0.012713

белая пленка:
14:44:48.551 : 1 of 10   z: 7.834375
14:45:00.812 : 2 of 10   z: 7.606250
14:45:12.974 : 3 of 10   z: 7.990938
14:45:24.817 : 4 of 10   z: 8.048126
14:45:37.066 : 5 of 10   z: 7.699375
14:45:48.884 : 6 of 10   z: 8.004063
14:46:00.509 : 7 of 10   z: 8.017813
14:46:12.027 : 8 of 10   z: 8.047500
14:46:24.113 : 9 of 10   z: 7.603125
14:46:36.009 : 10 of 10   z: 7.947813
14:46:42.411 : Mean: 7.879938
14:46:42.414 : Standard Deviation: 0.171440
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение setar » 25 дек 2015, 04:21

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

первые тесты, стекло, крепление на двухсторонний скотч, пока ничего не грею
Код: Выделить всёРазвернуть
>>> M48 P20 X200 Y150 V2
SENDING:M48 P20 X200 Y150 V2
M48 Z-Probe Repeatability test
1 of 20   z: 17.715625
2 of 20   z: 17.717500
3 of 20   z: 17.723749
4 of 20   z: 17.705625
5 of 20   z: 17.706249
6 of 20   z: 17.706874
7 of 20   z: 17.708124
8 of 20   z: 17.702499
9 of 20   z: 17.709375
10 of 20   z: 17.702499
11 of 20   z: 17.706249
12 of 20   z: 17.701875
13 of 20   z: 17.707500
14 of 20   z: 17.709375
15 of 20   z: 17.702499
16 of 20   z: 17.705625
17 of 20   z: 17.704374
18 of 20   z: 17.702499
19 of 20   z: 17.703750
20 of 20   z: 17.703750
Mean: 17.707281
Standard Deviation: 0.005553
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

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

Сообщение icehardy » 26 дек 2015, 12:36

http://www.pibot.com/pibot-optical-reflection-endstop-rev143.html
Тут вероятно не парились с универсальностью и всеядностью, но на скотче работает :)
Аватара пользователя
icehardy
 
Сообщения: 1282
Зарегистрирован: 27 фев 2013, 16:59
Откуда: Кострома
Skype: icehardy

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

Сообщение setar » 26 дек 2015, 13:52

я тут вот такую штуку делаю.

Общее соображение такое: мега по току на одну тогу выдает до 40mA, сенсор потребляет в самом худшем случае 10mA. Хочу попробовать питать сенсор с ног данных меги.
На вопрос "а нафига" отвечу так - удобство компоновки, уменьшение проводков.

наковырял сенсор PAN3101 (не знаю подойдет или нет, буду экспериментировать)

получается такая компоновка (лазер просто приложил для фото):
Снимок экрана 2015-12-26 в 11.56.51.png

Снимок экрана 2015-12-26 в 11.45.52.png


Как видно это плата Adruino Nano, точнее наша разработка ORduino Nano в которой мы решили не делать DC-DC 3.3v - отсюда лишняя плата с обратной стороны (синяя), в обычных ардуинках такой не будет.

печатаю направляющую лазера

Добавлено спустя 5 минут 41 секунду:
icehardy писал(а):http://www.pibot.com/pibot-optical-reflection-endstop-rev143.html
Тут вероятно не парились с универсальностью и всеядностью, но на скотче работает :)

тогда уж лучше шарповский датчик поставить, там хоть ПЗС
это обычная пара, даже без компенсации засветки, расстояние плавает как Г в проруби.

Добавлено спустя 36 минут 55 секунд:
по компоновке получается так:
Снимок экрана 2015-12-26 в 12.33.14.png


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

дальше буду разбираться с кодом

коллеги Дима, Андрей помогите отдефайнить такую схему в ваш код:
Код: Выделить всёРазвернуть
  pinMode(12, OUTPUT);
  digitalWrite(12, LOW); //D12 питающая масса сенсора
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH); //D10 питающие +5V сенсора
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH); //D2 питающие +5V лазера (подключено через DC-DC 3.3v) 
   //D11 - SCK сенсора
   //D13 - SDIO сенсора


Добавлено спустя 8 минут 31 секунду:
линзу отпилил от мыши, буду пробовать пока ее
Вложения
Снимок экрана 2015-12-26 в 12.46.32.png
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

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

Сообщение Dmitry__ » 26 дек 2015, 14:15

setar писал(а):На вопрос "а нафига" отвечу так - удобство компоновки, уменьшение проводков.

Идея хорошая, я тут крутил в руках твою ордуину, те же мысли приходили с питанием пзс.
setar писал(а):наковырял сенсор PAN3101 (не знаю подойдет или нет, буду экспериментировать)

По пдф совсем кислый датчик, там только Image_Quality есть, нет pix_sum, pix_max, а главное Shutter. Сейчас начинаю понимать, что можно обойтись без Pixel_Grab в пзс, т.к. с печатным корпусом, скорее всего, будет минимум настроек (только подстройка фокуса лазера на глаз). Но прошелся по списку датчиков "no use" и у кого нет Image_Quality, также нет pix_sum, pix_max, Shutter :(
Код: Выделить всёРазвернуть
no use
pan3204db   PS/2
PAW3204      2.7v, нет Pixel_Grab. LOW COST WIRELESS MOUSE SENSOR
paw3101db   нет Pixel_Grab
PAN3102DB   нет Pixel_Grab
PAW3401      ps/2
PAW3515DB   только юсб.


Добавлено спустя 3 минуты 22 секунды:
setar писал(а):ORduino Nano в которой мы решили не делать DC-DC 3.3v - отсюда лишняя плата с обратной стороны (синяя), в обычных ардуинках такой не будет.

А зачем эта плата 3.3v? Для лазера? Так можно просто резистор заменить на бОльшее сопротивление.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение setar » 26 дек 2015, 19:26

точно, про сопротивление я как то не подумал :)

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

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

Сообщение Dmitry__ » 26 дек 2015, 19:48

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

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10