ENIB 2023 : Penchez-vous, et toussez : Différence entre versions
(→Liste des composants) |
(→Liste des composants) |
||
(3 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 l'angle exacte du plateau pour gagner. En effet en rajoutant | + | 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 | + | 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== | ==Liste des composants== | ||
Ligne 38 : | Ligne 38 : | ||
* bouteille | * 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: |
+ | <syntaxhighlight lang="Arduino" line> | ||
+ | #include<Wire.h> | ||
− | [[Catégorie: | + | 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
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 }