Sadržaj:

Automatski dozator lijekova: 5 koraka
Automatski dozator lijekova: 5 koraka

Video: Automatski dozator lijekova: 5 koraka

Video: Automatski dozator lijekova: 5 koraka
Video: (Re)programiranje podsvijesti u 5 koraka! Dr Cathy Collautt sa prevodom. Moć podsvesti. 2024, Srpanj
Anonim
Automatski dozator lijekova
Automatski dozator lijekova

Ovaj se projekt koristi u medicini, gdje stariji pacijenti moraju imati pouzdan način dijeljenja i izdavanja lijekova. Ovaj uređaj omogućuje dijeljenje lijekova do 9 dana unaprijed i automatsko izdavanje u željeno vrijeme. Poklopac se također može zaključati RFID oznakom, pazeći da samo njegovatelj može pristupiti lijeku.

Pribor:

Za izradu ovog projekta potrebni su materijali:

  • Arduino UNO
  • Modul pokretača motora
  • SG90 9G servo
  • Koračni motor
  • DS1302 RTC modul
  • Razne kratkospojne žice
  • IIC 1602 LCD
  • Pristup 3D pisaču
  • Noge poput drvenih tipla
  • RFID modul i oznaka
  • Dva tastera
  • Lemilica
  • Oglasna ploča
  • super ljepilo
  • Vijci za drvo
  • Nedovršena drvena kutija s poklopcem na šarkama
  • Dvostrana traka

Korak 1: Izmjena okvira

Izmjena okvira
Izmjena okvira
Izmjena okvira
Izmjena okvira
Izmjena okvira
Izmjena okvira
Izmjena okvira
Izmjena okvira

Okvir će se prvo morati izmijeniti. Postoji više rupa koje je potrebno izbušiti. Prva rupa bit će na prednjoj strani kutije, gdje je otisnuta kutija upravljačke ploče. Druga rupa nalazi se na stražnjoj strani kutije za prolaz USB kabela. Posljednja rupa nalazi se na dnu kutije, gdje će lijek propasti nakon ispuštanja. Na kraju, noge moraju biti pričvršćene za dno. Za noge sam koristio gumene noge koje sam našao oko kuće, ali mogu se koristiti i drveni tiple.

Korak 2: 3D ispisani dijelovi

3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi
3D ispisani dijelovi

Za ovaj projekt potrebno je mnogo 3D ispisanih dijelova.

Oni su:

  • Vrtuljak s lijekovima
  • Baza za vrtuljak
  • Lijevak za lijekove
  • Ruka za servo motor za zaključavanje poklopca
  • Baza za servo motor
  • Zatvarač za servo krak
  • Upravljačka ploča
  • Šalica za ispuštanje lijeka

Baza za vrtuljak pričvršćena je na kutiju dvostranom trakom. Baza za servo motor i zasun za ruku oboje su uvrnuti u kutiju kratkim vijcima za drvo. Kutija upravljačke ploče lijepi se na prednju stranu kutije super ljepilom, nakon što su komponente umetnute.

Korak 3: Elektronika

Elektronika
Elektronika

Elektroniku sada treba staviti u kutiju. Najprije je koračni motor pričvršćen na podlogu vrtuljka vijcima i maticama M3. Servo je zatim super zalijepljen na svoju podlogu. Zatim su kontroler motora, Arduino, matična ploča, RFID modul i RTC modul pričvršćeni na kutiju dvostranom trakom. LCD je umetnut u rupu na upravljačkoj kutiji. Potrebno je neko lemljenje. Za tipke, kratkospojni kablovi moraju biti lemljeni na konektore lopatica. Za RFID čitač, pinovi moraju biti lemljeni na ploču.

Korak 4: Kodirajte

Ispod je komentirani kod:

Knjižnice za servo, LCD, RTC, RFID i koračni motor uključene su u ovaj kôd.

/////////////////// Knjižnice i varijable

#include #include // Arduino standardna biblioteka #include #include virtuabotixRTC myRTC (2, 3, 4); // Definiranje pinova #define servopin 8 const int buttonup = 6; const int buttondown = 7; int hr = 0; int minn = 0; int sel = 0; int stanjeup = 0; int navedenoown = 0; int statesel = 0; int čekanje = 0; int ormarić = 0; // Postavljanje servo Servo servo; int kut = 180; #include // koristiti izmijenjenu biblioteku koraka s 1000/0100/0010/0001 magnetskom sekvencom paljenja. Stavite knjižnicu u mapu knjižnice. #define gearratio 64 // 1: 64 prijenosni omjer const int stepsPerRevolution = 2048; // motor Arduino Kit je usmjeren prema dolje. Pokusom sam utvrdio da 2048 koraka okreće osovinu za jedan krug. int koraci = 0; LiquidCrystal_I2C LCD (0x27, 16, 2); // instancirajte 4-žični steper na pinovima 8 do 11: Stepper myStepper (stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522 (SS_PIN, RST_PIN); // Stvaranje instance MFRC522. int deg = 10; void setup () {lcd.init (); // inicijalizira lcd lcd.backlight (); // Red ispod ovoga služi za postavljanje trenutnog vremena. To se mora učiniti samo jednom, a zatim se kod // mora ponovno učitati s komentarom. //myRTC.setDS1302Time(40, 55, 11, 1, 7, 12, 2020); pinMode (gumb, INPUT_PULLUP); pinMode (buttondown, INPUT_PULLUP); Serial.begin (9600); // Pokretanje serijske komunikacije SPI.begin (); // Pokretanje sabirnice SPI mfrc522. PCD_Init (); // Pokretanje MFRC522 myStepper.setSpeed (0,15*prijenosni omjer); // čini se da je motor smanjen za 1/64, što znači da je brzinu potrebno postaviti 64x. // inicijalizira serijski port: servo.attach (servopin); } void loop () {/////////////////// LCD kod // Stalno ažurira zaslon s trenutnim vremenom i vremenom doziranja. lcd.clear (); myRTC.updateTime (); lcd.setCursor (0, 0); lcd.print ("Vrijeme:"); lcd.setCursor (6, 0); lcd.print (myRTC. sati); lcd.print (":"); lcd.print (myRTC.minute); lcd.setCursor (0, 1); lcd.print ("Doziranje:"); lcd.setCursor (10, 1); lcd.tisak (hr); lcd.print (":"); lcd.tisak (minn); /////////////////// Pročitaj stanje gumba // Čita stanje gumba za promjenu vremena točenja. stateup = digitalno čitanje (gumb); specifiedown = digitalRead (buttondown); kašnjenje (100); /////////////////// Logic Dispensing Logic // Ako je trenutno vrijeme isto kao i odabrano vrijeme točenja, okrenite koračni motor. // Svakih 9 puta kada se uređaj rasprši, motor okreće dodatnu udaljenost kako bi se osiguralo potpuno okretanje. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9) {myStepper.step (227); koraci = koraci +1; kašnjenje (60100); myRTC.updateTime (); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps == 9) {myStepper.step (232); koraci = 0; kašnjenje (60100); myRTC.updateTime (); /////////////////// Promjena vremena točenja // Promijenite vrijeme točenja na temelju pritiska na tipku. // Vrijeme se vraća na nulu kada sati dosegnu 24, a minute 60.} if (stateup == LOW && hr <23) {hr = hr+1; kašnjenje (50); } else if (stateup == LOW && hr == 23) {hr = 0; kašnjenje (50); } if (specifiedown == LOW && minn <59) {minn = minn+1; kašnjenje (50); } else if (specifiedown == LOW && minn == 59) {minn = 0; kašnjenje (50); } /////////////////// RFID kod // Čita RFID oznaku kada je predstavljena. if (! mfrc522. PICC_IsNewCardPresent ()) {return; } // Odaberite jednu od kartica if (! Mfrc522. PICC_ReadCardSerial ()) {return; } Sadržaj niza = ""; slovo bajta; for (bajt 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)); ormarić = 1; } content.toUpperCase (); /////////////////// LOCK CODE // Kad se pročita ispravna RFID oznaka, pomaknite servo u otvoreni položaj kada je zatvoren, // i pomaknite servo u zatvoreni položaj kada je otvorena. while (locker == 1) {if (content.substring (1) == "3B 21 D6 22") {// ovdje promijenite UID kartice/kartica kojima želite omogućiti pristup {switch (deg) {case 180: servo.pisati (stup); deg = 10; ormarić = 0; Serial.print ("kretanje"); kašnjenje (1000); pauza; slučaj 10: servo.write (deg); stupnjev = 180; ormarić = 0; kašnjenje (1000); pauza; }}} else {Serial.println ("Pristup odbijen"); kašnjenje (1000); }}}

Korak 5: Konačno postavljanje

Posljednji korak je priprema projekta za upotrebu. Prvo učitajte kôd s redom za podešavanje vremena bez komentara, kako biste učitali trenutno vrijeme u RTC. Zatim komentirajte kôd i ponovno ga učitajte. To će osigurati da će, ako je uređaj isključen, i dalje zadržati točno vrijeme. Sada sve što trebate učiniti je staviti lijek u utore, staviti šalicu ispod otvora za točenje i postaviti vrijeme točenja. Uređaj će se pouzdano izdavati u isto vrijeme svaki dan.

Preporučeni: