Innehållsförteckning:

Automatisk medicindispenser: 5 steg
Automatisk medicindispenser: 5 steg

Video: Automatisk medicindispenser: 5 steg

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

Detta projekt är avsett för användning inom det medicinska området, där äldre patienter måste ha ett pålitligt sätt att få medicinering portionerad och utdelad. Med denna enhet kan medicinering delas upp upp till 9 dagar i förväg och automatiskt doseras vid önskad tidpunkt. Locket är också låsbart med RFID -taggen, vilket gör att endast vårdgivaren kan komma åt medicinen.

Tillbehör:

Det finns nödvändigt material för att konstruera detta projekt:

  • Arduino UNO
  • Motorförarmodul
  • SG90 9G Servo
  • Stegmotor
  • DS1302 RTC -modul
  • Olika bygelkablar
  • IIC 1602 LCD
  • Tillgång till 3D -skrivare
  • Ben som träpluggar
  • RFID -modul och tagg
  • Två tryckknappar
  • Lödkolv
  • Bakbord
  • superlim
  • Träskruvar
  • Oavslutad trälåda med gångjärnslock
  • Dubbelsidig tejp

Steg 1: Ändra rutan

Ändra rutan
Ändra rutan
Ändra rutan
Ändra rutan
Ändra rutan
Ändra rutan
Ändra rutan
Ändra rutan

Lådan måste först ändras. Det finns flera hål som måste borras. Det första hålet kommer att vara på framsidan av lådan, där rutan på kontrollpanelen är tryckt. Det andra hålet är på baksidan av lådan, för att USB -kabeln ska passera igenom. Det sista hålet är på botten av lådan, där medicinen kommer att falla igenom när den är utlämnad. Slutligen måste benen fästas i botten. Jag använde gummifötter som jag hittade runt mitt hus för ben, men träpluggar kan också användas.

Steg 2: 3D -tryckta delar

3D -tryckta delar
3D -tryckta delar
3D -tryckta delar
3D -tryckta delar
3D -tryckta delar
3D -tryckta delar

Det finns många 3D -tryckta delar som behövs för detta projekt.

Dom är:

  • Karusell som innehåller medicin
  • Bas för karusell
  • Tratt för medicinen
  • Arm för servomotor för att låsa locket
  • Bas för servomotor
  • Lås för servoarm
  • Kontrollpanel
  • Kopp för medicinen som ska doseras

Basen för karusellen fästs på lådan med dubbelsidig tejp. Basen för servomotorn och spärren för armen är båda skruvade i lådan med korta träskruvar. Kontrollpanelens låda limmas på framsidan av lådan med superlim, efter att komponenterna har satts in.

Steg 3: Elektronik

Elektronik
Elektronik

Elektroniken måste nu placeras i lådan. Först kopplas stegmotorn till karusellbasen med M3 -bultar och muttrar. Servon är sedan superlimmad på basen. Sedan är motorstyrenheten, Arduino, breadboard, RFID -modulen och RTC -modulen alla fästa på lådan med dubbelsidig tejp. LCD -skärmen sätts in i hålet i kontrollboxen. Det är lite lödning som krävs. För tryckknapparna måste bygelkablarna lödas till spadekontakterna. För RFID -läsaren måste stiften lödas på kortet.

Steg 4: Kod

Nedan finns den kommenterade koden:

Bibliotek för servo, LCD, RTC, RFID och stegmotor ingår i denna kod.

///////////////////// Bibliotek och variabler

#include #include // Arduino standardbibliotek #include #include virtuabotixRTC myRTC (2, 3, 4); // Define pins #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int tillstånd = 0; int anges ned = 0; int statesel = 0; int vänta = 0; int skåp = 0; // Ställ in servo Servoservo; int vinkel = 180; #inkludera // använd modifierat stegbibliotek med 1000/0100/0010/0001 magnetavfyrningssekvens. Lägg biblioteket i din biblioteksmapp. #define gearratio 64 // 1: 64 gear ratio const int stepsPerRevolution = 2048; // Arduino Kit -motorn är växlad. Genom experiment bestämde jag att 2048 steg vrider axeln en runda. int -steg = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // instansiera en 4-tråds stepper på stift 8 till 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Skapa MFRC522 -instans. int deg = 10; void setup () {lcd.init (); // initiera lcd lcd.backlight (); // Linjen nedanför detta används för att ställa in aktuell tid. Det behöver bara göras en gång, och efteråt måste koden // laddas upp igen och kommenteras. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (buttonup, INPUT_PULLUP); pinMode (nedåt, INPUT_PULLUP); Serial.begin (9600); // Starta en seriell kommunikation SPI.begin (); // Starta SPI -buss mfrc522. PCD_Init (); // Starta MFRC522 myStepper.setSpeed (0,15*växlingsförhållande); // motorn verkar vara nedväxlad 1/64, vilket innebär att hastigheten måste ställas in 64x. // initiera serieporten: servo.attach (servopin); } void loop () {////////////////// LCD -kod // Uppdaterar ständigt displayen med aktuell tid och doseringstid. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Tid:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.setCursor (0, 1); lcd.print ("Dispens:"); lcd.setCursor (10, 1); lcd.print (hr); lcd.print (":"); lcd.print (minn); ////////////////// Read Button States // Läser knapparnas tillstånd för att ändra doseringstiden. stateup = digitalRead (buttonup); angesown = digitalRead (buttondown); fördröjning (100); /////////////////// Dispenseringslogik // Om aktuell tid är densamma som vald doseringstid, vrid stegmotorn. // Var 9: e gång enheten ger ut, vrider motorn ett extra avstånd för att säkerställa en full rotation. if (myRTC.hours == hr && myRTC.minutes == minn && steg <9) {myStepper.step (227); steg = steg +1; fördröjning (60100); myRTC.updateTime (); } annars om (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); steg = 0; fördröjning (60100); myRTC.updateTime (); /////////////////// Ändra utmatningstid // Ändra utmatningstiden baserat på vilken knapp som trycks. // Tiden återgår till noll när timmarna når 24 och minuter blir 60.} if (stateup == LOW && hr <23) {hr = hr+1; fördröjning (50); } annars if (stateup == LÅG && hr == 23) {hr = 0; fördröjning (50); } om (anges ned == LÅG && minn <59) {minn = minn+1; fördröjning (50); } annars om (anges ned == LÅG && minn == 59) {minn = 0; fördröjning (50); } /////////////////// RFID -kod // Läser RFID -taggen när den presenteras. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Välj ett av korten om (! Mfrc522. PICC_ReadCardSerial ()) {return; } Stränginnehåll = ""; byte brev; för (byte i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte [ii], HEX); content.concat (String (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (String (mfrc522.uid.uidByte , HEX)); skåp = 1; } content.toUpperCase (); /////////////////// LÅSKOD // När rätt RFID -tagg läses, flytta servo till öppet läge när den är stängd, // och flytta servo till stängd position när den är öppen. medan (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// ändra här UID för kortet/korten som du vill ge åtkomst {switch (deg) {case 180: servo.write (deg); deg = 10; skåp = 0; Serial.print ("rörligt"); fördröjning (1000); ha sönder; fall 10: servo.write (deg); deg = 180; skåp = 0; fördröjning (1000); ha sönder; }}} else {Serial.println ("Åtkomst nekad"); fördröjning (1000); }}}

Steg 5: Slutinställning

Det sista steget är att göra projektet klart för användning. Ladda först upp koden med tidsinställningsraden okommenterad för att ladda upp den aktuella tiden till RTC. Kommentera sedan koden och ladda upp koden igen. Detta kommer att säkerställa att om enheten kopplas ur, kommer den fortfarande att behålla rätt tid. Allt du behöver göra är att placera medicinen i spåren, placera koppen under utmatningshålet och ställ in en doseringstid. Enheten kommer att leverera på ett tillförlitligt sätt vid samma tidpunkt varje dag.

Rekommenderad: