mardi 21 février 2017

Finale régionale IDF des Trophées de robotique

Samedi 18 février, finale régionale des Trophées. Notre équipe historique, les Têtes Briquées est scindée en deux : le noyau restant forme les têtes Briquées, toujours avec des robots en Lego, et les autres (et des nouveaux) ont fondé l'équipe des Têtes Fabriquées à base de tout sauf Lego (enfin... presque).

Côté Têtes Briquées, on a gardé l'expérience de la mécanique Lego, mais tout a été refait de zéro. Pour augmenter le challenge, la télécommande a été refaite, cette fois à base d'Arduino, et plus de brique EV3.

Autant dire qu'avec une date de rencontre si tôt dans l'année, des effectifs réduits, la découverte de l'Arduino, c'était loin d'être gagné pour conserver le titre acquis l'an dernier.

La veille de la rencontre, les deux robots sont fonctionnels, la télécommande aussi, mais il n'ont pas réussi à trouver du temps pour s'entraîner.



Petit robot, statique, pour la funny action

Télécommande à base de 2 Arduino UNO

Robot principal, qui gère les modules et les balles


L'homologation est passée rapidement, mais on voit que la maîtrise du robot n'est pas encore là.



Le premier match contre E.T. se déroule dans les mêmes conditions, avec Lucas aux commandes. Victoire avec une score moyen de 49 points qui nous place malgré tout en 5ème position.


On se rend compte alors :
- Que le robot n'est pas si simple à piloter, et qu'il faut mieux gérer les différents actionneurs
- Les minerais sont très mobiles et qu'il est illusoire de vouloir les pousser simplement dans la zone de départ
- Qu'il y a un énorme écart entre les grosses équipes (Destroyer, etc..) et la grande partie des équipes qui placent un module à tout casser
- Qu'il va falloir s'entraîner pour espérer faire un bon résultat.

Second match contre Ice Robot, Antoine pilote, et résultat similaire. Viser la base centrale n'est pas aisé, les modules sont difficiles à extraire des fusées. Encore une victoire avec un score de


Troisième match contre GOMM avec Lucie aux commandes. Un score de 47 points nous assure une place en 1/4 de finale


La qualification en finale nationale étant acquise, les jeunes se rendent compte qu'il va falloir faire mieux en 1/4 de finale. Lucas prend les choses en main, se souvient de ses nombreuses parties de jeu sur console, s'approprie mieux la télécommande et se lance dans un entraînement  digne d'un sportif de haut niveau (toutes proportions gardées)

Et le travail paye. Il maîtrise mieux le robot, que ce soit la prise de modules, le retournement, et le largage dans les bases.  Le 1/4 de finale est remporté face aux Rob Hot Cugnot :



La 1/2 finale va être un peu plus difficile face à l'équipe qui domine largement la journée, les Destroyor.

Ils remporte facilement le match et nous accédons à la petite finale contre les Génies de Gif


Victoire dans cette petite finale qui nous permet de monter sur le podium.

Les Têtes Briquées repartent de là avec une petite coupe de bronze, un certificat de 3ème place, plein de souvenirs, d'enseignement, et une envie de tout déchirer à St Quentin les 1er et 2 avril prochain







Quelques petits retour positifs sur la journée :

  • Superbe organisation de la part de Planète Sciences, 
  • Le lieu de la ferme du Manet est toujours aussi grandiose
  • Les matches se déroulent très bien, avec des équipes très sympa, des encadrants géniaux et du Fair Play partout
  • Le règlement permet rapidement de savoir qui gagne un match, c'est plutôt cool
  • L'animation toujours au top 
  • Anges gardien, arbitres et autres bénévoles aussi.
Quelques légers bémols :
  • Manque de communication sur les classements à la fin de chaque série. Il faut être dans la salle au bon moment, et ça pas toujours simple avec une petite équipe
  • Les minerais ne sont pas stables du tout. C'est lié au règlement, mais du coup peu d'équipes ont cherché à les récolter
  • c'est un peu tôt dans l'année, et pendant les vacances. Pas la faute de Planète Sciences, mais c'est juste dommage.

vendredi 6 janvier 2017

Un minuteur à base LED multicolores

Nouveau projet annexe, réaliser un minuteur, ou un décompte assez gros pour être visible depuis les gradins lors des compétitions de robotique.

Bien sûr, il ne faut pas que ça coute trop cher, que ce soit ludique et pédagogique, donc DIY à fond.

J'ai commandé :
- un bandeau de LED WS2812 (sur AliExpress) en non-étanche (normalement c'est fini les bêtises avec les poissons à pêcher) avec une densité de 30 LED/m sur fond noir
- Un Arduino Uno (enfin l'équivalent  sinisé)
- une planche de bois format A3 (environ)
- une capa 100 uF- une alimentation stable 5V 4A

Et mes outils préférés :
- un fer à souder + étain
- crayon gomme équerre
- fil monobrin

Je suis parti d'un tuto en ligne assez bien fait, même s'il est dans la langue de Goethe : https://www.youtube.com/watch?v=UVISnxXh_VY

Et d'un autre qui m'a donné l'idée des gros chiffres : https://www.youtube.com/watch?v=LojGHyBFE8Q
 
Ouverture du colis

Premier test rapide du bandeau de LED, sans utiliser la protection de la capa. J'ai pour ça découpé mon bandeau pour ne garder que 4 LED.

Sur l'IDE Arduino, il suffit de télécharger la librairie NeoPixel d'Adafruit et de tester le programme de base "sample". Le bandeau de LED sera branché comme suit :
- le fil rouge sur le bouton rouge... euh.. sur le 5V
- le fil blanc sur la masse
- le fil vert sur D6


La prise en main est super rapide, il y a deux paramètres à régler dans le programme, la pin utilisée (j'ai gardé la D6) et le nombre de LED, que j'ai changé pour mettre 4


// Which pin on the Arduino is connected to the NeoPixels?
#define PIN            6
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      4

Ensuite, l'allumage d'une LED se fait en utilisant la méthode setPixelColor(numéro de LED, couleur), puis la méthode show() de la classe AdaFruit_NeoPixel

pixels.setPixelColor(num, pixels.Color(0,150,0));
pixels.show();

La méthode Color() prend 3 paramètres, la valeur de rouge (0->255), de vert (0->255) et de bleu (0->255). Pour éteindre la LED, il faudra donc lui imposer Color(0,0,0) et faire un show()

Je me suis même amusé à faire un programme de couleur aléatoire sur les 4 LED avec un délai de 200ms entre chaque... Un peu psychédélique, mais ça le fait :-)



Revenons donc au minuteur.

Le principe électronique sera le suivant (excusez l'utilisation de powerpoint comme logiciel de conception électronique, mais chez nous on fait plutôt du Lego)
On part sur deux chiffres car le décompte sera de 90s.

Chaque chiffre en vert correspond à un digit (une bande de 4 LED) dans l'ordre vu par l'arduino, chaque chiffre en noir correspond au numéro de la LED à allumer.
Le GO sera le lanceur du minuteur, donc un simple bouton poussoir

On voit qu'on a 56 LED qui consomme chacune jusqu'à 60mA (allumage à fond), donc il faut une alimentation pouvant générer 56x60 = 3360 mA + conso de l'Arduino, donc 4A pour être large.

Ceci étant défini, il faut tracer le schéma sur la planche en bois. Chaque chiffre fera environ 15x30cm, ce qui devrait être suffisant pour être vu d'assez loin

Dessin sur la planche
 Ne regardez pas les traces de gras sur la planche, je devais revenir du Mc Do :-). De toute façon, la planche sera recouverte de noir pour mieux faire ressortir les couleurs des LED
 




Le même avec l'échelle des distances


Ensuite, il y a une opération de collage des bandeaux de 4 LED. Il faut juste être vigilent de bien respecter le sens les flèches sur les  LED. En effet, le protocole unifilaire est le suivant :

  • Une trame contenant toutes les infos est envoyée par l'Arduino sur le fil.
  • Chaque LED (enfin c'est pas la LED mais la pupuce WS2812) contient une entrée pour recevoir les data (DIN) et une sortie pour les envoyer (DOUT)
  • La première LED reçoit la trame, prend le premier bloc de couleur et renvoie le reste de la trame à la LED suivante.
  • On continue jusqu'au bout de la trame.

Chaque bandeau de 4 LED doit ensuite lié au suivant :
La masse sur la masse
Le +5V sur le +5V
Le DOUT de la dernière LED sur le DIN de la sauivante

Pour relier, j'ai opté pour du câble monobrin, ce qui permet d'éviter les petits brins qui causeraient avec le point de soudure à côté... et qui mettrait le brun. En plus c'est bien plus simple à dénuder et   découper

Voilà le résultat en vidéo du montage :


Ensuite le programme Arduino

J'ai défini 3 couleurs.
coul_on : du blanc pas trop puissant pour pouvoir garder juste l'Arduino pour alim
coul_red : un rouge pour la fin du compteur
coul_off : pour éteindre les LED

La pin 7 permet de lancer le compteur lorsqu'il est mis à la masse (le bouton du chrono quoi!)

Les chiffres sont allumés en blanc, le 0 en rouge pendant 5 secondes, puis tout est éteint.

La fonction Affiche(num, coul) porte bien son nom... elle allume les LED avec la couleur souhaitée pour former le nombre souhaité.

Chaque chiffre est décrit par sa correspondance binaire (dans l'ordre des digits) dans le tableau chiffres[], cela permet d'optimiser un peu le code. Les bits 1 sont allumés à la couleur voulue et les autres à coul_off (donc éteints)

#include <Adafruit_NeoPixel.h>

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN_PIXELS            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      56
// how many pixels per branch of the digits
#define NUM_PIX_PER_BRANCH  4

// the pin for launching counter
#define PIN_LAUNCH        7
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_PIXELS, NEO_GRB + NEO_KHZ800);
// colors defined for lignhtened (or not) pixels

uint32_t coul_on = pixels.Color(30,30,30);
uint32_t coul_red = pixels.Color(30,0,0);
uint32_t coul_off = pixels.Color(0,0,0);

int chiffres[10] = {0x77,0x44,0x3E,0x6E,0x4D,0x6B,0x7B,0x46,0x7F,0x6F};

int go_counter=0;
int val_counter = 90; // number of seconds
void setup() {
  // put your setup code here, to run once:
  pixels.begin(); // This initializes the NeoPixel library.
  pinMode(PIN_LAUNCH,INPUT_PULLUP); // input is set as pullup to avoid having three wires
  Affiche(0,coul_off); // turn off the leds
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(PIN_LAUNCH)== LOW) // button pressed
    go_counter = 1; // used as a RSFlipFlop
  if (go_counter)
  {
    if (val_counter > 0)
      Affiche(val_counter,coul_on); // showing the number
    else if (val_counter > -5)
      Affiche(0,coul_red); // during funny action
    else
      Affiche(0,coul_off); // after funny action, everything is off

    val_counter--; // minus 1s
    delay(1000);// if no RTC, the delay must be calibrated to keep real timing
  }
}

void Affiche(int number,uint32_t color )
{
  uint32_t col; //color, on or off
  if (number > 99)
    return; // no lighting over 99
  byte n_diz = number/10;
  byte n_uni = number % 10;
  for (int i=0;i<7;i++) // each digit
  {
    // first dozens
    if ((1<<i) & chiffres[n_diz])
      col = color;
    else
      col = coul_off;
    for (int j=0;j<NUM_PIX_PER_BRANCH;j++)
    {
      pixels.setPixelColor(i*NUM_PIX_PER_BRANCH+j,col);
    }
    // then units
    if ((1<<i) & chiffres[n_uni])
      col = color;
    else
      col = coul_off;
    for (int j=0;j<NUM_PIX_PER_BRANCH;j++)
    {
      pixels.setPixelColor(7*NUM_PIX_PER_BRANCH + i*NUM_PIX_PER_BRANCH+j,col);
    }
  }
  pixels.show();
  }

Le résultat en vidéo (j'ai débuté le compteur à 10s, ça suffit pour la démo)

 


C'est pris d'un peu près, donc le résultat n'est pas hyper génial sur la vidéo. En se mettant à plusieurs mètres, ça rend beaucoup mieux.

Les améliorations à apporter :
  • Rajouter le condo 100 uF pour pouvoir utiliser une alim externe et protéger les LED quand on allumera à fond
  • remplacer l'arduino Uno par un Arduino min pro, plus compact et largement suffisant.
  • Couvrir d'une plaque de plastique dépoli pour diffuser les lumières des LED
  • peindre le fond en noir pour mieux faire ressortir les lumières 
  • Calibrer la valeur du Delay pour avoir 90s exactement
  • Rajouter un câble long pour lancer le minuteur à distance (comme l'arbitre le fera).
N'hésitez pas à copier, modifier, améliorer...

mardi 20 décembre 2016

Un dimanche en groupe

Dimanche c'était réunion commune Têtes briquées et Têtes (fa)briquées. l'idée étant de travailler sur les sujets communs, comme les déguisements, mais surtout de renforcer l'esprit d'équipe et de cohésion.
On a eu aussi la primeur des modules peints au pistolet, un résultat incroyable par rapport à ce qu'on faisait historiquement avec des pinceaux en poils de mammouths (des restes d'une précédente année sans aucun doute :-) )
En tout cas merci Laurent pour ce beau boulot.

Les têtes (fa)briquées en pleine réflexion devant les modules peints

Objectif de la journée pour les Têtes Briquées : fabriquer la télécommande. Le principe retenu est le suivant :
- un Arduino Uno avec sa carte moteur pour deux moteurs et leurs commandes (joystick ou boutons)
- 2 moteurs de propulsion plus 4 actionneurs maximum (mystère), donc trois cartes Arduino au total
- Programmation textuelle sur l'IDE Arduino
- 2 connecteurs RJ45 pour relier les cartes moteurs aux câbles Ethernet qui iront jusqu'au robot
- une batterie de modélisme incluse dans la télécommande

Une fois les plaques de plexiglas de 5mm découpées, il a fallu percer des trous pour pouvoir visser les vis de fixation des cartes Arduino. Ces trous sont plus fins que les vis afin qu'elles taraudent en pénétrant

Perçage des trous par Antoine
Une fois les trous percés, l'emplacement des connecteurs à été ouvert.
Quelques bâtons de colle chaude plus tard pour assembler le fond aux quatre côtés, on a pu passer au vissage délicat des cartes.

Taraudage et vissage par Lucie

 Le résultat après cette journée est plutôt satisfaisant même s'il reste pas mal de travail. Les vacances de Noël ne vont pas être de tout repos :-)

La télécommande presque nue

Une ouverture rectangulaire faite à la perceuse...

dimanche 6 novembre 2016

Les Têtes Briquées 2017

Cette année, évolutions et révolutions chez les Têtes Briquées.

Tout d'abord, il y a eu du recrutement et on se retrouvait très nombreux. En plus certains avaient des envies d'autres chose que de faire des constructions Lego. C'est pourquoi il a été décidé de scinder la team en deux équipes :
- Les Têtes Briquées conserveront une philosophie Lego (avec des évolutions quand même) et seront encadrées par Brickstory
- Les Têtes (fa)briquées, qui utiliseront tout le reste des matériaux présents sur cette terre (et même le titane lunaire si besoin), et qui seront encadrés par l'équipe CRLG

On a choisi quand même de conserver une cohésion entre les deux équipes, un thème unique, un déguisement unique, des réunions ensemble, les mêmes crêpes et gaufres au gouter , etc....

L'article ne va parler que de l'avancement des Têtes Briquées, car la dernière réunion s'est faite sans les têtes (fa)briquées

Il n'y aura cette année pas de robot autonome, parce que
-  il y n'y a pas assez de monde pour 2 robots,
- les Trophées IDF sont le 18 février, donc très peu de temps pour fabriquer les robots,
- il n'y a pas d'action simple à faire faire par un robot autonome

Le robot aura donc les 3 actions à mener, les modules à prendre et à mettre dans les bases, les balles à prendre et à mettre dans la zone de départ, et la funny action.
Aucune chance que nous dévoilions ici et maintenant les stratégies retenues, faut pas rêver, mais si ça marche comme prévu, on risque de taper des scores plus qu'honorables.

Autre nouveauté de l'année, la télécommande. Le nombre d'actionneurs à piloter va nous obliger à envisager autre chose que la brique NXT ou EV3. En même temps, ça va permettre de découvrir autre chose.
L'idée retenue c'est de partir sur des arduino UNO avec carte de pilotage moteur. Chaque arduino pilotera donc 2 moteurs grâce à un joystick et/ou des boutons. Un article à venir détaillera l'architecte électronique, mécanique et les programmes de la télécommande.

Quelques photos de la séance du jour :

Apprentissage de la programmation arduino

Aide à la consolidation mécanique Lego

Réflexion en commun sur la stratégie

mardi 4 octobre 2016

Nouvelle année, nouveau logo

Encore une fois cette année, nous avons décidé de détourner le logo officiel des Coupes et Trophées de robotique, en y ajoutant la "Lego Touch".

Voici donc l'identité visuelle des Têtes Briquées et de Brickstory pour l'édition 2017 :









mercredi 27 avril 2016

Coupe de Belgique 2016

Le weekend dernier, c'était la coupe de Belgique 2016, l'occasion pour les équipes françaises, dont Brickstory, de s'entraîner et de lever les plus gros loups.

18 équipes étaient présentes à Louvain-la-Neuve cette année, moins que l’an dernier (24)
13 équipes homologués le premier jour et 3 autres le lendemain. On a apprécié le côté « familial » de cette rencontre, avec la possibilité de discuter avec plein de gens dans un très bon état d'esprit.
 
5 matchs de qualifications où sont mélangées les équipes belges et étrangères (majoritairement françaises), puis les phases finales où il y a séparation des belges et des autres.

Nous passons rapidement la phase d'homologation mais dans la douleur : les cubes sont beaucoup plus lourds que les nôtres, la peinture accroche davantage, on a donc du mal à prendre les tas de sable. Après ça, on est paumés sur le terrain avec le gros robot. Heureusement le petit pêche un poisson et on ferme une porte, on est homologués. Aucun soucis sur l'évitement et les dimensions non plus.

Après quelques réglages de puissance pour pouvoir prendre les cubes, on passe aux matches.
Nous avons rencontré
-        Coffee Machine (toujours les mêmes gars, qui ont bossé 1 journée avant la coupe à partir du robot d’il y a deux ans, trop fort !!)
o   On a réussi à mettre 111 points, presque comme à la maison, 2 tas de sable, 2 poissons, 2 portes le parasol
o   On fait même robot en bois pour un match et on fait 102 points.
o   Ça s’annonce bien pour la suite, même si on entend ESEO qui tape les 180 points !!!


-          Cybernétique en Nord (Une équipe qu'on commence à bien connaitre)
o   C‘est toujours une petite guéguerre sympatoche avec eux
o   Le petit robot ne part pas, le gros rate le gros tas de sable, et baisse étrangement les doigts arrière ce qui le fait merder dans son recalage.
o   Au final 61 point, on est 3ème à la fin de la première journée

On analyse pourquoi le petit robot n’est pas parti, et on se rend compte que le contacteur qui fait tirette + BAU ne fonctionne plus. Après l’avoir démonté, on comprend mieux.
Comme les poissons imprimés en Belgique prennent l’eau, ils ont tendance à couler. Les brillants esprits de PlaSci ont eu l’idée de rajouter du sel dans l’eau afin qu’ils flottent mieux (1kg par bac). Résultat : en prenant les poissons, on a fait couler de l’eau salée dans le contacteur… je vous laisse imaginer la suite. Bref après démontage, soufflage, séchage, le contacteur refonctionne, mais on décide de la déplacer pour éviter que cela ne se reproduise

Le lendemain, on arrive à peine sur les lieux qu’il faut déjà partir en match. Les robots sont encore froids d’avoir passé la nuit dans la voiture, mais il faut y aller. En guise de petit déjeuner, on se tape ESEO, qui est déjà loin devant nous en nombre de points.
-          ESEO (vice-champions de France l’an dernier, du lourd)
o   Ils nous mettent des balises de 380g sur chaque robot, y compris le petit qui le gère assez mal. Il se décale en angle dès le début et vient buter sur un coquillage, ce qui le perd définitivement.
o   Le gros robot prend bien le gros tas, mais un codeur doit patiner et il le dépose à côté. Le recalage n’est pas suffisant, il est perdu aussi. Heureusement le parasol se déploie, 35 points.
o   On se console en se disant qu’on ne peut pas faire pire 

-          Robin Sun Cruise away (équipe belge, gars sympas)
o   Notre petit robot ne part pas, toujours des suites de ce p… de sel dans l’eau
o   Le gros fait de son mieux mais rate une porte et finit par être paumé aussi.
o   Résultat 55 points (https://www.youtube.com/watch?v=unQ3u18pRbA )

-          VaMons à la Playa (équipe de Mons, grosse ambiance)
o   On sait qu’il nous faut plus de 79 points pour être la quatrième équipe étrangère, donc on croise les doigts.
o   Les deux robots partent et marquent leurs points presque correctement
o   Résultat 80 points, ouf !


Après les 5 matchs, 3 équipes françaises sont dans un mouchoir de poche :
-          Coffee Machine 343 points
-          Brickstory 342 points
-          Cybernétique en Nord 341 points

On est la quatrième équipe étrangère, on passe donc aux demi-finales étrangères. On retrouve ESEO après avoir simplifié la stratégie (on oublie la dune, on va chercher les coquillages).

o   Les deux robots partent bien, mais nous avons encore les fameuses balises d'1,2tonne
o  Le petit part bien mais en prenant deux poissons, l'un d'eux tombe sur la table. En butant dessus, le robot tombe en faisant chuter la balise d'ESEO... non loin du bac d'eau salée
o   Le gros fait le job en fermant les deux portes et poussant le petit tas.
 Le résultat est serré…. A 140 points près. Ils tapent les 208 points (hors bonus de 15 points) contre nos malheureux 68 points.


L’histoire belge s’achève ici, avec encore plein de taf pour la coupe de France
  • Odométrie vert VS violet à refaire
  • Stratégie simple à recoder pour assurer les points
  • Gestion des boutons de stratégie, ça a foiré grave !
  • Lestage éventuel du petit robot (ou test avec une balise très lourde, type angevin)

Un grand bravo et merci aux organisateurs de la Coupe, l'accueil, les arbitres, Etienne qui a présenté l'évènement comme un pro.... (je retire de la liste celui qui a eu l'idée du sel....)
Merci aux équipes pour leur fair play, l'ambiance.
Merci à Cybernétique en Nord d'avoir saboté leur propre robot pour nous avoir laissé devant ;-)
Chapeau à Coffee Machine qui a fait fort avec une quantité de travail infime.
Bravo à ESEO et RCA qui nous ont bluffé.
Merci à Louvain de nous avoir accueilli. Vous avez une architecture chelou, mais les gens sont hyper cool.

La suite dans 1 semaine en Vendée ;-)