Indholdsfortegnelse:

Automatisk medicindispenser: 5 trin
Automatisk medicindispenser: 5 trin

Video: Automatisk medicindispenser: 5 trin

Video: Automatisk medicindispenser: 5 trin
Video: WalkClean Stationär 2024, November
Anonim
Automatisk medicindispenser
Automatisk medicindispenser

Dette projekt er til brug på det medicinske område, hvor ældre patienter skal have en pålidelig måde at få portioneret og udleveret medicin. Denne enhed gør det muligt at portionere medicin op til 9 dage i forvejen og automatisk udleveres på et ønsket tidspunkt. Låget kan også låses med RFID -mærket, hvilket sikrer, at det kun er omsorgspersonen, der kan få adgang til medicinen.

Tilbehør:

Der er de nødvendige materialer til at konstruere dette projekt:

  • Arduino UNO
  • Motor driver modul
  • SG90 9G Servo
  • Trinmotor
  • DS1302 RTC -modul
  • Forskellige jumper ledninger
  • IIC 1602 LCD
  • Adgang til 3D -printer
  • Ben såsom træpinde
  • RFID -modul og tag
  • To trykknapper
  • Loddekolbe
  • Brødbræt
  • super lim
  • Træskruer
  • Ufærdig trækasse med hængslet låg
  • Dobbeltsidet tape

Trin 1: Ændring af boksen

Ændring af boksen
Ændring af boksen
Ændring af boksen
Ændring af boksen
Ændring af boksen
Ændring af boksen
Ændring af boksen
Ændring af boksen

Boksen skal først ændres. Der er flere huller, der skal bores. Det første hul vil være på forsiden af boksen, hvor kontrolpanelboksen er udskrevet. Det andet hul er på bagsiden af kassen, så USB -kablet kan passere igennem. Det sidste hul er i bunden af kassen, hvor medicinen vil falde igennem, når den er udleveret. Endelig skal benene fastgøres til bunden. Jeg brugte gummifødder, jeg fandt rundt omkring i mit hus til ben, men træpinde kan også bruges.

Trin 2: 3D -printede dele

3D -trykte dele
3D -trykte dele
3D -trykte dele
3D -trykte dele
3D -trykte dele
3D -trykte dele

Der er mange 3D -printede dele nødvendige til dette projekt.

De er:

  • Karrusel, der indeholder medicin
  • Base til karrusel
  • Tragt til medicinen
  • Arm til servomotor til låsning af låget
  • Base til servomotor
  • Lås til servoarm
  • Kontrolpanel
  • Kop til medicinen, der skal doseres i

Basen til karrusellen er klæbet til kassen med dobbeltsidet tape. Basen til servomotoren og låsen til armen er begge skruet i kassen med korte træskruer. Kontrolpanelboksen limes på forsiden af boksen med superlim, efter at komponenterne er indsat.

Trin 3: Elektronik

Elektronik
Elektronik

Elektronikken skal nu placeres i kassen. Først er trinmotoren fastgjort til karruselbasen med M3 bolte og møtrikker. Servoen limes derefter super til sin bund. Derefter er motorstyringen, Arduino, brødbrættet, RFID -modulet og RTC -modulet alle knyttet til boksen med dobbeltsidet tape. LCD'et indsættes i hullet i kontrolboksen. Der er noget lodning, der er påkrævet. For trykknapperne skal jumperkablerne loddes til spadeforbindelserne. For RFID -læseren skal stifterne loddes til brættet.

Trin 4: Kode

Nedenfor er den kommenterede kode:

Biblioteker til Servo, LCD, RTC, RFID og Stepper motor er inkluderet i denne kode.

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

#include #include // Arduino standardbibliotek #include #include virtuabotixRTC myRTC (2, 3, 4); // Definer pins #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stateup = 0; int opgivet = 0; int statesel = 0; int vent = 0; int skab = 0; // Opsæt servo Servoservo; int vinkel = 180; #include // brug ændret stepper bibliotek med 1000/0100/0010/0001 magnetfyringssekvens. Læg bibliotek i din biblioteksmappe. #define gearratio 64 // 1: 64 gearforhold const int stepsPerRevolution = 2048; // Arduino Kit -motoren er gearet ned. Ved forsøg fastslog jeg, at 2048 trin drejer akslen en runde. int trin = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // instantier en 4-tråds stepper på ben 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); // Opret MFRC522 -forekomst. int deg = 10; ugyldig opsætning () {lcd.init (); // initialiser lcd lcd.backlight (); // Linjen under dette bruges til at indstille det aktuelle klokkeslæt. Det skal kun gøres én gang, og bagefter skal koden // uploades igen med den kommenteret. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Start en seriel kommunikation SPI.begin (); // Start SPI -bus mfrc522. PCD_Init (); // Start MFRC522 myStepper.setSpeed (0,15*gearforhold); // motoren ser ud til at være gearet ned 1/64, hvilket betyder, at hastigheden skal indstilles 64x. // initialiser den serielle port: servo.attach (servopin); } void loop () {/////////////////// LCD -kode // Opdaterer konstant displayet med den aktuelle tid og udleveringstid. 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 ("Dispens:"); lcd.setCursor (10, 1); lcd.print (time); lcd.print (":"); lcd.print (minn); ////////////////// Read Button States // Læser tilstandene på knapperne for at ændre udleveringstiden. stateup = digitalRead (buttonup); statementown = digitalRead (buttondown); forsinkelse (100); /////////////////// Dispenseringslogik // Hvis den aktuelle tid er den samme som den valgte doseringstid, skal du dreje trinmotoren. // Hver 9. gang enheden dispenserer, drejer motoren en ekstra afstand for at sikre, at der roteres fuldt ud. hvis (myRTC.hours == hr && myRTC.minutes == minn && trin <9) {myStepper.step (227); trin = trin +1; forsinkelse (60100); myRTC.updateTime (); } ellers hvis (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); trin = 0; forsinkelse (60100); myRTC.updateTime (); /////////////////// Ændring af udleveringstid // Ændre udleveringstiden baseret på hvilken knap der trykkes på. // Tiden vender tilbage til nul, når timerne når op på 24 og minutter når op på 60.} hvis (stateup == LAV && hr <23) {hr = hr+1; forsinkelse (50); } ellers hvis (stateup == LOW && hr == 23) {hr = 0; forsinkelse (50); } hvis (angivet == LAV && minn <59) {minn = minn+1; forsinkelse (50); } ellers hvis (angivet == LAV && minn == 59) {minn = 0; forsinkelse (50); } ///////////////////// RFID -kode // Læser RFID -tag, når det præsenteres. hvis (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Vælg et af kortene, hvis (! Mfrc522. PICC_ReadCardSerial ()) {return; } String indhold = ""; byte brev; 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)); skab = 1; } content.toUpperCase (); /////////////////// LOCK CODE // Når det korrekte RFID -tag læses, skal du flytte servoen til den åbne position, når den er lukket, // og flytte servoen til den lukkede position, når den er åben. mens (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// skift her UID'en for kortet/kortene, som du vil give adgang {switch (deg) {case 180: servo.write (deg); deg = 10; skab = 0; Serial.print ("i bevægelse"); forsinkelse (1000); pause; sag 10: servo.write (deg); deg = 180; skab = 0; forsinkelse (1000); pause; }}} else {Serial.println ("Adgang nægtet"); forsinkelse (1000); }}}

Trin 5: Slutopsætning

Det sidste trin er at gøre projektet klar til brug. Upload først koden med tidsindstillingslinjen ukommenteret for at uploade den aktuelle tid til RTC. Kommenter derefter koden, og upload koden igen. Dette vil sikre, at hvis enheden er frakoblet, vil den stadig beholde det korrekte tidspunkt. Det eneste du skal gøre er at placere medicinen i åbningerne, placere koppen under doseringshullet og indstille en udleveringstid. Enheden afgiver pålideligt på samme tid hver dag.

Anbefalede: