ENIB 2022 : Patate de forain
Sommaire
photo de l'équipe
Noé Paillet, Baptiste Rault, Tanguy Orhon, Alexis Jan, Romain Jaffré
Description du projet
Le projet patate de forain consiste en un "punchingball" à frapper le plus fort possible pour obtenir un score.
4 petits capteurs piézoélectriques sont coincés entre deux planches de bois. Un paquet de cotons plié en deux et schotché afin de le maintenir sous forme de petit coussin sert de punchingball collé à la planche. Il suffit donc de mettre un coup dans le coussin et cela écrase les capteurs entre les planches. Le résultat de chaque capteur est ensuite récupéré par la carte arduino qui en calcule la moyenne et renvoie le score sur l'écran LCD. Un bouton poussoir sert de reset pour le score actuel afin de pouvoir mettre un nouveau coup.
Les capteurs sont fixés à la planche du dessous à la colle. Le coussin est lui aussi collé mais à la planche du haut. Pour fixer les deux planches entre elles sans que ce soit fixe (pour que les capteurs fonctionnent bien), nous avons perforé 4 trous dans les coins de chaque planche et passé de grosses vis dans ces trous.
Liste des composants
- paquet de cotons
- deux petites planches de bois
- Carte Arduino nano
- Ecran Grove-LCD RGB Backlight
- 4 Capteurs piezo électrique
- 1 bouton poussoir
- plaque labdec
- fils électriques
- pistolet à colle
- Mon gros coup de poing
sources
Code
int maxi = 0; // variable du high score int prev = 0; // variable du score actuel bool acq = true; bool dcyState = false; #include <Wire.h> #include "rgb_lcd.h" rgb_lcd lcd; const int colorR = 50; //definition de la couleur de fond de l'écran lcd (ici du gris) const int colorG = 50; const int colorB = 50; void setup() { pinMode(A0, INPUT); //piezo 1 pinMode(A1, INPUT); //piezo 2 pinMode(A2, INPUT); //piezo 3 pinMode(A3, INPUT); //piezo 4 pinMode(2, INPUT); //bouton poussoir Serial.begin(9600); lcd.begin(16, 2); lcd.setRGB(colorR, colorG, colorB); } void loop() { dcyState = digitalRead(2); // état du bouton poussoir (1 si appuyé, 0 si non appuyé) //Serial.println(dcyState); if (dcyState == 0) // si le bouton n'est pas en cours d'appuie { int in0 = analogRead(A0); int in1 = analogRead(A1); int in2 = analogRead(A2); int in3 = analogRead(A3); int in=(in0+in1+in2+in3)/4; // on calcule le score moyen obtenu par les 4 capteurs in = map(in,0,1023,0,999); // on convertit un score allant de 0 à 1023 en un code allant de 0 à 999. if (in > prev) { if (in > maxi) { maxi = in; // Si le meilleur score est battu, on le remplace par le score actuel } prev = in; if (prev<=333) { lcd.setRGB(0, 255, 0); // fond de l'écran lcd vert si le score est dans le premier tier } else if (prev<=666) { lcd.setRGB(0, 0, 255); // fond de l'écran lcd bleu si le score est dans le deuxième tier } else { lcd.setRGB(255, 0, 0); // fond de l'écran lcd rouge si le score est dans le troisième tier } Serial.println(prev); } } else { prev=0; // si le bouton est appuyé, le précedent score est remis à 0 lcd.setRGB(colorR, colorG, colorB); Serial.println(prev); } if (prev<10) // condition pour éviter d'avoir du bruit dans le résultat. Si il est inférieur à 10, l'écran affiche 0 { lcd.setCursor(0,0); lcd.print("your score:"); lcd.setCursor(11,0); // placement à la douzième colomne de la preière ligne (après your score) lcd.print("0 "); } else // affichage à l'écran des scores { lcd.setCursor(0,0); // placement à la première colomne de la preière ligne lcd.print("your score:"); lcd.print(prev); lcd.setCursor(0,1); // placement à la première colomne de la deuxième ligne lcd.print("high score:"); lcd.print(maxi); } }