{"id":5016,"date":"2022-05-13T13:43:41","date_gmt":"2022-05-13T11:43:41","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=5016"},"modified":"2022-05-13T13:43:43","modified_gmt":"2022-05-13T11:43:43","slug":"wortheat","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/","title":{"rendered":"WorthEat"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"has-medium-font-size\"><em>Nunca desperdiciar comida fue tan dif\u00edcil.<\/em><\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">MOTIVACI\u00d3N<\/p>\n\n\n\n<p>Al recibir las instrucciones de la pr\u00e1ctica y conocidos los grados de libertad, planteamos una serie de objetivos que el equipo esperaba de este proyecto.<\/p>\n\n\n\n<p>En primer lugar busc\u00e1bamos un<strong> proyecto poco com\u00fan<\/strong>, algo que no tuviera mucha audiencia para exponer nuestra mente ingenieril y tomar nuestras propias decisiones potenciando as\u00ed ese aspecto de nuestra formaci\u00f3n. En segundo lugar, busc\u00e1bamos&nbsp; en el proyecto una <strong>aplicaci\u00f3n real,<\/strong> en el sentido de que el dispositivo fuera usable y realmente \u00fatil para la vida cotidiana. Y en \u00faltimo lugar, bien precedido por el segundo objetivo, busc\u00e1bamos <strong>ayudar<\/strong> a la sociedad en la medida de lo posible combatiendo alguno de los problemas sobrevenidos planteados en la <em>Agenda 2030<\/em> por Naciones Unidas.<\/p>\n\n\n\n<p>Para alcanzar el objetivo de combatir un problema, pensamos que donde m\u00e1s podr\u00edamos calar en la sociedad es con un tema donde todos estamos concienciados, donde todo el mundo pudiera poner <em>su grano de arena<\/em>, pero a la vez del que no se habla tanto, el desperdicio alimentario. Y es que \u00bfa qui\u00e9n no se le ha caducado alguna vez el yogur del fondo de la nevera? Es entonces que necesit\u00e1bamos montar un dispositivo de alarma y tracking de los alimentos as\u00ed como su fecha de caducidad.<\/p>\n\n\n\n<p>Pero para que realmente fuese usable y tuviese \u00e9xito en la sociedad, necesit\u00e1bamos dar con una t\u00e9cnica que supusiera el m\u00ednimo esfuerzo para el usuario a la hora de registrar los alimentos, y un dispositivo de comunicaci\u00f3n que todo el mundo pudiera consultar cuando fuera necesario y de manera sencilla.<\/p>\n\n\n\n<p>\u00bfQu\u00e9 fue lo que se nos ocurri\u00f3?<\/p>\n\n\n\n<p>Se nos ocurri\u00f3 que el arduino pudiera de alguna manera registrar los alimentos que transcurrieran por casa y hac\u00e9rselo llegar al usuario con lo que todos consultamos varias veces al d\u00eda, el tel\u00e9fono m\u00f3vil. En definitiva una aplicaci\u00f3n de alerta que entre otras funcionalidades, nos avisar\u00e1 de los pr\u00f3ximos alimentos caducos.<\/p>\n\n\n\n<p>A continuaci\u00f3n explicamos detalladamente como lo hemos resuelto especificando la tecnolog\u00eda usada, justificando nuestras decisiones, el proceso, el software y todo lo necesario para haber llegado al prototipo inicial de <strong>WorthEat<\/strong>.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">DESPERDICIO ALIMENTARIO EN DATOS<\/p>\n\n\n\n<p>\u201cEn la UE, se generan anualmente alrededor de 88 millones de toneladas de desperdicio de alimentos con costos asociados estimados en 143 mil millones de euros (FUSIONS, 2016). Si bien se estima que el 20 % del total de alimentos producidos se pierde o se desperdicia, 33 millones de personas no pueden permitirse una comida de calidad cada dos d\u00edas (Eurostat, 2018).<\/p>\n\n\n\n<p>A nivel mundial, aproximadamente un tercio de todos los alimentos producidos para el consumo humano se pierden o desperdician (FAO, 2011).&nbsp;<\/p>\n\n\n\n<p>Seg\u00fan el \u00edndice de desperdicio de alimentos 2021 del PNUMA, en 2019 se generaron alrededor de 931 millones de toneladas de desperdicio de alimentos, de los cuales el 61 % proviene de los hogares, el 26 % del servicio de alimentos y el 13 % del comercio minorista. Del mismo modo, en la UE, los hogares generan m\u00e1s de la mitad del desperdicio total de alimentos en la UE (47 millones de toneladas) y el 70 % del desperdicio de alimentos se origina en el hogar, el servicio de alimentos y el comercio minorista [&#8230;]\u201d.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">TECNOLOG\u00cdA<\/p>\n\n\n\n<p>El primer paso supon\u00eda el reto de c\u00f3mo registrar los alimentos para que fuera sencillo para el usuario inicial.&nbsp;<\/p>\n\n\n\n<p>Investigando la forma en la que supermercados o grandes comercios como Decathlon son capaces de identificar objetos y su precio \u00fanicamente poni\u00e9ndolos en la cesta de pago dimos con la clave, <strong>RFID<\/strong>.<\/p>\n\n\n\n<p>El RFID en ingl\u00e9s (<em>\u00b4Radio Frequency Identification\u00b4<\/em>) es un medio de comunicaci\u00f3n entre objetos por medio de ondas de radio. El proceso consiste en 2 principales actores, por un lado tenemos el lector (transceptor) RFID que es en realidad un emisor-receptor, se encarga de mandar estas ondas continuamente y esperando que reboten as\u00ed en el segundo actor, los tags (transpondedores). \u00c9stas mediante unas tecnolog\u00edas inal\u00e1mbricas para almacenar informaci\u00f3n hacen rebotar la onda con dicha informaci\u00f3n, la cual es recogida de nuevo por el lector.<\/p>\n\n\n\n<p>La maravilla del RFID radica en la posibilidad de almacenar informaci\u00f3n en un dispositivo f\u00edsico, tag pasivo, sin estar sujeto a ning\u00fan tipo de alimentaci\u00f3n para ello y responder cuando sea requerido correctamente.<\/p>\n\n\n\n<p>Existen tipos de tags y mientras una prescinde de energ\u00eda la otra no, pero es \u00fanicamente una cuesti\u00f3n de que los tags activos (con alimentaci\u00f3n) pueden alcanzar longitudes mayores, de unos 100 m, mientras que los pasivos (sin alimentaci\u00f3n) alcanzan hasta 25 m de distancia. Todo ello dependiendo del lector. Tambi\u00e9n cabe destacar que estas tags son re-escribibles un n\u00famero casi ilimitado de veces.<\/p>\n\n\n\n<p>El RFID llevado a distancias cortas se conoce como NFC (Near Field Communication) y est\u00e1 presente en infinidad de casos de uso diarios, pago con tarjetas, accesos restringidos por identificador, abono transportes\u2026<\/p>\n\n\n\n<p>El lector que nosotros escogimos es un lector arduino por debajo de 60\u20ac (concretamente 10\u20ac) que mejor distancia otorga: el PN5180.&nbsp;<\/p>\n\n\n\n<p>Un conocimiento compartido que a\u00f1adiremos a esta memoria, es que es muy trabajoso (si no imposible) con los lectores arduinos detectar dos tags simult\u00e1neamente y, en ninguno de los casos que hayamos podido investigar, se supera la barrera de lectura de cuatro tags simult\u00e1neos.<\/p>\n\n\n\n<p>Una noticia agridulce respecto de los problemas anteriores es que el dinero lo puede comprar pr\u00e1cticamente todo y, por unos 80-100\u20ac, te puedes hacer con un magn\u00edfico lector RFID que llega a largas distancias y detecta varios objetos a la vez.<\/p>\n\n\n\n<p>Como dato, la distancia va en funci\u00f3n de la frecuencia de onda que emita el transceptor, aqu\u00ed van algunos datos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Menos de 125 \u2013 140 KHz kHz, menos de 8-10 cm<\/li><li>13,56 MHz hasta 1,5 metros<\/li><li>433 Mhz, 868 \u2013 915 MHz 10-12 metros<\/li><\/ul>\n\n\n\n<p>Aunque insistimos, depende del lector, no fiarse del fabricante.<\/p>\n\n\n\n<p>Inicialmente se nos propuso una placa Arduino UNO con la que nos funcionaba bien en primera instancia, pero supuso 2 problemas: Por un lado los pines del arduino UNO trabajan a 5V mientras que nuestro PN5180 trabaja a 3,3V (aunque se puede comprar un shifter de voltaje) y, por otro lado, el Arduino UNO no dispone de m\u00f3dulo WiFi con el que quer\u00edamos mandar informaci\u00f3n a nuestra API.<\/p>\n\n\n\n<p>Casi como ca\u00eddo del cielo dimos con una placa id\u00f3nea, el ESP32 Devkit C.<\/p>\n\n\n\n<p>Los pines de esta placa trabajan a 3,3V y por si fuera poco tiene m\u00f3dulo Wifi y Bluetooth incorporado. Pero esta placa ha sido una caja de sorpresas debido a las diferentes funcionalidades que ven\u00edan \u201cde regalo\u201d, como su modo deep-sleep que gasta 10 microamperios, o su reloj interno de 240MHz (15 veces m\u00e1s r\u00e1pido que un Arduino UNO) y por supuesto compatible con Arduino IDE.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">REPARTO DE TAREAS Y PASOS SEGUIDOS<\/p>\n\n\n\n<p>Para la realizaci\u00f3n del proyecto hemos seguido la metodolog\u00eda del camino cr\u00edtico. Definimos en un primer lugar los objetivos y dividimos establecimos las tareas que hab\u00eda que hacer para cumplirlo. No hemos divido estrictamente las tareas ya que nos \u00edbamos organizando seg\u00fan sal\u00edan los problemas.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">CASOS DE USO<\/p>\n\n\n\n<p>El usuario de WorthEat llega de la compra con unos productos que tienen tags RFID con los datos de la fecha de caducidad contenidos en los tags. Escanea los productos uno a uno y salta la luz verde para confirmar que el usuario tiene el producto en la aplicaci\u00f3n m\u00f3vil . Ahora solo tendr\u00e1 que esperar a que la aplicaci\u00f3n le avise si su fecha de caducidad esta pr\u00f3xima.<\/p>\n\n\n\n<p>Cuando el usuario acaba un producto y quiere reciclarlo deber\u00e1 volver a escanear el producto, el dispositivo emitir\u00e1 una luz roja a modo de confirmaci\u00f3n que el producto ya no esta en la aplicaci\u00f3n.<\/p>\n\n\n\n<p>El usuario recibir\u00e1 un aviso de que vuelva a escanear el producto con un triple parpadeo amarillo y sonido para indicar al usuario que vuelva a repetir la acci\u00f3n en caso de fallo en el proceso de guardar\/eliminar el producto.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">COMPONENTES Y CIRCUITO<\/p>\n\n\n\n<p>Para llevar a cabo el proyecto hemos usado el sensor PN5180 mencionado anteriormente, tres diodos LED y un buzzer que notificar\u00e1n el estado del sistema.&nbsp;<\/p>\n\n\n\n<p>En primer lugar, hay que hablar de la pieza central del proyecto, la placa ESP32 Devkit C, es un SoC que trabaja a 3,3V y contiene un m\u00f3dulo de WiFi y de Bluetooth. El ESP32 tiene un consumo bajo ya que puede configurarse en varios modos en base a las necesidades de cada momento (Active mode, Modem-sleep mode, Light-sleep mode, Deep-sleep mode y Hibernation mode).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\" alt=\"\" \/><\/figure>\n\n\n\n<p>La placa tiene 38 pines, de los cuales usamos 13 (5,16,17,18,19,23,25,26,32,33, 3.3V, 5V y GRND). Nuestro esquema de conexiones es el siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/x3jgyFc5Dw9FNhCt8D8dTokskXfW25wZZ70bONNLGQQIyYFCYf-ytSzjli7WAs4Uv6pz2NLw7S2wsYeHyTzqZTkr2Khz5SsT_nO093KCf8KmdIUHC029lDI_6I9nJbA6hAIKZ7_Uzx8kOxj5TA\" alt=\"\" \/><\/figure>\n\n\n\n<p>Por otro lado, el PN5180 es un sensor de lectura y escritura que tiene compatibilidad con las ISO 14443,15693, 18092, 21481, 18000. Tiene una tasa de transferencia de hasta 7 Mbit\/s. Los pines necesarios para desarrollar el proyecto fueron:&nbsp;<\/p>\n\n\n\n<p>El 5V, ya que aunque el sensor trabaja a un voltaje de 3,3V se necesitan 5V para alimentarlo.&nbsp;<\/p>\n\n\n\n<p>El 3,3V, que sirve para proporcionar voltaje a los pines.&nbsp;<\/p>\n\n\n\n<p>El Reset.&nbsp;<\/p>\n\n\n\n<p>El NSS (\u201cNot slave select\u201d) cuya funci\u00f3n es seleccionar un dispositivo esclavo (se ponen en un voltaje bajo cuando se transfieren los datos entre el ESP32 y el sensor).<\/p>\n\n\n\n<p>El MOSI (\u201cMaster out Slave in\u201d), que sirve para indicar que se manda datos desde el maestro al esclavo.<\/p>\n\n\n\n<p>El MISO (\u201cMaster in Slave out\u201d), para mandar datos desde el esclavo al maestro.<\/p>\n\n\n\n<p>El SCK, para sincronizar ambos relojes (es importante a la hora de mandar los datos que ambos relojes est\u00e1n sincronizados, ya que en todo momento tienen que darse cuenta de si las se\u00f1ales MOSI o MISO que son los dos bits m\u00e1s significativos est\u00e1n encendidas).<\/p>\n\n\n\n<p>El BUSY, que indica si est\u00e1 ocupado para que no env\u00eden al PN5180 m\u00e1s datos, esto es \u00fatil cuando tienes una estructura con m\u00e1s de un sensor.&nbsp;<\/p>\n\n\n\n<p>Finalmente, el GRND.<\/p>\n\n\n\n<p>En cuanto a la otra parte del circuito, la m\u00e1s simple, debemos comentar que tenemos tres LEDs distintos y un buzzer conectados cada uno a un pin distinto. El LED verde est\u00e1 asociado al pin 25, el rojo al 26 y el amarillo al 32, estando el buzzer conectado al 33. Debemos mencionar que los LEDs no est\u00e1n siendo protegidos por ning\u00fan tipo de resistencia; esto es voluntario. En la teor\u00eda sab\u00edamos que deb\u00edamos poner una peque\u00f1a resistencia en serie, pero en la pr\u00e1ctica nos dimos cuenta que al utilizar la resistencia m\u00e1s peque\u00f1a de nuestro kit, los LEDs apenas brillaban. Esto se debe a que el ESP32 trabaja a 3,3V a diferencia de la FPGA que nos ven\u00eda en el pack entregado en clase, por lo que decidimos no poner resistencia adicional y confiar en la que tienen intr\u00ednseca los pines.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">C\u00d3DIGO<\/p>\n\n\n\n<p>Debido a que tenemos el c\u00f3digo comentado de forma secuencial y espec\u00edfica en la pr\u00e1ctica, hemos decidido explicar aqu\u00ed con mayor profundidad aquellos aspectos que no hemos podido recoger bien en los comentarios.<\/p>\n\n\n\n<p>Para llevar a cabo la lectura de la etiqueta RFID y su posterior env\u00edo al servidor hemos usado dos librer\u00edas que comentaremos a continuaci\u00f3n:<\/p>\n\n\n\n<p>Las primeras librer\u00edas son las que engloban el funcionamiento del sensor RFID (PN5180.h y PN5180ISO15693.h), centr\u00e1ndose una en el sensor y la otra en la comunicaci\u00f3n con los tags. Durante la ejecuci\u00f3n del proyecto, hemos usado las siguientes funciones:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>getInventory(uint8_t *uid)<\/em>, esta funci\u00f3n se encarga de cargar en el array de enteros <em>uid<\/em><em> <\/em>los 8 bytes que forman el uid de la tarjeta. Estos bytes se usan para identificar la tarjeta y saber que se est\u00e1 leyendo correctamente. Lo que hace esta funci\u00f3n internamente es llamar a otra funci\u00f3n, <em>issueISO15693Command<\/em><em>(<\/em><em>uint8_t<\/em><em> *cmd, <\/em><em>uint8_t<\/em><em> cmdLen, <\/em><em>uint8_t<\/em><em> **resultPtr)<\/em>,que se encarga de leer los registros de la tarjeta.<\/li><li><em>getSystemInfo(uint8_t *uid, uint8_t *blockSize, uint8_t *numBlocks)<\/em>, esta funci\u00f3n se encarga de leer la estructura de la pegatina que se intenta reconocer, obteniendo de aqu\u00ed el n\u00famero de bloques que tiene la tarjeta y el tama\u00f1o de cada bloque. A ra\u00edz de esto podremos ir leyendo la informaci\u00f3n contenida en la tarjeta bloque por bloque.<\/li><li><em>readSingleBlock(uint8_t *uid, uint8_t blockNo, uint8_t *blockData, uint8_t blockSize)<\/em>, esta funci\u00f3n se encarga de leer cada bloque del tag.<\/li><\/ul>\n\n\n\n<p>Las 3 funciones hacen uso de la funci\u00f3n <em>issueISO15693Command<\/em> que devuelve la informaci\u00f3n de la tarjeta y tambi\u00e9n un c\u00f3digo de error en caso de fallo.<\/p>\n\n\n\n<p>De forma adicional, decidimos aprovechar el m\u00f3dulo WIFI para enviar los productos le\u00eddos por el sensor a una API que m\u00e1s tarde se encarga de guardarlos en una base de datos y servirlos en la aplicaci\u00f3n m\u00f3vil.<\/p>\n\n\n\n<p>Para ello, usamos las siguientes librer\u00edas (WiFi.h, WiFiClient.h y HTTPClient.h). A continuaci\u00f3n vamos a explicar c\u00f3mo hemos procedido para mandar todas las se\u00f1ales:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>En primer lugar, inicializamos el Wifi con la funci\u00f3n <em>WiFi.begin(ssid, password)<\/em> donde el ssid es el nombre de la wifi y la password, la contrase\u00f1a.<\/li><li>Posteriormente, nos cercioramos de que el Wifi se ha conectado correctamente con la funci\u00f3n <em>WiFi.status()<\/em>, tambi\u00e9n hemos a\u00f1adido informaci\u00f3n adicional como la ip asignada al dispositivo usando <em>WiFi.localIP()<\/em>.<\/li><li>En la funci\u00f3n loop, verificamos constantemente que la wifi siga conectada. Despu\u00e9s de leer el contenido de la etiqueta realizamos un <em>postRequest()<\/em>.<br>En esta funci\u00f3n enviamos un JSON al servidor haciendo uso de la funci\u00f3n <em>http.POST(request)<\/em> y recibimos el c\u00f3digo de respuesta devuelto por el servidor. La API es la encargada de saber si un objeto ya ha sido procesado y por tanto hay que eliminarlo de la base de datos o simplemente incluirlo. Por ello la API responder\u00e1 con un c\u00f3digo de error si se ha incluido el \u00edtem y usar\u00e1 otro en caso contrario.<\/li><\/ol>\n\n\n\n<p>El apartado final del proyecto ha sido comunicar el estado del sistema al usuario. Para ello hemos destacado 3 estados: introducido, eliminado y error. Los hemos representado con 3 leds, verde, rojo y amarillo, respectivamente. Adicionalmente hemos introducido un buzzer que emite un sonido cuando se ha recibido la respuesta del servidor.<\/p>\n\n\n\n<p>Cabe mencionar que la funci\u00f3n <em>tone(pin,frequency,duration)<\/em> ha sido cambiada a <em>tone(pin,frequency,duration,led)<\/em> para a\u00f1adir un par\u00e1metro m\u00e1s que se encarga de que el LED asociado brille el mismo tiempo que est\u00e1 sonando el buzzer.&nbsp;<\/p>\n\n\n\n<p>Adicionalmente, hemos construido una <strong>API Rest<\/strong> con NodeJS, la api recibe las peticiones enviadas por el sistema y las almacena en una base de datos (MySQL). Adem\u00e1s, la API sirve los datos a nuestra aplicaci\u00f3n programada en IONIC, desde aqu\u00ed se podr\u00eda construir una l\u00f3gica para que te lleguen notificaciones sobre cu\u00e1ndo van a caducar ciertos productos o qu\u00e9 recetas puedo hacer con los productos que tengo en la despensa.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-medium-font-size\">PROBLEMAS ENCONTRADOS Y C\u00d3MO SOLUCIONARLOS<\/p>\n\n\n\n<p>El primer problema con el que nos encontramos fue que no todos los fabricantes indican la ISO que utilizan. Esto fue un gran inconveniente ya que cada ISO funciona a una determinada frecuencia, en particular la ISO15693 trabaja a 13.56MHz, por lo que habr\u00e1 que indicarle al sensor que lea esa frecuencia. Desde un primer momento quer\u00edamos trabajar con las pegatinas de la ISO15693 ya que ofrecen un mayor alcance frente a otras como la ISO14443 (al menos en la pr\u00e1ctica). Afortunadamente, en el kit del sensor RFID ven\u00edan ambas y pudimos probarlas.<\/p>\n\n\n\n<p>El segundo y mayor problema que nos encontramos fue la falta de documentaci\u00f3n en internet, si bien es cierto que en la documentaci\u00f3n del sensor PN5180 relata c\u00f3mo hay que proceder para realizar la lectura de una etiqueta:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/b5tgSzmAjr-3FL491FjK_cgk_7Q-2RTTEGVxQAzNzoLbtxybB6zC1S0_23sDs-LO6-FHr8BiWwDzyll3Wqzliplp3IQ_wLrSzTmp5TmLXRTPcYNILjtrEMizq6rAxK_et4Ry-6-Kn1N-c0UNCg\" alt=\"\" \/><\/figure>\n\n\n\n<p>Para el conocimiento que ten\u00edamos en un comienzo era resolver un rompecabezas imposible:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/aAh90eA0YLSzyzmEAqe4R5rWLqzCf0l9wmdUR1sVvgEGHluS8Fn2DRQ-ivhciMC0pq_UStlJgs0h3V4POQhKcIjJSvdGtEgpjj_MjL4G2Ou6byZC3sDg4tThOR3ICVOpHRIDZBTP8IhmLTCaDg\" alt=\"\" \/><\/figure>\n\n\n\n<p>La imagen anterior muestra los pasos que hay que seguir para leer una \u00fanica etiqueta, sin embargo con esto \u00fanicamente conseguimos el identificador de la etiqueta ni si quiera los elementos que est\u00e1n escritos en ella.<\/p>\n\n\n\n<p>Afortunadamente, encontramos una librer\u00eda en internet que permit\u00eda la ejecuci\u00f3n de estos procedimientos en C++.<a href=\"https:\/\/github.com\/ATrappmann\/PN5180-Library\"> https:\/\/github.com\/ATrappmann\/PN5180-Library<\/a><\/p>\n\n\n\n<p>Otro gran inconveniente que tuvimos, fue la diferencia que hab\u00eda entre las especificaciones que el fabricante facilitaba y la cruda realidad. Seg\u00fan el fabricante, el PN5180 ten\u00eda un rango de 50cm, pero una vez probado, el rango no superaba los 7 u 8 cm. Nuestro proyecto estaba pensado en un principio para leer varios tags a la vez, pero este problema sumado a la dificultad del software del PN5180, hizo que descartaramos esta implementaci\u00f3n.<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"[SEyTR Mo]: Grupo 17 &quot;WorthEat&quot;\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/EADUwXwPLLc?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Nunca desperdiciar comida fue tan dif\u00edcil. MOTIVACI\u00d3N Al recibir las instrucciones de la pr\u00e1ctica y conocidos los grados de libertad, planteamos una serie de objetivos que el equipo esperaba de este proyecto. En primer&#46;&#46;&#46;<\/p>\n","protected":false},"author":37,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5016","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WorthEat - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WorthEat - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Nunca desperdiciar comida fue tan dif\u00edcil. MOTIVACI\u00d3N Al recibir las instrucciones de la pr\u00e1ctica y conocidos los grados de libertad, planteamos una serie de objetivos que el equipo esperaba de este proyecto. En primer&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-13T11:43:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-13T11:43:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"WorthEat\",\"datePublished\":\"2022-05-13T11:43:41+00:00\",\"dateModified\":\"2022-05-13T11:43:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/\"},\"wordCount\":2835,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/\",\"name\":\"WorthEat - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\",\"datePublished\":\"2022-05-13T11:43:41+00:00\",\"dateModified\":\"2022-05-13T11:43:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#primaryimage\",\"url\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\",\"contentUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wortheat\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WorthEat\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WorthEat - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/","og_locale":"es_ES","og_type":"article","og_title":"WorthEat - Proyectos con Arduino.","og_description":"Nunca desperdiciar comida fue tan dif\u00edcil. MOTIVACI\u00d3N Al recibir las instrucciones de la pr\u00e1ctica y conocidos los grados de libertad, planteamos una serie de objetivos que el equipo esperaba de este proyecto. En primer&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-05-13T11:43:41+00:00","article_modified_time":"2022-05-13T11:43:43+00:00","og_image":[{"url":"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/"},"author":{"name":"","@id":""},"headline":"WorthEat","datePublished":"2022-05-13T11:43:41+00:00","dateModified":"2022-05-13T11:43:43+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/"},"wordCount":2835,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#primaryimage"},"thumbnailUrl":"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/","name":"WorthEat - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#primaryimage"},"thumbnailUrl":"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ","datePublished":"2022-05-13T11:43:41+00:00","dateModified":"2022-05-13T11:43:43+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#primaryimage","url":"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ","contentUrl":"https:\/\/lh4.googleusercontent.com\/dw_6tfmC4vRs-ibjchLPSNiZVL0rK1uRA6i0BOVoM8ljXLUtknVRVgBYRclOQDnDRE5jnfQMOFbwmV5bGa0zj_QITAWM0m2VcpYMgYUhLBIjxAxZlh4VmjgTMI2AkxZzCIXXsLnV80ZoRmi6DQ"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wortheat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"WorthEat"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=5016"}],"version-history":[{"count":6,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5016\/revisions"}],"predecessor-version":[{"id":5610,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5016\/revisions\/5610"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=5016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=5016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=5016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}