ENIB 2023 : Penchez-vous, et toussez : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Liste des composants)
(Liste des composants)
 
(5 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 5 : Ligne 5 :
 
==Que fait ce projet ? ==
 
==Que fait ce projet ? ==
  
Le projet consiste a trouver orientation exacte du plateau pour gagner. En effet en rajoutant les balles le plateau va plus ou moins se pencher.
+
Le projet consiste a trouver l'angle exacte du plateau pour gagner. En effet en rajoutant du poids le plateau va plus ou moins se pencher.
  
 
Le projet est poser sur une plaque de bois de 30*30cm.
 
Le projet est poser sur une plaque de bois de 30*30cm.
  
Il contient une réserve à balles de ping pong.
+
Il contient une boite agissant comme un tableau de bord.
  
un cylindre avec une liaison rotule (imprimée en 3d).
+
Un cylindre avec une liaison rotule (imprimée en 3d) .
  
un plateau positionner sur la liaison rotule (qui est incliné en fonction de la répartition des balles).
+
Un plateau positionner sur la liaison rotule (qui est incliné en fonction de la répartition du poids).
  
 
==Liste des composants==
 
==Liste des composants==
 
*    Accéléromètre
 
*    Accéléromètre
  
*    Balles de ping-pong 
+
*    Du poids
  
 
*    Arduino micro-pro
 
*    Arduino micro-pro
Ligne 36 : Ligne 36 :
 
*    led verte
 
*    led verte
  
==Code==
+
*    bouteille
<pre>
 
ici je pose mon code documenté !
 
</pre>
 
  
==Catégories==
+
En plus du code arduino nous avons fait deux fichier inkskape pour faire le tableau de bord et graver.
 +
Nous avons aussi fait la liaison rotule avec l'imprimante 3D
  
[[Catégorie:Enib2023]]
+
Code:
 +
<syntaxhighlight lang="Arduino" line>
 +
#include<Wire.h>
 +
 
 +
const int MPU6050_addr=0x68;
 +
int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
 +
float angle,angle_solution,solution_up,solution_down,difficulty;
 +
unsigned long startTime = 0;
 +
 
 +
 
 +
int pin_led_vert=6;
 +
int pin_led_rouge=5;
 +
int pin_boutton_facile=7;
 +
int pin_boutton_moyen=8;
 +
int pin_boutton_difficile=9;
 +
int pin_bp=10;
 +
int lancement_jeu=0;
 +
 
 +
bool button_facile,button_moyen,button_difficile,BP;
 +
 
 +
 
 +
 
 +
void setup(){
 +
  
 +
  Wire.begin();
 +
  Wire.beginTransmission(MPU6050_addr);
 +
  Wire.write(0x6B);
 +
  Wire.write(0);
 +
  Wire.endTransmission(true);
 +
  Serial.begin(9600);
 +
 
 +
  angle_solution=60;
 +
 
 +
  pinMode(pin_led_vert,OUTPUT);
 +
  pinMode(pin_led_rouge,OUTPUT);
 +
  pinMode(pin_boutton_facile, INPUT);
 +
  pinMode(pin_boutton_moyen, INPUT);
 +
  pinMode(pin_boutton_difficile, INPUT);
 +
  pinMode(pin_boutton_facile, INPUT);
 +
  pinMode(pin_bp, INPUT);
 +
  
 +
  
 +
}
 +
 
 +
void loop(){
 +
  
 +
  Wire.beginTransmission(MPU6050_addr);
 +
  Wire.write(0x3B);
 +
  Wire.endTransmission(false);
 +
  Wire.requestFrom(MPU6050_addr,14,true);
 +
  AccX=Wire.read()<<8|Wire.read();
 +
  AccY=Wire.read()<<8|Wire.read();
 +
  AccZ=Wire.read()<<8|Wire.read();
 +
  Temp=Wire.read()<<8|Wire.read();
 +
  GyroX=Wire.read()<<8|Wire.read();
 +
  GyroY=Wire.read()<<8|Wire.read();
 +
  GyroZ=Wire.read()<<8|Wire.read();
 +
  
 +
  angle = atan2(AccY, AccX);
 +
  angle = angle * 180 / 3.14159;
 +
  angle=abs(angle);
 +
  Serial.print(angle); Serial.print('\n');
 +
 
 +
  //Etats des boutons
 +
  button_facile = digitalRead(pin_boutton_facile);
 +
  button_moyen = digitalRead(pin_boutton_moyen);
 +
  button_difficile = digitalRead(pin_boutton_difficile);
 +
  BP = digitalRead(pin_bp);
 +
 
 +
  
 +
 
 +
  //Appuie sur bouton poussoir de lancement
 +
  if(BP==LOW)
 +
  {
 +
    lancement_jeu=1;
 +
  }
 +
  
 +
  if(lancement_jeu)
 +
  {
 +
    digitalWrite(pin_led_rouge,HIGH);
 +
 
 +
 
 +
 //Selection du niveau de difficulté
 +
  if(button_facile==HIGH)
 +
  {
 +
    difficulty=20;
 +
  }
 +
  if(button_moyen==HIGH)
 +
  {
 +
    difficulty=15;
 +
  }
 +
  if(button_difficile==HIGH)
 +
  {
 +
    difficulty=10;
 +
  }
 +
  solution_up=angle_solution+difficulty;
 +
  solution_down=angle_solution-difficulty;
 +
 
 +
 
 +
 
 +
 
 +
 
 +
  //Vérification de l'angle
 +
  if (angle >= solution_down && angle <= solution_up) {
 +
   
 +
    /*
 +
    {
 +
    if (startTime == 0) 
 +
    {
 +
      startTime = millis();
 +
    }
 +
    if (millis() - startTime > 1000) 
 +
    {
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      Serial.print("Vous avez gagné");
 +
      startTime = 0;
 +
    }
 +
    else 
 +
    {
 +
      startTime = 0;
 +
    }
 +
  }
 +
  */
 +
  Serial.print("Vous avez gagné");
 +
  digitalWrite(pin_led_vert,HIGH);
 +
  digitalWrite(pin_led_rouge,LOW);
 +
  lancement_jeu=0;
 +
  
 +
  }
 +
  
 +
 
 +
 
 +
  delay(100);
 +
 
 +
 
 +
 
 +
  
 +
 
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 
 +
[[Catégorie:Arduino]]

Version actuelle datée du 15 janvier 2024 à 16:02

photo de l'équipe

Photo enib(1).jpg

Que fait ce projet ?

Le projet consiste a trouver l'angle exacte du plateau pour gagner. En effet en rajoutant du poids le plateau va plus ou moins se pencher.

Le projet est poser sur une plaque de bois de 30*30cm.

Il contient une boite agissant comme un tableau de bord.

Un cylindre avec une liaison rotule (imprimée en 3d) .

Un plateau positionner sur la liaison rotule (qui est incliné en fonction de la répartition du poids).

Liste des composants

  • Accéléromètre
  • Du poids
  • Arduino micro-pro
  • écran lcd
  • Câbles
  • carton 
  • Impression d’une liaison rotule en 3d
  • bouton poussoir
  • led rouge
  • led verte
  • bouteille

En plus du code arduino nous avons fait deux fichier inkskape pour faire le tableau de bord et graver. Nous avons aussi fait la liaison rotule avec l'imprimante 3D

Code:

  1 #include<Wire.h>
  2 
  3 const int MPU6050_addr=0x68;
  4 int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
  5 float angle,angle_solution,solution_up,solution_down,difficulty;
  6 unsigned long startTime = 0;
  7 
  8 
  9 int pin_led_vert=6;
 10 int pin_led_rouge=5;
 11 int pin_boutton_facile=7;
 12 int pin_boutton_moyen=8;
 13 int pin_boutton_difficile=9;
 14 int pin_bp=10;
 15 int lancement_jeu=0;
 16 
 17 bool button_facile,button_moyen,button_difficile,BP;
 18 
 19 
 20 
 21 void setup(){
 22   
 23   Wire.begin();
 24   Wire.beginTransmission(MPU6050_addr);
 25   Wire.write(0x6B);
 26   Wire.write(0);
 27   Wire.endTransmission(true);
 28   Serial.begin(9600);
 29 
 30   angle_solution=60;
 31 
 32   pinMode(pin_led_vert,OUTPUT);
 33   pinMode(pin_led_rouge,OUTPUT);
 34   pinMode(pin_boutton_facile, INPUT);
 35   pinMode(pin_boutton_moyen, INPUT);
 36   pinMode(pin_boutton_difficile, INPUT);
 37   pinMode(pin_boutton_facile, INPUT);
 38   pinMode(pin_bp, INPUT);
 39   
 40   
 41 }
 42 
 43 void loop(){
 44   
 45   Wire.beginTransmission(MPU6050_addr);
 46   Wire.write(0x3B);
 47   Wire.endTransmission(false);
 48   Wire.requestFrom(MPU6050_addr,14,true);
 49   AccX=Wire.read()<<8|Wire.read();
 50   AccY=Wire.read()<<8|Wire.read();
 51   AccZ=Wire.read()<<8|Wire.read();
 52   Temp=Wire.read()<<8|Wire.read();
 53   GyroX=Wire.read()<<8|Wire.read();
 54   GyroY=Wire.read()<<8|Wire.read();
 55   GyroZ=Wire.read()<<8|Wire.read();
 56   
 57   angle = atan2(AccY, AccX);
 58   angle = angle * 180 / 3.14159;
 59   angle=abs(angle);
 60   Serial.print(angle); Serial.print('\n');
 61 
 62   //Etats des boutons
 63   button_facile = digitalRead(pin_boutton_facile);
 64   button_moyen = digitalRead(pin_boutton_moyen);
 65   button_difficile = digitalRead(pin_boutton_difficile);
 66   BP = digitalRead(pin_bp);
 67 
 68   
 69 
 70   //Appuie sur bouton poussoir de lancement
 71   if(BP==LOW)
 72   {
 73     lancement_jeu=1;
 74   }
 75   
 76   if(lancement_jeu)
 77   {
 78     digitalWrite(pin_led_rouge,HIGH);
 79 
 80 
 81  //Selection du niveau de difficulté
 82    if(button_facile==HIGH)
 83    {
 84     difficulty=20;
 85    }
 86    if(button_moyen==HIGH)
 87    {
 88     difficulty=15;
 89    }
 90    if(button_difficile==HIGH)
 91    {
 92     difficulty=10;
 93    }
 94    solution_up=angle_solution+difficulty;
 95    solution_down=angle_solution-difficulty;
 96 
 97 
 98 
 99 
100 
101   //Vérification de l'angle
102   if (angle >= solution_down && angle <= solution_up) {
103     
104     /*
105     {
106     if (startTime == 0) 
107     {
108       startTime = millis();
109     }
110     if (millis() - startTime > 1000) 
111     {
112       Serial.print("Vous avez gagné");
113       Serial.print("Vous avez gagné");
114       Serial.print("Vous avez gagné");
115       Serial.print("Vous avez gagné");
116       Serial.print("Vous avez gagné");
117       Serial.print("Vous avez gagné");
118       Serial.print("Vous avez gagné");
119       Serial.print("Vous avez gagné");
120       startTime = 0;
121     }
122     else 
123     {
124       startTime = 0;
125     }
126   }
127   */
128   Serial.print("Vous avez gagné");
129   digitalWrite(pin_led_vert,HIGH);
130   digitalWrite(pin_led_rouge,LOW);
131   lancement_jeu=0;
132   
133   }
134   
135 
136    
137   delay(100);
138 
139 
140 
141   
142 
143   }
144 }