Electrofoot : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Assemblage)
Ligne 233 : Ligne 233 :
 
On fixe l'arduino sur la goulotte. La photo résistance est placé dans un petit trou, ce qui permettra de détecter les moments ou la luminosité variera.  
 
On fixe l'arduino sur la goulotte. La photo résistance est placé dans un petit trou, ce qui permettra de détecter les moments ou la luminosité variera.  
 
[[Fichier:manouchage.JPG|400px]]
 
[[Fichier:manouchage.JPG|400px]]
[[Fichier:assemblage1.JPG|400px]]
 
 
[[Fichier:assemblage2.JPG|400px]]
 
[[Fichier:assemblage2.JPG|400px]]
  

Version du 22 janvier 2018 à 15:18

Hackathonpeda2017.jpeg
Logo enib.jpg


L'idée

Nous souhaitons réaliser un babyfoot avec assistance électronique appelé "Electrofoot" afin de moderniser la pratique du babyfoot. Il s'agit de créer un compteur de buts à base d'afficheur digital et de led.


Cadre Pédagogique

Babyfoot lumineux.jpg

Public

Notre projet est fait pour toute personne fan de petits ballons ronds.

Notions abordées

  • bases de la programmation
  • maîtrise de l'arduino
  • bricolage
  • base de la conception de projet

Objectifs Pédagogiques

  • éduquer aux notions ci-dessus
  • se poser des questions
  • travailler en équipe
  • respecter une deadline

Réalisation Technique

Nous allons réaliser un "éléctrofoot" dont le but est de compter les buts lors d'un match de babyfoot. Nous voulions utiliser un capteur piézoélectrique qui détecte les chocs, mais l'expert en babyfoot nous a fait remarqué que souvent lors d'un match de babyfoot, il peut y avoir multiples coups ou chocs. On a donc opter pour une photo résistance ce qui permet d'avoir un système complétement isolé, l'environnement extérieure ne va pas influer sur la photo résistance comme elle est placé dans la goulotte et seulement éclairé par la led.

Solutions Techniques

  • Variables
  • boucles
  • incrémentation
  • circuits électroniques de base (résistances, photo-résistance, leds)
  • écrans LCDs.

Materiels

  • Arduino
  • LEDs
  • affichage digital
  • résistances
  • photorésistances

Conception

On a d'abord réfléchi sur papier.

Plan.jpg

Notre idée était de placer une photo résistance éclairé par une led dans un petit trou de la goulotte. La balle qui passe dans la goulotte cache un court instant la led. Le programme arduino va détecter ce moment. A cet instant, le compteur s'incrémente et ajoute un but. Ce but est retranscrit directement sur l'afficheur 7 segments.

Goulotte

Nous avons décider de réaliser la structure en carton. Cette structure a pour but de réceptionner la balle de babyfoot. Le haut de la goulotte est large et renforcé afin de rester en place lors du lancer de balle. L'entonnoir permet de ralentir la balle.

Goulotte1.JPG Goulotte2.JPG

Plusieurs techniques ont été utilisé, le découpage de carton, collage, pliage.

Goulotte3.JPG

Goulotte4.JPG

La balle rentre dans la goulotte et glisse dans le tube triangulaire en carton. Elle vient se loger dans un goblet en plastique. On peut ainsi la récupérer facilement.

Terrain

Le terrain est aussi en carton poli et plastifié , plus solide cette fois ci ce qui permet d'avoir une surface plate et qui se déforme peu. Ainsi nous pouvons effectuer un lancer, la balle roule jusqu'au but.

Le terrain est finalement en deux parties. On assemble le but et le terrain.

Terrain1.JPG Terrain2.JPG

Le terrain ressemble de plus en plus à un vrai terrain, on lui a rajouté des pieds, çà permet aussi de régler parfaitement la goulotte pour que la balle ne se coince jamais.

Terrain3.JPG

Le terrain a été solidifié grâce à du bois.

Terrain4.JPG

Arduino

Le code arduino ci-dessous

// BABY FOOT COUNTER
// v0.01

int lightSensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int lightSensorValue = 0; // variable to store the value coming from the sensor
int Ngoal = 0; // Nombre de but
int addGoalPin = 12 ;
int addGoal = 0;
int oldAddGoalState = 0;
int subGoalPin = 11;
int subGoal = 0;
int oldSubGoalState = 0;
int a=0; //Compteur pour fonction win

// Sert à piloter l'afficheur led en fonction du nombre à afficher.
byte empty[8]={0,0,0,0,0,0,0,0};
byte zero[8]= {1,1,1,1,0,1,1,0};
byte one[8]=  {0,1,1,0,0,0,0,0};
byte two[8]=  {1,1,0,0,1,1,1,0};
byte three[8]={1,1,1,0,1,0,1,0};
byte four[8]= {0,1,1,1,1,0,0,0};
byte five[8]= {1,0,1,1,1,0,1,0};
byte six[8]=  {1,0,1,1,1,1,1,0};
byte seven[8]={1,1,1,0,0,0,0,0};
byte eight[8]={1,1,1,1,1,1,1,0};
byte nine[8]= {1,1,1,1,1,0,1,0};
byte* numberTab[10]={zero,one,two,three,four,five,six,seven,eight,nine};

// sert à éxécuter les fontions à intervalle régulier
double oldtime = 0;
double time = 0;
double oldtime2 = 0;
double time2 = 0;

// Initialisation
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(addGoalPin, INPUT);
  pinMode(subGoalPin, INPUT);
  digitalWrite(ledPin, HIGH);
  pinMode(10,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  Serial.begin(9600);
}

// Boucle d'éxécution
void loop() {
  time=millis()-oldtime;
  if (time>100) {
    oldtime=millis();
    lightSensorControl();
    manageGoalCounter();
    getButtonState();
    if (Ngoal<10) {
      displayManager(numberTab[Ngoal]);
    }
    if (Ngoal==10) {
      win();
    }
  }
}

void getButtonState() {
  addGoal = digitalRead(addGoalPin);
  subGoal = digitalRead(subGoalPin);
  Serial.println(addGoal);
  // avoid annoying add and delete
  if (addGoal==0) {oldAddGoalState=0;}
  if (subGoal==0) {oldSubGoalState=0;}
}

// Manage control of Ngoal
void manageGoalCounter() {
  if (addGoal==1 && oldAddGoalState==0 && Ngoal<10) {
    Ngoal=Ngoal+1;
    oldAddGoalState=1;
  }
  else if(subGoal==1 && oldSubGoalState==0 && Ngoal>0) {
    Ngoal=Ngoal-1;
    oldSubGoalState=1;
  }
  else {
  }
}

// Display the counterGoal value
void displayManager(byte* number) {
  digitalWrite(10, number[0]);
  digitalWrite(2, number[1]);
  digitalWrite(3, number[2]);
  digitalWrite(4, number[3]);
  digitalWrite(5, number[4]);
  digitalWrite(6, number[5]);
  digitalWrite(7, number[6]);
  digitalWrite(8, number[7]);
  digitalWrite(9, number[8]);
}

// Manage lightsensor, if ball fonction add one goal
void lightSensorControl() {
    lightSensorValue = analogRead(lightSensorPin);
    if (lightSensorValue<600) {
      // addGoal = 1;
    }
}

// Pilote l'afficheur en cas de gagne
void win() {
  time2=millis()-oldtime2;
  if (time2>150 && a<10) {
      displayManager(numberTab[a]);
      oldtime2=millis();
      a=a+1;
    }
  else if (time2<250 && a>=10 && a<=20) {
      displayManager(zero);
  }
  else if (500>time2 && time2>=250) {
      displayManager(empty);
  }
  else if (time2>=500) {
    oldtime2=millis();
    a=a+1;
  }
  else if (a>15) {
    a=0;
    Ngoal=0;
  }
  Serial.println(a);
  Serial.println(time2);
}

Assemblage

On fixe l'arduino sur la goulotte. La photo résistance est placé dans un petit trou, ce qui permettra de détecter les moments ou la luminosité variera. Manouchage.JPG Assemblage2.JPG

Problèmes rencontrés

Nous avons eu des problèmes pour l'afficheur 7 segments qui permet d'afficher le score.

Afficheur.JPG

Nous souhaitions utiliser un grand afficheur qui avait 13 broches. Le problème c'est que la datasheet était relativement mal renseigné. On avait du mal a savoir à quelle broches correspondait les numéros. On a donc décider de les tester une par une. On s'est rendu compte assez tardivement que les résistances que nous mettions étaient beaucoup trop grandes. On pensait qu'il s'agissait de résistances de 130 ohm mais finalement les résistances était de plusieurs milliers d'ohm. L'afficheur à 13 broches ne fonctionnait pas très bien certaines led étaient grillées. On s'est rabattu sur l'afficheur plus petit de 10 broches, qui, au vu du temps qu'il nous restait, est plus simple à commander. Le principe reste le même qu'avec le grand afficheur.

Lors de la coordination entre le comptage et l'affichage des buts, il fallut retravailler quelque passage du code afin d'avoir une parfaite communication.

Diaporama

Fichier:Diapo electrofoot.odp

L'équipe

  • Crenn Samuel
  • Rachidi Sofiane
  • Limousin Émilien
  • Favé Thomas
  • Fechet Pierre-Antoine
  • Didier Hugo
  • Marchadour Erwan
  • Le Pevedic Alex