Штрих-код — это просто и весело

admin   13.06.2020   Комментарии к записи Штрих-код — это просто и весело отключены

scan_code_titleПрактически ни один день человека не обходится без штрих-кодов, которые в основном используются для маркировки товаров. Так же штрих-код используется Edison для активации стандартных программ. Мы решили сделать считыватель штрих-кодов на базе Lego Ev3. Но сделали мы это в игровой форме, что позволит в будущем использовать наши прототипы для соревнований по робототехнике.
Первым делом мы придумали свой упрощенный стандарт штрих-кода и сделали генератор кодов в Excel. Наш код состоит из 6 элементов (битов, полос) одинаковой ширины. Первый и последний бит всегда единица (старт и стоп биты). 2-5 биты — биты данных, которые позволяют закодировать максимум 16 уникальных значений. Код может обозначать разные сущности: цвет, число, направение движения, букву и т.п. Мы решили остановиться на двух вариантах использования штрих-кодов роботами.

Считай, сложи, найди!

scan_code_math
В данном примере задача робота достаточно проста. Ему необходимо считать последовательно два штрих-кода. В каждом штрих-коде закодирована цифра при помощи обычной двоичной системы. После считывания кодов робот должен сложить два полученных числа и вытолкнуть с линии кеглю, соотвествующую полученному результату. После выталкивания кегли, робот возвращается на свою траекторию и продолжает движение до последней кегли (в нашем случае это кегля номер 5).
Мы провели много экспериментов, но в качестве демонстрации предлагаем два. В первом случае штрих-коды обозначают числа 1 и 3, и робот должен вытолкнуть 4 кеглю. Во втором варианте штрих-коды обозначают числа 0 и 2, и робот должен вытолкнуть кеглю 2.


В качестве усложнения этого примера можно расширить штрих-коды математическими знаками между числами. Таким образом робот сможет вычислять не фиксированную формулу сложения, а целые последовательности (сложение, вычитание, деление и т.п.). Так же недостатком нашего подхода является то, что робот заранее запрограммирован считывать 2 кода. Решить эту проблему можно используя специальный штрих-код, который бы обозначал «конец формулы» (например, знак равно «=»). Таким образом можно выстраивать длинные цепочки без перепрограммирования робота.
Пример программы находится в архиве под названием «hitTargetIndex».
Движение по указателям

scan_code_path_1
В данном примере задача робота — это пройти путь от начала до конца по указателям направления движения, которые закодированны штрих-кодами, чтобы обойти препятствия, не зацепив их. Всего мы выбрали 4 основных штрих-кода: влево, вправо, вперед, разворот. Для каждого действия используется штрих-код (см генератор штрих-кодов) с одним битом данных, который и определяет направление. scan_code_path_2Особенностью действия «разворот» является то, что считав такой код («назад»), робот разворачивается на 180 градусов и продолжает движение вперед, тем самым имея возможность считывать новые коды в правильном направлении. Так же мы использовали один технический код (пусто, ноль), который обозначает точку финиша и, считав такой код, робот должен остановиться, закончив свой путь.
В процессе работы над этим примером у нас возникли некоторые сложности с тем, что роботу тяжело преодолеть стабильно весь путь от начала до конца. Связано это с тем, что точность поворотов не очень высокая и иногда робот не попадает точно по штрих-коду. Один из вариантов, как исправить такую проблему — это сделать штрих-коды шире (на всю ширину листа А4), тем самым обеспечив запас на ошибки движения робота.
Пример программы находится в архиве под названием «index».

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

Материалы для скачивания
Генератор скан-кодов для Excel
Пример программ для EV3 по использованию штрих-кодов.