Электронный прицел на OSD-генераторе MAX7456.

Электронный прицел

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

Примерно год тому назад Игорь из Москвы заказал мне разработку программы для системы управления сверлильным станком. Станок он собрал сам из комплектующих, купленных на Али Экспресс.

 

Я не буду объяснять, как устроена механика станка. Боюсь опозориться при употреблении терминов. Устройство станка можно понять по фотографиям.

Электронный прицел

Электронный прицел

Электронный прицел

Электронный прицел

Игорь – человек, который привык все делать хорошо. На мой взгляд, даже слишком хорошо. Он поставил задачу реализовать в программе все, что можно придумать и, что позволяет сделать электромеханика. Я уже все функции не помню.

Деталь устанавливается на станину и нажимается педаль. Все остальное станок делает сам. Опускается шпиндель, сверло подводится к детали, сверлится на заданную глубину и поднимается над деталью. Задаются все параметры:

  • скорости опускания, подъема, вхождения в деталь сверла;
  • скорость вращения сверла;
  • глубина сверловки;
  • положение сверла над деталью.
  • Все параметры задаются для разных материалов и выбираются группами через название материала.
  • На дисплее отображаются параметры, режим, подсказки и т.п.

Вот фильм о работе станка.

При эксплуатации станка выявилась проблема точного попадания сверла в метку на детали. Это обычная проблема для всех, кто пытался просверлить хотя бы одно отверстие с более или менее высокой точностью. Игоря не удовлетворили советы опытных слесарей, и он решил сделать электронный прицел.

 

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

Электронный прицел

Осталось сделать электронику, которая будет на видеосигнал камеры накладывать прицельное перекрестие.

Принцип работы планировался следующий. На детали зенкуется метка. Затем кнопками прицела перекрестие наводится на эту метку. Теперь, если толщина детали не изменится, то сверло всегда будет попадать в место, указанное прицельным перекрестием.

Такой проект и был реализован с использованием OSD-генератора MAX7456.

MAX7456 – это микросхема стоимостью 100 рублей, которая позволяет накладывать на видеосигнал текстовую и псевдографическую информацию. Я подробно описывал ее в уроках Ардуино (урок 66, 67, 68). Буду рассказывать дальше исходя из того, что вы хотя бы просмотрели эти уроки.

Игорь разработал и изготовил печатную плату для OSD-модуля MAX7456. Схема модуля стандартная, приведена в уроке 66.

OSD-модуль

Такие модули есть и готовые.

OSD-модуль

К модулю я добавил плату Arduino Nano (можно использовать Arduino PRO Mini) и 5 кнопок управления маркером. Разработка получилась вполне бюджетной.

Схема соединения электронных компонентов устройства выглядит так.

Схема соединения

Вот мой макет.

Макет электронного прицела

Работать с электронным прицелом очень просто.

Видеосигнал с камеры подается на вход модуля, к его выходу подключается монитор.

Устройство в сборе

На экране монитора на изображение с камеры накладывается прицельный маркер.

Прицельное перекрестие

Прицельное перекрестие

Прицельное перекрестие

Маркер можно двигать кнопками ВВЕРХ, ВНИЗ, ВПРАВО, ВЛЕВО. При кратковременном нажатии на кнопку прицельная метка меняет свое положение на минимальную единицу. При удержании - перемещается. Нажатием на кнопку ИНВЕРСИЯ можно инвертировать изображение маркера. На темных деталях удобнее работать со светлой меткой и наоборот.

 

В правом верхнем углу экрана выводятся условные координаты маркера относительно центра экрана. Надпись mypractic.ru в правом нижнем углу можно написать свою, можно убрать.

Конечно, при выключении питания последнее положение маркера прицела сохраняется.

Скетч проекта можно загрузить по ссылке:

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

Используются библиотеки:

  • max7456.h

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

  • Button.h

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

Еще необходим пакет для загрузки знакогенератора MAX7456.

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

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

Обязательно необходимо установить систему отображения монитора NTSC или PAL. Это производится в строчке функции setup().

osd.videoStandartSelect(1); // выбор системы 0 - NTSC, 1 - PAL

Я создал маркер прицеливания в виде простого креста. Игорь изменил его на метку более сложной формы.

В любом случае маркер должен быть загружен в MAX7456. Как это делается подробно описано в уроке 68. Пакет для загрузки MAX7456_Font_Loader со знакогенератором, в котором маркер задан в виде креста, можно загрузить по ссылке выше.

Маркер состоит из 6 знакомест (3 x 2 ). Каждое знакоместо 12 x 18 пикселей. Значит, маркер имеет разрешение 36 x 36 пикселей. Вам надо в пакете MAX7456_Font_Loader отредактировать 6 знакомест с адресами (кодами символов) 0xc3 – 0xc8. Эти адреса заданы в массиве программы.

byte mark[6] = {0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8};  // метка

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

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

 

Сейчас над этим работаем. По сути, я разрабатываю последовательный OSD-терминал. Т.е. устройство, которое накладывает на видеосигнал текст и псевдографику, передаваемую по последовательному порту. А текст будет передаваться от, разработанной на предыдущем этапе, системы управления сверлильным станком.

 

Доработанный вариант устройства.

По просьбе Игоря я доработал устройство. Другого Игоря. Почему-то электронным прицелом интересуются люди именно с таким именем.

Он попросил добавить возможность выбора типа маркера.

Вот новый скетч:

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

Коды символов для маркеров задаются в массиве:

const byte marks[60] = {

0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8
};

У меня массив на 10 маркеров.

Надо задать количество маркеров:

#define MARKS_NUM 3 // число маркеров

И еще добавлена кнопка выбора маркера:

Button btMark(7, 25);  // кнопка выбор маркера

Я подключило ее к 7 выводу.

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

0

Автор публикации

не в сети 1 день

Эдуард

74
Комментарии: 1405Публикации: 152Регистрация: 13-12-2015

45 комментариев на «Электронный прицел на OSD-генераторе MAX7456.»

  1. Доброго дня и здоровья Эдуард !!! Молодец, все очень здорово. Но есть единственное что бы я например исправил, так это управление не 5 кнопок а 3, кнопка меню в котором выбираешь пункты меню верх низ и запомнить состояние а другими правишь. Как тебе такое ?

    0
    • Здравствуйте!
      Для сверлильного станка операцию установки маркера надо производить часто и оперативно. Поэтому я посчитал, что с четырьмя кнопками будет удобнее.

      0
      • А мне надо, потому что есть мах на котором 20 видов перекрестий и я ни как не могу их вытащить. Как с этим быть даже не знаю!? С Уважением дед Игорь

        0
          • Дело в том, что даже те что даны в этом проекте не пойму как выводятся на экран, далек я от этого и не понимаю как можно нарисовать еще и как их потом менять, вот так Эдуард !

            0
  2. Вот то что написано тобой «Маркер состоит из 6 знакомест (3 x 2 ). Каждое знакоместо 12 x 18 пикселей. Значит, маркер имеет разрешение 36 x 36 пикселей» для меня темный лес !

    0
    • Нарисуйте на листочке 6 прямоугольников, 2 ряда по три прямоугольника. Это знакоместа. Они отображаются на экране так, как нарисованы, без зазоров. Каждое знакоместо это таблица 12 на 18. Ячейка таблицы это пиксель. Получается таблица 36 на 36. В ней и надо рисовать маркер. Прочитайте внимательно первую часть урока 68. Там подробно рассказано, как редактировать знакогенератор. Нужные вам знакоместа имеют адреса c3 — c8. Их и надо отредактировать и загрузить.

      0
      • Надо конечно вникать, чем и буду заниматься, просто писать одно и всего не опишешь, а вот общение совсем другое где и я могу что то более подробно изучить со слов учителя.

        0
  3. Еще одно спрошу, в знакогенераторе все выделено по краям символов черными квадратиками, а перекрестие нет ?

    0
  4. Приветствую Эдуард !!! Здоровья и благополучия ! Разобрался немного, если добавить еще парочку разновидностей перекрестия, что нужно изменить или добавить чтоб можно было их менять ?

    0
  5. Добрый день. Очень полезная разработка. Намерен повторить.
    Весьма распространенная плата MinimOSD (ATmega328 и MAX7456)
    Например http://rufavor.ru/goods-4468.html
    Такая подойдет и надо ли править скетч?

    0
  6. Здравствуйте Эдуард. Повторил ваш проект на плате micro minimosd, разобрался как работать с маркерами.
    Прошу Вас помочь добавить в вашу прошивку electronic_sight_1_5 управление по ИК каналу. В вашем проекте используются прерывания, а я еще тот «программист»…..:(
    Сам же в данный момент мучаю библиотеку IRremote.h

    0
    • И еще вопрос. Как добавить вывод динамической информации? Допустим время работы с момента включения.

      0
      • Здравствуйте!
        Я собираюсь выложить проект OSD-терминала. Может он вам поможет.
        Это устройство, которое выводит на OSD-экран данные, поступающие с последовательного порта. Я использовал его в сверлильном станке. Там на экран выводится все, что угодно — и текстовая информация, и рамки, и маркер для прицеливания. Может удобнее по ИК-каналу передавать данные, которые будут выводиться на экран.

        0
        • Небольшое уточнение.Под ИК я подразумевал управление стандартным пультом например от ТВ приставки. Не всегда удобно тянуться до кнопок.

          0
          • Все, вопрос решил…. был какой то конфликт связанный с библиотекой MsTimer2.h. Процессор входил в бесконечный цикл. Удалил все что связанно с кнопками, получилось ШИКАРНО. Может кому то пригодиться.

            0
        • Да, я обратил внимание, но как понял пересчет координат и вывод на дисплей происходит только в момент нажатии кнопки. Интересно было бы выводить где нибудь в углу постоянно меняющиеся данные.

          0
  7. Эдуард подскажите, возможно ли сделать OSD генератор для VGA сигналов? Будете ли Вы в дальнейшем работать в этом направлении? Может у вас есть ссылка на какое то решение?

    0
  8. Здравствуйте! Давно ищу подобное решение для отображения прицельной сетки в приборе тепловизионном. Можно ли у вас приобрести готовый прибор? Если не трудно, напишите мне,пожалуйста, на почту: hoope01@mail.ru

    0
  9. Здравствуйте Эдуард. Очень кстати! Можно сдружить мой заброшенный проект с Вашей разработкой. Принцип сверлильного станка почти тот же, только я в своём проекте целился вебкой от ноутбука. Вебка была закреплена под поднятым сверлом на БМГ HDD прямо над предполагаемым отверстием. При сверлении вебка отъезжала приводом БМГ, сверлилось отверстие, вебка возвращалась в исходное положение для нового прицеливания.
    https://www.radiokot.ru/lab/hardwork/138/
    Можно ли мне в обсуждении моего станка ( https://www.radiokot.ru/forum/viewtopic.php?t=147425 ) добавить ссылку на Ваш проект?

    0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *