{"id":9921,"date":"2026-05-08T20:01:26","date_gmt":"2026-05-08T18:01:26","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=9921"},"modified":"2026-05-08T20:21:25","modified_gmt":"2026-05-08T18:21:25","slug":"dosemate-pastillero-inteligente","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/","title":{"rendered":"DoseMate &#8211; Pastillero Inteligente"},"content":{"rendered":"<div class=\"has-text-align-right wp-block-post-date\"><time datetime=\"2026-04-24T09:22:02.464Z\">24\/04\/2026<\/time><\/div>\n\n\n<p><strong>AUTORES: <\/strong>\u00c1lvaro Bravo Pareja,Carlos Asensio Trujillo, Jorge Naranjo Ballesteros y Pablo Vald\u00e9s Colomo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"636\" height=\"852\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png\" alt=\"Pastillero\" class=\"wp-image-10467\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png 636w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero-224x300.png 224w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><figcaption class=\"wp-element-caption\">Pastillero<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Introducci\u00f3n:<\/mark><\/h2>\n\n\n\n<p>Se propone el desarrollo de un pastillero inteligente basado en Arduino, orientado a facilitar el seguimiento de tratamientos m\u00e9dicos y reducir olvidos en la toma de medicaci\u00f3n. El sistema ser\u00e1 capaz de recordar al usuario la hora de la toma, dispensar autom\u00e1ticamente la pastilla correspondiente y registrar la confirmaci\u00f3n de que la medicaci\u00f3n ha sido tomada.<\/p>\n\n\n\n<p>Para ello, utilizar\u00e1 como entradas botones de confirmaci\u00f3n y fotorresistencias (LDR) para detectar la presencia de pastillas. Como salidas, incorporar\u00e1 una pantalla LCD I2C 1602 para mostrar el estado del sistema, LEDs y un buzzer para generar alertas sonoras, un servo motor como tapa y un motor paso a paso encargado del mecanismo de compartimentos.<\/p>\n\n\n\n<p>Cuando llegue la hora programada, el sistema avisar\u00e1 al usuario, abrir\u00e1 el compartimento correspondiente y actualizar\u00e1 el estado tras la confirmaci\u00f3n de la toma. <\/p>\n\n\n\n<p>Adem\u00e1s, se plantea la integraci\u00f3n con una aplicaci\u00f3n externa que permita consultar la informaci\u00f3n del tratamiento mediante un registro de tomas (tanto a tiempo como tard\u00edas) y modificar la hora de toma directamente desde la aplicaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Reparto del trabajo:<\/mark><\/h2>\n\n\n\n<p>En el trabajo, todos hemos trabajado en todos los \u00e1mbitos, pero cada miembro nos hemos centrado principalmente en una cosa:<\/p>\n\n\n\n<p>\u00c1lvaro: C\u00f3digo y montaje del circuito.<\/p>\n\n\n\n<p>Pablo: Desarrollo de la aplicaci\u00f3n m\u00f3vil.<\/p>\n\n\n\n<p>Carlos: Investigaci\u00f3n de componentes, funcionamiento y conexiones.<\/p>\n\n\n\n<p>Jorge: Dise\u00f1ar el pastillero y empotrar el circuito en \u00e9l.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Material:<\/mark><\/h2>\n\n\n\n<table style=\"width:100%;border-collapse:collapse;font-family:Arial, sans-serif;text-align:center\">\n  <thead>\n    <tr style=\"background-color:#d9d9d9\">\n      <th style=\"padding:12px;border:1px solid #999\">COMPONENTE<\/th>\n      <th style=\"padding:12px;border:1px solid #999\">USO<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x ELEGOO UNO R3<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Control principal del sistema<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Protoboard<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Montaje del circuito<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x LCD 16&#215;2 (I2C)<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Mostrar informaci\u00f3n del sistema<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x M\u00f3dulo Bluetooth HC-05<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Comunicaci\u00f3n con la aplicaci\u00f3n<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x M\u00f3dulo RTC DS3231<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Mantener la hora del sistema y guardar hora de toma<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Servo motor<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Apertura y cierre de la tapa del compartimento compartimento<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Motor paso a paso<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Giro del compartimento del pastillero<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x LED<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Indicador visual<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Buzzer<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Alerta sonora<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">4 x Pulsadores<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Interacci\u00f3n del usuario (configuraci\u00f3n y confirmaci\u00f3n)<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x LDR<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Detectar retirada de la pastilla<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Resistencia 2k\u03a9<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Divisor de tensi\u00f3n (HC05)<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Resistencia 1k\u03a9<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Divisor de tensi\u00f3n (HC05)<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Resistencia 10k\u03a9<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Resistencia para LDR<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Resistencia 220\u03a9<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Protecci\u00f3n del LED<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Cable USB Arduino<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Alimentaci\u00f3n y programaci\u00f3n<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Cables dupont femenino a femenino, masculino a femenino y masculino a masculino<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Conexi\u00f3n entre componentes<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Driver ULN2003<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Controlar el motor paso a paso<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">2x Pilas 1,5V + porta pilas<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Alimentaci\u00f3n del motor stepper<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">1 x Pila reloj<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Para el m\u00f3dulo RTC<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Carton pluma<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Caja pastillero<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Bisagras<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Puerta trasera pastillero<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Porexpan<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Material compartimentos de pastillas<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Silicona<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Montaje caja<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Cinta aislante<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">Sujeci\u00f3n cables<\/td>\n    <\/tr>\n\n  <\/tbody>\n<\/table>\n\n\n\n<p>La gran mayor\u00eda de los materiales fueron proporcionados por el profesor, sin embargo tuvimos que comprar los componentes que no ten\u00edamos y necesit\u00e1bamos para la implementaci\u00f3n<\/p>\n\n\n\n<p>Costes material no entregado:<\/p>\n\n\n\n<table style=\"width:100%;border-collapse:collapse;font-family:Arial, sans-serif;text-align:center\">\n  <thead>\n    <tr style=\"background-color:#d9d9d9\">\n      <th style=\"padding:12px;border:1px solid #999\">COMPONENTE<\/th>\n      <th style=\"padding:12px;border:1px solid #999\">PRECIO<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">M\u00f3dulo RTC<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3,75\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Pantalla LCD I2C<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">6\u20ac<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">M\u00f3dulo Bluetooth HC-05<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">6\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Cables Dupont<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">8,5\u20ac<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Pilas 1,5V<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Pila reloj<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">2\u20ac<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Gastos de env\u00edo<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">~5\u20ac<\/td>\n    <\/tr>\n\n  <\/tbody>\n<\/table>\n\n\n\n<p>TOTAL: ~31\u20ac<\/p>\n\n\n\n<p>Adem\u00e1s, hay que sumar los gastos del material usado para la construcci\u00f3n:<\/p>\n\n\n\n<table style=\"width:100%;border-collapse:collapse;font-family:Arial, sans-serif;text-align:center\">\n  <thead>\n    <tr style=\"background-color:#d9d9d9\">\n      <th style=\"padding:12px;border:1px solid #999\">MATERIAL<\/th>\n      <th style=\"padding:12px;border:1px solid #999\">PRECIO<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Porta pilas<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">5\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Cart\u00f3n pluma<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">15\u20ac<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Bisagras<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Porexpan<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3\u20ac<\/td>\n    <\/tr>\n\n    <tr style=\"background-color:#f2f2f2\">\n      <td style=\"padding:10px;border:1px solid #ccc\">Silicona<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3\u20ac<\/td>\n    <\/tr>\n\n    <tr>\n      <td style=\"padding:10px;border:1px solid #ccc\">Cinta aislante<\/td>\n      <td style=\"padding:10px;border:1px solid #ccc\">3\u20ac<\/td>\n    <\/tr>\n\n  <\/tbody>\n<\/table>\n\n\n\n<p>TOTAL: ~30\u20ac<\/p>\n\n\n\n<p>Como se puede ver, el coste total del proyecto ha sido, aproximadamente, unos 60\u20ac<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Casos de Uso Del Sistema:<\/mark><\/h2>\n\n\n\n<div style=\"font-family:Arial, sans-serif;line-height:1.5;color:#222\">\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px;background-color:#f7f7f7\">\n    <h3 style=\"margin-top:0\">Caso de Uso 1: Configurar hora de toma<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> El usuario ajusta la hora y los minutos a los que desea recibir el recordatorio.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>El usuario pulsa el bot\u00f3n de configuraci\u00f3n.<\/li>\n      <li>Ajusta la hora con el bot\u00f3n correspondiente.<\/li>\n      <li>Ajusta los minutos.<\/li>\n      <li>Confirma la configuraci\u00f3n.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> La hora queda guardada en el sistema mediante la memoria EEPROM.<\/p>\n  <\/div>\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px\">\n    <h3 style=\"margin-top:0\">Caso de Uso 2: Recordatorio de medicaci\u00f3n<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> El sistema avisa al usuario cuando llega la hora programada.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>El sistema detecta la hora mediante el m\u00f3dulo RTC.<\/li>\n      <li>Se activan el buzzer y el LED.<\/li>\n      <li>Se muestra el aviso en la pantalla LCD.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> El usuario recibe una alerta visual y sonora.<\/p>\n  <\/div>\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px;background-color:#f7f7f7\">\n    <h3 style=\"margin-top:0\">Caso de Uso 3: Dispensar pastilla<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> El sistema abre el compartimento correspondiente para permitir la toma.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>El usuario pulsa el bot\u00f3n OK.<\/li>\n      <li>El motor paso a paso gira hasta el compartimento correspondiente.<\/li>\n      <li>El servo motor abre la tapa.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> La pastilla queda accesible para el usuario.<\/p>\n  <\/div>\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px\">\n    <h3 style=\"margin-top:0\">Caso de Uso 4: Confirmar toma<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> El sistema detecta que la pastilla ha sido retirada.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>El LDR detecta un cambio de luz.<\/li>\n      <li>El sistema verifica la retirada de la pastilla.<\/li>\n      <li>Se cierra la tapa del compartimento.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> La toma queda registrada como realizada.<\/p>\n  <\/div>\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px;background-color:#f7f7f7\">\n    <h3 style=\"margin-top:0\">Caso de Uso 5: Modo recarga<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> Permite rellenar los compartimentos del pastillero.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>El usuario activa el modo recarga.<\/li>\n      <li>El sistema permite girar los compartimentos.<\/li>\n      <li>El usuario rellena las pastillas.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> El pastillero queda preparado para su uso.<\/p>\n  <\/div>\n\n  <div style=\"border:1px solid #ccc;padding:14px;margin-bottom:14px\">\n    <h3 style=\"margin-top:0\">Caso de Uso 6: Comunicaci\u00f3n con la app<\/h3>\n    <p><strong>Descripci\u00f3n:<\/strong> El sistema env\u00eda informaci\u00f3n al m\u00f3vil mediante Bluetooth.<\/p>\n    <p><strong>Flujo b\u00e1sico:<\/strong><\/p>\n    <ol>\n      <li>Se registra un evento de toma realizada.<\/li>\n      <li>El sistema env\u00eda los datos en formato JSON.<\/li>\n    <\/ol>\n    <p><strong>Resultado:<\/strong> La aplicaci\u00f3n recibe y registra la informaci\u00f3n de la toma.<\/p>\n  <\/div>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Diagrama de Casos de Uso:<\/mark><\/h2>\n\n\n\n<p>Este diagrama representa las principales interacciones entre el usuario y el sistema del pastillero inteligente, incluyendo la configuraci\u00f3n, el recordatorio, la dispensaci\u00f3n y el registro de la toma.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"424\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/04\/diagrama.png\" alt=\"\" class=\"wp-image-9922\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/04\/diagrama.png 647w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/04\/diagrama-300x197.png 300w\" sizes=\"auto, (max-width: 647px) 100vw, 647px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">C\u00f3digo del Proyecto:<\/mark><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><code>#include &lt;Wire.h&gt;\n#include &lt;LiquidCrystal_I2C.h&gt;\n#include &lt;Servo.h&gt;\n#include &lt;RTClib.h&gt;\n#include &lt;SoftwareSerial.h&gt;\n#include &lt;AccelStepper.h&gt;\n#include &lt;EEPROM.h&gt;\n\nLiquidCrystal_I2C lcd(0x27, 16, 2);\nRTC_DS3231 rtc;\nSoftwareSerial BT(10, 11);\nServo tapa;\nAccelStepper stepper(AccelStepper::FULL4WIRE, 8, 9, A1, A2);\n\n#define ADDR_HORA 0\n#define ADDR_MIN  1\n#define ADDR_POS  2\n\nconst int ledPin       = 5;\nconst int buzzerPin    = 2;\nconst int botonOK      = 3;\nconst int botonHora    = 6;\nconst int botonMin     = 7;\nconst int botonRecarga = A3;\nconst int ldrPin       = A0;\nconst int pinServo     = 4;\n\nbool sistemaListo = false;\n\nenum Estado { ESPERA, RECORDATORIO, ALARMA, PREPARANDO, ESPERANDO_TOMA, CONFIGURANDO, RECARGA };\nEstado estado = ESPERA;\n\nint horaToma = 14, minutoToma = 10, posicionActual = 0;\nbool recordatorioActivado = false;\nbool tomaFueTarde = false;\nunsigned long tEstado = 0;\nconst int pasosPorCompartimento = 341;\n\nint luzBase = 0;\nint contadorLecturas = 0;\nunsigned long lastOK = 0, lastHora = 0, lastMin = 0, lastRec = 0;\nconst int debounceTime = 180;\nunsigned long lastBuzz = 0;\nbool buzzState = false;\n\nint umbralLuz = 4;\n\nvoid esperarMovimientoServo(int ms) {\n  unsigned long start = millis();\n  while (millis() - start &lt; ms) {\n    stepper.run();\n  }\n}\n\nvoid guardarConfig() {\n  EEPROM.update(ADDR_HORA, horaToma);\n  EEPROM.update(ADDR_MIN, minutoToma);\n  EEPROM.update(ADDR_POS, posicionActual);\n}\n\nvoid cargarConfig() {\n  int h = EEPROM.read(ADDR_HORA);\n  int m = EEPROM.read(ADDR_MIN);\n  int p = EEPROM.read(ADDR_POS);\n\n  if (h &gt;= 0 &amp;&amp; h &lt; 24) horaToma = h;\n  if (m &gt;= 0 &amp;&amp; m &lt; 60) minutoToma = m;\n  if (p &gt;= 0 &amp;&amp; p &lt; 6)  posicionActual = p;\n}\n\nbool botonPulso(int pin, unsigned long &amp;lastTime) {\n  if (digitalRead(pin) == LOW &amp;&amp; millis() - lastTime &gt; debounceTime) {\n    lastTime = millis();\n    return true;\n  }\n  return false;\n}\n\nint leerLuz() {\n  long suma = 0;\n\n  for (int i = 0; i &lt; 10; i++) {\n    suma += analogRead(ldrPin);\n    delay(2);\n  }\n\n  return suma \/ 10;\n}\n\nvoid enviarRespuesta(String msg) {\n  BT.println(\"OK: \" + msg);\n}\n\nvoid enviarEventoToma(bool tarde) {\n  BT.print(F(\"{\\\"evento\\\":\\\"TOMA\\\"\"));\n  BT.print(F(\",\\\"ts\\\":\"));\n  BT.print(millis());\n  BT.print(F(\",\\\"tarde\\\":\"));\n  BT.print(tarde ? F(\"true\") : F(\"false\"));\n  BT.print(F(\",\\\"hora_toma\\\":\"));\n  BT.print(horaToma);\n  BT.print(F(\",\\\"min_toma\\\":\"));\n  BT.print(minutoToma);\n  BT.print(F(\",\\\"pos\\\":\"));\n  BT.print(posicionActual);\n  BT.println(F(\"}\"));\n}\n\nvoid procesarBluetooth() {\n\n  if (BT.available()) {\n\n    delay(50);\n\n    String cmd = BT.readString();\n    cmd.trim();\n    cmd.toUpperCase();\n\n    if (cmd.indexOf(\"SET:\") != -1) {\n\n      int p = cmd.indexOf(':');\n\n      horaToma = cmd.substring(p + 1, p + 3).toInt();\n      minutoToma = cmd.substring(p + 4, p + 6).toInt();\n\n      guardarConfig();\n      recordatorioActivado = false;\n\n      lcd.clear();\n      lcd.setCursor(0, 0);\n      lcd.print(\"Nueva hora:\");\n\n      char buf&#091;16];\n      sprintf(buf, \"    %02d:%02d\", horaToma, minutoToma);\n\n      lcd.setCursor(0, 1);\n      lcd.print(buf);\n\n      enviarRespuesta(\"HORA CAMBIADA\");\n\n      delay(2000);\n\n      lcd.clear();\n    }\n\n    else if (cmd.indexOf(\"STATUS\") != -1) {\n\n      DateTime now = rtc.now();\n\n      String s =\n        \"RELOJ:\" + String(now.hour()) + \":\" + String(now.minute()) +\n        \" | TOMA:\" + String(horaToma) + \":\" + String(minutoToma) +\n        \" | POS:\" + String(posicionActual);\n\n      enviarRespuesta(s);\n    }\n\n    else if (cmd.indexOf(\"PING\") != -1) {\n      enviarRespuesta(\"CONECTADO\");\n    }\n  }\n}\n\nvoid moverASiguiente() {\n  posicionActual = (posicionActual + 1) % 6;\n  guardarConfig();\n  stepper.move(pasosPorCompartimento);\n}\n\nvoid iniciarToma() {\n\n  tomaFueTarde = (estado == ALARMA);\n\n  moverASiguiente();\n\n  noTone(buzzerPin);\n\n  estado = PREPARANDO;\n\n  lcd.clear();\n}\n\nvoid setup() {\n\n  Wire.begin();\n\n  if (rtc.begin() &amp;&amp; rtc.lostPower()) {\n    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));\n  }\n\n  cargarConfig();\n\n  BT.begin(9600);\n  BT.setTimeout(80);\n\n  lcd.init();\n  lcd.backlight();\n\n  stepper.setMaxSpeed(1200);\n  stepper.setAcceleration(600);\n  stepper.setCurrentPosition(0);\n\n  pinMode(ledPin, OUTPUT);\n  pinMode(buzzerPin, OUTPUT);\n\n  pinMode(botonOK, INPUT_PULLUP);\n  pinMode(botonHora, INPUT_PULLUP);\n  pinMode(botonMin, INPUT_PULLUP);\n  pinMode(botonRecarga, INPUT_PULLUP);\n\n  delay(800);\n\n  tapa.attach(pinServo);\n  tapa.write(25);\n\n  delay(500);\n\n  tapa.detach();\n\n  sistemaListo = true;\n\n  BT.println(F(\"PASTILLERO LISTO\"));\n}\n\nvoid loop() {\n\n  stepper.run();\n\n  DateTime now = rtc.now();\n\n  procesarBluetooth();\n\n  digitalWrite(\n    ledPin,\n    (estado == ALARMA ? millis() % 200 &lt; 100 :\n    (estado == RECORDATORIO ? millis() % 600 &lt; 300 : LOW))\n  );\n\n  switch (estado) {\n\n    case ESPERA: {\n\n      char buf&#091;16];\n\n      sprintf(buf, \"Hora: %02d:%02d\", now.hour(), now.minute());\n      lcd.setCursor(0, 0);\n      lcd.print(buf);\n\n      sprintf(buf, \"Toma: %02d:%02d\", horaToma, minutoToma);\n      lcd.setCursor(0, 1);\n      lcd.print(buf);\n\n      if (botonPulso(botonOK, lastOK)) {\n        estado = CONFIGURANDO;\n        lcd.clear();\n      }\n\n      if (botonPulso(botonRecarga, lastRec)) {\n\n        estado = RECARGA;\n\n        lcd.clear();\n\n        tapa.attach(pinServo);\n        tapa.write(90);\n\n        esperarMovimientoServo(600);\n\n        tapa.detach();\n      }\n\n      if (\n        now.hour() == horaToma &amp;&amp;\n        now.minute() == minutoToma &amp;&amp;\n        !recordatorioActivado\n      ) {\n\n        estado = RECORDATORIO;\n\n        tEstado = millis();\n\n        recordatorioActivado = true;\n\n        lcd.clear();\n      }\n\n      if (\n        now.hour() != horaToma ||\n        now.minute() != minutoToma\n      ) {\n        recordatorioActivado = false;\n      }\n\n    } break;\n\n    case CONFIGURANDO: {\n\n      lcd.setCursor(0, 0);\n      lcd.print(\"Ajustar Hora\");\n\n      char buf&#091;10];\n\n      sprintf(buf, \"    %02d:%02d\", horaToma, minutoToma);\n\n      lcd.setCursor(0, 1);\n      lcd.print(buf);\n\n      if (botonPulso(botonHora, lastHora)) {\n        horaToma = (horaToma + 1) % 24;\n      }\n\n      if (botonPulso(botonMin, lastMin)) {\n        minutoToma = (minutoToma + 1) % 60;\n      }\n\n      if (botonPulso(botonOK, lastOK)) {\n\n        guardarConfig();\n\n        estado = ESPERA;\n\n        lcd.clear();\n      }\n\n    } break;\n\n    case RECORDATORIO:\n    case ALARMA:\n\n      lcd.setCursor(0, 0);\n\n      lcd.print(\n        estado == RECORDATORIO ?\n        \"HORA DE TOMA\" :\n        \"!!! ALARMA !!!\"\n      );\n\n      if (millis() - lastBuzz &gt; (estado == RECORDATORIO ? 600 : 250)) {\n\n        lastBuzz = millis();\n\n        buzzState = !buzzState;\n\n        if (buzzState) {\n          tone(buzzerPin, estado == RECORDATORIO ? 700 : 1200);\n        }\n        else {\n          noTone(buzzerPin);\n        }\n      }\n\n      if (\n        millis() - tEstado &gt; 30000 &amp;&amp;\n        estado == RECORDATORIO\n      ) {\n        estado = ALARMA;\n      }\n\n      if (botonPulso(botonOK, lastOK)) {\n        iniciarToma();\n      }\n\n      break;\n\n    case PREPARANDO:\n\n      lcd.setCursor(0, 0);\n      lcd.print(\"Preparando...\");\n\n      lcd.setCursor(0, 1);\n      lcd.print(\"Comp: \");\n      lcd.print(posicionActual);\n\n      if (stepper.distanceToGo() == 0) {\n\n        tapa.attach(pinServo);\n        tapa.write(95);\n\n        esperarMovimientoServo(600);\n\n        tapa.detach();\n\n        luzBase = leerLuz();\n\n        contadorLecturas = 0;\n\n        estado = ESPERANDO_TOMA;\n\n        lcd.clear();\n      }\n\n      break;\n\n    case ESPERANDO_TOMA:\n\n      lcd.setCursor(0, 0);\n      lcd.print(\"Retire pastilla\");\n\n      if (abs(leerLuz() - luzBase) &gt; umbralLuz) {\n        contadorLecturas++;\n      }\n      else if (contadorLecturas &gt; 0) {\n        contadorLecturas--;\n      }\n\n      if (contadorLecturas &gt; 5) {\n\n        tapa.attach(pinServo);\n        tapa.write(25);\n\n        esperarMovimientoServo(600);\n\n        tapa.detach();\n\n        noTone(buzzerPin);\n\n        lcd.clear();\n        lcd.print(\"Toma OK\");\n\n        enviarEventoToma(tomaFueTarde);\n\n        delay(1500);\n\n        estado = ESPERA;\n\n        lcd.clear();\n      }\n\n      break;\n\n    case RECARGA:\n\n      lcd.setCursor(0, 0);\n      lcd.print(\"MODO RECARGA\");\n\n      lcd.setCursor(0, 1);\n      lcd.print(\"Pos: \");\n      lcd.print(posicionActual);\n\n      if (botonPulso(botonOK, lastOK)) {\n        moverASiguiente();\n      }\n\n      if (botonPulso(botonRecarga, lastRec)) {\n\n        tapa.attach(pinServo);\n        tapa.write(25);\n\n        esperarMovimientoServo(600);\n\n        tapa.detach();\n\n        estado = ESPERA;\n\n        lcd.clear();\n      }\n\n      break;\n  }\n}<\/code><\/code><\/pre>\n\n\n\n<p>A continuaci\u00f3n la explicaci\u00f3n escrita:<\/p>\n\n\n\n<p>El c\u00f3digo completo sigue una l\u00f3gica bastante clara basada en estados. <\/p>\n\n\n\n<p>En primer lugar, se incluyen las librer\u00edas necesarias para poder controlar todos los elementos del sistema, como la pantalla LCD, el m\u00f3dulo RTC para la hora, el Bluetooth, el servo motor, el motor paso a paso y la memoria EEPROM. Despu\u00e9s, se definen los pines a los que est\u00e1n conectados los distintos componentes, como los botones, el buzzer, el stepper, etc.  <\/p>\n\n\n\n<p>A continuaci\u00f3n, se define una m\u00e1quina de estados que controla el funcionamiento del sistema. Los estados principales son espera, recordatorio, alarma, configuraci\u00f3n, recarga y esperando toma. <\/p>\n\n\n\n<p>En cuanto al setup, se inicializan todos los componentes. Se inicia la comunicaci\u00f3n con el RTC para obtener la hora real, se carga la hora de la toma desde la EEPROM para no perderla al apagar el sistema, se configura el Bluetooth, se inicializa la pantalla LCD y se establecen los pines de entrada y salida. Tambi\u00e9n se posiciona el servo en su posici\u00f3n inicial para evitar movimientos bruscos al arrancar y se obtiene el ultimo compartimento usado a trav\u00e9s de la memoria EEPROM, que tambi\u00e9n guarda esta informaci\u00f3n.<\/p>\n\n\n\n<p>En el loop se ejecuta continuamente la l\u00f3gica del sistema. Primero se obtiene la hora actual mediante el RTC y se comprueba si hay comunicaci\u00f3n por Bluetooth para poder modificar la hora de la toma desde una aplicaci\u00f3n externa. Despu\u00e9s, dependiendo del estado en el que se encuentre el sistema, se ejecutan distintas acciones. <\/p>\n\n\n\n<p>En el estado de espera, el sistema muestra la hora actual y la hora programada en la pantalla. Adem\u00e1s, permite entrar en modo configuraci\u00f3n o modo recarga mediante los botones. <\/p>\n\n\n\n<p>En el modo configuraci\u00f3n, el usuario puede ajustar la hora y los minutos de la toma, y estos valores se guardan en la EEPROM. <\/p>\n\n\n\n<p>Cuando la hora actual coincide con la hora programada, el sistema pasa al estado de recordatorio. En este estado se activa el buzzer y el LED para avisar al usuario. Si el usuario no responde en un tiempo determinado, el sistema pasa al estado de alarma, donde la alerta es m\u00e1s intensa (el buzzer hace m\u00e1s ruido y el LED parpadea m\u00e1s r\u00e1pido). <\/p>\n\n\n\n<p>Cuando el usuario confirma la toma pulsando el bot\u00f3n, se ejecuta la funci\u00f3n de iniciar toma. En este punto, el motor paso a paso gira el pastillero hasta el siguiente compartimento y el servo abre la tapa para permitir el acceso a la pastilla. <\/p>\n\n\n\n<p>Una vez abierta la tapa, el sistema entra en el estado de esperando toma. Aqu\u00ed se utiliza el sensor LDR para detectar si la pastilla ha sido retirada. Se compara la luz actual con una referencia inicial, y si se detecta un cambio suficiente durante varias lecturas, el sistema interpreta que la pastilla ha sido cogida. En ese momento, se cierra la tapa, se detiene la alarma y se registra la toma. Adem\u00e1s, cuando se detecta la toma, se env\u00eda un mensaje en formato JSON a trav\u00e9s de Bluetooth para que nuestra aplicaci\u00f3n pueda registrar la informaci\u00f3n.<\/p>\n\n\n\n<p>Por \u00faltimo, el modo recarga permite al usuario girar manualmente el pastillero para rellenar los compartimentos. Esto se realiza mediante el bot\u00f3n correspondiente, que va avanzando la posici\u00f3n del motor paso a paso.<br><br>Para comprender mejor su funcionamiento, se a\u00f1ade un diagrama de estados:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"597\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79-1024x597.png\" alt=\"\" class=\"wp-image-10429\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79-1024x597.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79-300x175.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79-768x448.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79-1536x896.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-79.png 1636w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y un diagrama de flujo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"697\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-82.png\" alt=\"\" class=\"wp-image-10435\" style=\"aspect-ratio:1.3544060657118786;width:832px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-82.png 944w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-82-300x222.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-82-768x567.png 768w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/figure>\n\n\n\n<p>Tambi\u00e9n incluimos un video explicando el c\u00f3digo:<\/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=\"Software DoseMate\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/swT8v1W1eWA?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\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Hardware e Implementacion:<\/mark><\/h2>\n\n\n\n<p>Este es el circuito montado en wokwi:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"705\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-84-1024x705.png\" alt=\"\" class=\"wp-image-10484\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-84-1024x705.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-84-300x206.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-84-768x528.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-84.png 1257w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y un video explicando las conexiones:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Explicaci\u00f3n hardware\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/hiGIhEwtRKE?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<p>Una vez montado, el circuito queda as\u00ed:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260423173007-768x1024.jpg\" alt=\"\" class=\"wp-image-10430\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260423173007-768x1024.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260423173007-225x300.jpg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260423173007-1152x1536.jpg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260423173007.jpg 1274w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p>Integrarlo dentro de la carcasa fue bastante complicado, tuvimos que hacer c\u00e1lculos de huecos, extensiones de cables, usar medidas exactas para huecos&#8230;<\/p>\n\n\n\n<p>Adem\u00e1s, a\u00f1adiendo que no sabemos soldar, la complejidad del montaje fue a\u00fan mayor, teniendo que depender mucho de cinta aislante que de vez en cuando se soltaba.<\/p>\n\n\n\n<p>Finalmente, tras todos estos problemas, conseguimos empotrar el sistema bastante bien, sin tener ning\u00fan problema de cables sueltos.<\/p>\n\n\n\n<p>El interior del sistema empotrado queda as\u00ed:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260507185419-768x1024.jpg\" alt=\"\" class=\"wp-image-10431\" style=\"aspect-ratio:0.7500186608942301;width:628px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260507185419-768x1024.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260507185419-225x300.jpg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260507185419-1152x1536.jpg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/IMG20260507185419.jpg 1332w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p>Incluimos un video explicando el montaje por dentro:<\/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=\"Componentes Hardware DoseMate\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/FCu4X1bxqys?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 has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-03b918354df53335682ff7226a6f4411\">Explicaci\u00f3n <mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Aplicaci\u00f3n:<\/mark><\/h2>\n\n\n\n<p>Nuestra aplicaci\u00f3n est\u00e1 implementada mediante App Inventor, ya que uno de los miembros de nuestro equipo ten\u00eda experiencia previa programando aplicaciones con este programa.<\/p>\n\n\n\n<p>Para explicar el funcionamiento de la aplicaci\u00f3n en detalle, hemos hecho este video:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Explicaci\u00f3n aplicaci\u00f3n pastillero\" width=\"422\" height=\"750\" src=\"https:\/\/www.youtube.com\/embed\/eg_7Vzy9sZA?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<p>Adem\u00e1s, tambi\u00e9n se a\u00f1ade un diagrama de casos de uso:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"789\" height=\"283\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-81.png\" alt=\"\" class=\"wp-image-10434\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-81.png 789w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-81-300x108.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/image-81-768x275.png 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Problemas y Posibles Soluciones:<\/mark><\/h2>\n\n\n\n<p>Uno de los principales problemas que tuvimos durante la pr\u00e1ctica fue la conexi\u00f3n Bluetooth con la aplicaci\u00f3n m\u00f3vil. Al principio pens\u00e1bamos que el fallo estaba en el m\u00f3dulo Bluetooth, pero finalmente descubrimos que el problema se encontraba en el c\u00f3digo de la aplicaci\u00f3n, ya que la gesti\u00f3n de la conexi\u00f3n no estaba bien implementada. Tras varias pruebas conseguimos estabilizar la comunicaci\u00f3n entre ambos dispositivos.<\/p>\n\n\n\n<p>Otro problema importante estuvo relacionado con el sensor LDR, ya que nos cost\u00f3 bastante conseguir que detectara correctamente la toma de la pastilla. Tuvimos que implementar una medici\u00f3n de la luz base media del ambiente para obtener la luz antes de retirar una pastilla y posteriormente hacer varias lecturas al retirar la pastilla y si la diferencia entre estas supera el umbral, se cierra la tapa.<\/p>\n\n\n\n<p>Tambi\u00e9n encontramos dificultades al mostrar la informaci\u00f3n en la pantalla, porque los datos no se imprim\u00edan en el momento exacto o aparec\u00edan desordenados. Para solucionarlo, tuvimos que refactorizar varias veces el c\u00f3digo, estudiar bien en qu\u00e9 momento deb\u00edamos imprimir en la pantalla y asegurarnos de que el contenido de esta se borra antes de imprimir para evitar caracteres no deseados.<\/p>\n\n\n\n<p>Por \u00faltimo, el programa se bloqueaba con frecuencia debido al uso de <code>delay()<\/code>, ya que deten\u00eda la ejecuci\u00f3n del resto de tareas. Para solucionarlo sustituimos <code>delay()<\/code> por <code>millis()<\/code>, consiguiendo que el sistema funcionara de forma m\u00e1s fluida y estable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Posibles ampliaciones:<\/mark><\/h2>\n\n\n\n<p>Debido a los materiales que nos han entregado, nuestro presupuesto y el tiempo disponible, el pastillero tiene una amplia variedad de posibles mejoras.<\/p>\n\n\n\n<p>La primera de todas ser\u00eda a\u00f1adir m\u00e1s huecos para pastillas por compartimento, para esto ser\u00edan necesarios m\u00e1s LDRs que detecten los dem\u00e1s huecos de las pastillas.<\/p>\n\n\n\n<p>Otra posible mejora ser\u00eda a\u00f1adir m\u00e1s tomas diarias. Para esto, ser\u00eda necesario modificar el c\u00f3digo para guardarlas en la memoria EEPROM, modificar la l\u00f3gica para que el pastillero tenga esto en cuenta a la hora de mostrar las alarmas y cambiar el modo de configuraci\u00f3n de hora para poder moverse entre las distintas tomas. Adem\u00e1s, tambi\u00e9n habr\u00eda que modificar la aplicaci\u00f3n.<\/p>\n\n\n\n<p>Por \u00faltimo, se podr\u00edan a\u00f1adir m\u00e1s compartimentos de dos formas distintas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usar un motor con m\u00e1s potencia capaz de mover un carrusel m\u00e1s grande, sumando el peso de las pastillas<\/li>\n\n\n\n<li>A\u00f1adir m\u00e1s motores (tanto servo como stepper) para crear m\u00e1s huecos donde recoger pastillas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Video funcionamiento:<\/mark><\/h2>\n\n\n\n<p>Por \u00faltimo, a\u00f1adimos un video en el que se explica el funcionamiento de nuestro pastillero:<\/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=\"Funcionamiento DoseMate\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/knGSU9Kw1YI?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<p>*El v\u00eddeo se grab\u00f3 antes de cambiar las pegatinas de los botones, por eso son distintas a las de la foto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-vivid-cyan-blue-color\">Video Memoria:<\/mark><\/h2>\n\n\n\n<p>Dejamos adjunto un v\u00eddeo tipo memoria en el que juntamos todos los v\u00eddeos mostrados anteriormente:<\/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=\"Memoria DoseMate\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/5vIB99SP-8I?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>AUTORES: \u00c1lvaro Bravo Pareja,Carlos Asensio Trujillo, Jorge Naranjo Ballesteros y Pablo Vald\u00e9s Colomo. Introducci\u00f3n: Se propone el desarrollo de un pastillero inteligente basado en Arduino, orientado a facilitar el seguimiento de tratamientos m\u00e9dicos y&#46;&#46;&#46;<\/p>\n","protected":false},"author":342,"featured_media":10467,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DoseMate - Pastillero Inteligente - 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\/dosemate-pastillero-inteligente\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DoseMate - Pastillero Inteligente - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"AUTORES: \u00c1lvaro Bravo Pareja,Carlos Asensio Trujillo, Jorge Naranjo Ballesteros y Pablo Vald\u00e9s Colomo. Introducci\u00f3n: Se propone el desarrollo de un pastillero inteligente basado en Arduino, orientado a facilitar el seguimiento de tratamientos m\u00e9dicos y&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-08T18:01:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-08T18:21:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png\" \/>\n\t<meta property=\"og:image:width\" content=\"636\" \/>\n\t<meta property=\"og:image:height\" content=\"852\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seytrmo2526g07\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"seytrmo2526g07\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 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\\\/dosemate-pastillero-inteligente\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/\"},\"author\":{\"name\":\"seytrmo2526g07\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/86a182dd600fd619a2af7e8d2ebbf4e0\"},\"headline\":\"DoseMate &#8211; Pastillero Inteligente\",\"datePublished\":\"2026-05-08T18:01:26+00:00\",\"dateModified\":\"2026-05-08T18:21:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/\"},\"wordCount\":2218,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/Pastillero.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/\",\"name\":\"DoseMate - Pastillero Inteligente - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/Pastillero.png\",\"datePublished\":\"2026-05-08T18:01:26+00:00\",\"dateModified\":\"2026-05-08T18:21:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/Pastillero.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/Pastillero.png\",\"width\":636,\"height\":852,\"caption\":\"Pastillero\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/dosemate-pastillero-inteligente\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DoseMate &#8211; Pastillero 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\\\/86a182dd600fd619a2af7e8d2ebbf4e0\",\"name\":\"seytrmo2526g07\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g\",\"caption\":\"seytrmo2526g07\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/seytrmo2526g07\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DoseMate - Pastillero Inteligente - 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\/dosemate-pastillero-inteligente\/","og_locale":"es_ES","og_type":"article","og_title":"DoseMate - Pastillero Inteligente - Proyectos con Arduino.","og_description":"AUTORES: \u00c1lvaro Bravo Pareja,Carlos Asensio Trujillo, Jorge Naranjo Ballesteros y Pablo Vald\u00e9s Colomo. Introducci\u00f3n: Se propone el desarrollo de un pastillero inteligente basado en Arduino, orientado a facilitar el seguimiento de tratamientos m\u00e9dicos y&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2026-05-08T18:01:26+00:00","article_modified_time":"2026-05-08T18:21:25+00:00","og_image":[{"width":636,"height":852,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png","type":"image\/png"}],"author":"seytrmo2526g07","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"seytrmo2526g07","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/"},"author":{"name":"seytrmo2526g07","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/86a182dd600fd619a2af7e8d2ebbf4e0"},"headline":"DoseMate &#8211; Pastillero Inteligente","datePublished":"2026-05-08T18:01:26+00:00","dateModified":"2026-05-08T18:21:25+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/"},"wordCount":2218,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/","name":"DoseMate - Pastillero Inteligente - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png","datePublished":"2026-05-08T18:01:26+00:00","dateModified":"2026-05-08T18:21:25+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/Pastillero.png","width":636,"height":852,"caption":"Pastillero"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/dosemate-pastillero-inteligente\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"DoseMate &#8211; Pastillero 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\/86a182dd600fd619a2af7e8d2ebbf4e0","name":"seytrmo2526g07","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8fbddb5e4d130e5b821d919dcd699ac32e738b6422a2cb8d019af1ce0499edc?s=96&d=mm&r=g","caption":"seytrmo2526g07"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/seytrmo2526g07\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9921","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\/342"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=9921"}],"version-history":[{"count":17,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9921\/revisions"}],"predecessor-version":[{"id":10559,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9921\/revisions\/10559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/10467"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=9921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=9921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=9921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}