Turinys:

Automatinis vaistų dozatorius: 5 žingsniai
Automatinis vaistų dozatorius: 5 žingsniai

Video: Automatinis vaistų dozatorius: 5 žingsniai

Video: Automatinis vaistų dozatorius: 5 žingsniai
Video: CS50 2013 - Week 1 2024, Lapkritis
Anonim
Automatinis vaistų dozatorius
Automatinis vaistų dozatorius

Šis projektas skirtas naudoti medicinos srityje, kur vyresnio amžiaus pacientai turi turėti patikimą būdą dalinti ir išleisti vaistus. Šis prietaisas leidžia dozuoti vaistus iki 9 dienų ir automatiškai išleisti norimu laiku. Dangtį taip pat galima užrakinti naudojant RFID žymę, todėl įsitikinkite, kad tik globėjas gali pasiekti vaistus.

Priedai:

Šiam projektui sukurti reikalingos medžiagos:

  • Arduino UNO
  • Variklio vairuotojo modulis
  • SG90 9G servo
  • Žingsninis variklis
  • DS1302 RTC modulis
  • Įvairūs jungiamieji laidai
  • IIC 1602 LCD
  • Prieiga prie 3D spausdintuvo
  • Kojos, tokios kaip mediniai kaiščiai
  • RFID modulis ir žymė
  • Du mygtukai
  • Lituoklis
  • Bandomoji Lenta
  • Super klijai
  • Mediniai varžtai
  • Nebaigta medinė dėžutė su šarnyriniu dangčiu
  • Dvipusė juosta

1 žingsnis: pakeiskite dėžutę

Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas
Dėžutės keitimas

Pirmiausia reikia pakeisti dėžutę. Yra daug skylių, kurias reikia gręžti. Pirmoji skylė bus dėžutės priekyje, kur spausdinama valdymo skydelio dėžutė. Antroji skylė yra dėžutės gale, skirta USB kabeliui praeiti. Paskutinė skylė yra dėžutės apačioje, per kurią išleidę vaistai iškris. Galiausiai kojos turi būti pritvirtintos prie apačios. Kojoms naudoju gumines kojas, kurias radau aplink savo namą, tačiau galima naudoti ir medinius kaiščius.

2 žingsnis: 3D spausdintos dalys

3D spausdintos dalys
3D spausdintos dalys
3D spausdintos dalys
3D spausdintos dalys
3D spausdintos dalys
3D spausdintos dalys

Šiam projektui reikia daug 3D spausdintų dalių.

Jie yra:

  • Karuselė, kurioje telpa vaistai
  • Karuselės pagrindas
  • Piltuvas vaistams
  • Servo variklio svirtis dangteliui užrakinti
  • Servo variklio pagrindas
  • Servo rankenos fiksatorius
  • Kontrolės skydelis
  • Puodelis vaistui išpilstyti

Karuselės pagrindas prie dėžutės priklijuojamas dvipuse juosta. Servo variklio pagrindas ir rankos skląstis yra įsukti į dėžę trumpais mediniais varžtais. Įdėjus komponentus, valdymo skydelio dėžutė priklijuojama prie dėžutės priekio super klijais.

3 žingsnis: Elektronika

Elektronika
Elektronika

Dabar elektroniką reikia įdėti į dėžę. Pirma, žingsninis variklis yra pritvirtintas prie karuselės pagrindo M3 varžtais ir veržlėmis. Tada servo yra super priklijuotas prie jo pagrindo. Tada variklio valdiklis, „Arduino“, duonos lenta, RFID modulis ir RTC modulis yra pritvirtinti prie dėžutės dvipuse juosta. Skystųjų kristalų ekranas įkištas į skylę valdymo dėžutėje. Reikalingas tam tikras litavimas. Spaudžiamųjų mygtukų jungiamieji kabeliai turi būti prilituoti prie kastuvų jungčių. RFID skaitytuvui kaiščiai turi būti prilituoti prie plokštės.

4 žingsnis: kodas

Žemiau yra komentuojamas kodas:

Į šį kodą įtrauktos „Servo“, LCD, RTC, RFID ir žingsninio variklio bibliotekos.

////////////////// Bibliotekos ir kintamieji

#include #include // Arduino standartinė biblioteka #include #include virtuoabotixRTC myRTC (2, 3, 4); // Apibrėžti kaiščius #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int būsena = 0; int teigiamas = 0; int būsenos = 0; int laukti = 0; int spintelė = 0; // Nustatyti servo Servo servo; int kampas = 180; #include // naudokite modifikuotą žingsnių biblioteką su 1000/0100/0010/0001 magneto paleidimo seka. Įdėkite biblioteką į savo bibliotekos aplanką. #define gearratio 64 // 1: 64 pavaros santykis const int stepsPerRevolution = 2048; // „Arduino Kit“variklis yra nukreiptas žemyn. Eksperimentuodamas nustatiau, kad 2048 žingsniai pasuka veleną vieną ratą. int žingsniai = 0; LiquidCrystal_I2C LCD (0x27, 16, 2); // parenkamas 4 laidų žingsninis ant 8–11 kaiščių: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Sukurti MFRC522 egzempliorių. int deg = 10; void setup () {lcd.init (); // inicijuoti lcd lcd.backlight (); // Žemiau esanti eilutė naudojama dabartiniam laikui nustatyti. Tai reikia padaryti tik vieną kartą, o vėliau kodas // turi būti įkeliamas dar kartą kartu su juo. //myRTC.setDS1302Time (40, 55, 11, 1, 7, 12, 2020); pinMode (mygtukas, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Inicijuoti serijinį ryšį SPI.begin (); // Inicijuoti SPI magistralę mfrc522. PCD_Init (); // Inicijuokite MFRC522 myStepper.setSpeed (0,15*pavarų skaičius); // atrodo, kad variklis yra sumažintas 1/64, tai reiškia, kad greitį reikia nustatyti 64 kartus. // inicijuoti nuoseklųjį prievadą: servo.attach (servopin); } void loop () {///////////////// LCD kodas // Nuolat atnaujinamas ekranas pagal esamą laiką ir išdavimo laiką. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Laikas:"); lcd.setCursor (6, 0); lcd.print (myRTC.hours); 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); ///////////////// Skaitymo mygtukų būsenos // Skaito mygtukų būsenas, kad būtų galima pakeisti dozavimo laiką. būsena = digitalRead (mygtukas); konstatuotas = digitalRead (buttondown); vėlavimas (100); ///////////////// Dozavimo logika // Jei dabartinis laikas sutampa su pasirinktu dozavimo laiku, pasukite žingsninį variklį. // Kas 9 kartus išleidžiant prietaisą, variklis sukasi papildomą atstumą, kad būtų užtikrintas visas sukimasis. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9) {myStepper.step (227); žingsniai = žingsniai +1; vėlavimas (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); žingsniai = 0; vėlavimas (60100); myRTC.updateTime (); ////////////////// Dozavimo laiko keitimas // Pakeiskite dozavimo laiką pagal tai, kuris mygtukas paspaudžiamas. // Laikas grįžta į nulį, kai valandos pasiekia 24, o minutės - 60.} if (stateup == LOW && hr <23) {hr = hr+1; vėlavimas (50); } else if (būsena == LOW && hr == 23) {hr = 0; vėlavimas (50); } jei (nurodytas == LOW &&minn <59) {minn = minn+1; vėlavimas (50); } else if (konstatuotas == LOW && minn == 59) {minn = 0; vėlavimas (50); } ///////////////// RFID kodas // Skaito RFID žymą, kai ji pateikiama. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Pasirinkite vieną iš kortelių, jei (! Mfrc522. PICC_ReadCardSerial ()) {return; } Styginių turinys = ""; baitų raidė; for (baitas i = 0; i <mfrc522.uid.size; i ++) {//Serial.println(mfrc522.uid.uidByte <0x10? "0": ""); //Serial.println(mfrc522.uid.uidByte, HEX); content.concat (Styga (mfrc522.uid.uidByte <0x10? "0": "")); content.concat (Styga (mfrc522.uid.uidByte , HEX)); spintelė = 1; } content.toUpperCase (); ///////////////// LOCK CODE // Kai nuskaitoma teisinga RFID žyma, perkelkite servo į atvirą padėtį, kai ji uždaryta, // ir perkelkite servo į uždarą padėtį, kai ji yra atviras. nors (spintelė == 1) {if (content.substring (1) == "3B 21 D6 22") {// čia pakeiskite kortelės/kortelių, kurioms norite suteikti prieigą, UID {switch (deg) {case 180: servo.write (deg); deg = 10; spintelė = 0; Serial.print („juda“); vėlavimas (1000); pertrauka; 10 atvejis: servo.write (deg); deg = 180; spintelė = 0; vėlavimas (1000); pertrauka; }}} else {Serial.println ("Prieiga uždrausta"); vėlavimas (1000); }}}

5 veiksmas: galutinis nustatymas

Paskutinis žingsnis yra paruošti projektą naudoti. Pirmiausia įkelkite kodą su nekomentuojama laiko nustatymo eilute, kad į RTC įkeltumėte dabartinį laiką. Tada pakomentuokite kodą ir iš naujo įkelkite kodą. Tai užtikrins, kad atjungus prietaisą, jis vis tiek išlaikys teisingą laiką. Dabar viskas, ką jums reikia padaryti, tai įdėti vaistus į lizdus, įdėti puodelį po dozavimo anga ir nustatyti dozavimo laiką. Prietaisas bus patikimai išleidžiamas kiekvieną dieną tuo pačiu laiku.

Rekomenduojamas: