{"id":5260,"date":"2022-05-12T11:43:57","date_gmt":"2022-05-12T09:43:57","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=5260"},"modified":"2022-06-03T10:33:03","modified_gmt":"2022-06-03T08:33:03","slug":"dispensador-de-pastillas-diario","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/","title":{"rendered":"Dispensador de pastillas diario"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><strong>Introducci\u00f3n<\/strong><\/h1>\n\n\n\n<p>En un principio, nos pareci\u00f3 muy abrumador la selecci\u00f3n de un tema para este proyecto. Al ser completamente libre, originalmente pensamos en realizar alguna especie de juego o juguete, pero finalmente decidimos guiarnos por una caracter\u00edstica: la utilidad. Independientemente de lo que decidi\u00e9semos construir, quer\u00edamos que tuviera una aplicaci\u00f3n en el mundo real: \u00bfser\u00edamos capaces de realizar algo que de verdad fuera aplicable, y no s\u00f3lo un proyecto m\u00e1s para aprobar la asignatura?<\/p>\n\n\n\n<p>Con esto en mente, acabamos decidiendo crear un dispensador de pastillas autom\u00e1tico. Combina una alarma visual y una sonora con un reloj programable que al llegar la hora seleccionada dispense las pastillas que el usuario requiera cada d\u00eda. Existen multitud de aplicaciones para dispositivos m\u00f3viles que ejercen una funci\u00f3n similar como recordatorios, pero son pocas las personas de edad avanzada que son capaces de utilizar estos dispositivos inteligentes, por lo que nos pareci\u00f3 acertado tomar un enfoque m\u00e1s centrado en el hardware. As\u00ed, nuestro proyecto resultar\u00eda m\u00e1s sencillo, \u2014 quer\u00edamos mantener una imagen de simplicidad y comodidad, para que todo resultara intuitivo y f\u00e1cil de usar independientemente de la experiencia previa del usuario con este tipo de aparatos.&nbsp;<\/p>\n\n\n\n<p>Durante los siguientes puntos explicaremos tambi\u00e9n la organizaci\u00f3n del proyecto as\u00ed como el material utilizado, el c\u00f3digo y los componentes hardware para terminar con los casos de uso y las posibles mejoras.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Material<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table alignwide is-style-regular\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Material<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Coste<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x Arduino UNO<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2 x Protoboard <\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x LCD 16&#215;2<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x led azul<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x buzzer<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2 x pulsadores<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">2 x res 100k<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x res 220<\/td><td class=\"has-text-align-center\" data-align=\"center\">Incluido en el material de la URJC<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">1 x Servomotor rotaci\u00f3n continua&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">15 \u20ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Software: c\u00f3digo<\/strong><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/Librerias\n#include &lt;TimerOne.h&gt;\n#include &lt;LiquidCrystal.h&gt;\n\/\/pines LCD\nint v0 = 3;\nint rs = 4;\nint e = 5;\nint d4 = 6;\nint d5 = 7;\nint d6 = 8;\nint d7 = 9;\n\/\/LCD\nLiquidCrystal lcd (rs, e, d4, d5, d6, d7);\n\/\/Servomotor\nint servo = 11;\nfloat pausa;\n\/*** melodias alarma ***\/\nlong DO = 523.25, FA = 698.46;\nlong alarma&#91;] = {DO, FA, DO, FA, DO, FA, DO, FA, DO, FA};\nlong alarma_vacio&#91;] = {DO, DO, DO, DO, DO, DO, DO, DO, DO, DO};\nlong d = 1000;\nlong duracion_alarma&#91;] = {d, d, d, d, d, d, d, d, d, d};\n\/*** fin melodias alarma ***\/\n\/\/pines pulsadores, buzzer y led\nconst int pulsador_modo = 12;\nconst int pulsador_incrementar = 13;\nconst int buzzer = 2;\nconst int led_azul = 10;\n\/*** variables y constantes ***\/\nint contador_dias = 0;\n\/\/RELOJ\nint horas = 0;\nint minutos = 0;\nvolatile int segundos = 0;\nvolatile boolean actualizar = true;\n\/\/ALARMA\nint horas_alarma = 0;\nint minutos_alarma = 0;\nboolean alarma_on = false;\nchar texto&#91;10];\nint modo = 0;\nconst int n_modos = 6;\n\/*\n    modos posibles:\n    0: modo normal\n    1: cambiar hora reloj\n    2: cambiar minutos reloj\n    3: cambiar hora alarma\n    4: cambiar minutos alarma\n    5: cambiar ON\/OFF alarma\n*\/\n\/*** fin variables y constantes ***\/\nvoid setup() {\n  pinMode(servo, OUTPUT);\n  analogWrite(v0, 10);\n  lcd.begin(16, 2);\n  lcd.clear();\n  pinMode(pulsador_modo, INPUT);\n  pinMode(pulsador_incrementar, INPUT);\n  pinMode(buzzer, OUTPUT);\n  pinMode(led_azul, OUTPUT);\n  Timer1.initialize(1000000);\n  Timer1.attachInterrupt(controladorTiempo);\n}\nvoid loop() {\n  if (digitalRead(pulsador_modo) == HIGH) {\n    modo++;\n    modo = modo % n_modos;\n    fijarCursorModo();\n    while (digitalRead(pulsador_modo) == HIGH);\/\/evitar rebotes\n  }\n  switch (modo) {\n    \/\/RELOJ\n    case 1:\n      if (digitalRead(pulsador_incrementar) == HIGH) {\n        incrementarHoras();\n        while (digitalRead(pulsador_incrementar) == HIGH);\n      }\n      break;\n    case 2:\n      if (digitalRead(pulsador_incrementar) == HIGH) {\n        incrementarMinutos();\n        while (digitalRead(pulsador_incrementar) == HIGH);\n      }\n      break;\n    \/\/ALARMA\n    case 3:\n      if (digitalRead(pulsador_incrementar) == HIGH) {\n        incrementarHorasAlarma();\n        while (digitalRead(pulsador_incrementar) == HIGH);\n      }\n      break;\n    case 4:\n      if (digitalRead(pulsador_incrementar) == HIGH) {\n        incrementarMinutosAlarma();\n        while (digitalRead(pulsador_incrementar) == HIGH);\n      }\n      break;\n    case 5:\n      if (digitalRead(pulsador_incrementar) == HIGH) {\n        alarma_on = !alarma_on;\n        actualizar = true;\n        while (digitalRead(pulsador_incrementar) == HIGH);\n      }\n      break;\n  }\n  if (actualizar == true) { \/\/actualizar hace que el reloj se actualice cada segundo\n    actualizarReloj();\n    lcd.clear();\n    lcd.noBlink();\n    \/\/RELOJ\n    lcd.setCursor(0, 0);\n    sprintf(texto, \"%02d:%02d:%02d\", horas, minutos, segundos);\n    lcd.print(texto);\n    \/\/ALARMA\n    lcd.setCursor(0, 1);\n    sprintf(texto, \"%02d:%02d\", horas_alarma, minutos_alarma);\n    lcd.print(texto);\n    \/\/alarma encendida\n    if (alarma_on == true) {\n      if (segundos == 0 &amp;&amp; horas == horas_alarma &amp;&amp; minutos == minutos_alarma &amp;&amp; contador_dias != 7) {\n        contador_dias += 1;\n        girarServo(45);\n        for (int nota_actual = 0; nota_actual &lt; 10; nota_actual++) {\n          digitalWrite(led_azul, HIGH);\n          tone(buzzer, alarma&#91;nota_actual]);\n          delay(duracion_alarma&#91;nota_actual]);\n          noTone(buzzer);\n          digitalWrite(led_azul, LOW);\n        }\n      } else if (segundos == 0 &amp;&amp; horas == horas_alarma &amp;&amp; minutos == minutos_alarma &amp;&amp; contador_dias == 7) {\n        \/\/han transcurrido 7 dias, alarma diferente para indicar que el dispensador esta vacio\n        contador_dias = 0;\n        girarServo(45);\n        for (int nota_actual = 0; nota_actual &lt; 10; nota_actual++) {\n          tone(buzzer, alarma_vacio&#91;nota_actual]);\n          delay(duracion_alarma&#91;nota_actual]);\n          noTone(buzzer);\n        }\n        for (int n = 0; n &lt; 10; n++) {\n          digitalWrite(led_azul, HIGH);\n          delay(1000);\n          digitalWrite(led_azul, LOW);\n          delay(1000);\n        }\n      }\n      lcd.print(\" ON\");\n    } else {\n      lcd.print(\" OFF\");\n    }\n    actualizar = false; \/\/esta l\u00ednea permite que sea controladorTiempo() quien actualice el reloj cada segundo\n    fijarCursorModo();\n  }\n}\n\/*** metodos ***\/\nvoid controladorTiempo() {\n  segundos++;\n  actualizar = true;\n}\nvoid actualizarReloj() {\n  minutos += segundos \/ 60;\n  segundos = segundos % 60;\n\n  horas += minutos \/ 60;\n  minutos = minutos % 60;\n\n  horas = horas % 24;\n}\nvoid incrementarHoras() {\n  horas ++;\n  horas = horas % 24;\n  actualizar = true;\n}\nvoid incrementarHorasAlarma() {\n  horas_alarma++;\n  horas_alarma = horas_alarma % 24;\n  actualizar = true;\n}\nvoid incrementarMinutosAlarma() {\n  minutos_alarma ++;\n  minutos_alarma = minutos_alarma % 60;\n  actualizar = true;\n}\nvoid incrementarMinutos() {\n  minutos ++;\n  minutos = minutos % 60;\n  actualizar = true;\n}\nvoid fijarCursorModo() {\n  switch (modo) {\n    case 0:\n      lcd.noBlink();\n      break;\n    case 1:\n      lcd.setCursor(0, 0); \/\/situa el cursor en las horas del reloj\n      lcd.blink();\n      break;\n    case 2:\n      lcd.setCursor(3, 0); \/\/situa el cursor en los minutos del reloj\n      lcd.blink();\n      break;\n    case 3:\n      lcd.setCursor(0, 1); \/\/situa el cursor en las horas de la alarma\n      lcd.blink();\n      break;\n    case 4:\n      lcd.setCursor(3, 1); \/\/situa el cursor en los minutos de la alarma\n      lcd.blink();\n      break;\n    case 5:\n      lcd.setCursor(6, 1); \/\/situa el cursor en ON\/OFF de la alarma\n      lcd.blink();\n      break;\n  }\n}\nvoid girarServo(int x) {\n  for (int hz = 1; hz &lt;= 50; hz++) {\n    pausa = (45 * 2000 \/ 180) + 500;\n    digitalWrite(servo, HIGH);\n    delayMicroseconds(pausa);\n    digitalWrite(servo, LOW);\n    delayMicroseconds(22000 - pausa);\n  }\n  delay(1000);\n}\n\/*** fin metodos ***\/\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Hardware: construcci\u00f3n e implementaci\u00f3n<\/strong><\/h1>\n\n\n\n<p>En este apartado se presentan dos im\u00e1genes creadas con la herramienta <em>Tinkercad<\/em> correspondientes al montaje de nuestro proyecto, tanto su vista esquem\u00e1tica como la vista del propio circuito y la soluci\u00f3n materializada.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/YiTiqZcBLyWkoGnIWhb0RMKk3VMki1_g2KKaaUT6P1ZNkASmctMLPxMBLcVxb0Vjpw1Mi29SQAKvyZYi2xJj7UoHUxSlS4PvX5ZNSCOZ244SHP2hKNCbheeD2MR9p9RsEeq3IQRzqN9sziD4_Q\" width=\"726.365240651122\" height=\"560.1785597637701\"><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center\"><em><em>Imagen 1. Vista esquem\u00e1tica<\/em><\/em><\/p>\n\n\n\n<figure class=\"wp-block-image is-style-default\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/qmrd9TIiErw51ebtKmgK3AFWeaRYduoXuAyyBAJAl5O3sjCJFJEy5M094l1QImx-A2LXp_kz27dQR3Y5RqXYizt37fKNT24gjanDF5mKzRfriO1KlFtafwt1PO2braa8B4whokzQ2rmbKB-LZg\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Imagen 2. Vista de circuito<\/em><\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/v6CJlYgBNTi1FsnbiBU_J116a6RKAnDA8qvSDG601T4Abog2841Ca68vINHIKA6IXkfVPY79AdUEBnvJyWmpQoXc61XBpuNcYKraV8DhUrErhBPMxWZiqjUjdGt3seiVZCljbpzJrMlQ_7wluw\" width=\"602\" height=\"276.7983887853073\"><\/h2>\n\n\n\n<p class=\"has-text-align-center\"><em>Imagen 3. Construcci\u00f3n hardware final<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Problemas y soluciones<\/strong><\/h1>\n\n\n\n<p>El mayor problema que hemos tenido a la hora de realizar el proyecto ha sido el uso del servomotor. Nos cost\u00f3 entender su funcionamiento ya que hay diversos modelos en el mercado y el nuestro, al ser un motor de 360\u00ba de rotaci\u00f3n continua, hab\u00eda menos documentaci\u00f3n y ejemplos disponibles que pudi\u00e9ramos utilizar como apoyo\u2026 Aunque finalmente no nos sirvi\u00f3 de mucho todo lo aprendido sobre este componente.<\/p>\n\n\n\n<p>Debido a que nuestro kit entregado por la universidad no conten\u00eda un servomotor, tuvimos que comprar uno por nuestra parte. Desgraciadamente, esto signific\u00f3 que tuvimos que esperar a que nos fuese enviado. Por esto, realizamos la totalidad del c\u00f3digo y gran parte de la construcci\u00f3n sin haber recibido el servo.<\/p>\n\n\n\n<p>Una vez lo recibimos, el servo no giraba. Estuvimos d\u00edas intentando entender cu\u00e1l era el problema, pens\u00e1bamos que pod\u00eda ser por la alimentaci\u00f3n, que fuese insuficiente, pero fue f\u00e1cil comprobar con un volt\u00edmetro que la tensi\u00f3n era la adecuada. Luego nuestras sospechas se trasladaron al servomotor, lo que tambi\u00e9n fue cuesti\u00f3n de minutos darnos cuenta que el aparato funcionaba correctamente: ejecutamos con \u00e9xito un c\u00f3digo de prueba muy sencillo que consist\u00eda en mover el servomotor durante un segundo y mantenerlo parado durante otro segundo (ver imagen 4) sucesivas veces.&nbsp;<\/p>\n\n\n\n<p>Finalmente llegamos a la conclusi\u00f3n que deb\u00eda haber alg\u00fan error en el c\u00f3digo, a pesar de que l\u00f3gicamente ten\u00eda sentido. El primer problema encontrado fue que nos equivocamos en la posici\u00f3n del pin del servo, pues este requiere la utilizaci\u00f3n de un pin PWM. Sin embargo, esto no fue suficiente: el servo segu\u00eda sin girar.&nbsp;<\/p>\n\n\n\n<p>Despu\u00e9s de muchas pruebas y tener que buscar documentaci\u00f3n sobre problemas similares, encontramos algo interesante: hab\u00eda un solapamiento entre las librer\u00edas Servo.h y TimerOne.h, puesto que la librer\u00eda del servomotor usa el mismo timer que utilizamos en nuestro proyecto para el control del reloj, lo que imped\u00eda su correcto funcionamiento. Cambiamos entonces las librer\u00edas, probando primero con otros timers (concretamente Timer.h y MsTimer2.h), con lo que no hubo suerte puesto que aparecieron otros problemas (por ejemplo, cuando sonaba la alarma, ese tiempo no se acumulaba en el reloj y cuando terminaba de sonar los segundos empezaban en \u201c00\u201d).<\/p>\n\n\n\n<p>Al final sustitu\u00edmos la librer\u00eda del servomotor por ServoTimer2.h, la cual no provoca conflictos con TimerOne.h. Sin embargo, hay que aclarar que nuestro servomotor al ser de rotaci\u00f3n continua no funcionaba muy bien con esta librer\u00eda, pero con unos cambios en la parte del c\u00f3digo del servo conseguimos apa\u00f1arlo. De esta forma conseguimos solucionar finalmente el problema\u2026 o eso cre\u00edamos.&nbsp;<\/p>\n\n\n\n<p>Cuando comenzamos a probar nuestro dispensador, a la hora de sonar la segunda alarma (que se corresponder\u00eda con el segundo d\u00eda) el servomotor no giraba. Volvimos a cambiar las librer\u00edas, probando con esta y con aquella, una y otra vez hasta que, despu\u00e9s de una b\u00fasqueda desesperada para dar con la soluci\u00f3n, apareci\u00f3 un v\u00eddeo donde se explicaba c\u00f3mo se puede manejar un servomotor sin incluir librer\u00edas en el c\u00f3digo: lo ajustamos a nuestro proyecto y al fin funcion\u00f3 como deb\u00eda, aunque con algunos desajustes (pues en el v\u00eddeo se empleaba un servo de 180\u00ba y el nuestro, al ser de 360\u00ba, no gira de igual manera) pero m\u00ednimos e inapreciables.Cabe mencionar tambi\u00e9n un peque\u00f1o contratiempo que tuvimos con el LCD: en el <em>setup<\/em> del c\u00f3digo tenemos una l\u00ednea en la que le pasamos al pin v0 del display el valor del contraste (estos valores de intensidad van de 0 a 255), pues bien, al principio le pasamos un 50 y vimos que era demasiado alto para nuestro LCD ya que aparec\u00edan rayas horizontales que imped\u00edan ver correctamente lo mostrado en la pantalla. Fuimos disminuyendo el valor hasta que llegamos al 10, con el que se distingu\u00edan perfectamente todos los d\u00edgitos.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/Laj6Xdbho2oRDz8vHu6T9ll0_7MT4kXB5p7tjeX2lFbDevv7y6FpQNzAUpgMxiApSRzG6-qHdjQ2p9Y1cWcSFBxZltYZd8A6xMYr2URKY2VdklEMWCVSgB6MYzWdmc-VlBxrqSLqM7NqBzxA2A\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-center\"><em>Imagen 4. C\u00f3digo de prueba &#8211; Servomotor<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Casos de uso<\/strong><\/h1>\n\n\n\n<p>En cuanto a los casos de uso tenemos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Visualizar la hora<\/li><li>Ajustar la hora del reloj (horas y minutos) y la hora de la alarma (horas y minutos)<\/li><li>Encender y apagar alarma (encenderla incluye que suene una melod\u00eda determinada y se emita una luz cuando las horas y minutos del reloj coincidan con la alarma) y apagar<\/li><li>Recoger pastilla<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/r_B49p9gJqEJVEGADwWaJwgBAbIwb1NqaypTUbSyFy6iVVNB6xbzNvRMEkP6fKZbfxXuNrPB-n2Ev8x9Fb-rb9AoRejnS1YfpuB5UK1KFzlyuvZNm7nZOo-atsamx7dHPqLNG8C5zIAvuIDxgQ\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>Imagen 5. Casos de uso<\/em><\/p>\n\n\n\n<p>Las horas y minutos del reloj y de la alarma se ajustan mediante dos pulsadores: uno para fijar el cursor en horas o minutos del reloj, horas o minutos de la alarma o en la parte \u201cON\/OFF\u201d para activar o desactivar la alarma respectivamente; el otro pulsador incrementa las horas o minutos del reloj o de la alarma y enciende o apaga la alarma (cambia de ON a OFF y viceversa).<\/p>\n\n\n\n<p>Por el lado del servomotor tenemos que, mientras no sea el s\u00e9ptimo d\u00eda (esto significar\u00eda que no quedan m\u00e1s pastillas en el dispensador), la alarma sonar\u00e1 con dos frecuencias intermitentes (similar a la sinton\u00eda de una ambulancia) y el led permanecer\u00e1 encendido mientras dure la melod\u00eda cada vez que caiga una pastilla.<\/p>\n\n\n\n<p>Cuando se alcance el s\u00e9ptimo d\u00eda, la alarma suena de forma uniforme (para diferenciarla de la sinton\u00eda normal) y el led se enciende y se apaga intermitentemente con intervalos de 1 segundo despu\u00e9s de que suene la alarma. De esta forma, el usuario ser\u00eda consciente de la necesidad de rellenar de nuevo el dispensador para la semana siguiente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Posibles mejoras<\/strong><\/h1>\n\n\n\n<p>Nuestro proyecto tiene un gran abanico de posibles mejoras que se podr\u00edan implementar:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La alarma podr\u00eda estar continuamente sonando hasta que se accionase un pulsador que parase la alarma e hiciese caer la pastilla correspondiente.<\/li><li>Las horas y minutos solo pueden cambiarse incrementando su valor, por lo que un bot\u00f3n para decrementar dicho valor hubiese hecho menos tedioso el cambio de hora pues, si el usuario se equivoca y pulsa tan solo una vez de m\u00e1s el bot\u00f3n, \u00fanicamente podr\u00eda llegar al n\u00famero previo pulsando ese mismo bot\u00f3n tantas veces como sean necesarias, y ser\u00edan, seguro, m\u00e1s de 20 veces.<\/li><li>Solo contamos con un mismo led para ambas alarmas (intentamos distinguirlas emitiendo luz mediante intervalos distintos), por lo que un led de distinto color (por ejemplo rojo) para indicar que el dispensador est\u00e1 vac\u00edo podr\u00eda ser una buena opci\u00f3n para diferenciar a\u00fan m\u00e1s claramente las dos alarmas.<\/li><li>Una melod\u00eda distinta para cada alarma podr\u00eda ser una posible mejora de cara a vender el producto, pues dependiendo de la m\u00fasica emitida podr\u00eda hacerlo m\u00e1s o menos atractivo de cara al consumidor.<\/li><\/ul>\n\n\n\n<p>Las tres primeras posibles mejoras del listado no fueron efectuadas debido a que no hab\u00eda suficientes pines en nuestro Arduino UNO, aunque ten\u00edamos soluciones como utilizar uno de los dos pulsadores que ya ten\u00eda nuestro circuito para implementar el primer punto expuesto, comprar un arduino Leonardo o un m\u00f3dulo I2C para disminuir el n\u00famero de pines necesarios para el LCD, etc, pero respecto a esto \u00faltimo no vimos la necesidad de gastar m\u00e1s dinero al ser nuestro proyecto ya funcional.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Video Memoria<\/h2>\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=\"Dispensador de pastillas diario. Proyecto SEyTR\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/VlZ-c57kWTo?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\n\n\n<h2 class=\"wp-block-heading\">Material adicional<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Video manejo del servomotor sin librer\u00edas: <strong><a href=\"https:\/\/www.youtube.com\/watch?v=UNOdqgiD1N4\">https:\/\/www.youtube.com\/watch?v=UNOdqgiD1N4<\/a><\/strong><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n En un principio, nos pareci\u00f3 muy abrumador la selecci\u00f3n de un tema para este proyecto. Al ser completamente libre, originalmente pensamos en realizar alguna especie de juego o juguete, pero finalmente decidimos guiarnos&#46;&#46;&#46;<\/p>\n","protected":false},"author":19,"featured_media":5275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,16],"class_list":["post-5260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino","tag-urjc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dispensador de pastillas diario - Proyectos con Arduino.<\/title>\n<meta name=\"description\" content=\"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario\" \/>\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\/dispensador-de-pastillas-diario\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dispensador de pastillas diario - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-12T09:43:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-03T08:33:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"922\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"12 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\\\/dispensador-de-pastillas-diario\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Dispensador de pastillas diario\",\"datePublished\":\"2022-05-12T09:43:57+00:00\",\"dateModified\":\"2022-06-03T08:33:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/\"},\"wordCount\":1657,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg\",\"keywords\":[\"Arduino\",\"urjc\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/\",\"name\":\"Dispensador de pastillas diario - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg\",\"datePublished\":\"2022-05-12T09:43:57+00:00\",\"dateModified\":\"2022-06-03T08:33:03+00:00\",\"description\":\"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg\",\"width\":2000,\"height\":922,\"caption\":\"Dispensador de pastillas\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dispensador-de-pastillas-diario\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dispensador de pastillas diario\"}]},{\"@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":"Dispensador de pastillas diario - Proyectos con Arduino.","description":"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario","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\/dispensador-de-pastillas-diario\/","og_locale":"es_ES","og_type":"article","og_title":"Dispensador de pastillas diario - Proyectos con Arduino.","og_description":"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-05-12T09:43:57+00:00","article_modified_time":"2022-06-03T08:33:03+00:00","og_image":[{"width":2000,"height":922,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/"},"author":{"name":"","@id":""},"headline":"Dispensador de pastillas diario","datePublished":"2022-05-12T09:43:57+00:00","dateModified":"2022-06-03T08:33:03+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/"},"wordCount":1657,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg","keywords":["Arduino","urjc"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/","name":"Dispensador de pastillas diario - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg","datePublished":"2022-05-12T09:43:57+00:00","dateModified":"2022-06-03T08:33:03+00:00","description":"Proyecto de SEyTR. Es un dispensador de pastillas diario con funci\u00f3n de reloj y alarma. Dispensador de pastillas diario","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/WhatsApp-Image-2022-05-04-at-5.15.22-PM-1.jpeg","width":2000,"height":922,"caption":"Dispensador de pastillas"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dispensador-de-pastillas-diario\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Dispensador de pastillas diario"}]},{"@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\/5260","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\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=5260"}],"version-history":[{"count":10,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5260\/revisions"}],"predecessor-version":[{"id":5811,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/5260\/revisions\/5811"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/5275"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=5260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=5260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=5260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}