Tabla de contenido:

Dispensador automático de medicamentos: 5 pasos
Dispensador automático de medicamentos: 5 pasos

Video: Dispensador automático de medicamentos: 5 pasos

Video: Dispensador automático de medicamentos: 5 pasos
Video: DISPENSADOR AUTOMATICO DE MEDICAMENTOS 2024, Noviembre
Anonim
Dispensador automático de medicamentos
Dispensador automático de medicamentos

Este proyecto es para uso en el campo médico, donde los pacientes de edad avanzada deben tener una forma confiable de dividir y dispensar la medicación. Este dispositivo permite que los medicamentos se distribuyan hasta con 9 días de anticipación y se dispensen automáticamente a la hora deseada. La tapa también se puede bloquear con la etiqueta RFID, asegurándose de que solo el cuidador pueda acceder al medicamento.

Suministros:

Existen los materiales necesarios para construir este proyecto:

  • Arduino UNO
  • Módulo de controlador de motor
  • Servo SG90 9G
  • Motor paso a paso
  • Módulo RTC DS1302
  • Varios cables de puente
  • LCD de la CII 1602
  • Acceso a la impresora 3D
  • Patas como tacos de madera
  • Módulo y etiqueta RFID
  • Dos pulsadores
  • Soldador
  • Tablero de circuitos
  • Super pegamento
  • Tornillos para madera
  • Caja de madera sin terminar con tapa con bisagras
  • Cinta de dos lados

Paso 1: modificar la caja

Modificar la caja
Modificar la caja
Modificar la caja
Modificar la caja
Modificar la caja
Modificar la caja
Modificar la caja
Modificar la caja

Primero habrá que modificar el cuadro. Hay varios orificios que deben perforarse. El primer orificio estará en el frente de la caja, donde está impresa la caja del panel de control. El segundo orificio está en la parte posterior de la caja, para que pase el cable USB. El último orificio está en la parte inferior de la caja, por donde caerá el medicamento una vez dispensado. Por último, las patas deben estar unidas a la parte inferior. Usé patas de goma que encontré en mi casa como patas, pero también se pueden usar tacos de madera.

Paso 2: Piezas impresas en 3D

Piezas impresas en 3D
Piezas impresas en 3D
Piezas impresas en 3D
Piezas impresas en 3D
Piezas impresas en 3D
Piezas impresas en 3D

Hay muchas piezas impresas en 3D necesarias para este proyecto.

Son:

  • Carrusel que contiene medicamentos
  • Base para carrusel
  • Embudo para la medicación
  • Brazo para servomotor para bloquear la tapa
  • Base para servomotor
  • Pestillo para brazo servo
  • Panel de control
  • Vaso para dispensar el medicamento

La base del carrusel se adhiere a la caja con cinta adhesiva de doble cara. La base del servomotor y el pestillo del brazo se atornillan a la caja con tornillos cortos para madera. La caja del panel de control se pega al frente de la caja con superpegamento, después de que se hayan insertado los componentes.

Paso 3: Electrónica

Electrónica
Electrónica

La electrónica ahora debe colocarse en la caja. Primero, el motor paso a paso se une a la base del carrusel con pernos y tuercas M3. Luego, el servo está superpegado a su base. Luego, el controlador del motor, Arduino, la placa de pruebas, el módulo RFID y el módulo RTC se adjuntan a la caja con cinta adhesiva de doble cara. La pantalla LCD se inserta en el orificio de la caja de control. Se requiere algo de soldadura. Para los botones pulsadores, los cables de puente deben soldarse a los conectores de horquilla. Para el lector RFID, los pines deben estar soldados a la placa.

Paso 4: Código

A continuación se muestra el código comentado:

En este código se incluyen bibliotecas para Servo, LCD, RTC, RFID y motor paso a paso.

///////////////// Bibliotecas y variables

#include #include // Librería estándar Arduino #include #include virtuabotixRTC myRTC (2, 3, 4); // Definir pines #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int statedown = 0; int statesel = 0; int esperar = 0; int casillero = 0; // Configurar servo Servo servo; ángulo int = 180; #include // use la biblioteca paso a paso modificada con la secuencia de disparo del imán 1000/0100/0010/0001. Coloque la biblioteca en la carpeta de su biblioteca. #define gearratio 64 // 1:64 relación de transmisión const int stepsPerRevolution = 2048; // el motor del kit Arduino está reducido. Experimentando determiné que 2048 pasos hacen girar el eje una vuelta. int pasos = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // instanciar un paso a paso de 4 hilos en los pines 8 a 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #incluir #incluir #definir SS_PIN 10 #definir RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Cree la instancia de MFRC522. int grados = 10; configuración vacía () {lcd.init (); // inicializa el lcd lcd.backlight (); // La línea debajo de esto se usa para establecer la hora actual. Solo hay que hacerlo una vez, y luego el código // se debe volver a cargar con el comentario. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Iniciar una comunicación en serie SPI.begin (); // Iniciar bus SPI mfrc522. PCD_Init (); // Inicie MFRC522 myStepper.setSpeed (0.15 * gearratio); // el motor parece estar disminuido 1/64, lo que significa que la velocidad debe establecerse 64x. // inicializar el puerto serie: servo.attach (servopin); } void loop () {///////////////// LCD Code // Actualiza constantemente la pantalla con la hora actual y la hora de dispensación. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Hora:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Dispensar:"); lcd.setCursor (10, 1); lcd.print (h); lcd.print (":"); lcd.print (minn); ///////////////// Leer estados de los botones // Lee los estados de los botones para cambiar el tiempo de dispensación. stateup = digitalRead (botón arriba); statedown = digitalRead (buttondown); retraso (100); ///////////////// Lógica de dispensación // Si la hora actual es la misma que la hora de dispensación seleccionada, gire el motor paso a paso. // Cada 9 veces que el dispositivo dispensa, el motor gira una distancia adicional para garantizar una rotación completa. if (myRTC.hours == hr && myRTC.minutes == minn && pasos <9) {myStepper.step (227); pasos = pasos +1; retraso (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); pasos = 0; retraso (60100); myRTC.updateTime (); ///////////////// Cambio del tiempo de dispensación // Cambie el tiempo de dispensación según el botón que se presione. // El tiempo vuelve a cero cuando las horas llegan a 24 y los minutos a 60.} if (stateup == LOW && hr <23) {hr = hr + 1; retraso (50); } más si (estado arriba == BAJO && hr == 23) {hr = 0; retraso (50); } if (statedown == LOW && minn <59) {minn = minn + 1; retraso (50); } más si (estado abajo == BAJO && minn == 59) {minn = 0; retraso (50); } ///////////////// Código RFID // Lee la etiqueta RFID cuando se presenta. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Seleccione una de las tarjetas if (! Mfrc522. PICC_ReadCardSerial ()) {return; } String content = ""; letra de byte; para (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte, HEX); content.concat (String (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (String (mfrc522.uid.uidByte , HEX)); casillero = 1; } content.toUpperCase (); ///////////////// CÓDIGO DE BLOQUEO // Cuando se lea la etiqueta RFID correcta, mueva el servo a la posición abierta cuando esté cerrado, // y mueva el servo a la posición cerrada cuando esté abierto. while (casillero == 1) {if (content.substring (1) == "3B 21 D6 22") {// cambia aquí el UID de la tarjeta / tarjetas a las que quieres dar acceso {switch (deg) {case 180: servo.write (grados); grados = 10; casillero = 0; Serial.print ("en movimiento"); retraso (1000); rotura; caso 10: servo.write (grados); grados = 180; casillero = 0; retraso (1000); rotura; }}} else {Serial.println ("Acceso denegado"); retraso (1000); }}}

Paso 5: Configuración final

El último paso es preparar el proyecto para su uso. Primero cargue el código con la línea de configuración de tiempo sin comentar, para cargar la hora actual al RTC. Luego comente el código y vuelva a cargar el código. Esto asegurará que si el dispositivo está desconectado, aún retendrá la hora correcta. Ahora todo lo que tiene que hacer es colocar el medicamento en las ranuras, colocar el vaso debajo del orificio de dispensación y establecer un tiempo de dispensación. El dispositivo dispensará de forma fiable a la misma hora todos los días.

Recomendado: