12.07.2015 Views

Kidule Ascenseur - Didel.com

Kidule Ascenseur - Didel.com

Kidule Ascenseur - Didel.com

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

http://www.didel.<strong>com</strong>/info@didel.<strong>com</strong><strong>Kidule</strong> <strong>Ascenseur</strong>et suite des exercices pour apprendre le Cwww.didel.<strong>com</strong>/kidules/KiPiAsc.pdfCette étape suit celle du dé électronique www.didel.<strong>com</strong>/kidules/KiPiDe.pdf et permet de <strong>com</strong>mander unmoteur et d’apprendre un nouvel ordre C, essentiel pour gérer des situations <strong>com</strong>plexes.<strong>Kidule</strong> <strong>Ascenseur</strong>L’ascenseur, qui peut être réalisé de plusieursfaçons, est <strong>com</strong>mandé par un kidule qui<strong>com</strong>porte un pont pour <strong>com</strong>mander un moteurbidirectionnel 3-5V 0.5A, 3 poussoirs (appeld’étage) et 3 Leds (contacts d’étage).L’ascenseur peut être construit trèssimplement avec un moteur et trois fins decourse d’étage, dont l’état est visualisé sur les3 Leds du kidule. Les boutons d’appel sont surle kidule, et peuvent être répétés en parallèlesur la maquette. Le connecteur femelle àdroite transmet ces 8 signaux à l’ascenseur.Le schéma est simple. Les poussoirs fontcontact avec le 0V et une résistance vers le5V donne un état 1 quand le poussoir estrelâché. Les Leds sont allumées par un état 0.<strong>com</strong>me les Leds du Dé. On peut les allumer etéteindre par programme, mais ces Leds sontprévues pour être reliées aux contacts d’étagede l’ascenseur et afficher l’état de cescontacts, facilitant la mise au point.L’ascenseur peut être bricolé <strong>com</strong>me cela a été fait au premier atelier <strong>Kidule</strong>s ( voir la 2 e partie dewww.didel.<strong>com</strong>/kits/<strong>Kidule</strong>Asc.pdf , mais attention, la partie logicielle est périmée). Voir aussiwww.didel.<strong>com</strong>/kits/Kit<strong>Ascenseur</strong>.pdfZigobot propose un ascenseuren kit, et <strong>Didel</strong> a développé pourl’atelier au Festival Robotique2011 un ascenseur qui faitpartie du kit qui peut être louépour des atelierswww.didel.<strong>com</strong>/kidules/KitAsc.pdfUne version ‘’luxe’’ de cetascenseur avec Leds bicolores àchaque étage est disponible pourrendre le logiciel plus intéressantUn nouveau modèle d’ascenseur qui intègre le kidule ascenseur, la cage et ses contacts est endéveloppement. L’ascenseur a le format de 2 kidules et peut rester horizontal.


Le schéma du câblage de l’ascenseurest donné ci-dessous. Les contactsd’étage ont tous un côté au 0V (pincarrée). Dans la version <strong>com</strong>plète,des poussoirs sont ajoutés sur lamaquette pour chaque étage (nondessinés sur le schéma). Des Ledsbicolores peuvent être ajoutées etreliées au le connecteur gauche du<strong>Kidule</strong>2550 pour indiquer quel’ascenseur est occupé ou qu’il arrive.Modèles logicielsLe processeur ne sait rien de l’application. Ses 8 bits du port B sont liés aux lignes de l’ascenseur et ilfaut associer des noms qui nous sont clairs avec les numéros de bits que le processeur manipule.<strong>Kidule</strong>Pic 18F2550 - Pinguino#define Appel3 PORTBbits.RB0#define Appel2 PORTBbits.RB1#define Appel1 PORTBbits.RB2#define Contact3 PORTBbits.RB3#define Contact2 PORTBbits.RB4#define Contact1 PORTBbits.RB5#define Monter PORTBbits.RB6#define Descendre PORTBbits.RB7Fichier de déf et programmes sous www.didel.<strong>com</strong>/kidules/KiAsc.zip<strong>Kidule</strong>882 Pic16F882 – assembleur CALMPour mémoire, le <strong>Kidule</strong> 882 est documenté enassembleur (nécessite un Pickit2)www.didel.<strong>com</strong>/kits/<strong>Kidule</strong>882.pdfwww.didel.<strong>com</strong>/kits/KiCalm1.pdfwww.didel.<strong>com</strong>/kits/PleiadeProg.pdfLogiciel ascenseur souswww.didel.<strong>com</strong>/kits/<strong>Kidule</strong>882Calm.zipLe <strong>Kidule</strong>2550 dans l’environnement Pinguino est aussi <strong>com</strong>patible avec les notations Arduino. Lelogiciel de la notice www.didel.<strong>com</strong>/kits/KiPing4.pdf suivait cette approche.Clignoter les 3 LedsLe fichier de définition considère que ces 3 Leds sont des entrées, celles des contacts d’étage. Il fautdonc redéfinir cette direction au début du programme.Le programme est ensuite trivial.Kia1LedsCli.pde se trouve <strong>com</strong>me lesautres programmes souswww.didel.<strong>com</strong>/kidules/KiAsc.zip//Kia1LedsCli.pde#include "KiAscDef.h"#define Led1 Contact1#define Led2 Contact2#define Led3 Contact3void loop (){TRISB = 0b00000111 ;Led1 = Allume ; Led2 = Eteint ; Led3 = Allume ;delay (400) ; // 400 millisecondesLed1 = Eteint ; Led2 = Allume ; Led3 = Eteint ;delay (400) ; // 400 millisecondes}Pour tester les poussoirs, le plus simpleest de les copier sur les LedsCe programme a une écriture très<strong>com</strong>pacte que l’on ne peut pas toujoursutiliser.//Kia2CopyPousToLeds.pde#include "KiAscDef.h"#define Led1 Contact1#define Led2 Contact2#define Led3 Contact3void loop (){TRISB = 0b00000111 ;Led1 = Appel1 ;Led2 = Appel2 ;Led3 = Appel3 ;}Le plus souvent, tester la valeur d’une ligne ou d’unevariable se fait avec un if.//Kia2bCopyPousToLeds.pde#include "KiAscDef.h"#define Led1 Contact1#define Led2 Contact2#define Led3 Contact3void loop (){TRISB = 0b00000111 ;if (Appel1 == ContactOn) Led1 = Allume ;else Led1 = Eteint;if (Appel2 == ContactOn) Led2 = Allume ;else Led2 = Eteint;if (Appel3 == ContactOn) Led3 = Allume ;else Led3 = Eteint;}


Le moteur est <strong>com</strong>mandé par deux bits. Selon les <strong>com</strong>binaisons des 2 bits, on a 4 <strong>com</strong>portementspour le moteur.Monter=0; Descendre=0; 0 0 bloquéLe programme Kia3TestMoteur.pdeMonter=0; Descendre=1; 0 1 tourne dans un sens fait des aller-retour avec arrêt bloqué. Si onMonter=1; Descendre=0; 1 0 tourne dans l’autre sens presse sur le poussoir Appel1, le moteurMonter=1; Descendre=1; 1 1 roue libres’arrête en roue libre.Qu’est-ce qui sera le mieux pour l’ascenseur ?Parfois, selon le schéma électronique, il faut un 0 et pas un 1 pour activer un moteur. Pour être<strong>com</strong>patible, on a défini les mots MototOn (=1 ici) et MotorOff.Le programme Kia4TestAsc.pde permet de faire monter et descendre l’ascenseur en pressant surles poussoirs Appel2 (monte) et Appel1 (descend).Ce programme est utile pour vérifier que les contacts d’étage se font au passage de l’ascenseur.Même une impulsion brève sera vue par le processeur, mais il faut qu’elle existe chaque fois !Ajuster si nécessaire la distance pour que cela fonctionne au mieux, sans bloquer la cabine.<strong>Ascenseur</strong> à 2 étagesOn veut que l’ascenseur monte si on presse sur Appel2, et descende si on presse sur Appel1, et qu’ils’arrête lorsqu’il touche le contact d’étages.Mais que se passe-il s’il ne s’arrête pas pile sur le contact. Il est monté trop haut au 2 e et on repèsesur Appel2. Il monte, et ne s’arrêtera pas !On voit que le programme doit se souvenir de ce qu’il a fait.L’ascenseur à 2 étages a 4 états : il est arrêté enhaut ou en bas, il monte ou il descend.S’il est en bas et qu’il y a Appel1, on ne fait rien. Sic’est Appel2, on monte.Maintenant, si on est dans l’état ‘’monte’’ on ignoreles boutons d’Appel et on ne regarde que leContact2. On était en bas et on monte, donc cecontact doit s’activer prochainement et on couperale moteur pour s’arrêter à l’étage 2.Dans chaque état, un if teste la condition qui ferapasser à l’état suivant. Lire attentivement leprogramme Kia6Asc2Etages.pde en suivant lediagramme qui montre les 4 états. Puis tester.Dé<strong>com</strong>poser l’application en états, et coder ce quifait passer d’un état à l’autre est très puissant.L’instructions switch expliquée à la page suivantefacilite l’écriture.Pour l’ascenseur à 3 étages, il suffit d’ajouter desétats. Le programme est Kia7Asc3Etages.pde


TableauxOn a vu pour le dé qu’il est facile de déclarer un tableau de valeursu8 Faces[6]={0b10111111,0b11110110,0b10110110,0b11010010,0b10010010,0b11000000};Le <strong>com</strong>pilateur réserve dans ce cas 6 positions mémoire consécutives, indexées de 0 à 5 et lesremplit avec les valeurs données.Mais on aurait pu simplement réserver ces 6 positions avec u8 faces [6] ; et les remplir ou relireindividuellement.EnumérationsEcrire Enum {Do,Re,Mi,Fa} notes ; est une <strong>com</strong>modité pour faire correspondre aux valeurs0,1,2,3, que le processeur sait bien utiliser pour ses décisions, des noms qui sont familiers auprogrammeur, avec un nom, une variable pointeur pour ce groupe numéroté.Donc les états de notre ascenseur ont un nom clair, et un numéro caché pour le processeur.Switch caseL’instruction switch (next) (le next a été défini à la fin de l’énumération, cela aurait été mieux del’appeler etat) regarde dans quel état on est. Le break ; fait que l’on passe à la fin sans regarderles autres états.Dans chaque état, on se pose la question ‘’ qu’est-ce que l’on fait quand on arrive dans cet état, qulleest la condition pour en sortir, et dans quel état on doit sauter.Le plus souvent, un if ou un while teste la condition qui fera passer à l’état suivant.InitialisationA l’enclenchement, on ne sait pas quelle est la position de l’ascenseur, donc dans quel état il setrouve. Il peut aussi se trouver dans un état non prévu, <strong>com</strong>me par exemple tout en bas, en dessousdu contact de l’étage 1. Si on demande d’aller à l’étage 1, notre programme le fait descentre, et il netrouvera jamais le contact1.L’initialisation choisie est de faire un peu monter l’ascenseur (pas trop s’il est déjà tout en haut) et dele faire ensuite descendre jusqu’à l’étage 1, et d’initialiser la valeur next à ‘’EstEn1’’.ExerciceOn a vu avec le Dé le programme De10Toggle.pde qui utilise 2 boucles while.Réécrire ce programme avec une machine à 2 états.Autre documentationPour l’atelier de 2 heures au Festival robotique EPFL 2011, la documentation suivante a été utilisée :http://fr.wikiversity.org/wiki/<strong>Kidule</strong>_D%C3%A9http://fr.wikiversity.org/wiki/<strong>Kidule</strong>_<strong>Ascenseur</strong>Autres applications avec la carte <strong>Kidule</strong>-<strong>Ascenseur</strong>Pour <strong>com</strong>mander un passage à niveau, il faut 2 capteurs pour savoir quand le train arrive et quand ila passé, et éventuellement 2 capteurs pour arrêter le moteur quand la barrière est levée ou baissée(on peut aller en butée).jdn 101126/110430/110717

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!