Un échec de plus sur la route de l’autolevelling

Après l’essai avec système escamotable par servo moteur qui s’est révélé trop imprécis dans la répétabilité des mesures, c’est la version ascenseur à base de chariot de lecteur CD qui souffre d’un moteur vraiment trop faible. C’est bien dommage pour le petit côté hacking, récup que cela avait.

Img_3686_versionA_servo

 

 

 

 

 

 

Img_3779_manipStepperCD

 

 

 

 

 

 

 

 

 

 

Prochaine étape: version avec capteur à effet hall…

Aujourd’hui au VoLAB séance d’affichage

afficheDoc407 Après la lecture d’un article sur Makery.info, 3 nouvelles affiches ont fait leur apparition au VoLAB cet après-midi.

Comment documenter de la PiNG, les différents type de licences libre issus d’un meet-up fablabo.net et enfin le documetn sur la réglementation concernant les drônes civils de la DGAC.

afficheDouble_407Gilles continue ces travaux sur l’ascenseur pédagogique et le projet autolevelling de notre Prusa i3 se poursuit. Après l’échec du mode avec servo moteur, nous explorons une version avec moteur de CD.

projetGilles_4

A gauche, le projet ascenseur avec Ardublock et à droite Prusa qui ré-imprimera peut-être un jour…

Et pendant ce temps Pierre prodigue un Flashlearning Impression 3D sur la Witbox à Daniel… Une journée bien remplie au VoLAB mais la soirée continue.

Vor 9 avance

PhotoDurant les derniers jours, j’ai remplacé les capteurs TCRT 5000 placés à l’avant, par une rampe de capteurs infrarouge assemblée. J’ai aussi changé la plaque en acrylique inférieur qui se dégradait de plus en plus.

J’ai de plus implémenté une sucette Bluetooth pour bénéficier d’une liaison série de debug. Ce qui m’a permis de corriger les tests de laPhoto

machine d’état.

Coté odométrie, avec Joël nous avons tourné cette petite pièce (l’axe à un diamétre de 1.8mm) pour fixer le disque indenté.

Cette pièce n’est qu’un essais. Il reste à affiner certain détails, comme la longueur de l’axe.

La machine d’état étant Photocorrigée, certains problèmes sont mis en éxerguent comme le fait que le moteur droit est beaucoup plus lent que le moteur gauche.

 

Vor 9 – Détection du sol

Pour la détection du sol j’ai installé 5 capteurs infrarouges, 3 à l’avant du robot et 2 derrière.

Mon objectif est de construire une variable en binaire contenant le résultat des tests des 5 capteurs. Ainsi il sera facile de connaitre ou le sol n’est pas détecté pour que le robot ne s’y dirige pas.

Le travail préparatoire réalisé avec l’aide de Joël. Au propre ça donne quelque chose comme ça :

Ci-dessus un schéma de Vor9 et ses capteurs numérotés de 1 à 5 de manière formelle, dans le code de 0 à 4.

Si le capteur n° 1 est déclenché, il met le premier byte à 1, si le capteur n°2 l’est, il passe le second byte à 1 et ainsi de suite. Ce qui permet d’obtenir les tableaux suivant :

 

Capteur N°

Déclenché seul

En décimal

Direction du robot

1

0000 0001

1

Avant

2

0000 0010

2

Avant

3

0000 0100

4

Avant

4

0000 1000

8

Arrière

5

0001 0000

16

Arrière

       
       

N° capteur Déclenché simultanément

En Binaire

En décimal

Direction du robot

1 + 2

0000 0011

3

Avant

2 + 3

0000 0110

6

Avant

1 + 2 + 3

0000 0111

7

Avant

4 + 5

0001 1000

24

Arrière

3 + 4

0000 1100

12

Flanc Droit

1 + 5

0001 0001

17

Flanc Gauche

 

Si plusieurs capteurs sont déclenchés simultanément, on obtient les valeurs du tableau ci-dessus.

 

Ce qui donne en langage Arduino  une fonction retournant la valeur détecté. La machine d’état n’a plus qu’a testé la valeur de cette fonction pour connaitre les zones ou le robot ne peut pas se déplacer.

Une rapide explication de la fonction :

  • J’initialise ma variable en binaire à 0.
  • Avec une boucle for, je lis l’état des 5 capteurs.
  • Si la lecture du capteur est supérieure au seuil paramétré, je décale de 1.
  • Si ma variable en binaire est égale à 0, le sol est détecté par tous les capteurs donc je garde la led d’état éteinte, sinon je l’allume.
  • Et enfin, la fonctionne retourne la valeur de la variable.

 

 

int groundTest()

{

byte statusCapteur = B00000000 ;

for (int cellCapteur = 0; cellCapteur <= 4; cellCapteur++)

// pour tous les capteurs numérotés de 0 à 4

{

if(analogRead(tableauCapteurs[cellCapteur]) > irThreshold)

// si la lecture du capteur est supérieur au seuil, alors incrémenter 1 au binaire si non 0

statusCapteur |= ( 1 << cellCapteur);

}

 

if( statusCapteur == 0 )

// Si tous les capteurs détectent le sol, alors on garde la led éteinte, si non on l’allume

digitalWrite(GroundDetLED, LOW);

else

digitalWrite(GroundDetLED, HIGH);

 

// retourner le statut des capteurs

return statusCapteur;

 

//Serial.println(statusCapteur); // DEBUG

}

 

Le prochain chantier est l’odométrie. Pierre a modélisé les plaques de Vor9 et me les a imprimé. Il m’a aussi fait une roue codeuse ayant le bon diamètre pour être emmanché sur l’axe du moteur.

Disposant d’une deuxième plateforme j’ai commencé à travailler sur le calcul de la vitesse des moteurs. Le but est de synchroniser la vitesse des moteurs pour aller en ligne droite, puis dans un second temps se diriger de manière plus précise à droite ou à gauche.

Si dessous le travail à l’oscilloscope, avec les deux capteurs allant un presque à la même vitesse. Ici j’ai synchronisé la vitesse des moteurs à la main à l’aide de potentiomètre.

La prochaine étape est d’utiliser des interruptions pour compter les fentes des roues codeuses et d’utiliser un timer interne au 2560 pour mesurer le temps et ainsi obtenir une vitesse.

 

Prusa i3 passe à Marlin 1.0.1

Aujourd’hui au VoLAB nous avons passé notre Prusa i3/EiNSTeiN/Reworks à Marlin 1.0.1 en vue d’implémenter l’auto bed Leveling. Il reste à designer les pièces mécaniques.

Pour cela modélisation sous SolidWorks de toutes l’imprimante.

Vue3D150103_2330

 

 

 

 

 

 

 

 

 

 

 

 

Au passage on en profite pour lui ajouter un afficheur LCD et une carte SD. Opération relativement facile si on exclu les erreur Arduino 1.5 comme:

SdFatUtil.cpp.o: In function `SdFatUtil::FreeRam()’:
SdFatUtil.cpp:33: undefined reference to `SdFatUtil::__brkval’
SdFatUtil.cpp:33: undefined reference to `SdFatUtil::__brkval’
SdFatUtil.cpp:36: undefined reference to `SdFatUtil::__bss_end’
SdFatUtil.cpp:36: undefined reference to `SdFatUtil::__bss_end’
collect2: error: ld returned 1 exit status

Traité dans le billet :

https://github.com/ErikZalm/Marlin/pull/1228/files

20150102_185252Reduced

 

 

 

 

 

 

En parallèle, on bosse sur la mise en place d’un wiki pour stoker et diffuser nos articles…

Des nouvelles de Vor09 et du Lab

 

 

 

 

Après la chute de Vor09, j’ai réparé un capteur de sol ,mais Vor09 ne fonctionnait plus. En cause petit court circuit bien caché sous la gaine thermo. L’isolant du cable ayant fondu lors de la pause de la gaine. Une nouvelle fois Joël m’a aidé à trouver le défaut.

Un 5ème capteur a été installé, et un lipo 12V remplace les deux blocs de piles. Les petits moteurs prévus pour du 3V, fonctionnent à merveille et Vor galope. J’ai rédigé un petit programme pour tester le fonctionnement des capteurs de proximités. Ce bout de code finira certainement dans l’auto-test.

Soulignons le départ de Poutrelle qui est rentrée chez elle à la médiathèque d’Argenteuil. Voici une petite photo de sont beau câblage et de son support.

Et pour finir nous accueillons, une nouvelle machine outils, un tour ! Il nous a été donné par Gilles.