Sommario:

Distributore automatico di farmaci: 5 passaggi
Distributore automatico di farmaci: 5 passaggi

Video: Distributore automatico di farmaci: 5 passaggi

Video: Distributore automatico di farmaci: 5 passaggi
Video: Dispenser automatico per farmaci e assistente vocale 2024, Dicembre
Anonim
Distributore automatico di farmaci
Distributore automatico di farmaci

Questo progetto è per l'uso in campo medico, dove i pazienti anziani devono avere un modo affidabile per avere i farmaci porzionati e dispensati. Questo dispositivo consente di porzionare i farmaci fino a 9 giorni in anticipo e di essere dispensati automaticamente all'ora desiderata. Il coperchio è anche chiudibile con il tag RFID, assicurando che solo l'operatore sanitario possa accedere al farmaco.

Forniture:

Ci sono i materiali necessari per costruire questo progetto:

  • Arduino UNO
  • Modulo driver motore
  • Servo SG90 9G
  • Motore passo-passo
  • Modulo RTC DS1302
  • Vari ponticelli
  • IIC 1602 LCD
  • Accesso alla stampante 3D
  • Gambe come tasselli di legno
  • Modulo RFID e Tag
  • Due pulsanti
  • Saldatore
  • tagliere
  • super colla
  • Viti per legno
  • Scatola in legno grezzo con coperchio incernierato
  • Nastro biadesivo

Passaggio 1: modifica della casella

Modificare la scatola
Modificare la scatola
Modificare la scatola
Modificare la scatola
Modificare la scatola
Modificare la scatola
Modificare la scatola
Modificare la scatola

La casella dovrà prima essere modificata. Ci sono più fori che devono essere praticati. Il primo foro sarà sulla parte anteriore della scatola, dove è stampata la scatola del pannello di controllo. Il secondo foro si trova nella parte posteriore della scatola, per il passaggio del cavo USB. L'ultimo foro si trova sul fondo della scatola, dove cadrà il farmaco una volta erogato. Infine, le gambe devono essere attaccate al fondo. Ho usato i piedini di gomma che ho trovato in casa per le gambe, ma si possono usare anche dei tasselli di legno.

Passaggio 2: parti stampate in 3D

Parti stampate in 3D
Parti stampate in 3D
Parti stampate in 3D
Parti stampate in 3D
Parti stampate in 3D
Parti stampate in 3D

Ci sono molte parti stampate in 3D necessarie per questo progetto.

Loro sono:

  • Carosello che contiene i farmaci
  • Base per giostra
  • Imbuto per il farmaco
  • Braccio per servomotore per bloccare il coperchio
  • Base per servomotore
  • Fermo per braccio del servo
  • Pannello di controllo
  • Bicchiere per l'erogazione del farmaco

La base per il carosello è fatta aderire alla scatola con nastro biadesivo. La base per il servomotore e il chiavistello per il braccio sono entrambi avvitati nella scatola con viti da legno corte. La scatola del pannello di controllo viene incollata alla parte anteriore della scatola con colla super, dopo che i componenti sono stati inseriti.

Passaggio 3: elettronica

Elettronica
Elettronica

L'elettronica ora deve essere inserita nella scatola. Innanzitutto, il motore passo-passo è fissato alla base del carosello con bulloni e dadi M3. Il servo viene quindi super incollato alla sua base. Quindi, il controller del motore, Arduino, breadboard, modulo RFID e modulo RTC sono tutti fissati alla scatola con nastro biadesivo. Il display LCD è inserito nel foro nella scatola di controllo. C'è un po' di saldatura che è necessaria. Per i pulsanti, i cavi jumper devono essere saldati ai connettori a forcella. Per il lettore RFID, i pin devono essere saldati alla scheda.

Passaggio 4: codice

Di seguito il codice commentato:

Le librerie per il motore Servo, LCD, RTC, RFID e Stepper sono incluse in questo codice.

///////////////// Librerie e variabili

#include #include //Libreria standard Arduino #include #include virtuabotixRTC myRTC(2, 3, 4); // Define pins #define servopin 8 const int buttonup = 6; const int buttondown = 7; int h=0; int min=0; int sel=0; int stateup=0; int statedown=0; int statesel=0; int attesa = 0; int armadietto = 0; // Imposta servo Servo servo; int angolo = 180; #include //usa la libreria stepper modificata con la sequenza di attivazione del magnete 1000/0100/0010/0001. Metti la libreria nella cartella della tua libreria. #define gearratio 64 //1:64 gear ratio const int stepsPerRevolution = 2048; //il motore del kit Arduino è ridotto. Per esperimento ho determinato che 2048 passi fanno girare l'albero di un giro. int passi = 0; LiquidCrystal_I2C lcd(0x27, 16, 2); // istanzia uno stepper a 4 fili sui pin da 8 a 11: Stepper myStepper(stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Crea un'istanza MFRC522. int gradi = 10; void setup() { lcd.init(); // inizializza il display lcd lcd.backlight(); // La riga sotto viene utilizzata per impostare l'ora corrente. Deve essere fatto solo una volta, e successivamente il codice // deve essere caricato di nuovo con esso commentato. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode(buttonup, INPUT_PULLUP); pinMode(buttondown, INPUT_PULLUP); Serial.begin(9600); // Avvia una comunicazione seriale SPI.begin(); // Avvia il bus SPI mfrc522. PCD_Init(); // Initiate MFRC522 myStepper.setSpeed(0.15*gearratio);//il motore sembra essere ridotto di 1/64, il che significa che la velocità deve essere impostata a 64x. // inizializza la porta seriale: servo.attach(servopin); } void loop(){ ///////////////// LCD Code // Aggiorna costantemente il display con l'ora corrente e l'ora di erogazione. lcd.clear(); myRTC.updateTime(); lcd.setCursor(0, 0); lcd.print("Ora:"); lcd.setCursor(6, 0); lcd.print(myRTC.hours); lcd.print(:"); lcd.print(myRTC.minuti); lcd.setCursor(0, 1); lcd.print("Eroga:"); lcd.setCursor(10, 1); lcd.print(hr); lcd.print(:"); lcd.print(min); ///////////////// Read Button States // Legge gli stati dei pulsanti per modificare il tempo di erogazione. stateup = digitalRead(buttonup); statedown = digitalRead(buttondown); ritardo(100); ///////////////// Logica di erogazione // Se l'ora corrente è uguale all'ora di erogazione selezionata, ruotare il motore passo-passo. // Ogni 9 erogazioni del dispositivo, il motore compie una distanza extra per garantire una rotazione completa. if (myRTC.hours == hr && myRTC.minutes == minn && step <9){ myStepper.step(227); passi = passi +1; ritardo(60100); myRTC.updateTime(); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps ==9){ myStepper.step(232); passi = 0; ritardo(60100); myRTC.updateTime(); ///////////////// Modifica del tempo di erogazione // Modifica il tempo di erogazione in base al pulsante premuto. // Il tempo torna a zero quando le ore arrivano a 24 ei minuti a 60. } if (stateup == LOW && hr<23){ hr=hr+1; ritardo(50); } else if (stateup == LOW && hr ==23){ hr=0; ritardo(50); } if (statedown == LOW && minn <59){ minn=minn+1; ritardo(50); } else if (statedown == LOW && minn ==59){ minn=0; ritardo(50); } //////////////// Codice RFID // Legge il tag RFID quando viene presentato. if (! mfrc522. PICC_IsNewCardPresent()) { return; } // Seleziona una delle carte if (! mfrc522. PICC_ReadCardSerial()) { return; } Stringa contenuto= ""; lettera di byte; for (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)); armadietto = 1; } content.toUpperCase(); ///////////////// LOCK CODE // Quando viene letto il tag RFID corretto, sposta il servo in posizione aperta quando è chiuso, // e sposta il servo in posizione chiusa quando è aprire. while (armadietto == 1){ if (content.substring(1) == "3B 21 D6 22"){ //cambia qui l'UID della/e carta/e a cui vuoi dare accesso { switch (deg){ case 180: servo.write(deg); gradi = 10; armadietto = 0; Serial.print("in movimento"); ritardo(1000); rottura; caso 10: servo.write(deg); gradi = 180; armadietto=0; ritardo(1000); rottura; } } } else { Serial.println("Accesso negato"); ritardo(1000); } } }

Passaggio 5: configurazione finale

L'ultimo passaggio consiste nel preparare il progetto per l'uso. Caricare prima il codice con la riga di impostazione dell'ora non commentata, per caricare l'ora corrente nell'RTC. Quindi commenta il codice e ricaricalo. Ciò garantirà che se il dispositivo è scollegato, manterrà comunque l'ora corretta. Ora tutto ciò che devi fare è posizionare il farmaco nelle fessure, posizionare la tazza sotto il foro di erogazione e impostare un tempo di erogazione. Il dispositivo erogherà in modo affidabile alla stessa ora ogni giorno.

Consigliato: