Table des matières:

Distributeur automatique de médicaments : 5 étapes
Distributeur automatique de médicaments : 5 étapes

Vidéo: Distributeur automatique de médicaments : 5 étapes

Vidéo: Distributeur automatique de médicaments : 5 étapes
Vidéo: Combien RAPPORTE mes 5 DISTRIBUTEURS ? (Récolte en DIRECT !) 2024, Novembre
Anonim
Distributeur automatique de médicaments
Distributeur automatique de médicaments

Ce projet est destiné à être utilisé dans le domaine médical, où les patients âgés doivent disposer d'un moyen fiable de doser et de dispenser leurs médicaments. Ce dispositif permet de doser les médicaments jusqu'à 9 jours à l'avance et d'être distribués automatiquement à l'heure souhaitée. Le couvercle est également verrouillable avec l'étiquette RFID, garantissant que seul le soignant peut accéder au médicament.

Fournitures:

Il y a les matériaux nécessaires pour construire ce projet:

  • Arduino UNO
  • Module de commande de moteur
  • Servomoteur SG90 9G
  • Moteur pas à pas
  • Module RTC DS1302
  • Divers cavaliers
  • LCD IIC 1602
  • Accès imprimante 3D
  • Jambes telles que des chevilles en bois
  • Module et étiquette RFID
  • Deux boutons poussoirs
  • Fer à souder
  • Planche à pain
  • super colle
  • Les vis à bois
  • Boîte en bois non finie avec couvercle à charnière
  • Ruban adhésif double face

Étape 1: Modification de la boîte

Modification de la boîte
Modification de la boîte
Modification de la boîte
Modification de la boîte
Modification de la boîte
Modification de la boîte
Modification de la boîte
Modification de la boîte

La boîte devra d'abord être modifiée. Il y a plusieurs trous qui doivent être percés. Le premier trou sera sur le devant de la boîte, là où la boîte du panneau de commande est imprimée. Le deuxième trou se trouve à l'arrière du boîtier, pour le passage du câble USB. Le dernier trou se trouve au bas de la boîte, où le médicament tombera une fois distribué. Enfin, les jambes doivent être attachées au fond. J'ai utilisé des pieds en caoutchouc que j'ai trouvés autour de ma maison pour les jambes, mais des chevilles en bois peuvent également être utilisées.

Étape 2: Pièces imprimées en 3D

Pièces imprimées en 3D
Pièces imprimées en 3D
Pièces imprimées en 3D
Pièces imprimées en 3D
Pièces imprimées en 3D
Pièces imprimées en 3D

De nombreuses pièces imprimées en 3D sont nécessaires pour ce projet.

Elles sont:

  • Carrousel qui contient des médicaments
  • Base pour carrousel
  • Entonnoir pour le médicament
  • Bras pour servomoteur pour verrouiller le couvercle
  • Base pour servomoteur
  • Loquet pour bras servo
  • Panneau de commande
  • Tasse pour le médicament à distribuer dans

La base du carrousel est collée à la boîte avec du ruban adhésif double face. La base du servomoteur et le loquet du bras sont tous deux vissés dans la boîte avec des vis à bois courtes. Le boîtier du panneau de commande est collé à l'avant du boîtier avec de la super colle, après l'insertion des composants.

Étape 3: Électronique

Électronique
Électronique

L'électronique doit maintenant être placée dans la boîte. Tout d'abord, le moteur pas à pas est fixé à la base du carrousel avec des boulons et des écrous M3. Le servo est alors super collé à sa base. Ensuite, le contrôleur de moteur, l'Arduino, la maquette, le module RFID et le module RTC sont tous fixés à la boîte avec du ruban adhésif double face. L'écran LCD est inséré dans le trou du boîtier de commande. Il y a de la soudure qui est nécessaire. Pour les boutons poussoirs, les câbles de démarrage doivent être soudés aux cosses plates. Pour le lecteur RFID, les broches doivent être soudées à la carte.

Étape 4: Coder

Ci-dessous le code commenté:

Les bibliothèques pour les moteurs Servo, LCD, RTC, RFID et Stepper sont incluses dans ce code.

///////////////// Bibliothèques et variables

#include #include //Bibliothèque standard Arduino #include #include virtuabotixRTC myRTC(2, 3, 4); // Définir les broches #define servopin 8 const int buttonup = 6; const int buttondown = 7; int h=0; int min=0; int sel=0; état int=0; état int=0; int étatsel=0; attente int = 0; casier int = 0; // Configurer le servo Servo servo; angle entier = 180; #include //utiliser la bibliothèque pas à pas modifiée avec la séquence de tir magnétique 1000/0100/0010/0001. Mettez la bibliothèque dans votre dossier de bibliothèque. #define gearratio 64 //1:64 gear ratio const int stepsPerRevolution = 2048; //le moteur du kit Arduino est démultiplié. Par expérience, j'ai déterminé que 2048 pas font tourner l'arbre d'un tour. int pas = 0; LiquidCrystal_I2C lcd (0x27, 16, 2); // instancie un moteur pas à pas à 4 fils sur les broches 8 à 11: Stepper myStepper(stepsPerRevolution, A0, A1, A2, A3); #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Créer une instance MFRC522. entier deg = 10; void setup() { lcd.init(); // initialise l'écran lcd lcd.backlight(); // La ligne en dessous est utilisée pour définir l'heure actuelle. Cela ne doit être fait qu'une seule fois, et ensuite le code // doit être à nouveau téléchargé avec son commentaire. //myRTC.setDS1302Time (40, 55, 11, 1, 7, 12, 2020); pinMode (bouton, INPUT_PULLUP); pinMode(bouton, INPUT_PULLUP); Serial.begin(9600); // Initie une communication série SPI.begin(); // Lancer le bus SPI mfrc522. PCD_Init(); // Lancer MFRC522 myStepper.setSpeed(0.15*gearratio); // le moteur semble être démultiplié de 1/64, ce qui signifie que la vitesse doit être réglée 64x. // initialise le port série: servo.attach(servopin); } void loop(){ ///////////////// LCD Code // Met constamment à jour l'affichage avec l'heure actuelle et l'heure de distribution. lcd.clear(); monRTC.updateTime(); lcd.setCursor(0, 0); lcd.print("Heure:"); 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(h); lcd.print(":"); lcd.print(min); ///////////////// Lire les états des boutons // Lit les états des boutons pour modifier le temps de distribution. stateup = digitalRead(buttonup); statedown = digitalRead (bouton enfoncé); retard (100); ///////////////// Logique de distribution // Si l'heure actuelle est la même que l'heure de distribution sélectionnée, tourner le moteur pas à pas. // Toutes les 9 fois que l'appareil distribue, le moteur tourne sur une distance supplémentaire pour assurer une rotation complète. if (myRTC.hours == hr && myRTC.minutes == minn && steps <9){ myStepper.step(227); étapes = étapes +1; retard (60100); monRTC.updateTime(); } else if (myRTC.hours == hr && myRTC.minutes == minn && steps ==9){ myStepper.step(232); pas = 0; retard (60100); monRTC.updateTime(); ///////////////// Modification du temps de distribution // Modifiez le temps de distribution en fonction du bouton enfoncé. // Le temps revient à zéro lorsque les heures passent à 24 et les minutes à 60. } if (stateup == LOW && hr<23){ hr=hr+1; retard (50); } else if (stateup == LOW && hr ==23){ hr=0; retard (50); } if (statedown == LOW && minn <59){ minn=minn+1; retard (50); } else if (statedown == LOW && minn ==59){ minn=0; retard (50); } ///////////////// Code RFID // Lit l'étiquette RFID lorsqu'elle est présentée. if (! mfrc522. PICC_IsNewCardPresent()) { return; } // Sélectionnez une des cartes if (! mfrc522. PICC_ReadCardSerial()) { return; } String content=""; lettre d'octet; for (octet 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)); casier = 1; } content.toUpperCase(); //////////////// CODE DE VERROUILLAGE // Lorsque l'étiquette RFID correcte est lue, déplacez le servo en position ouverte lorsqu'il est fermé, // et déplacez le servo en position fermée lorsqu'il est ouvert. while (locker == 1){ if (content.substring(1) == "3B 21 D6 22"){ //changez ici l'UID de la ou des cartes auxquelles vous souhaitez donner accès { switch (deg){ case 180: servo.write(deg); degrés = 10; casier = 0; Serial.print("moving"); retard(1000); Pause; cas 10: servo.write(deg); degrés = 180; casier=0; retard(1000); Pause; } } } else { Serial.println("Accès refusé"); retard(1000); } } }

Étape 5: configuration finale

La dernière étape consiste à préparer le projet à l'utilisation. Téléchargez d'abord le code avec la ligne de réglage de l'heure sans commentaire, pour télécharger l'heure actuelle sur le RTC. Ensuite, commentez le code et téléchargez à nouveau le code. Cela garantira que si l'appareil est débranché, il conservera toujours l'heure correcte. Maintenant, tout ce que vous avez à faire est de placer le médicament dans les fentes, de placer le gobelet sous le trou de distribution et de définir un temps de distribution. L'appareil distribuera de manière fiable à la même heure chaque jour.

Conseillé: