Aller au contenu


Oracid

Inscrit(e) (le) 17 juin 2011
Déconnecté Dernière activité aujourd'hui, 14:55
*****

Sujets que j'ai initiés

Arduino - Les interruptions

11 janvier 2018 - 03:43

J'ai pensé qu'il serait intéressant de parler des interruptions dans un fil spécifique.

J'ai trouvé quelques informations dans le livre de Christian Tavernier - Arduino - Maitrisez sa programmation et ses cartes d'interface(shields) - p : 65 et je me suis dit qu'il serait bon de les partager. Si je dis des bêtises, ce qui ne manquera pas d'arriver, n'hésitez pas à me corriger.

La plupart du temps, si l'on veut tester l'état dun capteur, nous interrogeons l'entrée concernée au travers d'une boucle 'for', par exemple.
Cette manière de faire peut, être couteuse en énergie car le processeur boucle à toute vitesse dans une course folle, à ne rien faire. Et si l'on teste plusieurs capteurs, le problème est multiplié d'autant. De plus, la structure du programme n'est pas vraiment optimisée.

L'idée, qui ne date pas d'hier, c'est de faire en sorte que le capteur envoie un signal sur une entrée dédiée du processeur. Le processeur arrête net ce qu'il était en train de faire, exécute la fonction de linterruption, puis reprend sa tâche.

Facile à dire ! Et bien oui, et en plus, c'est facile à faire.

Voici un exemple très minimaliste ou le capteur, un simple interrupteur, allume ou éteint la Led notée L (située au milieu de votre Arduino Uno), à chaque fois que l'on appuie dessus. Pour information, cette Led est reliée à l'E/S 13 de lArduino.
Cette interrupteur, placé sur une BreadBoard, est relié à la masse au travers d'une résistance de 10k. Ainsi lorsque l'interrupteur est ouvert, l'entrée sera à 0.

Les entrées spécifiques aux interruptions sont numérotées de 0 à 5. Mais attention, ces chiffres ont une correspondance physique sur les entrées de l'Arduino différente des chiffres eux-mêmes.

Correspondance des numéros d'interruptions et des lignes d'E/S :
Arduino Uno et Nano :
- interruption 0 liée à l'entrée 2
- interruption 1 liée à l'entrée 3
Arduino Mega :
- interruption 0 liée à l'entrée 2
- interruption 1 liée à l'entrée 3
- interruption 2 liée à l'entrée 21
- interruption 3 liée à l'entrée 20
- interruption 4 liée à l'entrée 19
- interruption 5 liée à l'entrée 18

Comme vous pouvez le constater, le programme est simplissime. Néanmoins, voici quelques commentaires.
- Je commence par initialiser la sortie 13 correspondant à la Led L.
- Puis j'exécute la fonction 'attachInterrupt' qui possède 3 paramètres. Le premier est le numéro de l'interruption, ici 0. Donc l'interrupteur est relié à lentrée 2 de l'Arduino. Le deuxième paramètre est le nom de la fonction qui doit être exécutée lorsque survient l'interruption. Le troisième paramètre, 'RISING', indique que l'interruption fait passer l'entrée, du niveau bas au niveau haut. Il y a dautres possibilités.
- Comme vous pouvez le constater, la fonction loop() est vide.
- La fonction interrupteur() est celle que j'ai écrite et qui est donc exécutée lorsque j'appuie sur linterrupteur. Puis vient la variable 'etat' qui est initialisée à la valeur de la sortie 13. Puis, grosse astuce de programmeur, je lui applique un XOR 1. Cela permet de la passer alternativement de 0 à 1 et inversement à chaque exécution de la fonction. Ainsi, à la ligne suivante, la Led sallumera, puis séteindra, puis sallumera etc.
- Ici, la boucle 'for' sert de temporisation pour palier à l'effet rebond de linterrupteur. En effet, la fonction delay() ne peut être utilisée dans une fonction d'interruption, car elle-même consulte des interruptions (horloge).

Merci d'avance pour vos remarques.
 
// Arduino - Les interruptions

void setup() {
  // utilisation de la led L au centre de carte - sortie numérique 13    
  pinMode(13, OUTPUT);
  
  // interruption 0 - entrée numérique 2 
  // fonction appelée 'interrupteur' 
  // déclenchée par passage du niveau bas au niveau haut
  attachInterrupt(0, interrupteur, RISING);
}

void loop() {}                      // fonction vide

void  interrupteur()  {             // fonction appelée par l'interruption 0
  byte etat= (digitalRead(13)^1);   // va et vient, 0 XOR 1 = 1  ou  1 XOR 1 = 0
  digitalWrite(13,etat);
  for (double i=1; i<=5000;i++);    // temporisation            
}

Fichier joint  Interruptions_bb.jpg   80,73 Ko   1 téléchargement(s) Fichier joint  Interruptions_schéma.jpg   28,88 Ko   1 téléchargement(s)

Un banc de test de couple moteur/servo

06 janvier 2018 - 08:16

Faire un banc de test de couple moteur/servo, l'idée m'a trottée dans la tête depuis longtemps.
J'avais commencé par faire un système vertical avec un peson accroché au plafond de ma cave. Catastrophique ! Parfois j'ai de drôles d'idée...
Puis j'ai imaginé un système horizontal, puis...puis... j'ai laissé tomber, comme beaucoup de mes projets.

C'est Ashira qui m'a remis sur les rails avec son dernier test, http://www.robot-mak...ste-pas-ashira/

A vrai dire, je ne sais pas vraiment où je vais. Je compte beaucoup sur vous pour m'aider car mes compétences en physique et en électronique sont très limitées.

Mon idée, c'est de tendre un élastique, l'axe du moteur ou du servo étant équipé d'un palonnier ou d'un excentrique qui appuiera ou soulèvera l'élastique, comme on veut. Ainsi, une tension sera exercée sur le peson.
Là, il s'agit d'un peson pour peser des valises. Vous en trouverez ici :
https://www.ebay.fr/...vvFF-YFWsUs1NMg
https://www.ebay.fr/...D4AAOSw1cNaCClc
http://www.ebay.fr/i...hAAAOSwNRdX5lyZ

Ashira et moi-même, nous avons celui du premier lien. Simple coincidence. Les autres sont peut-être bien également.
Ces pesons mémorisent la mesure lorsqu'elle est stable. Cela peut être considérer comme un avantage ou comme un inconvénient, il faudra voir avec la pratique.

J'ai commandé un gros élastique de mercerie 3cm de large et 1m de long que j'ai replié en 4. https://www.ebay.fr/...=item60290aa66c

Voici 2 photos qui montre le banc de mesure.
Sur la gauche, le support du peson est réglable en hauteur. C'est un peu compliqué, j'ai déjà une autre idée en tête. Sur la droite un mécanisme d'enroulement permet de tendre l'élastique.

 

J'ai utilisé des pièces Lego vissées sur une planche. Pour la conception, c'est très pratique, on peut faire et défaire à volonté. Pour la partie électronique, je compte utiliser mon alimentation qui possède un voltmètre et un ampèremètre, on la voit sur les photos.

Voilà, j'en suis là. Mais les choses devraient évoluer et je vous monterai chaque étape au fur et à mesure.
 

IMG_4292-s.jpg   IMG_4291-s.jpg


L'imprimante Creality CR-10

26 décembre 2017 - 08:41

Si vous cherchez une imprimante 3D, en voici une qui cartonne actuellement sur le net.
Il s'agit de la Creality CR-10 qui a un volume d'impression de 30x30x40 au prix de 310€. https://www.gearbest...l?lkid=11375474

Elle existe en différentes versions avec des volumes d'impressions plus gros, par exemple la CR-10S qui fait 40x40x40.

Elle est en kit, mais gros avantage, elle est déjà prés montée. Ce n'est donc pas un véritable kit. Pour vous en persuader, voici une vidéo en français qui donne tous les détails nécessaires.

Et une deuxième vidéo pour faire la comparaison des deux modèles.




EVShield de Mindsensors

25 décembre 2017 - 08:32

Cette année, le Père-Noël a été généreux, il m'a apporté un EVShield avec son petit écran adapté.
J'espère que vous aurez été également gâtés.

http://www.mindsenso...le-board-bundle
http://www.mindsenso...ield-or-arduino

Fichier joint  evshield.jpg.png   217,24 Ko   2 téléchargement(s) Fichier joint  Ecran-evshield.jpg.png   173,12 Ko   3 téléchargement(s)

Ce shield me permettra d'utiliser tous les servos et les capteurs Lego tout en me donnent la possibilité d'ajouter des servos et des capteurs non Lego. La quadrature du cercle, en somme.

Voici un exemple de réalisation.


Quel avenir pour Lego ?

15 décembre 2017 - 07:31

Face à l'arrivée de copies ou de pièces compatibles Lego auxquelles on peut rajouter une multitude de réalisations en impression 3D, on peut légitimement se demander si la société Lego ne pourrait pas succomber à l'effet "Nokia".

Pour vous convaincre de l'urgence de la situation, j'ai préféré créer un fil spécifique en déplaçant les premiers échanges sur ce sujet.



Lego a du souci à se faire ! Je l'ignorais, le sujet est tabou sur les forums Lego, mais depuis un an les chinois ont fait une offensive de grande envergure en copiant Lego.
Le résultat est surprenant de qualité. Regardez cette vidéo présentant un self-balancing (100€) et vous comprendrez immédiatement que le risque est grand pour Lego.
Ici tout est copié, mais pas strictement à l'identique. L'EV3 Mindstorms n'est pas copié, je vous mets également la vidéo de leur micro-ordinateur.

Au passage, notez la vision des chinois pour la "way of life" qui les inspire... Intéressant !