mercredi 28 novembre 2012

tictactoe 3D, partie 3

Le cube est maintenant complété mais pour le moment il n'est contrôlé que par l'ordinateur via le port série. Il me reste à fabriquer 2 gamepads, et à écrire le firmware pour le contrôleur principal qui est un PIC12F1822.





tous les fichiers pour ce projet sont ici

Puisque c'est noël bientôt

puisque que c'est noël bientôt, le script python suivant donne au cube une allure de décoration avec ses 27 LEDS qui changent de couleur continuellement au hasard.

# NOM: random-led.py
# DESCRIPTION: contrôle aléatoire du cube 3x3x3 construit pour le jeux de tictactoe

import serial
import time
import argparse
import random
import msvcrt # windows seulement

done = False

parser=argparse.ArgumentParser(description='script de test pour module 3LED bi-couleurs',
usage='module-test.py [-h] device-name module_id [-n nouvel_id]')
parser.add_argument('serial', help='nom du port serie')
cmd_line=parser.parse_args()

device=cmd_line.serial
ser=serial.Serial(device, 19200,timeout=0)
ser.write(chr(3<<4)) while not done :



module=random.randrange(1,10)
led=random.randrange(0,3)
cmd=random.randrange(1,4)
ser.write(chr(module | led << 4 | cmd << 6)) time.sleep(.05) if msvcrt.kbhit() : # windows seulement, n'importe qu'elle touche arrête le programme.
done=True

ser.close()


J'ai filmé avec mon appareil photo mais la qualité est médiocre.

mercredi 21 novembre 2012

tictactoe 3D, partie 2

détail du montage des modules LEDs

matériel requis

  • 27 LEDs bi-couleurs rouge/vert digikey P/N 67-1124-ND, 52C/10+
  • 9 condensateurs céramic 10uF/10V SMD 1206, digikey P/N 445-4057-1-ND, 25,6C/10+
  • 9 condensateurs cérmaic 100nF/10V SMD 0402, digikey P/N 445-1265-1-ND, 2,7C/10+
  • 9 MCU 10F322T-I/OT, digikey P/N PIC10F322T-I/OTCT-ND, 62,8C/10+
  • fil 30 AWG 100', digikey P/N K325-ND, 13,15$
  • 1 protoboard robotshop P/N RB-Spa-233, 9,95$
  • 45 broches 100mil,roboshop 2 x P/N RB-Spa-153, 1,50$

Plan de montage

étapes

partie LED
  1. Découpez dans la platine 18 morceaux de 2x3 trous. Ces morceaux servent à relier les 3 DELs ensembles et sont repréentés par P1 et P2 sur le dessin.
  2. Découpez dans la platine 9 morceaux de 2x7 trous. Ces morceaux servent pour le montage de la base avec le connecteur ICSP et le MCU.
  3. Faites les liens sur les morceaux 2x3 tel qu'illustré en bleu sur le dessin. Le lien bleu pâle est fait sur l'autre face.
  4. Les fils des LED ont une marque près de la capsule de plastique. Les 2 fils extérieurs, soit le fil pour l'anode rouge et celui de l'anode verte doivent-être écartés du fil central pour qu'il y est une distance de 100mil entre chaque fil. Servez-vous d'une pince à long bec (long nose) et pliez le fil vers l'extérieur juste en en haut de la marque à un angle de 45 degré. Déplacez la pince en bas de la marque et ramené l'extrémité du fil vers le centre pour qu'il soit en parrallèle avec celui de la cathode , comme illustré sur le dessin. Répétez l'opération avec le fil anode verte.
  5. Glissez la LED dan les 3 trous d'un morceaux 2x3 jusqu'à ce que le morceau appui sur les coudes. Soudez en place.
  6. Recommencez les 2 étapes précédentes avec une autre LED.ATTENTION! Le morceau n'est pas dans la même orientation. Sur le morceau P1 qui relie D1 et D2 se sont les fils Cathode et Vert qui sont croisés. Sur le morceau P2 qui relie D2 et D3 ce sont les fils Rouge et Cathode qui sont croisés.
  7. Soudez ensemble D1 et D2 ensuite soudez D3 sur la base de D2.
partie base
  1. Il n'y a que les 4 broches des extrémités qui sont reliés à des oeillets les broches du centre soit Vss et Vdd tombe entrent les oeillets. En vous servant d'un fil d'étain très fin ajoutez une goute d'étain sur les broches Vss et Vdd.
  2. Observez sur le dessin la position du MCU et ajouter une goûte d'étain sur le rebord des oeillets à l'endroit où les broches 1, 3, 4 et 6 seront soudées.
  3. En utilisant une pincette pour tenir le MCU par le corps faites refondre l'étain sur l'oeillet qui acceuille la broche 6 et positionnez le MCU en place pendant que l'étain est fondu et retiré le fer en tenant le MCU en place le temps que l'étain fige. Assurez-vous que le MCU est bien positionné. Les broches 2 et 5 ne doivent pas toucher au oeillets adjacents.

  4. Faites refondre l'étain pour souder les broches 1,3 et 4.
  5. Dans la languette de connecteur 100mil découpez une section de 5 borches et placez là à l'endroit indiqué sur le dessin ci-haut en ne soudant que la broche identifiée PGC sur le dessin.
  6. Coupez un bout de fil no 30 juste assé long pour rejoindre la broche 2 du MCU à la broche du connecteur identifiée V- sur le dessin. Soudez d'abord le bout qui va sur le MCU en faisant refondre la goûte d'étain qu'on y a mis. Soudez ensuite sur la broche du connecteur.
  7. Répétez cette opération pour la broche Vdd.
  8. reliez l'oeillet sur lequel est soudé la broche 6 du MCU à la broche du connecteur identifiée Vpp.
  9. Le condensateur 100nF au format 0402 est juste assé long pour relié les oeillets V- et V+ en leur partie la plus rapproché. Ce composant est vraiment minuscule et difficile à manipuler. Utilisez une pincette très pointu pour le tenir et faites refondre l'étain sur un des oeillet placez une extrémité du condensateur juste pour affleuré l'étain fondu. Enlevez le fer et laissé figé. Si le condensateur est bien positionné l'autre extrémité devrait effleuré l'autre oeillet. Faites refondre l'étain de cet oeillet pour souder cette extrémitée.
  10. Le condensateur 10uF est au format 1206 et et plus facile à manipuler. Il est trop long pour être glissé entre les broches comme l'autre. Il mesure 130mil de long, juste de la bonne longueur pour appuyer ses extrémités sur chaque broche adjacente V- et V+ et le souder en place par refonte de l'étain. Ajoutez de l'étain au besoin.
  11. Maintenant il faut positionné la partie LED sur la base. Le fil de l'anode rouge doit-être du côté extérieur tel qu'indiqué sur le dessin.
  12. la broche 1 du MCU (RA0) va sur le fil du centre (cathode LED) et continu son chemin jusque sur la broche PGD du connecteur.
  13. la broche 3 du MCU (RA1) va sur le fil à l'extérieur (anode rouge) et continu son chemin jusque sur la broche PGC du connecteur.
  14. Finalement la broche 4 du MCU (RA2) va sur le fil anode verte du LED.
  15. Il ne vous reste plus qu'à insérer le connecteur dans le Pickit 3 et à programmer le MCU et ensuite testez le module avec le script python fournis en partie 1.
  16. J'oubliais un petit détail, il faut refaire ça 9 fois. Si vous êtres très motivés en utilisant des PIC12F609 vous pourriez fabriquer 100 modules de 10 LEDS bicouleurs pour un magnifique cube de 10x10x10.



modification d'un servo-moteur pour rotation continue

Lorsque j'explore l'internet au sujet de l'utilisation des micro-controlleurs je constate qu'il y a beaucoup d'intérêt pour les véhicules robots suiveurs de lignes ou autres. Lorsque je magazine sur les sites comme robotshop je constate aussi que si le coût des composants électroniques est très abordable de nos jours il n'en va pas de même pour les pièces mécaniques qui entre dans la fabrication des robots. Entre autre les moteurs avec engreganes utilisés pour motoriser les véhicules robots coûtent chers comparativement à un servo-moteur. Je ne suis pas le seul à l'avoir constaté car nombreux sont ceux qui utilisent des servo-moteurs pour motoriser leur véhicules car ceux-ci sont très abordables contrairement aux premiers. Chez robotshop on peut avoir un petit servo moteur pour aussi peut que 4$. Uh HS-422 coûte 10.49$.


Mais pour utiliser un servo-moteur pour motoriser un véhicule il faut le modifier. Dans cette chronique j'explique comment faire cette modification.

Un servo-moteur est un système asservi. C'est à dire un système qui compare une consigne à un état et modifie l'état jusq'à ce que l'erreur entre la consigne et l'état soit nulle. Dans le cas d'un servo-moteur, l'état contrôlé est la position de l'axe d'un potentiomètre. Il y a donc à l'intérieur du boitier un moteur avec un engrenage et un potientiomètre relié à l'axe de sortie du servo-moteur. En tournant le moteur fait aussi tourner l'axe du potentiomètre. Donc si on remplace le potentiomètre par 2 résistances d'égales valeurs comme indiqué dans le desssin ci-bas, l'erreur ne sera jamais corrigée et le moteur tournera continuellement. Évidemment s'il y a une butée autre que celle qui est dans le potentiomètre il faut l'enlever aussi.
Avec cette modification on a un moteur à rotation continue dont le sens de la rotation peut-être contrôlé.

En fonctionnement pour arrêter le moteur il suffit de lui envoyer des impulsions dont la largeur correspond à la position centrale. Pour le faire tourner vers la gauche (anti-horaire) on lui envoie des impulsions plus étroites et pour le faire tourner vers la droite (sens horaire) on lui envoie des impulsions plus larges que la valeur médiane.






lundi 19 novembre 2012

projet TictacToe 3D

J'ai entrepris de construire un jeux de TicTacToe avec un cube de LED bi-couleurs. Au lieu d'utiliser un MCU qui a suffisamment d'E/S pour contrôler les 54 DELS (27 DELs bi-couleurs), j'ai choisi une approche modulaire dans le genre pixdel. Cependant au lieu de contrôler 1 seul DEL RGB avec un PIC10F202, j'utilise un PIC10F322 et je contrôle 3 DELS bi-couleurs rouge/verte. Chaque module représentera une colonne. Il en faudra donc 9. Pour le moment j'ai fait le dévelloppement du firmware pour le module et je l'ai testé en le branchant à un port COM de mon ordinateur. J'ai aussi construit le prototype #1. Au départ j'envisageais 9 modules pour former le cube 3x3x3 et un contrôleur maître servant à la logique du jeux et d'interface avec les 2 joueurs et pour contrôler le cube. Pour le moment seul la première phase est complétée, soit le dévelloppement et la construction d'un module 3 LEDs.
Sur la photo suivante on voie le montage de dévelloppement sur la platine sans soudure avec le premier prototype. Les 2 modules sont branchés sur le convertisseur de niveaux qui reçoit les commandes du script test-module.py. Tous les fichiers sont ici.

Sur cette photo on aperçoie a peine le MCU en format SOT23-6 qui est à l'extrémité droite du connecteur ICSP. Voici une vue en gros plan de la base du module.



jeudi 8 novembre 2012

expérimentation avec PIC10F322, partie 4, charlieplexing

La technique de multiplexage appellée charlieplexing tire avantage des interfaces 3 états comme ont les retrouvent sur les MCU. Par interface 3 états j'entends un port dont les connections externes peuvent-être configurées en entrée ou en sortie. Il y a effectivement 3 états puisqu'en configuration sortie, on peut avoir un niveau haut ou bas tandis que si la connection est configurée en entrée on a un 3ième état qui est la haute impédance (résistance).

Je disais donc que le charlieplexing tire avantage de ces 3 états en permettant de contrôler un nombre supérieur de dispositifs qu'il y a d'E/S. Le nombre possible est de
N*(N-1)
ou N est le nombre d'E/S utilisées.
Pour cette expérience puisqu'on utilise un PIC10F322 on dispose de 3 broches configurables en entrée ou en sortie. Ce qui nous donne la possibilité de contrôler 6 LEDs. Comme indiqué sur le schéma suivant:




fonctionnement du charlieplexing

Si on se réfère on schéma ci-haut on voit que les LEDs sont connectées entre 2 broches. Si par exemple on veut allumer D1 qui est branchée entre RA0 et RA1, on configure RA0 et RA1 en sortie et on laisse RA2 en mode entrée haute impédance. On met ensuite la Sortie RA1 à 1 et RA0 à 0 de sorte que le courant va passé de RA1 vers RA0 à travers D1. D2 reste éteinte puisque qu'une diode ne conduit pas dans le sens inverse. Pour allumer D2 on inverse les polaritées. C'est à dire qu'on mets RA1 à 0 et RA0 à 1. Les diodes électroluminescentes fonctionnent donc par paires branchées entre les 2 mêmes broches:

  • D1 et D2 entre RA0 et RA1
  • D3 et D4 entre RA0 et RA2
  • D5 et D6 entre RA1 et RA2

Donc pour contrôler D3 et D4 on laisse RA1 en mode entrée et on configure RA0 et RA2 en mode sortie. De même pour contrôler D5 et D6 on laisse RA0 en entrée haute impédance et on configure RA1 et RA2 en mode sortie. De cette manière chacune des 6 LEDs peut-être allumée individuellement. Évidemment on ne peut toutes les allumées en même temps mais à cause de la persistance rétinienne si on allume séquentiellement chacune d'elle à tour de rôle rapidement on a l'impression qu'elles sont toutes allumées en même temps, c'est ce qu'on appelle un affichage multiplexé. Tous les affichages qui utilise un nombre élevé d'éléments sont multiplexés, c'est le cas pour l'éran de votre ordinateur et de votre téléviseur et on a pourtant l'impression que tous les pixels sont allumés en même temps.

expérimentation

Cette expérience utilise le montage illustré dans le schéma ci-haut et le programme charlieplexing.asm. Le fichier de macros pic10f322_m.inc est aussi nécessaire.

Le logiciel a 2 modes de fonctionnement. Le premier mode est un compteur binaire qui compte de 0 à 63 en boucle et le deuxième est un LED allumé qui se promème de gauche à droite et de droite à gauche alternativement. On passe d'un mode à l'autre en pressant le bouton qui est branché sur RA3.

Description du logiciel

Le timer0 est configuré pour générer une interruption à tous les 256usec. La routine d'interruption appelle la sous-routine charlie qui gère l'afficheur. la s.r. charlie affiche le contenu de la variable dsp_byte. A chaque appelle de la s.r. un nouveau bit est affiché. On passe d'un bit à l'autre en boucle. Comme il y a 6 bits à afficher le cycle complet prend 6*256usec, soit 1,5msec. La fréquence de muliplexage est donc de 667Herz. Beaucoup trop rapide pour que l'oeil percoive qu'il n'y a qu'un seul LED d'allumé à la fois. À 70herz l'oeil ne perçoit déjà plus de scintillement.

La routine principale du programme ne fait que gérer la lecture du bouton et le mode de fonctionnement. Dans le mode 0 la variable dsp_byte est simplement incrémentée 4 fois par seconde. Dans le mode 1 tous les bits de dsp_byte sont à zéro sauf 1 et ce bit est déplacé de gauche à droite et de droite-gauche avec les instructions rlf et rrf. A chaque fois que le bit arrive à une extrémitée la direction du déplacement est inversée.