Innholdsfortegnelse:

Automatisk medisinsk dispenser: 5 trinn
Automatisk medisinsk dispenser: 5 trinn

Video: Automatisk medisinsk dispenser: 5 trinn

Video: Automatisk medisinsk dispenser: 5 trinn
Video: Viaje DEBUT BUSES BIOSAFE MARCOPOLO en Narbus Internacional, Santiago - Carahue | Ando en Bus 2024, November
Anonim
Automatisk medisinsk dispenser
Automatisk medisinsk dispenser

Dette prosjektet er til bruk i det medisinske feltet, der eldre pasienter må ha en pålitelig måte å få porsjonert og utdelt medisiner på. Denne enheten lar medisiner deles opp til 9 dager i forveien, og kan automatisk utleveres til ønsket tidspunkt. Lokket er også låsbart med RFID -taggen, slik at bare omsorgspersonen får tilgang til medisinen.

Rekvisita:

Det er nødvendig materiale for å konstruere dette prosjektet:

  • Arduino UNO
  • Motordrivermodul
  • SG90 9G Servo
  • Trinnmotor
  • DS1302 RTC -modul
  • Ulike hoppetråder
  • IIC 1602 LCD
  • Tilgang til 3D -skriver
  • Ben som treplugger
  • RFID -modul og tag
  • To trykknapper
  • Loddejern
  • Brødbrett
  • superlim
  • Treskruer
  • Uferdig trekasse med hengslet lokk
  • Dobbeltsidig tape

Trinn 1: Endre boksen

Endring av boksen
Endring av boksen
Endring av boksen
Endring av boksen
Endring av boksen
Endring av boksen
Endring av boksen
Endring av boksen

Boksen må først endres. Det er flere hull som må bores. Det første hullet vil være på forsiden av esken, der boksen på kontrollpanelet skrives ut. Det andre hullet er på baksiden av esken, slik at USB -kabelen kan passere. Det siste hullet er på bunnen av esken, der medisinen vil falle gjennom når den er utlevert. Til slutt må bena festes til bunnen. Jeg brukte gummiføtter jeg fant rundt huset mitt for ben, men trepinner kan også brukes.

Trinn 2: 3D -trykte deler

3D -trykte deler
3D -trykte deler
3D -trykte deler
3D -trykte deler
3D -trykte deler
3D -trykte deler

Det er mange 3D -trykte deler som trengs for dette prosjektet.

De er:

  • Karusell som inneholder medisiner
  • Base for karusell
  • Trakt for medisinen
  • Arm for servomotor for å låse lokket
  • Sokkel for servomotor
  • Lås for servoarm
  • Kontrollpanel
  • Kopp for medisinen som skal doseres inn

Basen for karusellen er festet til esken med dobbeltsidig tape. Basen til servomotoren og låsen til armen er begge skrudd inn i esken med korte treskruer. Kontrollpanelboksen limes på forsiden av esken med superlim, etter at komponentene er satt inn.

Trinn 3: Elektronikk

Elektronikk
Elektronikk

Elektronikken må nå plasseres i esken. Først er trinnmotoren festet til karusellbasen med M3 -bolter og muttere. Servoen limes deretter super til basen. Deretter er motorstyringen, Arduino, brødbrett, RFID -modul og RTC -modul festet til esken med dobbeltsidig tape. LCD -skjermen settes inn i hullet i kontrollboksen. Det er noe lodding som kreves. For trykknappene må startkablene loddes til spadekontaktene. For RFID -leseren må pinnene loddes til brettet.

Trinn 4: Kode

Nedenfor er den kommenterte koden:

Biblioteker for Servo, LCD, RTC, RFID og trinnmotor er inkludert i denne koden.

///////////////////// Biblioteker og variabler

#include #include // Arduino standardbibliotek #include #include virtuabotixRTC myRTC (2, 3, 4); // Definer pins #definer servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int oppgitt ned = 0; int statesel = 0; int vent = 0; int skap = 0; // Sett opp servo Servo servo; int vinkel = 180; #include // bruk modifisert stepper -bibliotek med 1000/0100/0010/0001 magnetfyringssekvens. Sett biblioteket i bibliotekmappen. #define gearratio 64 // 1: 64 girforhold const int stepsPerRevolution = 2048; // Arduino Kit -motoren er gearet ned. Ved eksperiment bestemte jeg at 2048 trinn snur akselen en runde. int trinn = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // instabilisere en 4-tråds stepper på pinnene 8 til 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Lag MFRC522 -forekomst. int deg = 10; ugyldig oppsett () {lcd.init (); // initialiser lcd lcd.backlight (); // Linjen under dette brukes til å angi gjeldende tid. Det må bare gjøres en gang, og etterpå må koden // lastes opp igjen med den kommentert. //myRTC.setDS1302Tid(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Start en seriell kommunikasjon SPI.begin (); // Start SPI -buss mfrc522. PCD_Init (); // Start MFRC522 myStepper.setSpeed (0,15*girforhold); // motoren ser ut til å være giret ned 1/64, noe som betyr at hastigheten må stilles 64x. // initialiser den serielle porten: servo.attach (servopin); } void loop () {/////////////////// LCD -kode // Oppdaterer skjermen kontinuerlig med gjeldende tid og doseringstid. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Tid:"); lcd.setCursor (6, 0); lcd.print (myRTC.timer); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Dispense:"); lcd.setCursor (10, 1); lcd.print (hr); lcd.print (":"); lcd.print (minn); /////////////////// Read Button States // Leser tilstandene til knappene for å endre utleveringstiden. stateup = digitalRead (buttonup); Statownown = digitalRead (buttondown); forsinkelse (100); /////////////////// Dispensering Logic // Hvis gjeldende tid er den samme som valgt doseringstid, snu trinnmotoren. // Hver 9. gang enheten gir ut, snur motoren en ekstra avstand for å sikre at den roterer fullstendig. hvis (myRTC.hours == hr && myRTC.minutes == minn && trinn <9) {myStepper.step (227); trinn = trinn +1; forsinkelse (60100); myRTC.updateTime (); } annet hvis (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); trinn = 0; forsinkelse (60100); myRTC.updateTime (); /////////////////// Endre utleveringstid // Endre utleveringstiden basert på hvilken knapp som trykkes. // Tiden går tilbake til null når timene kommer til 24 og minuttene kommer til 60.} if (stateup == LOW && hr <23) {hr = hr+1; forsinkelse (50); } annet hvis (stateup == LOW && hr == 23) {hr = 0; forsinkelse (50); } hvis (angitt == LAV && minn <59) {minn = minn+1; forsinkelse (50); } annet hvis (angitt == LAV && minn == 59) {minn = 0; forsinkelse (50); } /////////////////// RFID -kode // Leser RFID -taggen når den presenteres. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Velg ett av kortene hvis (! Mfrc522. PICC_ReadCardSerial ()) {return; } String content = ""; byte brev; for (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte [ii] <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte , HEX); content.concat (String (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (String (mfrc522.uid.uidByte , HEX)); skap = 1; } content.toUpperCase (); /////////// åpen. while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// endre her UID for kortet/kortene du vil gi tilgang {switch (deg) {case 180: servo.write (deg); deg = 10; skap = 0; Serial.print ("flytte"); forsinkelse (1000); gå i stykker; sak 10: servo.write (deg); deg = 180; skap = 0; forsinkelse (1000); gå i stykker; }}} else {Serial.println ("Tilgang nektet"); forsinkelse (1000); }}}

Trinn 5: Sluttoppsett

Det siste trinnet er å gjøre prosjektet klart til bruk. Last først opp koden med tidsinnstillingslinjen ukommentert, for å laste opp gjeldende tid til RTC. Kommenter deretter koden, og last opp koden på nytt. Dette vil sikre at hvis enheten er koblet fra, vil den fortsatt beholde riktig tid. Alt du trenger å gjøre er å plassere medisinen i sporene, plassere koppen under hullet og sette en doseringstid. Enheten vil levere pålitelig på samme tid hver dag.

Anbefalt: