béquille vélo [Projet Bac] programme avec arduino

Portrait de Béééékie Tsi

Bonjour,

Voilà, j'appartiens à un ancien groupe de 3 personnes dans un projet pour le bac en terminal science de l'ingénieur. Nous sommes plus que 2 et bien évidement celui qui est partie faisait la partie électronique que nous maîtrisons beaucoup moins. Je viens donc vous demander de l'aide si possible pour comprendre ce qu'il nous à laissé et pourquoi pas l'améliorer et en rajouter. Notre projet et de faire une béquille ce dépliant automatiquement juste avant la chute de l'enfant sur son vélo. Ce sera grâce à un angle limite que nous avons déduit, environ 60° par rapport au sol, que notre système "saura" quand déployer la béquille. On a donc pensé à placer un capteur d'angle sur l'arrière du vélo et un capteur de présence en haut de la selle pour que la béquille ne se déploie pas n'importe quand. Notre problème survient à la création d'un programme arduino contrôlant les données des deux capteurs simultanément, notre collègue avait commencé un code pour le capteur d'angle ( envoyé avec le message) que nous ne comprenons pas tout à fait et qui ne fonctionne pas.

Quelqu'un pourrait nous aider pour ce code là, nous accompagner pour faire l'autre programme et n'en faire plus qu'un?

Béquille des tsi

Portrait de Alex

Bonjour,

Il n'est pas possible de réaliser deux choses simultanément avec un microcontroleur car sa logique est séquentielle et non combinatoire comme un FPGA ou un ASIC.

Il est possible de donner l'illusion de faire deux choses simultanément mais cela reste une illusion.

On peut jouer avec des interruptions pour encore une fois bidouiller l'illusion mais en théorie ça n'est pas possible.

J'espère t'avoir éclairci sur la question.

Portrait de Cédric29

Bsoir

Je ne comprend pas ta réponse alex.
En quoi est il impossible de gerer une bequille en fonction de l'état des 2 capteurs?

Pour bééékie... pose des serial.print pour voir la valeur de z

Portrait de Alex

Tu as raison j'ai lu de travers, et je me suis arrêté au mot "simultaner".

En fait dans son cas c'est tout à fait possible effectivement, mais ce que je dis reste correct quand même, il n'est pas possible de gérer les deux capteurs vraiment de manière simultané. On les gère l'un après l'autre mais de façon très rapide.

Dans tous les cas je bricolerai quelque chose avec une interruption.

Portrait de Béééékie Tsi

bonjour ou bonsoir,

merci pour vos réponses !

par contre je ne comprends pas pourquoi et comment poser des serial.print hcfroid ?

cdt

Portrait de domidom

Dans ton programme, les serial.print affichent sur le moniteur série les valeurs de X,Y,Z. Suivant l'angle (ici 60°), une led s'allume pendant trois secondes.

Portrait de Béééékie Tsi

il y a déjà un serial.print pour z pourtant ? 

je souhaite commencer par un programme plus simple pour m'habituer, je reviendrais sur celui ci ultérieurement si vous le voulez bien. mais voila ma led ne s'allume pas ! pourquoi dont ?

merci pour votre patiente

le 2nd programme :

#include <SharpIR.h>

#define ir A0
#define model 20150

SharpIR SharpIR(ir, model);
int led = 2;                      // Led sur la broche 2

void setup()
{                
pinMode(led,OUTPUT);             // led en Sortie
Serial.begin(9600);
}
 
void loop()                        // Boucle
{
   delay(2000);   

  int dis=SharpIR.distance();  // this returns the distance to the object you're measuring

  Serial.print("Mean distance: ");  // returns it to the serial monitor
  Serial.println(dis);
  
  

      if(dis<82)           // Début de condition, si valbouton est au niveau haut, la led s'allume
{
         digitalWrite(led, HIGH);  // mettre led au niveau haut (LED allumée)
       
}

  digitalWrite(led,LOW);            // Sinon, la led reste éteinte

}

Portrait de mrstein

Hey,

Parce qu'il n'y a pas de else, donc la led s'allume et s'éteint dans l'instruction suivante ;)

#include <SharpIR.h>

#define ir A0
#define model 20150

SharpIR SharpIR(ir, model);
int led = 2;                      // Led sur la broche 2

void setup()
{                
pinMode(led,OUTPUT);             // led en Sortie
Serial.begin(9600);
}
 
void loop()                        // Boucle
{
   delay(2000);   

  int dis=SharpIR.distance();  // this returns the distance to the object you're measuring

  Serial.print("Mean distance: ");  // returns it to the serial monitor
  Serial.println(dis);
  
  

      if(dis<82)           // Début de condition, si valbouton est au niveau haut, la led s'allume
{
         digitalWrite(led, HIGH);  // mettre led au niveau haut (LED allumée)
       
}

 else  digitalWrite(led,LOW);            // Sinon, la led reste éteinte

}

Au passage, ton premier code devrait ressembler à ça (j'ai pas regardé plus en détail ton objectif mais avec les commentaires ça devrait aller ;) )  : 

if (z > 0) { // Z positif et non nul
  if (z > 60) { // z superieur a 60
    digitalWrite (led2, HIGH);
    delay (3000);
    digitalWrite (led2, LOW);
  }

  else { // si z positif mais inferieur ou egal a 60
    digitalWrite (led1, HIGH);
    delay (3000);
    digitalWrite (led1, LOW);
  }
}

else { // si z pas superieur a zero
  digitalWrite (led3, HIGH);
  delay (3000);
  digitalWrite (led3, LOW);
}

Portrait de Béééékie Tsi

Merci beaucoup pour votre réponse mrstein !!

Je n'ai pas encore eu l'occasion de les essayer mais déjà merci, je vous tiens au courant,

cdt

Portrait de Béééékie Tsi

Je n'es toujours pas pu essayer les programmes à mon grand regret mon professeur n'a plus d'ancienne carte arduino et pour les nouvelles il faut un driver que les ordinateurs du lycée n'ont pas et mon professeur ne peut pas le mettre... mais je dois avancer dans mon projet, si je met mes deux programmes l'un en dessous de l'autre pour en faire qu'un cela ne fonctionnera pas je me trompe ?

cdt

Portrait de Cédric29

Arf si les mamouths de l'education national sont contre toi...

Et pendant ce temps la en chine...:)

Portrait de Béééékie Tsi

ah ah merci hcfroid !

Oubliez mon dernier message sur les programmes l'un en dessous de l'autre ce n'est pas du tout clair ...