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

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Code)
(Catégories)
Ligne 41 : Ligne 41 :
 
Nous avons aussi fait la liaison rotule avec l'imprimante 3D
 
Nous avons aussi fait la liaison rotule avec l'imprimante 3D
  
==Catégories==
+
Code:
  
[[Catégorie:Enib2023]]
+
#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);
 +
 
 +
 
 +
 
 +
  
 +
 
 +
  }
 +
}

Version du 19 janvier 2023 à 16:17

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>

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);


  

 }

}