jeudi 11 décembre 2014

[Software] Schéma et pcb avec Kicad

Découverte d'un nouvel outil très réussi pour la réalisation de schémas et l'édition de pcb : Kicad.
Atouts majeurs, il existe tout plein de librairies à télécharger, une pris en main rapide (quelques heures si l'on connait un peu le principe de ces logiciels), un grand nombre de formats pour faire tirer vos créations et surtout, la cerise sur le gâteau, un aperçu 3D.

Téléchargement et informations : Kicad

Exemple d'un shield pour aduino que j'ai réalisé pour mon robot mobile.
Bon certes, il n'y a pas grand chose mais ce n'est que l'interface qui reliera mon CPU aux diverses cartes de pilotage.

De plus, on m'a indiqué un site pour faire imprimer nos cartes : Etronics . Je ne l'ai pas encore testé mais cela devrait arriver rapidement (quand le design de mes cartes sera validé).

dimanche 27 juillet 2014

[Arduino] Alimentation externe

Lorsque l'on parle de robot mobiles, l'une des partie vitale est l'alimentation de tous les systèmes. Ici, je ne vais faire que redire ce que l'on trouve sur le net, l’alimentation de l'Arduino.

Lors des tests et debug de programme, il est facil de passer par l'alimentation USB. Néanmoins, ce port montre vite ses limites pour alimenter notre carte. D'autant plus, si on ajoute toutes sorte d'actionneurs-capteurs.

Heureusement, les concepteurs de l'Arduino ont pensé à tout. En effet, la carte est munie d'un régulateur de tension. Pour s'en servir, il nous suffit d'utiliser le jack de type : Fiche d'alimentation mâle 2,1x5,5x9,5 mm.
L'entrée ainsi disponible permet d'accueillir une batterie 7-12V.

Pour ma part, j'ai opté pour la pile de 9V mais par la suite, je passerai sur une batterie rechargeable pour plus de souplesse.

Au final, j'obtiens ça :




jeudi 10 juillet 2014

[Arduino] Accéléromètre Nunchuck

Comme on me le dit souvent, rien ne sert de ré-inventer la roue.
Aujourd'hui, je vais donc faire appel un tutoriel trouvé sur le site : http://www.skitoo.net .

Son auteur montre de manière détaillée comment intégrer le Nunchuck de la Wii à notre carte Arduino pour y récupérer les différentes accélérations. Dans son test, il manipule un servomoteur mais ce n'est pas la seul chose que l'on puisse faire avec de telles informations.

Ce dont vous avez besoin

  • 1 servomoteur
  • 1 nunchuk de console Wii
  • 1 kit Arduino
  • 1 breadboard 
  • quelques straps

Les principes du montage

Le nunchuck Wii utilise le protocole de communication I2C. Ce qui nous va très bien puisque Arduino gère très bien ce protocole via les broches analogiques 4 (SDA) et 5 (SCL). Depuis la version Uno R3, 2 nouvelles broches peuvent être utilisées pour cela : SDA et SCL qui se trouvent à coté de la broche AREF. Si vous possédez cette version de l'Arduino vous pouvez donc au choix utiliser l'une ou l'autre paire de broches. Pour ma part je vais utiliser les broches analogiques 4 et 5. 
Coté software, Arduino possède une librairie prévu pour cela : Wire.
La photo qui suit nous montre à quoi correspond chaque broche du câble Nunchuck Wii.
Schéma du câble Nunchuck
Vous remarquerez qu'en plus des broches SDA et SCL, le nunchuck a besoin d'une alimentation de 3,3v. Attention à ne pas mettre une tension supérieure au risque de le déteriorer.
Le servomoteur quant à lui possède 3 fils : 2 pour l'alimentation (+5v et GND) et un troisième pour le contrôler. Ce dernier doit absolument être connecté à l'une des 6 broches PWM de votre Arduino.
Coté software, là aussi, Arduino nous propose une librairie qui va bien : Servo.

Partie électronique

Pour la réalisation des schémas qui suivent j'ai utilisé un logiciel bien pratique : Fritzing. Celui-ci est gratuit et multi-plateforme. Il permet de réaliser rapidement des montages avec une vue de la platine d'essai, une vue shématique et enfin une vue du circuit imprimé. Vous trouverez à la fin de cette article le fichier Fritzing du montage.
Le composant "Nunchuck" n'étant pas encore disponible dans la bibliothèque de Fritzing j'ai pris un composant assez proche pour le représenter dans notre schéma.

Vue de la platine d'essai

Platine d'essai

Partie programmation

#include <Servo.h>;
#include <Wire.h>;

// Doit être ajusté en fonction de chaque nunchuck
#define ZEROX 530  
#define ZEROY 530
#define ZEROZ 530

// adresse I2C du nunchuck
#define WII_NUNCHUK_I2C_ADDRESS 0x52

// définition d'une variable Servo
Servo servomoteur;

// définition d'une variable counter
int counter;

// définition d'un tableau de données
uint8_t data[6];

void setup() 
{ 
  // on attache le servomoteur à la pin 11 (PWM)
  servomoteur.attach(11);

  // initialisation du nunchuck
  Wire.begin();

  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
  Wire.write(0xF0);
  Wire.write(0x55);
  Wire.endTransmission();

  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
  Wire.write(0xFB);
  Wire.write(0x00);
  Wire.endTransmission();
}


void loop() 
{ 
    // on demande 6 octets au nunchuck
    Wire.requestFrom(WII_NUNCHUK_I2C_ADDRESS, 6);

    counter = 0;
    // tant qu'il y a des données
    while(Wire.available())
    {
      // on récupère les données
      data[counter++] = Wire.read();
    }

    // on réinitialise le nunchuck pour la prochaine demande
    Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);
    Wire.write(0x00);
    Wire.endTransmission();

    if(counter >= 5)
    {
      // on extrait les données
      // dans mon exemple j'utilise uniquement les données d'accélération sur l'axe Y
      double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);
      double accelY = ((data[3] << 2) + ((data[5] >> 4) & 0x03) - ZEROY);
      double accelZ = ((data[4] << 2) + ((data[5] >> 6) & 0x03) - ZEROZ);

      // on limite la valeur entre -180 et 180
      int value = constrain(accelY, -180, 180);
      // on mappe cette valeur pour le servomoteur soit entre 0 et 180
      value = map(value, -180, 180, 0, 180);
      // on écrit sur le servomoteur la valeur
      servomoteur.write(value);

      // un petit delai pour pas saturer le servomoteur
      delay(100);
    }}

Sur son site, l'auteur présente une vidéo de son application. Je remercie ce dernier pour ses explications claires qui je pense m'aideront dans un futur projet.

mercredi 14 mai 2014

[3D] Main artificielle

J'ai présenté, il y a quelques temps, le logiciel 123D Design pour faire de la modélisation 3D. Avec un peu de pratique, il est possible d'arriver à des résultats très corrects. Internet étant une bonne source via tous les tutoriels.

Alors que ma Main artificielle avançait à grands pas, je suis tombé sur le site Instructables. Là, ça a été la claque !!

Au début, je n'ai fait que voyage dans les onglets. Jusqu'à tomber sur le sujet, "DIY Robotic Hand Controlled by Gloves and Arduino". Étrangement, le sujet a attiré mon attention. Dés les premières lignes, j'ai bien compris que le sujet était en adéquation avec mon projet !

En approfondissant un peu la lecture du post, on trouve le site web d'une personne qui a fabriqué une main artificielle via une imprimante 3D. Le site n'est rien d'autre que celui de Inmoov. Son créateur met à disposition les plans pour imprimer son robot "life size" en open source.

Comme ça ne sert à rien de réinventer la roue, j'ai donc téléchargé le dossier pour monter la main droite de son robot.

Pour l'impression, je me tourne vers sculpteo. Je devrai lancer ma commande sous peu et recevoir mes premières pièces rapidement.

samedi 26 avril 2014

[Arduino] Les bases (Part 2)

Aujourd'hui, je m'attaque au afficheurs LCD. Il en existe beaucoup. cela donc compliqué de faire du cas par cas.
A la place, je vais présenter le LCD 4 lignes, 20 colonnes. Il ne restera plus qu'à manipuler un peu pour les cas plus spécifiques.

Le LCD que je possède peut être manipulé via 4 broches (d'autres le sont par 7 voir 8). L'avantage de l'utilisation de 4 broches pour piloter l'écran est qu'il nous reste pas mal de slot sur la board Arduino pour faire autre choses.

1- Le brochage :

Rien de bien compliquer:

Arduino    |    LCD
    2          |      RS
    3          |      E

    4          |      D4
    5          |      D5
    6          |      D6
    7          |      D7

Aidez-vous de la documentation (datasheet) de votre écran.

2- La partie logiciel :
Pour utiliser votre LCD, il faut déclarer l'include de la librairie en tête de votre programme.
On ajoutera donc :
#include <LiquidCrystal.h>

A présent, on déclare les broches utilisées sur l'Arduino et connectées au LCD :
const int RS = 2;
const int RS = 3;
const int RS = 4;
const int RS = 5;
const int RS = 6;
const int RS = 7;

On fait la connexion entre les broches et le LCD pour que l'Arduino sache où envoyer les données :
LyquidCrystal LCD (RS, E, D4, D5, D6, D7);

Initialisation de l'afficheur :
LCD.begin(NombreDeColonnes, NombreDeLignes);

Après cette ligne, il est recommandé de faire un delay(10) pour laisser le temps au LCD de bien se configurer. Chez moi, cela fonctionne sans mais des erreurs peuvent survenir. Alors autant perdre 10 ms au démarrage.

3- Les commandes LCD :
Pour écrire :
LCD.print("Mon Texte");

Pour effacer :
LCD.clear();

Pour placer le curseur :
LCD.setCursor(PositionSurLaCOlonne, PositionSurLaLigne);

Petit rappel, on commence à "0" et non "1" quand on compte. :)

Voila qui conclue la présentation de l'afficheur LCD. Si rien ne s'affiche, vérifier que votre LCD est bien connecté à votre Arduino, que votre déclaration des broches est correcte. Si toujours rien ne s'affiche, avez-vous bien paramétré le rétro-éclairage? Je dis ça car je suis tombé dans le panneau. D'où l'utilité de bien lire la documentation avant d'acheter/monter les composants.

mardi 8 avril 2014

[Hardware] Utilisation des Résistances "variables"

Aujourd'hui, je vais introduire 2 types de résistances dites "variables". De manière intuitive, on pense aux divers potentiomètres. Je ne vais donc pas parler de ces derniers qui sont pour moi, plus du matériel d'ajustement, de précision.

Oui je parle bien de précision! En effet, lorsqu'on désire un certain niveau de précision sur nos mesure, il est judicieux d'inclure des potentiomètre pour inhiber la tolérance des résistance (5%, 10% voir plus).

Ici, je veux présenter de résistance plus "gadget".

I.a- La photorésistance :

Comme son nom l'indique, ce composant est de type ohmique. Néanmoins, ça caractéristique majeur est la variation de cette valeur ohmique en fonction que la quantité de lumière qu'il reçoit. La documentation technique indique la variation de résistance admissible car ce capteur.

Il est important de noter que même dans une noir, cette valeur pourra légèrement varier.

I.b- La résistance flexible :

Une autre résistance basée sur le même principe. Dans ce cas, la valeur ohmique varie en fonction de la déformation du matériau. Plus la déformation est importante, plus la valeur de la résistance augmentera. Le défaut majeur de ce capteur de flexion est sa tolérance de +/- 30%.


II- La mesure :

La technique de base consisterais à utiliser un pont diviseur de tension pour obtenir la différence de potentiel et donc caractériser notre résistance.

Une autre méthode, un peu plus poussée, consiste à utiliser le pont de Wheatston. Ce montage permet d'obtenir des résultats plus précis et stables dans le temps.

Il ne reste plus qu'à utiliser un Convertisseur Analogique-Numérique pour récupérer notre information pour s'en servir dans notre programme.

III- Étalonnage :

Dans notre programme, utiliser la valeur brute en sortie du capteur n'est pas la meilleure idée. Il est important de réaliser un premier étalonnage du capteur lors de sa mise en service. Puis de récupérer l'information  sur une moyenne d'échantillons. Cela dans le but d'atténuer les résultats erronés.

dimanche 30 mars 2014

[Arduino] Les bases (Part 1)

Reprenant mes projets, il est temps de mettre à jour les informations et d'en présenter d'autres.

Je vais rédiger plusieurs articles autour de l'Arduino et de ses composants annexes. Pour commencer, je vais parler des bases qui régissent ce microcontrôleur.

Une fois l'Arduino connecter à l'ordinateur, il est bon d'aller faire un tour dans le gestionnaire de périphérique windows et plus précisément dans l'onglet "Ports(COM et LTP)".
Maintenant, on lance le soft Arduino pour configurer notre carte.
Dans la barre des menus :
1- On vérifie d'être bien sur le bon port de communication : Outils -> Port série
2- On déclare le type de carte qui est connecté à ce port : Outils -> Type de carte

L'interface nous offre une barre d'action rapide.
"Vérifier" permet de valider votre code, c'est l'équivalent d'un compilateur
"Téléverser" transfert le programme dans le mémoire de l'Arduino. De cette manière, une fois le programme enregistré, la board peut travailler de manière autonome.

La programmation :

Développer une application Arduino n'est en soit pas complexe si l'on dispose de quelques bases. Toutes les programmes tournent autour de 3 étapes :
1- la déclaration des pins que notre programme utilise avec un nom de variable plus parlant pour augmenter sa compréhension.
2- une partie "void setup() {...}" qui permet d'initialiser notre système lors de son démarrage.
3- la partie "void loop() {...}" qui contiendra toutes les instructions à effectuer. Comme son nom l'indique, cette partie tournera en boucle !

De manière concrète, voilà un simple programme que Arduino met à notre disposition.

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup()
{               
     // initialize the digital pin as an output;
     pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop()
{
     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(1000);               // wait for a second
     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
     delay(1000);               // wait for a second
}

Bien sûr, pour que cela fonctionne, il faut un petit montage électronique qui sera composé d'une LED et d'une résistance de 220 ohm minimum (si la valeur ohmique est trop importante, l'éclairage fournit par la LED sera faible).

Schéma :

samedi 22 mars 2014

[3D] Modélisation et imprimante 3D

A défaut de pouvoir continuer sur mon drone à chenille, je me suis lancer dans un nouveau petit projet. Le but, guère complexe, est de réaliser une mais artificielle qui reproduira les gestes du main humaines.

La première des choses est de concevoir cette main artificielle. On trouve plusieurs techniques sur internet. Néanmoins, j'ai ma petite idée sur la chose. Dans un premier temps, cette main, ne disposera pas de "force", elle se contentera de mimer le geste. Pour ce qui est des forces requises pour déplacer un objet, je compte installer un préhenseur utilisant le principe de la ventouse.

De nos jours, l'imprimante 3D révolutionne l'impression. Je compte bien utiliser cette technologie. Cependant, n'ayant ce matériel, je vais devoir passer par un tiers. Aucun problème, il existe sur internet des entreprises qui imprime et livre vos objets !

C'est donc parti pour un peu de dessin en 3D. Mais avant de se lancer, il faut savoir une petite chos. Pour faire une impression 3D, nous avons besoin d'un logiciel de CAO (Conception Assistée par Ordinateur) ou DAO (Dessin Assisté par Ordinateur). J'avoue que la frontière entre les deux est assez mince pour moi. L'important est que le fichier générer soit compréhensible pour les imprimantes 3D.

Pour part, je me suis lancé sur "123D Design" qui est aussi connu sous le nom "Autocad 123D". L'avantage, léger, prise en main rapide, le formats des fichiers et surtout il est gratuit. Toutefois d'autres existent comme "Blender" qui est très connu. Pour compléter "132D Design", on peut faire appel à "3D print Utility" qui permet d'optimiser notre objet pour pouvoir l'imprimer. Cependant, il faut faire attention car le programme génère parfois des choses un peu bizarre d'après ce que j'ai lu sur internet.

Avec tout ça, je dispose d'une suite assez complète pour modéliser et imprimer ma main artificielle. Il ne me reste plus qu'à travailler dessus.