Dispensador Inteligente de Pastillas: Sistema de Gestión de Medicación de Precisión
Componentes y materiales
| Placa de desarrollo AVR-IoT WA (Microchip Technology) | 1 |
| Arduino Mega 2560 | 1 |
| Micro-servo SG90 | 4 |
| Pantalla táctil HMI TFT Nextion NX8048T070 7.0" (Itead) | 1 |
| Driver PWM/Servo 16 canales 12-bit I2C (Adafruit) | 1 |
| Altavoz 0.25W, 8 ohm | 1 |
| Sensor foto-transistor IR (Adafruit) | 4 |
| LED IR 5mm 940nm (Adafruit) | 4 |
| Sensor ultrasónico HC-SR04 | 1 |
| Servo Feedback 360° alta velocidad (Parallax) | 1 |
| Fuente conmutada 5V 2A pared (Adafruit) | 1 |
Herramientas y máquinas necesarias
- Impresora 3D (genérica)
- Soldador (genérico)
- Hilo de soldar sin plomo
Aplicaciones y servicios en línea
- Microchip MPLAB X IDE
- Arduino IDE
- Autodesk Fusion 360
- AWS IoT Core
- AWS DynamoDB
- AWS API Gateway
- AWS Lambda
- Microsoft VS Code
Descripción del proyecto
¿Por qué este proyecto?
Actualmente hay dos tipos de dispensadores en el mercado: no eléctricos y automáticos. Aunque la mayoría tienen recordatorios (no siempre aptos para discapacidades visuales/sensoriales), ambos requieren que una persona organice las pastillas diaria/semanalmente en compartimentos, haciendo al paciente dependiente. Debido al COVID-19, familiares y cuidadores de ancianos tienen más dificultades para atender a personas dependientes.
Por eso creamos SmartPill: un dispensador inteligente que no requiere organización manual, es accesible para discapacitados y permite al paciente ser más independiente.
¿Cómo funciona?
El sistema SmartPill tiene 2 subsistemas:
- SmartPill Dispenser: Dispositivo físico que organiza, almacena y dispensa pastillas. Interfaz principal del paciente.
- SmartPill Web App: Interfaz web para que médico/responsable configure y haga seguimiento de las tomas.
Desde la web app (interfaz amigable), el médico configura hasta 4 pastillas distintas por dispensador y hasta 3 tomas diarias por pastilla. Permite cambiar dosis remotamente sin intervención del paciente.
Diseñado para dificultades de demencia senil, Alzheimer, discapacidad visual/auditiva: pantalla grande para carga cómoda, feedback audible y luminoso para recordar tomas a la hora exacta.
El usuario no se preocupa de dónde/quién pone cada pastilla: un mecanismo inteligente las distribuye internamente y dispensa la dosis correcta a la hora indicada.
Conexión WiFi a nube AWS gracias al Microchip AVR-IoT, permitiendo monitorización y configuración remota. La app muestra cuándo se tomaron las pastillas y notifica al familiar si no se tomó.
SmartPill Dispenser
Sistema de dispensación
Todo (excepto pantalla) impreso en 3D con PLA. Archivos .STL disponibles al final.
- Base: Soporta el resto. Dos orificios para sensor de movimiento. Contiene solapa que lleva pastillas al vaso.
- Deslizador (Slider): Soporta contenedores de pastillas. Debajo, rampa por donde caen a la solapa. Hueco inferior para electrónica.
- Partes laterales: Protegen hardware y pastillas de humedad, temperatura, suciedad y polvo.
- Pantalla Nextion NX8048T070: Interfaz usuario-dispensador.
- Partes superiores: Protección (superior) y separación tambor-contenedores (inferior).
- Servo Parallax 900-0005: Motor 360° que posiciona el tambor (7).
- Tambor (Drum): Tubo de conexión entre exterior y contenedores. Gira para acceder al contenedor correcto.
- Puerta trasera: Acceso para meter/sacar contenedores con el deslizador.
- Altavoces: Comunican información al usuario.
- Sensor ultrasónico HC-SR04: Detecta si el vaso se ha retirado.
- Contenedores de pastillas (4 en prototipo): Almacenan y dispensan la cantidad correcta en el momento. Adaptables a mayor capacidad.
¿Quiere su propio SmartPill? Descargue los STL al final e imprima todas las piezas. Proyecto completamente open-source.
Ensamblaje
- El Slider (Parte 2) se imprime en 3 partes. Primero ensámblelo: inserte tuercas (2.3.2) en Slider (2.2) con soldador. Atornille ambas partes (2.3.1 y 2.2). No ponga la tapa (2.4) hasta cablear electrónica.
- Coloque electrónica en hueco del slider, incluyendo sensor ultrasónico HC-SR04 (Parte 10), y atornille tapa (2.4).
- Ensamble contenedores (ver Plano Contenedores) con un servo SG90 cada uno. Una Parte 1 con Parte 7 y atornille SG90 a Parte 7. Una Parte 3 con Parte 4 (rodamiento) y añada Parte 2. Atornille contenedores a la parte superior del Slider (Parte 2 - Plano General).
- Atornille pantalla (Parte 4) a parte lateral correspondiente y conecte enchufe. Encaje partes laterales (Parte 3) a la base hasta que cliquen.
- Dos Partes superiores (Parte 5). Ensámbrelas insertando tuercas y ajustándolas (sin soldador esta vez). Coloque Tambor (Parte 7) y Servo Parallax (Parte 6) entre ellas y atornille ambas partes superiores.
- Finalmente atornille Puerta trasera (Parte 8) al conjunto de partes superiores.
Electrónica
Cerebro principal: Arduino Mega controla servos de dispensación, pantalla Nextion, RTC, efectos de sonido y placa AVR-IoT.
- AVR-IoT conectado a Arduino Mega por Serial UART.
- Servos controlados por PWM.
- RTC conectado por I2C.
- Barreras IR para detección de pastillas en pines analógicos.
Para replicar, haga todas las conexiones según el esquema con protoboard o PCB propio. Recomendamos montar el circuito en una base de madera como en la foto. El esquema está al final de la página.
SmartPill Web App
Facilita configurar el dispensador y controlar la medicación de otro.
- Configuración fácil: datos del paciente, pastillas, dosis, horarios.
- Monitorización de tomas.
Desarrollo
Backend: AWS API Gateway (HTTP API REST).
Frontend: Ionic & Angular. Ionic es framework NodeJS gratuito/open-source basado en AngularJS, con componentes UI nativos para iOS/Android. Usa HTML, CSS, JavaScript, Angular. Ionic CLI crea apps móviles funcionales.
Requisito previo: Node.js instalado.
Pasos iniciales:
$ npm install -g @ionic/cli
$ ionic start smartpill-webui blank
$ cd smartpill-webui
$ ionic serve
ionic serve permite probar en navegador (esencial para debug).
Estructura básica
Organización simple para navegación fácil. Carpetas: módulo de rutas, componentes, "services", y una carpeta por ruta.
Archivos esenciales:
- app-routing.module.ts: Navegación entre rutas. Algunas rutas pasan variables.
- post.service.ts: Comunica con API. Define interfaces (Post, Dep, Log) y clase PostService con funciones CRUD: get, post, delete, put.
Página de configuración y edición de pastilla
Ruta "page-config" muestra posts programados. Botón "+" (abajo derecha) redirige a "page-edit-pill" para crear. Botón "Editar" en post existente redirige a misma página llevando el ID.
La página "page-edit-pill" detecta si entra con o sin ID y ejecuta funciones correspondientes.
- Ruta con ID:
path:'pill/edit/:postId' - Lectura del ID en
ngOnInit()víaActivatedRoute.paramMap - Ejemplos de
*ngIfen plantilla para "Crear/Actualizar" y botón "Submit/Update"
Interacción con componentes Ionic (inputs, selects) que se envían a la API:
- Select múltiple para horarios (mañana/tarde/noche)
- Input para nombre de pastilla
La "config-page" usa ciclo de vida Angular: al volver de "edit-pill", recarga posts automáticamente. Botón de borrado con confirmación asíncrona.
Página de registros (Logs)
Muestra histórico de pastillas dispensadas. Similar a "config-page" pero solo carga datos de la API.
Amazon Web Services
AWS elegido para desplegar SmartPill: amplia gama de servicios en un ecosistema, enfoque serverless que escala a necesidades del usuario y paga solo por uso.
Arquitectura Cloud Serverless
- Dispensador: AVR-IoT (WiFi) → AWS IoT Core (MQTT) → bidireccional: envía orden de dispensación y recibe confirmaciones.
- Frontend Web: Ionic/Angular compilado → archivos estáticos en AWS S3 (hosting web estático).
- Backend Web: HTTP API REST (AWS API Gateway) → Lambda functions → DynamoDB (configuración pastillas y logs).
- Programador: AWS EventBridge → Lambda
smartpill-dispensepillen horarios (mañana/tarde/noche) → busca en BD pastillas necesarias → envía a dispensador vía IoT Core.
AWS IoT Core
Conecte AVR-IoT a su cuenta AWS (guías Microchip IoT Developer Guides for AWS). Verifique en IoT Core → Manage → Things. Configure WiFi en AVR-IoT (Getting Started Guide).
AWS DynamoDB
Cree dos tablas:
smartpill-history: logs de pastillas tomadassmartpill-pills: pastillas configuradas
Clave primaria: "id".
AWS Lambda
Asegure permisos AmazonDynamoDBFullAccess en rol de ejecución (pestaña Permissions → Role Name). Cada Lambda con su propio rol. Adjunte política si falta. Suba código desde repositorio GitHub. Configure integraciones Lambda ↔ IoT Core para ejecutar función correcta al recibir mensaje.
AWS EventBridge
3 reglas programadas (cron UTC) para mañana, tarde, noche. Disparan Lambda smartpill-dispensepill.
AWS API Gateway
Crear HTTP API "smartpill-webui". Configurar todas las Lambdas como integraciones. Definir rutas según tabla. Desplegar para obtener endpoint HTTP. O importar smartpill-api.json del repo.
AWS S3
Crear Bucket (nombre amigable = DNS). Activar Static website hosting (Propiedades → abajo): Enable, index.html como índice y error. Subir archivos estáticos compilados por Angular. Acceda a su DNS. ¡Listo!
Placa AVR-IoT
Interfaz de comunicación para dar conectividad Cloud al Dispensador. Conectada a Arduino principal por Serial.
Firmware basado en ejemplo original, extendido:
- Comando CLI
pilly callbackpill_command()que parsea mensaje y envía JSON confirmación por MQTT a topicconfirmationpill. - Mensajes personalizados para parámetros desconocidos/incorrectos.
- CLI original usaba USART2 (conectado a debugger, inaccesible). Esta versión mueve CLI y
printf()a USART1 (pines RX/TX accesibles). Configuración: 115200 baudios, 8N1. - Suscripción MQTT personalizada a topic
dispensepillcon parser JSON enapplication_manager.c(modificadasubscribeToCloud()) vinculada a callbackreceiveddispenseFromCloud()que extrae datos del JSON. - En IoTPill.h estructuras principales para datos recibidos/enviados.
Protocolo bidireccional simple con dos mensajes:
- dispensepill: EventBridge lo dispara a la hora → envía a dispensador para dispensar.
- confirmationpill: AVR-IoT lo envía al dispensar correctamente → AWS lo registra en BD.
Mensaje 'dispensepill' (AWS → IoT Board → Arduino)
EventBridge dispara Lambda smartpill-dispensepill → MQTT a IoT Board JSON:
{
"cmd": "dispensepill",
"npills": 2,
"intake": { "time": "morning" },
"pills": {
"1": { "pill": "Ibuprofeno", "qty": 1, "deposit": 1, "weight": 200 },
"2": { "pill": "Paracetamol", "qty": 2, "deposit": 2, "weight": 500 }
}
}
IoT Board envía por USART a Arduino:
D Ibuprofeno 1 1 200 D Paracetamol 2 2 500 \n
Mensaje 'confirmationpill' (Arduino → IoT Board → AWS)
Arduino envía comando pill + 1 si entrega correcta:
pill 1
IoT Board procesa con CLI personalizado (usando intake previo con "time") y envía JSON a AWS:
{
"time": "morning",
"state": "ok"
}
AWS registra log vía Lambdas y notifica a servicio web.
Código
- Smartpill Web Application (Frontend): GitHub
- Smartpill Backend Lambda functions: GitHub
- Smartpill AVR-IoT Code: GitHub
- Smartpill Arduino Code: GitHub
Piezas personalizadas y cajas
- Repositorio Thingiverse: Thingiverse - Archivos CAD: mecanismo dispensador controlado por servo, envolvente completa, ensamblaje total (formato STEP editable).
Esquemáticos
Conexiones hardware electrónica SmartPill
Proceso de manufactura
- La ciencia y fabricación de pastillas para dormir: de remedios antiguos a la farmacología moderna
- Pastillas Anticonceptivas: Historia, Beneficios, Riesgos y Producción
- Barman Inteligente: Construye tu Propia Estación de Cócteles con Raspberry Pi
- Semáforo Inteligente: Iluminación Vial Adaptativa con IoT
- Papelera Inteligente Avanzada: Optimización de Recogida de Residuos con Sensores IoT
- Planta Inteligente IoT: Construye un Invernadero Conectado con Arduino y Azure
- UnifiedWater v1 – Kit completo de sensor de calidad de agua con Arduino
- Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
- Really Smart Box: Solución de Almacenamiento Inteligente IoT
- Autodesk Smart Manufacturing: Automatice su flujo de trabajo y conecte el desarrollo de productos
- Fabricación Inteligente Explicada: Transformando la Producción con IoT