Inhoudsopgave:

Automatische medicatiedispenser - Ajarnpa
Automatische medicatiedispenser - Ajarnpa

Video: Automatische medicatiedispenser - Ajarnpa

Video: Automatische medicatiedispenser - Ajarnpa
Video: Automatische Medicijndispenser 2024, Juli-
Anonim
Automatische medicatiedispenser
Automatische medicatiedispenser

Dit project is bedoeld voor gebruik in de medische wereld, waar oudere patiënten een betrouwbare manier moeten hebben om medicatie te laten doseren en verstrekken. Met dit apparaat kan medicatie tot 9 dagen van tevoren worden geportioneerd en automatisch op een gewenst tijdstip worden afgegeven. Het deksel is ook afsluitbaar met de RFID-tag, zodat alleen de zorgverlener bij de medicatie kan.

Benodigdheden:

Er zijn de benodigde materialen om dit project te bouwen:

  • Arduino UNO
  • Motorbesturingsmodule
  • SG90 9G-servo
  • Stappenmotor
  • DS1302 RTC-module
  • Diverse jumperdraden
  • IIC 1602 LCD
  • Toegang tot 3D-printer
  • Poten zoals houten deuvels
  • RFID-module en tag
  • Twee drukknoppen
  • Soldeerbout
  • Breadboard
  • superlijm
  • Houtschroeven
  • Onafgewerkte houten kist met scharnierend deksel
  • Dubbelzijdige tape

Stap 1: De doos aanpassen

De doos wijzigen
De doos wijzigen
De doos wijzigen
De doos wijzigen
De doos wijzigen
De doos wijzigen
De doos wijzigen
De doos wijzigen

De box zal eerst aangepast moeten worden. Er zijn meerdere gaten die geboord moeten worden. Het eerste gat bevindt zich aan de voorkant van de doos, waar de doos van het bedieningspaneel is afgedrukt. Het tweede gat bevindt zich aan de achterkant van de doos, waar de USB-kabel doorheen kan. Het laatste gaatje bevindt zich aan de onderkant van de doos, waar het medicijn doorheen zal vallen zodra het is afgegeven. Ten slotte moeten de poten aan de onderkant worden bevestigd. Ik gebruikte rubberen voetjes die ik in mijn huis vond voor de poten, maar houten deuvels kunnen ook worden gebruikt.

Stap 2: 3D-geprinte onderdelen

3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen
3D-geprinte onderdelen

Er zijn veel 3D-geprinte onderdelen nodig voor dit project.

Zij zijn:

  • Carrousel met medicatie
  • Basis voor carrousel
  • Trechter voor de medicatie
  • Arm voor servomotor om het deksel te vergrendelen
  • Basis voor servomotor
  • Vergrendeling voor servo-arm
  • Controlepaneel
  • Beker om de medicatie in te doseren

De basis voor de carrousel wordt met dubbelzijdig plakband op de doos geplakt. De basis voor de servomotor en de grendel voor de arm worden beide met korte houtschroeven in de doos geschroefd. De kast van het bedieningspaneel wordt met superlijm aan de voorkant van de doos gelijmd, nadat de componenten zijn geplaatst.

Stap 3: Elektronica

Elektronica
Elektronica

De elektronica moet nu in de doos worden geplaatst. Eerst wordt de stappenmotor met M3-bouten en -moeren aan de carrouselbasis bevestigd. De servo wordt dan supergelijmd op zijn basis. Vervolgens worden de motorcontroller, Arduino, breadboard, RFID-module en RTC-module allemaal met dubbelzijdig plakband aan de doos bevestigd. Het LCD-scherm wordt in het gat in de schakelkast gestoken. Er is wel wat soldeerwerk nodig. Voor de drukknoppen moeten de startkabels op de schopconnectoren worden gesoldeerd. Voor de RFID-lezer moeten de pinnen op het bord worden gesoldeerd.

Stap 4: Coderen

Hieronder staat de becommentarieerde code:

Bibliotheken voor de servo, LCD, RTC, RFID en stappenmotor zijn opgenomen in deze code.

///////////////// Bibliotheken en variabelen

#include #include //Arduino standaardbibliotheek #include #include virtuabotixRTC myRTC(2, 3, 4); // Definieer pinnen #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr=0; int min = 0; int sel=0; int-status = 0; int statedown=0; int staat = 0; int wacht = 0; int locker = 0; // Servo-servo instellen; int-hoek = 180; #include //gebruik gemodificeerde stepper-bibliotheek met 1000/0100/0010/0001 magneetafvuurvolgorde. Zet bibliotheek in je bibliotheekmap. #define overbrengingsverhouding 64 //1:64 overbrengingsverhouding const int stepsPerRevolution = 2048; // de Arduino Kit-motor is naar beneden gericht. Door experiment heb ik vastgesteld dat 2048 stappen de as één ronde draaien. int stappen = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // maak een 4-draads stepper op pinnen 8 tot en met 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Maak een MFRC522-instantie. int deg = 10; void setup() { lcd.init(); // initialiseer de lcd lcd.backlight(); // De regel eronder wordt gebruikt om de huidige tijd in te stellen. Het hoeft maar één keer en daarna moet de code // opnieuw worden geüpload met commentaar. //mijnRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (knop omhoog, INPUT_PULLUP); pinMode (knop omlaag, INPUT_PULLUP); Serieel.begin(9600); // Start een seriële communicatie SPI.begin(); // Start SPI-bus mfrc522. PCD_Init(); // Start MFRC522 myStepper.setSpeed (0,15 * overbrengingsverhouding);// de motor lijkt 1/64 lager te zijn ingesteld, wat betekent dat de snelheid 64x moet worden ingesteld. // initialiseer de seriële poort: servo.attach (servopin); } void loop(){ ///////////////// LCD-code // Het scherm wordt constant bijgewerkt met de huidige tijd en uitgiftetijd. lcd.wissen(); mijnRTC.updateTime(); lcd.setCursor(0, 0); lcd.print("Tijd:"); lcd.setCursor(6, 0); lcd.print(myRTC.hours); lcd.print(":"); lcd.print(mijnRTC.minuten); lcd.setCursor(0, 1); lcd.print("Doseren:"); lcd.setCursor(10, 1); lcd.print(hr); lcd.print(":"); lcd.print(min); ///////////////// Lees de status van de knoppen // Leest de status van de knoppen om de uitgiftetijd te wijzigen. stateup = digitalRead (buttonup); statedown = digitalRead (buttondown); vertraging (100); ///////////////// Doseerlogica // Als de huidige tijd gelijk is aan de geselecteerde uitgiftetijd, draai dan aan de stappenmotor. // Elke 9 keer dat het apparaat doseert, draait de motor een extra afstand om ervoor te zorgen dat er een volledige rotatie wordt gemaakt. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9){ myStepper.step(227); stappen = stappen +1; vertraging (60100); mijnRTC.updateTime(); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps ==9){ myStepper.step(232); stappen = 0; vertraging (60100); mijnRTC.updateTime(); ///////////////// De uitgiftetijd wijzigen // De uitgiftetijd wijzigen op basis van welke knop wordt ingedrukt. // Tijd keert terug naar nul wanneer uren 24 worden en minuten 60. } if (stateup == LAAG && hr<23){ hr=hr+1; vertraging (50); } else if (stateup == LAAG && hr ==23){ hr=0; vertraging (50); } if (statedown == LAAG && minn <59){ minn=minn+1; vertraging (50); } else if (statedown == LAAG && minn ==59){ minn=0; vertraging (50); } ///////////////// RFID-code // Leest RFID-tag wanneer deze wordt gepresenteerd. if (! mfrc522. PICC_IsNewCardPresent()) { return; } // Selecteer een van de kaarten als (! mfrc522. PICC_ReadCardSerial()) { return; } String inhoud= ""; byte-letter; 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)); kluisje = 1; } inhoud.toUpperCase(); ///////////////// LOCK CODE // Wanneer de juiste RFID-tag is gelezen, verplaats de servo naar de open positie wanneer deze is gesloten, // en verplaats de servo naar de gesloten positie wanneer deze is open. while (locker == 1){ if (content.substring(1) == "3B 21 D6 22"){ // wijzig hier de UID van de kaart/kaarten die u toegang wilt geven { switch (deg){ case 180: servo.schrijven (graden); graden = 10; kluisje = 0; Serial.print("bewegend"); vertraging (1000); pauze; geval 10: servo.write(deg); graden = 180; kastje=0; vertraging (1000); pauze; } } } else { Serial.println ("Toegang geweigerd"); vertraging (1000); } } }

Stap 5: Definitieve installatie

De laatste stap is om het project klaar te maken voor gebruik. Upload eerst de code met de regel voor het instellen van de tijd zonder commentaar, om de huidige tijd naar de RTC te uploaden. Becommentarieer vervolgens de code en upload de code opnieuw. Dit zorgt ervoor dat als het apparaat wordt losgekoppeld, het nog steeds de juiste tijd behoudt. Nu hoeft u alleen nog maar het medicijn in de sleuven te plaatsen, de beker onder het doseergat te plaatsen en een doseertijd in te stellen. Het apparaat zal elke dag betrouwbaar op hetzelfde tijdstip doseren.

Aanbevolen: