Projet Arduino Makeblock

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, je suis actuellement en projet et je suis à la recherche de solutions car je suis bloqué sur quelques points. Je travaille actuellement sur un distributeur de médicaments à l'unité avec l'aide d'une table traçante XY de chez "Makeblock". J'ai quelques soucis car j'aimerai créer le système pour qu'il soit "automatique". Mais mon programme me permet de saisir dans le moniteur de série, les chiffres et le système effectue le déplacement. J'aimerai que la table effectue un balayage sans que la table traçante soit piloté par les chiffres. (J'ai eu l'idée de reprendre le système de la bataille navale), le problème ? Je n'arrive pas à faire correspondre mon programme ainsi que les librairies et j'ai du mal à l'écriture du programme. Je met (le première version) le programme plus bas (on me conseille de faire un tableau sur Arduino mais le problème c'est que je n'arrive pas à trouver des tutos sur ceci et de plus il faudrait adapter les bibliothèques au programme. Nous travaillons à plusieurs de plus sur ce projet et j'aimerai vous demander s'il était possible d'avoir un seul programme pour plusieurs carte, car le système est constitué de 3 parties: - l'identification du patient (RFID) nous avons le programme; - le déplacement de la réserve de médicaments (nous avons à peu près le programme qui consiste ma partie); - la distribution du médicament (par servomoteurs) nous avons le programme. On a eu l'idée de combiné les trois programme et en reliant les trois par communication en série. (Nous avons du mal à réaliser celà). J'aimerai savoir comment je pourrais mettre nos programmes en 1 seul tout en ayant une communication série, mais aussi des informations sur la composition de la bataille navale sur Arduino tout en essayant de commander les deux moteurs pas à pas qui sont sur ma table traçante.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <AccelStepper.h>

#include <Makeblock.h>
#include <SoftwareSerial.h>
#include <Wire.h>

int HOME = 0;
int dirPin = mePort[PORT_1].s1;//the direction pin connect to Base Board PORT1 SLOT1
int stpPin = mePort[PORT_1].s2;//the Step pin connect to Base Board PORT1 SLOT2
AccelStepper stepper(AccelStepper::DRIVER,stpPin,dirPin); 
int dirPin2 = mePort[PORT_2].s1;//the direction pin connect to Base Board PORT1 SLOT1
int stpPin2 = mePort[PORT_2].s2;//the Step pin connect to Base Board PORT1 SLOT2
AccelStepper stepper2(AccelStepper::DRIVER,stpPin2,dirPin2); 


void setup()
{  
  Serial.begin(9600);
  // Change these to suit your stepper if you want
  stepper.setMaxSpeed(100000);
  stepper.setAcceleration(200000);
  stepper2.setMaxSpeed(10000);
  stepper2.setAcceleration(20000);

}

void loop()
{
  if(Serial.available())
  {
    char a = Serial.read();
    switch(a)
    {
      case '0':
      //steper.moveTo(0);
      stepper.moveTo(HOME);
      stepper2.moveTo(HOME);
      break;
      case '1':
      stepper.moveTo(6800);
      break;
      case '2':
      stepper.move(6800);
      break;
      case '3':
      stepper.move(6800);
      break;
      case '4':
      stepper.move(6800);
      break;
      case '5':
      stepper2.move(-15000);
      break;
      case '6':
      stepper.move(-6800);
      break;
      case '7':
      stepper.move(-6800);
      break;
      case '8':
      stepper.move(-6800);
      break;
      case '9':
      stepper.move(-6800);
      break;
      case 'A':
      stepper2.move(-15000);
      break;
      case 'Z':
      stepper.move(6800);
      break;
      case 'E':
      stepper.move(6800);
      break;
      case 'R':
      stepper.move(6800);
      break;
      case 'T':
      stepper.move(6800);
      break;
    }
  }
    stepper.run();
    stepper2.run();

}
+0 -0

Bonjour.

J'aimerai que la table effectue un balayage sans que la table traçante soit piloté par les chiffres. (J'ai eu l'idée de reprendre le système de la bataille navale), le problème ? Je n'arrive pas à faire correspondre mon programme ainsi que les librairies et j'ai du mal à l'écriture du programme.

Peux-tu mieux expliquer quel est ton problème ? Ton programme m'a l'air de marcher.

Après pour ce qui est de la mise en relation des trois programmes par la voie série, faire communiquer 3 arduinos directement, c'est impossible, tu va avoir besoin de la librairie SoftwareSerial et d'un multiplexeur (cf ici)

En espérant t'avoir (un peu) aidé.

+0 -0
Auteur du sujet

Bonsoir,

Oui bien sur, mon programme fonctionne, je l'ai testé. Mon programme permet à partir du moniteur série de faire entrer des chiffres (ou des lettres) et de faire correspondre ces chiffres à un nombre de déplacement du moteur pas à pas. Le problème c'est que je dois respecter le cahier des charges qui lui me demande de faire un système automatisé, donc qui ne doit pas être piloter par l'Homme. Je dois simplement pouvoir avoir mes moteurs qui fonctionnent tout seul en lançant le programme. Le soucis est que je ne connais pas bien la bibliothèque, car tu vas surement me dire que je dois simplement mettre en marche le moteur pas à pas pour X pas et dès qu'il arrive au bout , Y pas pour que le système descends vers le bas tout en ajoutant des delay pour que la réserve de médicament puisse bien se positionner au dessus des boîtes des patients. Mais je n'arrive pas à trouver les lignes de programmes qui me permettent de réaliser cela avec ces moteurs.

Oui on a essayé de réfléchir encore et encore à cette solution et il est impossible pour nous de combiner nos trois programmes. Je te remercie énormément pour ton aide! > Bonjour.

J'aimerai que la table effectue un balayage sans que la table traçante soit piloté par les chiffres. (J'ai eu l'idée de reprendre le système de la bataille navale), le problème ? Je n'arrive pas à faire correspondre mon programme ainsi que les librairies et j'ai du mal à l'écriture du programme.

Peux-tu mieux expliquer quel est ton problème ? Ton programme m'a l'air de marcher.

Après pour ce qui est de la mise en relation des trois programmes par la voie série, faire communiquer 3 arduinos directement, c'est impossible, tu va avoir besoin de la librairie SoftwareSerial et d'un multiplexeur (cf ici)

En espérant t'avoir (un peu) aidé.

personne30003

+0 -0

Cette réponse a aidé l'auteur du sujet

Bonjour, désolé pour la réponse tardive.

Je pense que si tu veux connaitre la bibliothèque, regarde (et teste ! ) les exemples si ce n'est pas déjà fait. Au pire, essaye de faire par tâtonnements, c'est encore ce qu'il y a de plus amusant ;-). Note : j'ai trouvé un lien sympa vers la doc ici.

Pour ton histoire d'axes, tu peux essayer ceci (bon, c'est pas forcément correct …):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
int x_voulu;
int x_initiale;
int difference_x = x_initiale - x_voulu;
if (difference_x <0){
for(int i = x_initiale; i>=x_voulu; i--){
stepper.move(i);
delay(delai); // remplaçer par le temps voulu.
} //fin pour
}//fin si
if(difference_x > 0){
for(int i = x_initial; i<= difference_x; i++){
stepper.move(i);
delay(delai);
}//fin pour
}// fin si
et même chose pour y.

Après, pour combiner tes trois programmes, tu peux aussi utiliser le protocole I2C car il n'est pas super compliqué à utiliser avec Arduino (librairie Wire incluse de base et vachement simple à utiliser). En espérant avoir aidé.

+0 -0
Auteur du sujet

Merci bien pour la réponse , oui j'ai pas eu le temps d'exploiter ta réponse. (Manque de temps, bientôt le passage devant le jury pour le projet… demain). Je te remercie énormément pour l'idée et pour ton aide !!! :) J'évoquerai ceci

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte