18
UNIVERSIDAD ANDRÉS BELLO FACULTAD DE INGENIERÍA INGENIERÍA EN COMPUTACIÓN E INFORMÁTICA “Carro de Compras Inteligente” JAVIER EBERS MASCARÓ GONZALO PEDREROS SEPÚLVEDA TOMAS RAMIREZ DÖRNER PROYECTO INTERNET DE LAS COSAS Viña del Mar, 22 de junio de 2015 1

Carro Inteligente

Embed Size (px)

DESCRIPTION

sad,sad,asdas,d a,we,qwads

Citation preview

UNIVERSIDAD ANDRS BELLOFACULTAD DE INGENIERAINGENIERA EN COMPUTACIN E INFORMTICA

Carro de Compras Inteligente

JAVIER EBERS MASCARGONZALO PEDREROS SEPLVEDATOMAS RAMIREZ DRNER

PROYECTO INTERNET DE LAS COSASVia del Mar, 22 de junio de 2015

ndice2.Introduccin23.Motivacin del problema34.Alternativas a la solucin45.Conclusin66.Anexos7

Introduccin

Las nuevas tecnologas estn irrumpiendo con fuerza en todos los mbitos, sobretodo en supermercados y almacenes de barrio. La idea bsica que persiguen las grandes y medianas empresas reside en mejorar la experiencia de compra y aqu la tecnologa tiene un papel importante, es por eso que hoy en da se ha demostrado que una empresa con una perfecta y calculada organizacin logstica es sinnimo de beneficio, dado que un estricto control del estado de su activo y la correcta estimacin de posibles cambios en ste, aporta importantes ganancias para la empresa. Por todo ello, las empresas dirigen parte de sus esfuerzos econmicos e inversiones hacia la mejora de su departamento logstico, estrategias e inversiones que toman forma en el conjunto de nuevas tecnologas que les puedan aportar tales mejoras. La tecnologa que se est introduciendo con mayor fuerza en este mercado, es la identificacin por radiofrecuencia o RFID (Radiofrequency Identification), asegurando un gran futuro en el rea logstica. Esta tecnologa se basa en la identificacin de etiquetas electrnicas o tags, mediante ondas electromagnticas de RF. El fuerte impacto que est causando la RFID en el sector logstico, se debe en parte a la entrada en vigor de la nueva ley de trazabilidad, (la trazabilidad es la capacidad de identificar y proveer informacin acerca del origen y la historia procesada de un tem determinado), la cual obliga a todas las empresas a llevar a cabo un control riguroso sobre sus productos, desde el momento de su fabricacin pasando por el empaquetamiento o envo de ste, hasta la venta a sus clientes.

Motivacin del problema

Actualmente la mayora de los clientes no estn acostumbrados a analizar lo que llevan en el carro de compras, ni saber cunto es lo que estn gastando. Es por eso que el desarrollo de este proyecto pretende proporcionar un Carrito de Compras Inteligente con el fin de otorgar valor aadido a los compradores, o bien ser mucho ms eficaz en la gestin de stock por parte del supermercado y sobretodo solucionar un punto donde muchos clientes sufren: el paso por caja, largas filas, el tener que meter todo en bolsas ante la mirada impaciente de los que estn detrs o el proceso de pagar.Es por eso que este proyecto consistir en el diseo y realizacin de un prototipo de carro de compra inteligente, en el cual se utilizar la tecnologa RFID para la identificacin de los productos que se encuentren en su interior. Otro de los objetivos ser proporcionar al carrito los medios necesarios para que el equipo de RFID sea capaz de utilizar la informacin adquirida y mostrarla al cliente como por ejemplo el total de dinero que deber pagar, todo esto antes de llegar a la caja. Dichos equipos podrn estar instalados en el mismo carro (por ejemplo, una pantalla tctil), o por otro lado tambin se podra comunicar de manera inalmbrica con equipos externos al carrito (por ejemplo, un servidor que contenga una base de datos de todos los productos y que de informacin respecto al stock del producto a comprar).

Alternativas a la solucin

1. Lectores de cdigo de barras. Desventajas vs Carro Inteligente

La portabilidad se limita al tamao del cable con que cuenten. Poseen un rango limitado de distancia para la lectura de codigos. Posee una lectura rapida del codigo pero esto depende mucho del estado en que se encuentre el evoltorio del producto.

Ventajas por sobre Carro Inteligente

Precio para ocupar este tipo de tecnologia es accesible para cualquier empresa, $18.000 pesos aprox.

2. Proceso manual

Desventajas vs Carro Inteligente

Calculo de total compra depende de la velocidad de la persona. Numero limitado de productos a comprar por el cliente. Tiempo total entre esperar el calculo total y envolver productos es alto.

Ventajas por sobre Carro Inteligente

Ms cercana con cliente.

3. Nuestra solucin

Ventajas

Ahorro de largar filas al momento de pagar. Rapidez en realizar compra. Al reducir tiempo de compra, ms gente preferir ir a comprar a establecimientos con este tipo de tecnologia lo que aumentar los ingresos al supermercado o almacn. Se estar dando una Educacion Financiera a los compradores al saber cuanto estan gastando en su compra. La implementacin de esto reducira el nmero de personal, sobretodo cajeras, con el que se ahorrara dinero en sueldos de personal. Se tiene un mejor control del stock actualizado de bodega. Habr un mayor control respecto a los ingresos por venta de productos.

Desventajas

Precio para implementar este tipo de tecnologia es muy cara, $1.400 dlares aprox.

Conclusin

Con la implementacin de esta tecnologa se est dando inicio a una nueva era en la forma de comprar, no solo por los beneficios de aumentar la rapidez con que se efecta la compra o el tener un mayor control inventario, sino que tambin se podr implementar otras funciones como datos nutricionales, ofertas de otros productos relacionados al seleccionado, recomendaciones de recetas que hacer con el producto introducido al carro y una gran cantidad de otros beneficios que se pueden lograr con esta tecnologa no solo para el cliente final sino tambin para la empresa que implementa esta tecnologa que es una gran opcin sobre todo por su relacin costo-beneficio.Este sistema de compra innovar el mercado, haciendo del carro de compras un producto solicitado cada vez ms en grandes tiendas.

Anexos

Carrito de compras:

Modulo conectado por wifi a la red que ingresa y egresa productos al carro de compra especfico de cada usuario.

El diagrama de uso es el siguiente:

- El usuario pasa por el lector rfid su tarjeta de usuario- El sistema valida su id en el servidor y abre un nuevo carro- El sistema queda a la espera de agregar nuevos productos al carro (tags rfid)- El usuario puede eliminar productos presionando el botn eliminar del panel de control y luego pasar los tags que quiera eliminar.- Una vez pagado en caja el carro se cierra automticamente- El usuario puede cerrar el carro actual presionando el botn cerrar carro.

Todos los valores son obtenidos desde el servidor (caja)

Codigo desarrollado:import Tkinter as tkimport MFRC522import signalimport threadingimport RPi.GPIO as GPIOimport random

GPIO.setmode(GPIO.BOARD)GPIO.setup(11,GPIO.IN)

REQUESTS = NoneTITLE_FONT = ("Helvetica", 18, "bold")PRICE_FONT = ("Helvetica", 10, "bold")

class SampleApp(tk.Tk):

Reader = None Cart = None

def __init__(self): tk.Tk.__init__(self) self.Reader = Reader() self.Cart = CurrentCart(None)

self.title("Carro de compras") self.protocol('WM_DELETE_WINDOW', self.closeWindow)

wW = self.winfo_screenwidth() wH = self.winfo_screenheight() self.geometry("%dx%d+0+0" %(wW,wH)) # the container is where we'll stack a bunch of frames # on top of each other, then the one we want visible # will be raised above the others container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1)

self.frames = {} for F in (StartPage, PageOne): frame = F(container, self) self.frames[F] = frame # put all of the pages in the same location; # the one on the top of the stacking order # will be the one that is visible. frame.grid(row=0, column=0, sticky="nsew")

self.show_frame(StartPage)

def show_frame(self, c): self.Reader.cardId = None '''Show a frame for the given class''' frame = self.frames[c] frame.tkraise() frame.active = True frame.update()

def closeWindow(self): self.quit() self.Reader.end_read() self.destroy()

class StartPage(tk.Frame):

Controller = None active = False _wrongUserTicks = 0

def __init__(self, parent, controller): self.Controller = controller tk.Frame.__init__(self, parent) label = tk.Label(self, text="Deslice su tarjeta para activar el carro", font=TITLE_FONT) self.labelError = tk.Label(self, text="", font=TITLE_FONT) label.pack(side="top", fill="x", pady=10) self.labelError.pack(side="top", fill="x", pady=10)

def update(self): """Runs every 100ms to update the state of the GPIO inputs""" if(self.active): if(self.Controller.Reader.cardId != None): if(Requests.openCart(self.Controller.Reader.cardId[0])): self.Controller.Cart.currentUserId = self.Controller.Reader.cardId self.quit() self.Controller.show_frame(PageOne) return self.labelError['text'] = 'Usuario no registrado en el sistema. Intente nuevamente' self._wrongUserTicks = 30 self.Controller.Reader.cardId = None if(self._wrongUserTicks>0): self._wrongUserTicks -= 1 else: self.labelError['text'] = '' self._timer = self.after(100,self.update)

def quit(self): self.active = False

class PageOne(tk.Frame):

active = False Controller = None userId = None

def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.Controller = controller

label = tk.Label(self, text="Carro de compras actual", font=TITLE_FONT) label.grid(row=0,columnspan=4, sticky="wens")

frame1 = tk.Frame(self) frame1.grid(row=1,column=0,sticky="n",rowspan=2)

bAdd = tk.Button(frame1,text="Agregar",state="normal") bAdd.grid(row=1,column=0,sticky="w")

bRemove = tk.Button(frame1,text="Eliminar",state="disabled") bRemove.grid(row=2,column=0,sticky="w")

bClose = tk.Button(frame1,text="Cerrar Carro",state="disabled") bClose.grid(row=3,column=0,sticky="w")

label1 = tk.Label(self, text="Articulo", font=PRICE_FONT) label1.grid(row=1,column=1, sticky="w")

self.lb1 = tk.Listbox(self,width=10) self.lb1.grid(row=2,column=1,sticky="w")

label2 = tk.Label(self, text="Unidades", font=PRICE_FONT) label2.grid(row=1,column=2, sticky="w")

self.lb2 = tk.Listbox(self,width=4) self.lb2.grid(row=2,column=2,sticky="w")

label3 = tk.Label(self, text="Precio", font=PRICE_FONT) label3.grid(row=1,column=3, sticky="w")

self.lb3 = tk.Listbox(self,width=6) self.lb3.grid(row=2,column=3,sticky="w")

label2 = tk.Label(self, text="Total de la compra $", font=TITLE_FONT) label2.grid(row=3,columnspan=2,sticky="e")

self.totalPrice = tk.Label(self, text="0", font=TITLE_FONT) self.totalPrice.grid(row=3,columnspan=4,sticky="e")

def goto(self,donde): self.quit() self.Controller.show_frame(donde)

def update(self): if(self.active): if(self.Controller.Reader.cardId != None): if(Requests.addProduct(self.Controller.Cart.currentUserId, self.Controller.Reader.cardId[0])): self.addProduct(self.Controller.Reader.cardId[0]) self.Controller.Reader.cardId = None self._timer = self.after(100,self.update)

def quit(self): self.active = False

def addProduct(self,prodId): #ver si el producto ya esta en el carro self.lb1.insert(self.lb1.size()+1,prodId) self.lb2.insert(self.lb1.size()+1,prodId) self.lb3.insert(self.lb1.size()+1,prodId)

class Reader(threading.Thread):

cardId = None MIFAREReader = None endReading = True

def __init__(self): threading.Thread.__init__(self) self.MIFAREReader = MFRC522.MFRC522() self.start()

def end_read(self): self.endReading = False print "Ctrl+C captured, ending read." self.MIFAREReader.GPIO_CLEEN()

def run(self): while(self.endReading): self.stubRandom() (status,TagType) = self.MIFAREReader.MFRC522_Request(self.MIFAREReader.PICC_REQIDL) if status == self.MIFAREReader.MI_OK: (status,backData) = self.MIFAREReader.MFRC522_Anticoll() if status == self.MIFAREReader.MI_OK: #print backData self.cardId = backData

def stubRandom(self): if(GPIO.input(11)): foo = [30,135,83,179,247] self.cardId = [random.choice(foo),0,0,0]

class CurrentCart(): currentUserId = None currentCartItems = None currentIndex = None

def __init__(self,currentUserId): self.currentUserId = currentUserId self.currentCartItems = dict() self.currentIndex = 1

def addProduct(self,productId,productPrice): if(productId in currentCartItems): currentCartItems[productId].add() else: currentCartItems[productId] = ProductInCart(self.currentIndex,productPrice) def removeProduct():

class ProductInCart(): index = None amount = 0 price = None unityPrice = None

def __init__(self,index,price): self.index = index self.price = price self.unityPrice = price self.amount = 1

def add(self): self.amount += 1

class Requests(object): userid = 30 productTags = [135,83,179,247] serverDirection = "http://proyectoiot.herokuapp.com/carro/" @staticmethod def openCart(id): print id if(id == Requests.userid): return True return False @staticmethod def closeCart(id): print "hola" @staticmethod def addProduct(id,productId): print productId if(productId in Requests.productTags): return True return False @staticmethod def removeProduct(id,productId): print "hola" #def REQUESTS = Requests()

if __name__ == "__main__": app = SampleApp() app.mainloop()

15