{"id":6929,"date":"2023-05-08T22:25:44","date_gmt":"2023-05-08T20:25:44","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=6929"},"modified":"2023-05-08T22:25:45","modified_gmt":"2023-05-08T20:25:45","slug":"caja-registradora-inteligente","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/","title":{"rendered":"Caja registradora inteligente"},"content":{"rendered":"\n<p><strong>Autores<\/strong>: Jorge Lozoya Astudillo, Alejandro Pradas Liquete y Ra\u00fal Sanz Cuesta<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png\" alt=\"\" class=\"wp-image-6970\" width=\"765\" height=\"497\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png 557w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg-300x195.png 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n: Ideas y Objetivos<\/h2>\n\n\n\n<p>Uno de los requisitos que quer\u00edamos que tuviera nuestro proyecto es que fuera algo cotidiano, algo que se utilizase en el d\u00eda a d\u00eda, pero incluy\u00e9ndole alguna mejora. Por eso, la idea de hacer una caja registradora no nos pareci\u00f3 mal. Era algo que todos los integrantes del grupo sabr\u00edamos plasmar en c\u00f3digo, s\u00f3lo nos faltaba el conocimiento necesario para implementarlo con Arduino.<\/p>\n\n\n\n<p>Al tener el proyecto en mente, la idea de implementar la nueva funcionalidad se nos ocurri\u00f3 de forma espont\u00e1nea: la caja registradora tendr\u00e1 cuatro cajones, cada uno con billetes de distinto valor. De esta forma, s\u00f3lo los cajones de los billetes que se utilicen se abrir\u00e1n y se cerrar\u00e1n autom\u00e1ticamente, haciendo las compras m\u00e1s sencillas y r\u00e1pidas.<\/p>\n\n\n\n<p>Durante la realizaci\u00f3n del esquema con todas las funcionalidades b\u00e1sicas de la caja registradora y de los componentes necesarios para llevarlo a cabo, se nos fueron ocurriendo m\u00e1s funcionalidades, pero por su complejidad o por la incapacidad de implementarlas, las descartamos. El resultado de nuestro proyecto cumple con todos los objetivos y las ideas que ten\u00edamos en mente aunque, durante el desarrollo de la pr\u00e1ctica, fueron surgiendo algunos problemas que comentaremos m\u00e1s adelante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Materiales y presupuesto<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Placa ELEGOO UNO R3<\/li>\n\n\n\n<li>Resistencias de 220 ohmios (2 unidades)<\/li>\n\n\n\n<li>Micro servomotor<\/li>\n\n\n\n<li>Placa de inserci\u00f3n<\/li>\n\n\n\n<li>Pantalla LCD 16&#215;2<\/li>\n\n\n\n<li>Cableado<\/li>\n<\/ul>\n\n\n\n<p>Todos los componentes estaban incluidos en la caja excepto: <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Elementos<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Precio (\u20ac)<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Referencia<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Placa Arduino MEGA<\/td><td class=\"has-text-align-center\" data-align=\"center\">_<\/td><td class=\"has-text-align-center\" data-align=\"center\">Prestada<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Micro servomotor (3 unidades)<\/td><td class=\"has-text-align-center\" data-align=\"center\">10,99<\/td><td class=\"has-text-align-center\" data-align=\"center\">Amazon<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Placa de inserci\u00f3n<\/td><td class=\"has-text-align-center\" data-align=\"center\">6,5<\/td><td class=\"has-text-align-center\" data-align=\"center\">Tienda de electr\u00f3nica<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Cableado adicional<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,5<\/td><td class=\"has-text-align-center\" data-align=\"center\">Tienda de electr\u00f3nica<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>En total, el coste de los componentes adquiridos ha sido <strong>20,99\u20ac<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"403\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Circuito.jpg.png\" alt=\"\" class=\"wp-image-6971\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Circuito.jpg.png 752w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Circuito.jpg-300x161.png 300w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Implementaci\u00f3n software (c\u00f3digo)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;LiquidCrystal.h&gt;  \/\/ Includes LCD library\n#include &lt;Servo.h&gt;          \/\/ Includes servo library\n\n\/\/ Definition of LCD connection pins\nconst int rs = 13, en = 12, d4 = 8, d5 = 5, d6 = 4, d7 = 2;\n\n\/\/ Password\nconst int pwd = 1234;\n\n\/\/ Number of bills\nint oneBills = 10;\nint fiveBills = 11;\nint tenBills = 12;\nint fiftyBills = 13;\n\n\/\/ Servos\nServo oneServo;\nServo fiveServo;\nServo tenServo;\nServo fiftyServo;\n\n\/\/ Other variables\nint option;\nint password;\nint logged = 0;\nString text;\n\n\/\/ Create a LiquidCrystal object to control the LCD\nLiquidCrystal lcd(rs, en, d4, d5, d6, d7);\n\nint readInput() {\n    int num;\n\n    while (Serial.available() == 0) {  \/\/ Program stops until buffer has something to read\n    }\n    num = Serial.parseInt();\n    return num;\n}\n\nvoid setServos() {\n    oneServo.write(0);\n    delay(1500);\n    fiveServo.write(0);\n    delay(1500);\n    tenServo.write(0);\n    delay(1500);\n    fiftyServo.write(0);\n    delay(1500);\n}\n\nvoid showLogin() {\n    char cursor = 95;\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.print(\"Enter password:\");\n    while (Serial.available() == 0) {\n        lcd.setCursor(0, 1);\n        lcd.print(\" \");\n        delay(500);\n        lcd.setCursor(0, 1);\n        lcd.write(cursor);\n        delay(500);\n    }\n}\n\nvoid showPassword(int password) {\n    lcd.setCursor(0, 1);\n    for (int i = 0; i &lt; String(password).length(); i++) {\n        lcd.print(\"*\");\n    }\n    delay(1000);\n}\n\nint checkPassword(int pin) {\n    return pin == pwd;\n}\n\nvoid scrollText(String text) {\n    int i = 0;\n    int stop = 0;\n\n    if (text.length() &lt;= 16) {\n        lcd.print(text);\n        return;\n    }\n\n    \/\/ Add spaces at the end of the text so that it repeats itself in the scrolling\n    for (int i = 0; i &lt; 16; i++) {\n        text += \" \";\n    }\n\n    while (stop != 1 &amp;&amp; i &lt; text.length() - 15) {\n        if (i == text.length() - 16) {  \/\/ If it reaches the end, the i is restarted so that it does it again\n            i = 0;\n        }\n        lcd.setCursor(0, 0);\n        lcd.print(text.substring(i, i + 16));\n        if (i == 0) {\n            delay(1000);\n        }\n        if (Serial.available() &gt; 0) {\n            stop = 1;\n            Serial.read();\n        }\n        delay(200);\n        i++;\n    }\n}\n\nvoid openCashDrawers(int numOne, int numFive, int numTen, int numFifty, int operationType) {\n    \/*operationType == 1 -&gt; addMoney\n      operationType == 0 -&gt; giveChange*\/\n    if (numOne &gt; 0) {\n        if (operationType == 1) {\n            Serial.println(\"Abro oneServo\");\n            oneServo.write(90);\n            delay(1500);\n        } else {\n            Serial.println(\"Cierro oneServo\");\n            oneServo.write(0);\n            delay(1500);\n        }\n    }\n    if (numFive &gt; 0) {\n        if (operationType == 1) {\n            Serial.println(\"Abro fiveServo\");\n            fiveServo.write(90);\n            delay(1500);\n        } else {\n            Serial.println(\"Cierro fiveServo\");\n            fiveServo.write(0);\n            delay(1500);\n        }\n    }\n    if (numTen &gt; 0) {\n        if (operationType == 1) {\n            Serial.println(\"Abro tenServo\");\n            tenServo.write(90);\n            delay(1500);\n        } else {\n            Serial.println(\"Cierro tenServo\");\n            tenServo.write(0);\n            delay(1500);\n        }\n    }\n    if (numFifty &gt; 0) {\n        if (operationType == 1) {\n            Serial.println(\"Abro fiftyServo\");\n            fiftyServo.write(90);\n            delay(1500);\n        } else {\n            Serial.println(\"Cierro fiftyServo\");\n            fiftyServo.write(0);\n            delay(1500);\n        }\n    }\n}\n\nint addMoney(int&amp; oneBills, int&amp; fiveBills, int&amp; tenBills, int&amp; fiftyBills) {\n    int added = 0;\n    int payment = 0;\n    int numOne = 0;\n    int numFive = 0;\n    int numTen = 0;\n    int numFifty = 0;\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"Billetes de 1:\");\n    added = readInput();\n    oneBills += added;\n    payment += added;\n    numOne = added;\n    lcd.setCursor(0, 1);\n    lcd.print(String(added));\n    delay(1000);\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"Billetes de 5:\");\n    added = readInput();\n    fiveBills += added;\n    payment += added * 5;\n    numFive = added;\n    lcd.setCursor(0, 1);\n    lcd.print(String(added));\n    delay(1000);\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"Billetes de 10:\");\n    added = readInput();\n    tenBills += added;\n    payment += added * 10;\n    numTen = added;\n    lcd.setCursor(0, 1);\n    lcd.print(String(added));\n    delay(1000);\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"Billetes de 50:\");\n    added = readInput();\n    fiftyBills += added;\n    payment += added * 50;\n    numFifty = added;\n    lcd.setCursor(0, 1);\n    lcd.print(String(added));\n    delay(1000);\n\n    if (payment != 0) {\n        openCashDrawers(numOne, numFive, numTen, numFifty, 1);\n        text = \"Cerrar cajones:0\";\n        showMoney(numOne, numFive, numTen, numFifty, text);\n        openCashDrawers(numOne, numFive, numTen, numFifty, 0);\n    }\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.print(\"Cantidad sumada:\");\n    lcd.setCursor(0, 1);\n    lcd.print(String(payment));\n    delay(2000);\n    return payment;\n}\n\nvoid showMoney(int oneBills, int fiveBills, int tenBills, int fiftyBills, String text) {\n    int option;\n    String message;\n\n    lcd.clear();\n    lcd.setCursor(0, 1);\n    lcd.print(text);\n    lcd.setCursor(0, 0);\n    message = \"(1s): \" + String(oneBills) + \"  (5s): \" + String(fiveBills) + \"  (10s): \" + String(tenBills) + \"  (50s): \" + String(fiftyBills);\n    scrollText(message);\n}\n\nvoid purchase() {\n    int price = 0;\n    String text;\n\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    scrollText(\"Importe total:\");\n    price = readInput();\n    lcd.setCursor(0, 1);\n    lcd.print(price);\n    delay(1000);\n    int payment = addMoney(oneBills, fiveBills, tenBills, fiftyBills);\n    \/\/ Function to open the corresponding drawers (change)\n    if (price != payment) {\n        giveChange(price, payment, oneBills, fiveBills, tenBills, fiftyBills);\n    }\n    lcd.clear();\n    lcd.print(\"     Compra     \");\n    lcd.setCursor(0, 1);\n    lcd.print(\"   finalizada   \");\n    delay(2000);\n}\n\nvoid giveChange(int price, int payment, int&amp; oneBills, int&amp; fiveBills, int&amp; tenBills, int&amp; fiftyBills) {\n    String text;\n    int numOne = 0;\n    int numFive = 0;\n    int numTen = 0;\n    int numFifty = 0;\n    int change = payment - price;\n    if (payment &lt; price) {\n        lcd.clear();\n        lcd.setCursor(0, 0);\n        lcd.print(\"Falta dinero\");\n        lcd.clear();\n        addMoney(oneBills, fiveBills, tenBills, fiftyBills);\n    }\n    while (change &gt; 0) {\n        if ((change &gt;= 50) &amp;&amp; (fiftyBills &gt;= numFifty)) {\n            fiftyBills--;\n            change -= 50;\n            numFifty++;\n        } else if ((change &gt;= 10) &amp;&amp; (tenBills &gt;= numTen)) {\n            tenBills--;\n            change -= 10;\n            numTen++;\n        } else if ((change &gt;= 5) &amp;&amp; (fiveBills &gt;= numFive)) {\n            fiveBills--;\n            change -= 5;\n            numFive++;\n        } else if ((change &gt;= 1) &amp;&amp; (oneBills &gt;= numOne)) {\n            oneBills--;\n            change -= 1;\n            numOne++;\n        }\n    }\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.print(\"Abriendo cajones\");\n    openCashDrawers(numOne, numFive, numTen, numFifty, 1);\n    text = \"Cerrar cajones:0\";\n    showMoney(numOne, numFive, numTen, numFifty, text);\n    openCashDrawers(numOne, numFive, numTen, numFifty, 0);\n    lcd.clear();\n    lcd.setCursor(0, 0);\n}\n\nvoid showOptions() {\n    while (Serial.available() == 0) {\n        lcd.clear();\n        lcd.setCursor(0, 0);\n        lcd.write(\"1: Compra\");\n        lcd.setCursor(0, 1);\n        lcd.write(\"2: Meter dinero\");\n        delay(1500);\n\n        lcd.clear();\n        lcd.setCursor(0, 0);\n        lcd.write(\"3: Ver dinero\");\n        lcd.setCursor(0, 1);\n        lcd.write(\"4: Cerrar sesion\");\n        delay(1500);\n    }\n}\n\nvoid byePrompt() {\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.print(\"     Sesion     \");\n    lcd.setCursor(0, 1);\n    lcd.print(\"    terminada   \");\n    delay(2000);\n}\n\nvoid logOut(int&amp; logged) {\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.print(\"Quieres salir?\");\n    lcd.setCursor(0, 1);\n    lcd.print(\"Si: 1   No: 0\");\n    option = readInput();\n    if (option) {\n        byePrompt();\n        logged = 0;\n    }\n}\n\nvoid showLoginSuccess() {\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"     Sesion     \");\n    lcd.setCursor(0, 1);\n    lcd.write(\"    iniciada    \");\n    delay(2000);\n}\n\nvoid showLoginError() {\n    lcd.clear();\n    lcd.setCursor(0, 0);\n    lcd.write(\"    Fallo al    \");\n    lcd.setCursor(0, 1);\n    lcd.write(\" iniciar sesion \");\n    delay(2000);\n}\n\nvoid setup() {\n    \/\/ Starts LCD connection\n    lcd.begin(16, 2);\n\n    \/\/ Starts serial port connection\n    Serial.begin(9600);\n\n    \/\/ Servos port configuration\n    oneServo.attach(11);   \/\/ One dollar bill servo\n    fiveServo.attach(10);  \/\/ Five dollar bill servo\n    tenServo.attach(9);    \/\/ Ten dollar bill servo\n    fiftyServo.attach(7);  \/\/ Fifty dollar bill servo\n}\n\nvoid loop() {\n    \/\/ Input password\n    while (logged != 1) {\n        showLogin();\n        password = readInput();\n        showPassword(password);\n        if (checkPassword(password) == 1) {\n            showLoginSuccess();\n            logged = 1;\n            setServos();  \/\/ Sets all servos to 0 degrees\n        } else {\n            showLoginError();\n        }\n    }\n\n    \/\/ User logged\n    showOptions();\n    option = readInput();\n    Serial.print(\"Opcion elegida: \");\n    Serial.println(option);\n    switch (option) {\n        case 1:\n            purchase();\n            break;\n        case 2:\n            addMoney(oneBills, fiveBills, tenBills, fiftyBills);\n            break;\n        case 3:\n            text = \"Salir: 0\";\n            showMoney(oneBills, fiveBills, tenBills, fiftyBills, text);\n            break;\n        case 4:\n            logOut(logged);\n            break;\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Casos de uso<\/h2>\n\n\n\n<p>Nuestro proyecto puede realizar las siguientes funcionalidades: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Iniciar sesi\u00f3n:<\/strong> Para poder acceder al resto de funciones es necesario introducir una contrase\u00f1a, en este caso la contrase\u00f1a es 1234. Al iniciar el Arduino nos aparece por pantalla el mensaje \u201cEnter password:\u201d. Por teclado escribimos la contrase\u00f1a y al dar a la tecla intro aparece por pantalla un asterisco por cada car\u00e1cter que hayamos escrito. Si la contrase\u00f1a es incorrecta, nos aparece el mensaje \u201cFallo al iniciar sesi\u00f3n\u201d y nos pide la contrase\u00f1a de nuevo. Si la contrase\u00f1a es correcta,&nbsp; nos aparece el mensaje \u201cSesion iniciada\u201d y nos muestra el resto de las funcionalidades disponibles.<\/li>\n\n\n\n<li><strong>Compra:<\/strong> Esta funcionalidad nos permite realizar la compra. Seleccionamos esta opci\u00f3n, despu\u00e9s de iniciar sesi\u00f3n, escribiendo 1 por teclado. Nos aparece por pantalla el mensaje \u201cImporte total:\u201d y nos pide que indiquemos el valor de la compra. Despu\u00e9s de esto, tendremos que introducir cu\u00e1ntos billetes de 1, de 5, de 10 y de 50 vamos a usar para pagar. Una vez hecho esto, se abrir\u00e1n los cajones de los billetes que vamos a introducir y nos mostrar\u00e1 por pantalla un recordatorio de qu\u00e9 billetes hemos indicado que vamos a introducir y cu\u00e1ntos de cada tipo. Debajo de ese mensaje tambi\u00e9n nos aparece por pantalla \u201cCerrar cajones:0\u201d. Cuando hayamos metido todos los billetes en la caja registradora, escribimos 0 por teclado y al dar al intro se cerrar\u00e1n los cajones. Al cerrar los cajones, nos mostrar\u00e1 por pantalla el mensaje \u201cCantidad Sumada:\u201d, y debajo la cantidad que hemos introducido en la caja. Si hemos entregado la cantidad exacta nos mostrar\u00e1 por pantalla el mensaje \u201cCompra finalizada\u201d. Si no hemos especificado la cantidad exacta, calcular\u00e1 el valor de la vuelta y se abrir\u00e1n los cajones de los billetes que nos tenga que devolver.<\/li>\n\n\n\n<li><strong>Meter dinero:<\/strong> Esta funcionalidad nos permite a\u00f1adir dinero a la caja registradora. Seleccionamos esta opci\u00f3n, despu\u00e9s de iniciar sesi\u00f3n, escribiendo 2 por teclado. Nos pide que le indiquemos cu\u00e1ntos billetes de cada tipo vamos a introducir en la caja. Despu\u00e9s de eso, se abren los cajones correspondientes y nos muestra por pantalla los billetes que vamos a introducir de cada tipo y el mensaje \u201cCerrar cajones:0\u201d. Al cerrar los cajones, te indica la cantidad que has introducido y vuelve al men\u00fa principal.<\/li>\n\n\n\n<li><strong>Ver dinero:<\/strong> Esta funcionalidad nos muestra el dinero que hay dentro de la caja registradora. Seleccionamos esta opci\u00f3n, despu\u00e9s de iniciar sesi\u00f3n, escribiendo 3 por teclado. Nos muestra los billetes de cada tipo que hay dentro de la caja y el mensaje \u201cSalir:0\u201d para que volvamos a nuestro men\u00fa principal pulsando 0 e intro.<\/li>\n\n\n\n<li><strong>Cerrar sesi\u00f3n:<\/strong> Esta funcionalidad nos permite cerrar sesi\u00f3n. Seleccionamos esta opci\u00f3n, despu\u00e9s de iniciar sesi\u00f3n, escribiendo 4 por teclado. Al elegir esta opci\u00f3n, nos muestra el mensaje \u201cQuieres salir?\u201d y nos muestra dos opciones \u201cSi: 1 No: 0\u201d para que confirmemos que queremos elegir esta opci\u00f3n. Si pulsamos 1 nos muestra el mensaje \u201cSesion terminada\u201d y nos vuelve a ense\u00f1ar el mensaje inicial \u201cEnter password:\u201d. Si pulsamos 0 volvemos al men\u00fa principal.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Posibles mejoras<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hab\u00edamos pensado a\u00f1adir un teclado num\u00e9rico, un 4 Digit 7 Segment-Display, un zumbador para usarlo como alarma y unos leds para indicar si se estaba ejecutando alguna funcionalidad.<\/li>\n\n\n\n<li>Nos habr\u00eda gustado mejorar la forma en la que se abren los cajones de la caja registradora, ya que los servos solo nos permiten levantar ligeramente los cajones.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Problemas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los elementos que nos gustar\u00eda haber a\u00f1adido no hemos podido a\u00f1adirlos porque no ten\u00edamos suficientes entradas a las que poder conectarlos.<\/li>\n\n\n\n<li>Para los servo motores que utilizamos en nuestro proyecto necesit\u00e1bamos alimentaci\u00f3n externa, ya que los 5 voltios que nos proporciona el Arduino no era suficiente para alimentar los servos y el resto de nuestro circuito. Intentamos usar una pila de 9 voltios para alimentarlos pero no conseguimos que funcionaran. La soluci\u00f3n que encontramos fue utilizar un Arduino extra como fuente de alimentaci\u00f3n, porque si conect\u00e1bamos los servos a nuestro Arduino s\u00ed que funcionaban pero si los conect\u00e1bamos a nuestra pila no.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Demostraci\u00f3n del funcionamiento<\/h2>\n\n\n\n<p><a href=\"https:\/\/drive.google.com\/file\/d\/1ntIndO3Kne8UTrzbIt_y9XLdYcUBH3ja\/view?usp=sharing\">https:\/\/drive.google.com\/file\/d\/1ntIndO3Kne8UTrzbIt_y9XLdYcUBH3ja\/view?usp=sharing<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autores: Jorge Lozoya Astudillo, Alejandro Pradas Liquete y Ra\u00fal Sanz Cuesta Introducci\u00f3n: Ideas y Objetivos Uno de los requisitos que quer\u00edamos que tuviera nuestro proyecto es que fuera algo cotidiano, algo que se utilizase&#46;&#46;&#46;<\/p>\n","protected":false},"author":8,"featured_media":6970,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8],"class_list":["post-6929","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Caja registradora inteligente - Proyectos con Arduino.<\/title>\n<meta name=\"description\" content=\"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto Arduino.\" \/>\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\/caja-registradora-inteligente\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Caja registradora inteligente - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto Arduino.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-08T20:25:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-08T20:25:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png\" \/>\n\t<meta property=\"og:image:width\" content=\"557\" \/>\n\t<meta property=\"og:image:height\" content=\"362\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"gdhwsw2\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"gdhwsw2\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 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\\\/caja-registradora-inteligente\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/\"},\"author\":{\"name\":\"gdhwsw2\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/7491e54afbe5e7fd53467fccb9c7ce44\"},\"headline\":\"Caja registradora inteligente\",\"datePublished\":\"2023-05-08T20:25:44+00:00\",\"dateModified\":\"2023-05-08T20:25:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/\"},\"wordCount\":1020,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Caja-registradora.jpg.png\",\"keywords\":[\"Arduino\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/\",\"name\":\"Caja registradora inteligente - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Caja-registradora.jpg.png\",\"datePublished\":\"2023-05-08T20:25:44+00:00\",\"dateModified\":\"2023-05-08T20:25:45+00:00\",\"description\":\"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto Arduino.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Caja-registradora.jpg.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/05\\\/Caja-registradora.jpg.png\",\"width\":557,\"height\":362,\"caption\":\"Caja registradora\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-registradora-inteligente\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caja registradora inteligente\"}]},{\"@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\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/7491e54afbe5e7fd53467fccb9c7ce44\",\"name\":\"gdhwsw2\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g\",\"caption\":\"gdhwsw2\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/gdhwsw2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Caja registradora inteligente - Proyectos con Arduino.","description":"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto 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\/caja-registradora-inteligente\/","og_locale":"es_ES","og_type":"article","og_title":"Caja registradora inteligente - Proyectos con Arduino.","og_description":"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto Arduino.","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2023-05-08T20:25:44+00:00","article_modified_time":"2023-05-08T20:25:45+00:00","og_image":[{"width":557,"height":362,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png","type":"image\/png"}],"author":"gdhwsw2","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"gdhwsw2","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/"},"author":{"name":"gdhwsw2","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/7491e54afbe5e7fd53467fccb9c7ce44"},"headline":"Caja registradora inteligente","datePublished":"2023-05-08T20:25:44+00:00","dateModified":"2023-05-08T20:25:45+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/"},"wordCount":1020,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png","keywords":["Arduino"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/","name":"Caja registradora inteligente - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png","datePublished":"2023-05-08T20:25:44+00:00","dateModified":"2023-05-08T20:25:45+00:00","description":"Caja registradora inteligente con cuatro compartimentos autom\u00e1ticos para billetes de distinto valor. Sistemas empotrados y de tiempo real. Proyecto Arduino.","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/05\/Caja-registradora.jpg.png","width":557,"height":362,"caption":"Caja registradora"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-registradora-inteligente\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Caja registradora inteligente"}]},{"@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":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/7491e54afbe5e7fd53467fccb9c7ce44","name":"gdhwsw2","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed762cea3155134adfbecf1780d8a40c0fe5e4b642859a56b3a2b3611a1ca73a?s=96&d=mm&r=g","caption":"gdhwsw2"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/gdhwsw2\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6929","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\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=6929"}],"version-history":[{"count":2,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6929\/revisions"}],"predecessor-version":[{"id":6981,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6929\/revisions\/6981"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/6970"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=6929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=6929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=6929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}