Anda di halaman 1dari 12

Introduccin

El cdigo de barras es un cdigo basado en la representacin de un conjunto de


lneas paralelas de distinto grosor y espaciado que en su conjunto contienen una
determinada informacin, es decir, las barras y espacios del cdigo representan
pequeas cadenas de caracteres. De este modo, el cdigo de barras permite
reconocer rpidamente un artculo de forma nica, global y no ambigua en un
punto de la cadena logstica y as poder realizar inventario o consultar sus
caractersticas asociadas. A la fecha marzo de 2017, el cdigo de barras est
implantado masivamente de forma global.
La correspondencia o mapeo entre la informacin y el cdigo que la representa se
denomina "simbologa". Estas simbologas pueden ser clasificadas en grupos
atendiendo a dos criterios diferentes:
Continua o discreta: Una simbologa continua es aquella en la que los caracteres
individuales no se pueden interpretar por s mismos. Esto es debido al hecho de
que los caracteres comienzan con una barra y finalizan con un espacio que
"termina" en la barra inicial del siguiente carcter. Un carcter no puede ser
interpretado individualmente, ya que no hay manera de conocer el ancho del
ltimo espacio sin saber dnde empieza el siguiente carcter. Las simbologas
continuas normalmente implementan algn tipo de barra de terminacin especial o
una secuencia de terminacin, tal que el ltimo espacio del ltimo carcter de
datos acaba mediante la barra de terminacin. Por contra, una simbologa discreta
es aquella en la que todos y cada uno de los caracteres codificados en el smbolo
pueden ser interpretados individualmente sin tener en cuenta al resto del cdigo
de barras. Estas simbologas tienen caracteres que comienzan y terminan con una
barra, y estn separados por cierta cantidad de espacio en blanco. El espaciado
entre caracteres no lleva ninguna informacin, su nico cometido es el de separar
los mismos.
Bidimensional o multidimensional: En las simbologas bidimensionales las
barras pueden ser anchas o estrechas. Sin embargo, las barras en las simbologas
multidimensionales son mltiplos de una anchura determinada (X). De esta forma,
se emplean barras con anchura X, 2X, 3X, y 4X.
Historia
La primera patente de cdigo de barras fue registrada en octubre de 1952 (US
Patent #2,612,994) por los inventores Joseph Woodland, Jordin Johanson y
Bernard Silver en Estados Unidos. La implementacin fue posible gracias al
trabajo de los ingenieros Raymond Alexander y Frank Stietz. El resultado de su
trabajo fue un mtodo para identificar los vagones del ferrocarril utilizando un
sistema automtico. Sin embargo, no fue hasta 1966 cuando el cdigo de barras
comenz a utilizarse comercialmente y no tuvo un xito comercial hasta 1980.
Como se constituye un cdigo de barras?
Mdulo: es la unidad mnima o bsica de un cdigo. Las barras y espacios
estn formados por un conjunto de mdulos.

Barra: el elemento oscuro dentro del cdigo. Se hace corresponder con el


valor binario 1.

Espacio: el elemento claro dentro del cdigo. Se hace corresponder con el


valor binario 0.

Carcter: formado por barras y espacios. Normalmente se corresponde con


un carcter alfanumrico.

Funciones tcnicas de los caracteres contenidos en un cdigo de barras:


1) Quiet Zone.
2) Carcter inicio (derecha); Carcter terminacin (izquierda).
3) Carcter de datos.
4) Checksum.
Ejemplo de datos contenidos en un cdigo de barras GTIN 13:

P: prefijo GS1 (por ejemplo, el nmero 84 corresponde a Espaa).

Cdigo de empresa: cdigo asignado a las empresas registradas (5 a 8


dgitos, completados con ceros a la izquierda).

Cdigo de producto: dgitos en blanco para el propietario de la marca.

C: dgito de control.
Existen varios tipos de cdigos de barras, y son los siguientes:

EAN
Code 128
Code 39
Code 93
Codabar

En nuestro trabajo nos enfocaremos en el cdigo EAN el cual creemos es el mas


utilizado.

European Article Number (EAN)

Es un sistema de cdigos de barras adoptado por ms de 100 pases y cerca de


un milln de empresas (2003). En el ao 2005, la asociacin EAN se ha fusionado
con la UCC (Uniform Code Council) para formar una nueva y nica organizacin
mundial identificada como GS1, con sede en Blgica.

El cdigo EAN ms usual es EAN13, constituido por 13 dgitos y con una


estructura dividida en cuatro partes:

Los primeros dgitos del cdigo de barras EAN identifican el pas que otorg el
cdigo, no el pas de origen del producto. Por ejemplo, en Chile se encarga de ello
una empresa responsable adscrita al sistema EAN y su cdigo es el '780'.

Composicin del cdigo:

Cdigo del pas en donde radica la empresa, compuesto por 3 dgitos.

Cdigo de empresa. Es un nmero compuesto por 4 o 5 dgitos, que identifica al


propietario de la marca. Es asignado por la asociacin de fabricantes y
distribuidores (AECOC).1

Cdigo de producto. Completa los 12 primeros dgitos.

Dgito de control. Para comprobar el dgito de control (por ejemplo,


inmediatamente despus de leer un cdigo de barras mediante un escner),
numeramos los dgitos de derecha a izquierda. A continuacin se suman los
dgitos de las posiciones impares, el resultado se multiplica por 3, y se le suman
los dgitos de las posiciones pares. Se busca decena inmediatamente superior y
se le resta el resultado obtenido. El resultado final es el dgito de control. Si el
resultado es mltiplo de 10 el dgito de control ser 0.

Objetivo

Disear y construir un lector de cdigo de barras, el cual pueda leer un cdigo de


barras comercial y adems lo pueda decodificar sin usar programas analizadores
de imagen.

Planteamiento de la solucin

Se pens en resolver el problema mediante el uso de un sensor de luz, ya que con


este podramos distinguir entre barras negras o barras blancas, despus se pens
en cmo podramos convertir la seal de salida del sensor de analgica a digital y
llegamos a la conclusin de que se podra hacer con un microcontrolador pero que
este solo seria para convertir la seal a digital sin embargo para poder decodificar
el cdigo de barras usaramos el software de MATLAB y crearamos un cdigo
para leer la informacin mandada por el microcontrolador para as poder formar
una grfica donde solo viramos 1s si el sensor detecta una barra blanca y 0s si
detecta una barra negra a partir de esta grafica nosotros decodificaramos el
cdigo de barras.

Material

1 Sensor CNY70
1 Resistencia de 330
1 Resistencia de 470
1 Resistencia de 10K
1 Resistencia de 1 K
2m Cable para protoboard
1 Pluma para escribir
Cautn
Soldadura
1 Arduino UNO
Laptop con software para Arduino y MATLAB
1 cable de datos para impresora
1 Cinta de aislar

*Usamos el sensor CNY70 debido al filtro contra luz solar que tiene, debido
tambin al precio ya que es bastante barato (costo $15) y debido a que
segn la datasheet es muy bueno para escaneo de informacin; es decir que
se acoplaba bastante bien a todas nuestras necesidades.

*Usamos el microcontrolador Arduino UNO debido a lo fcil que es de usar,


de conseguir adems de que el tiempo de respuesta era suficiente para
nuestros requerimientos.

Cmo se resolvi el problema?

Se construy el siguiente circuito con el sensor CNY70.

Una vez construido se estuvieron realizando pruebas acerca del funcionamiento


comprobando la corriente y voltaje que otorgaba cuando el sensor detectaba una
franja negra o una franja blanca.

Observando que funcionaba bien se opt por pasar el circuito a una envase de
pluma de escritura, se puso el sensor en la donde se coloca comnmente la punta
de la pluma y adentro del envase se le soldaron las resistencias ocupadas en el
circuito anterior y se dejaron afuera unos cables un poco largos para estos
conectarlos al Arduino UNO y este diera la alimentacin para nuestro circuito.
Una vez realizado lo anterior, el sensor se conect al Arduino UNO y este se
conect a la computadora mediante el cable de datos de impresora despus se
investig como crear un cdigo para obtener la lectura del sensor.

Una vez obtenido esto se investig como crear un enlace entre nuestro
microcontrolador y MATLAB para poder leer los datos que mandaba el Arduino
UNO, ya obtenido se continuo a programar un cdigo que nos pudiera graficar lo
que observaba el sensor y nos lo pudiera representar como 1s si era blanco o 0s
si era negro.
Se prob esto con un cdigo de franjas negras y blancas el cual fue el siguiente.
Se obtuvo la siguiente grfica.

Los resultados fueron los esperados como se ha venido explicando en nuestro


escrito.
Debido a falta de tiempo no pudimos terminar con la parte de decodificacin, lo
que se estaba realizando era agrandar los cdigos de barras comerciales y estos
se leeran y se decodificaran con el algoritmo de decodificacin de los cdigos de
barras tipo EAN, se pensaba desarmar una impresora y desmontar mecanismo
con el que imprimen para colocar la pluma en l y configurar a cierta velocidad el
movimiento para que leyera de una forma constante las barras negras y blancas y
con un cdigo en MATLAB decodificar cualquier grafica que nos mostrara
cualquier cdigo de barras.
Diagrama a Bloques del Circuito

Entrada

Resultados
Se logr crear un lector de barras bastante eficaz y barato si hablamos del tema
comercial, la parte de la decodificacin pensamos que no hubiera sido un gran
gasto de dinero y por lo tanto creemos que hubiera sido una opcin bastante
rentable para leer y decodificar cdigos de barras comerciales, el mayor problema
de nuestro diseo fue la sensibilidad aunque creemos que tal vez con algn
sensor ms caro y por tanto ms sensible podramos hacerlo mucho ms eficiente.
Conclusiones

Se aprendi como se usan los sensores de luz y la ventaja que tienen unos sobre
otros ya que se prob con varios, desde fotoresistencias muy baratas hasta el
sensor CNY70 y se logr ver una diferencia abismal debido al filtro de luz solar
que nos indica la datasheet que tiene el sensor, adems de esto vimos que la
funcin de una pistola lectora de cdigos de barras tiene un principio bastante
complicado que con los conocimientos que tenemos ahora es muy difcil de
replicar y pues tenemos que abordar el problema desde otro ngulo menos
eficiente pero que es ms comprensible para nuestros conocimientos tambin
pudimos ver lo eficiente que es el software de MATLAB para estos anlisis ya que
nos simplifica mucho los problemas de programar y con pocas lneas de cdigo
podemos generar la grfica que tenemos que analizar para decodificar los cdigos
de barras.
Durante la elaboracin de este dispositivo nos enfrentamos a distintos problemas,
los cuales principalmente era la fuente de adquisicin de los datos, ya que para
poder usar un lser que nos ayudara a poder leer un cdigo de barras estndar en
lugar de un led infrarrojo, era necesario realizar un filtraje de luz y realizar ms
procesos, adems de que sera mucho ms costoso. A pesar de los
inconvenientes, el objetivo principal del proyecto fue logrado, ya que entendimos y
observamos como la luz se refleja en las superficies y un ejemplo de ese
fenmeno son los colores que son un resultado de los tipos de onda que se
reflejan en esas superficies, y en este caso las lneas negras contra espacios en
blanco. Al final habiendo logrado conseguir una respuesta a la luz en nuestro
receptor ptico, solo restaba realizar una conversin digital de esa repuesta y nos
apoyamos en un microcontrolador arduino y un programa de Matlab, que a pesar
de ser lo ms sencillo, resulto ser lo ms prctico para la solucin de nuestro
problema.

Anexo de cdigos de programacin

Cdigo usado en Arduino UNO


int out1 = 0;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
int x;
out1 = analogRead(A0);

Serial.println(out1);
delay(20);
// put your main code here, to run repeatedly:

Cdigo usado en MATLAB


clear all;
clc;
delete(instrfind({'Port'},{'COM3'}));
s = serial('COM3','BaudRate',9600,'Terminator','CR/LF');
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
%abrir puerto
fopen(s);

% parmetros de medidas
tmax = 15; % tiempo de captura en s
rate = 33; % resultado experimental (comprobar)

% preparar la figura
f = figure('Name','Captura');
a = axes('XLim',[0 tmax],'YLim',[0 5.1]);
l1 = line(nan,nan,'Color','r','LineWidth',2);

xlabel('Tiempo (s)')
ylabel('Voltaje (V)')
title('Captura de voltaje en tiempo real con Arduino')
grid on
hold on

% inicializar
v1 = zeros(1,tmax*rate);
i = 1;
t = 0;
b = zeros(1,tmax*rate);

% ejecutar bucle cronometrado


tic
while t<tmax
t = toc;
% leer del puerto serie
a = fscanf(s,'%d,%d')';
b(i) = a(1)/5;
if (b(i)>= 0.6)
v1(i)=1;
% dibujar en la figura
else

v1(i)=0;
end
x = linspace(0,i/rate,i);
set(l1,'YData',v1(1:i),'XData',x);
drawnow
% seguir
i = i+1;
end
% resultado del cronometro
clc;
fprintf('%g s de captura a %g cap/s \n',t,i/t);
fclose(s);
delete(s);
clear s;
Bibliografa
http://iaci.unq.edu.ar/materias/sistemas_digitales/proyectos/Lector%20de%20c
%F3digos%20de%20barras.pdf
https://es.wikipedia.org/wiki/European_Article_Number
https://es.wikipedia.org/wiki/C%C3%B3digo_de_barras
https://sites.google.com/site/appinventormegusta/ejemplos/lector-de-codigo-de-
barras

Anda mungkin juga menyukai