roboforum.ru

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

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

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

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

Сообщение dccharacter » 21 дек 2015, 07:46

А я никогда и не подключал

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

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

Сообщение Dmitry__ » 22 дек 2015, 02:41

Сейчас на станке закреплен датчик с adns5020, тогда надо его отдирать и перепаивать лазер. Другие пзс у меня (3шт.) как твой adns2610. adns5020 отличается разрядностью, размером поля от adns2610. Результаты графиков могут сильно отличаться. Поэтому доделаю платы на adns2610 и продолжу уже чистые тесты. Надо допилить марлин, чтоб он по команде G1 дергал z_probe, а в датчике дописать создание лога только при щтом сигнале. Тогда все логи будут одинаковые по длительности опускания головы.
Вообще adns2610 интересен минимальным колич. пинов, если бы марлин был вменяемым кодом, то можно было бы обработку датчика перенести в принтер, но слишком много "бы" :(
Плата с adns2610 получается так:
sens_mouse12.JPG

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

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

Сообщение dccharacter » 22 дек 2015, 06:05

>>>Надо допилить марлин, чтоб он по команде G1 дергал z_probe
Для этого GCode придумали :-) Можно повесить ногу на вход и после каждого перемещения дергать ту ногу, она будет выдавать серию измерений.
Т.е. большое достаточно количество групп
Код: Выделить всёРазвернуть
Переключиться в относительные координаты
G1 Z-0.1
M42 P7 S1
M42 P7 S0
G4 S2

И чо циклов нет в G-Code?

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

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

Сообщение dccharacter » 23 дек 2015, 01:13

Код: Выделить всёРазвернуть
#if flg_serial_debug ==5
   //-----------------------------------------------------------------------
   byte Frame[(ARRAY_WIDTH * ARRAY_HEIGHT)+1];

   Frame[(ARRAY_WIDTH * ARRAY_HEIGHT)+1] = 0xff;   // frame data is 0..63 or 0..127 so delimiter 255 is safe
   int counter = 0;
   delay(1000);
   while(1)
   {
      if (pin_TRIG_IN) {
      //if (digitalRead(4)) {
         for (int 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);

            Serial.println("meas: " + String(counter) + \
               "\tsqual: " + String(Frame[0]) + \
               "\tMax_Pix:" + String(Frame[1]) + \
               "\tMin_Pix:" + String(Frame[2]) + \
               "\tPix_Sum:" + String(Frame[3]) + \
               "\tShutter:" + String((uint16_t)Frame[4] * 256 + Frame[5]));
         }
         counter++;
         delay(300);
      }

   }
   //-----------------------------------------------------------------------
#endif


В хедере:
Код: Выделить всёРазвернуть
#define NUM_SAMPLES_PER_MEASURE 10
//PD4 TRIGGER_PIN D4
#define   pin_TRIG_bit      4
#define   pin_TRIG_DDR      DDRD
#define   pin_TRIG_PORT      PORTD
#define   pin_TRIG_PORT_IN   PIND
#define   pin_TRIG_Mode_INPUT      pin_TRIG_DDR      &=~(1<<pin_TRIG_bit)
#define   pin_TRIG_IN            pin_TRIG_PORT_IN   &  (1<<pin_TRIG_bit)


Добавлено спустя 3 часа 49 минут 44 секунды:
Сигнал снимаем на рампсе с пина четвертой сервы (D4), подаем на вход датчика (у меня D4 на дуне-нано)
Код: Выделить всёРазвернуть
G91
G1 Z-0.1
M42 P4 S255
M42 P4 S0
G4 S2
G1 Z-0.1
M42 P4 S255
M42 P4 S0
G4 S2
G1 Z-0.1
M42 P4 S255
M42 P4 S0
G4 S2
G1 Z-0.1
M42 P4 S255
M42 P4 S0
G4 S2
G1 Z-0.1
M42 P4 S255
M42 P4 S0
G4 S2

Код: Выделить всёРазвернуть
meas: 7   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 7   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 8   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 9   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280
meas: 10   squal: 0   Max_Pix:255   Min_Pix:0   Pix_Sum:255   Shutter:65280

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

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

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

Сообщение Dmitry__ » 23 дек 2015, 02:45

dccharacter писал(а):Все, пора
Дим, просыпайся

Не, мне до выходных терпеть надо, лучче лузером с датчиком быть, чем лузером на работе :)

Тему понял, все допишу в исходник.
А у меня листинг сделан с шапкой, и удобнее конвертировать в электр. таблицах, и в терминалку меньше данных уходит, а щто важно для тиньки, на 115200 не успевает весь поток уйти. Еще для тиньки запилил листинг с десятичной коррекцией, т.к. SendOnlySoftwareSerial очень ограничен. Но получилось хорошо и для больших плат, т.к. не форматирует данные (не удаляет незнач. нули). Т.е. 0 = 000, 255 = 255. Столбики ровные - харашо :) Т.е. дикими извратами можно и на библах дуины щто сделать, но сама функция print очень тяжелая. Такшта, если надо - закидывай в "Serial.println(String(Frame...))"
Код: Выделить всёРазвернуть
#if flg_serial_debug ==3
//-----------------------------------------------------------------------
   //листинг для екселевских таблиц
   byte Frame[(ARRAY_WIDTH * ARRAY_HEIGHT)+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
   while(1)
   {
      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__)
         Serial.println(      String(Frame[0]) + \
                  "\t"+   String(Frame[1]) + \
                  "\t"+   String(Frame[2]) + \
                  "\t"+   String(Frame[3]) + \
                  "\t"+   String(Frame[4]) + \
                        String(Frame[5]));
         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
   }
//-----------------------------------------------------------------------


Код: Выделить всёРазвернуть
void ByteToString(uint8_t a)
{
   Str[0] = '0';
   Str[1] = '0';
   Str[2] = '0';
   if(!a) return;
   Str[0] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[1] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[2] = a % 10 + '0';
}
void Uint16ToString(uint16_t a)
{
   Str[0] = '0';
   Str[1] = '0';
   Str[2] = '0';
   Str[3] = '0';
   Str[4] = '0';
   if(!a) return;
   Str[0] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[1] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[2] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[3] = a % 10 + '0'; a /= 10;
   if(!a) return;
   Str[4] = a % 10 + '0';
}

Можно было десятичную коррекцию сделать по-взрослому с асм вставками, но и так хорошо. Минус тцать кб., а по-взрослому сделаем в коммерческой версии :D

Добавлено спустя 1 минуту 21 секунду:
Вот так лог получился:
Код: Выделить всёРазвернуть
Squal:   Max:   Min:   Sum:   Shutter:
006   027   006   031   03392
006   027   007   031   03392
007   029   010   036   03392
003   028   007   032   03392
005   027   007   032   03392
005   028   007   032   03392
006   027   007   032   03392
006   028   007   032   03392
006   027   007   032   03392
005   028   007   032   03392
007   028   007   032   03392
006   028   007   032   03392
006   028   007   032   03392
006   028   007   032   03392
008   028   007   032   03392
007   028   007   032   03392
006   028   006   032   03392
005   028   006   032   03392
006   028   007   031   03392
005   030   010   036   03392
005   026   006   031   03392
005   028   007   032   03392
005   028   007   032   03392
008   028   007   032   03392

Электронные таблицы автоматом подхватывают, даже названия есть :)

Добавлено спустя 35 минут 20 секунд:
Kxe, шутки ради и на нане сделал без "String()":
Код: Выделить всёРазвернуть
Sketch uses 4 468 bytes (14%) of program storage space. Maximum is 30 720 bytes.
Global variables use 254 bytes (12%) of dynamic memory, leaving 1 794 bytes for local variables. Maximum is 2 048 bytes.
без Serial.println(String(Frame...
Sketch uses 2 866 bytes (9%) of program storage space. Maximum is 30 720 bytes.
Global variables use 247 bytes (12%) of dynamic memory, leaving 1 801 bytes for local variables. Maximum is 2 048 bytes.

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

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

Сообщение dccharacter » 23 дек 2015, 04:50

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

Добавлено спустя 10 минут 44 секунды:
А вообще, ХВАТИТ ХЕРНЕЙ ЗАНИМАТЬСЯ! Растаскивание по платформам - все потом. Сначала надо установить, работет ли датчик, а главное, у того, у кого работает - что именно и как работает! Все остальное лажа. Тиньки там, деки и хексы. Я в этом полный ноль. Но если понадобиться вывести на печать число через минимальный набор ассемблерных команд, я пойду на microchip.su и сдеру там готовый алгоритм :-р
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

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

Сообщение Angel71 » 23 дек 2015, 05:17

:D правильно, нужно быстрей заканчивать датчик касания и переходит на более востребованные вещи. давай бум пилить копеечный модуль-полезняшку, что бы можно было определять на небольших расстояниях степень поглощения сигнала на 2.4ггц.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение dccharacter » 23 дек 2015, 05:53

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

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

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

Сообщение Dmitry__ » 23 дек 2015, 06:17

dccharacter писал(а):А вообще, ХВАТИТ ХЕРНЕЙ ЗАНИМАТЬСЯ! Растаскивание по платформам - все потом.

Да я на тиньку полез не из-за того что дешевле для народа (digispark-и дороже дуин :)), а из-за размеров. Думаешь только у тебя все отваливается и дымит? Чем больше плата - тем ну его на фиг. Вот есть сейчас датчики и на тиньке и на нано, но я машинально тестю на тиньке, датчик приклеен к каретке, торчит юсб разьем, залил - проверил. А на нано: датчик-провода-нано-юсб=жопппа. :)
По наводке angel-а накупил дуин мини 20шт. по 95р. на 3.3 вольта и на 5v. Но пока они едут, купил их тут по 350р. Когда их увидел, понял что никакие тиньки бы и не делал, если бы знал раньше.
dccharacter писал(а):Но если понадобиться вывести на печать число через минимальный набор ассемблерных команд, я пойду на microchip.su и сдеру там готовый алгоритм :-р

Когда знаешь, что код где-то гуляет в 2-х килобайтах быдлятины, руки сами к штепселю тянутся. А нам еще и скорость важна. Сейчас можно вообще прозрачный не блокируемый уарт запилить, т.е. и порог быстро обрабатывается и данные в рс232 летят без блокировки основной проги. Ну щто так, бантики.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Angel71 » 23 дек 2015, 06:18

dccharacter, не, ультразвук то для других датчиков - всякая диагностика качества сварочных швов, на зарождающегося детёныша поглядеть и т.д. а в данном случае нужно определять количество воды, т.е. 2.4ггц самое то. самый популярный вариант эт токовые датчики, бо дёшево и сердито. емкостной ну как бы измеряет что-то, но с ним фиг выловишь именно концентрацию воды, бо ёмкость объектов штука весёлая и сложная для фильтрации данных. а вот на 2.4ггц за недорого, от это было бы круто и востребовано. можно было бы доплеровские радары на 5ггц (или 10ггц, не помню какие брал) попробовать, но они пока далеко и когда привезут я не в курсе, да и не настолько они мелкие и копеечные, как хотелось бы.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение dccharacter » 23 дек 2015, 06:32

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

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

Сообщение Dmitry__ » 23 дек 2015, 06:55

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

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

Сообщение dccharacter » 23 дек 2015, 07:16

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

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

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

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

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

Сообщение dccharacter » 23 дек 2015, 07:27

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

Пред.След.

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

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

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