Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Moway capteur de son - micro ADC



  1. #1
    danest

    Moway capteur de son - micro ADC

    Bonjour,

    Après avoir enseigné le génie civil pendant 15 ans, je mets à la poubelle toute mon expérience et mon savoir pour enseigner l'électronique en STI2D (ceci est dit pour bien comprendre mon grand désarroi et mon incompétence en électronique).
    Donc ce qui suit n'est pas le prof qui enseigne, mais le profélève qui veut apprendre.

    Le lycée dispose du robot Moway que je souhaiterais utiliser pour mes cours. J'ai d'abord utilisé le GUI (interface intuitive du logiciel graphique qui permet de programmer facilement le robot et de télécharger le programme via le port USB).
    Mais les possibilités sont un peu limitées. Il y a sur internet des exemples pour suivre une ligne, mais j'avais l'idée d'utiliser le micro (capteur de sons).
    Je souhaitais écrire un programme (d'abord simple), qui ferai avancer le robot lorsqu'on frappe dans les mains, puis qui s'arrête en frappant à nouveau dans les mains (on pourra toujours compliquer les choses ensuite en frappant 2 fois ça tourne à gauche, 3 fois ça tourne à droite 4 fois ça fait marche arrière … 319 fois ça fait … (non ! je plaisante)).

    Avec le GUI, j'ai réussi à faire avancer le Moway, en produisant un bruit (claquement dans les mains), mais il s'arrête rapidement à cause de son propre bruit. Mon problème étant l'intensité du son.
    J'ai donc voulu programmer en C, mais ça ne change rien. Pour être plus précis, je ne sais pas accéder au "ADC" comme la documentation le précise.

    Extrait de la documentation :

    unsigned char SEN_MIC_ANALOG(void)

    OUTPUT : Sound intensity.

    The SEN_MIC_ANALOG function captures the analog value that depends on the sound intensity from the microphone. To achieve this, function follows these steps:
    • Activate the ADC.
    • Wait for the data acquisition process to end (100us).
    • Read the analog value.

    Le problème, est comment on active le ADC ?
    Je ne l'ai pas trouvé dans la documentation et … pas sur internet non plus.
    Voilà le programme que j'ai écrit (enfin c'est un bien grand mot ! que j'ai essayé d'adapter à ce que je souhaite faire. Car les premières lignes étaient dans un exemple donné, et je n'y comprends rien.

    Entre
    #include "p18f86j50.h" //Moway microcontroller

    Et
    //low priority interrupt code
    }

    Le message reste très mystérieux pour moi et si quelqu'un a une info là dessus, je suis preneur.
    C'est surtout dans le "MAIN" que j'ai essayé de modifier.
    Voilà le programme (se concentré sur le MAIN essentiellement) :

    #include "p18f86j50.h" //Moway microcontroller
    #include "lib_mot_moway.h" //Engines library
    #include "lib_sen_moway.h" //Sensor library
    #include "delays.h"

    //****************************** ****************************** ****************************** **********************//
    // JUMPING THE BOOTLOADER
    //****************************** ****************************** ****************************** **********************//
    #define REMAPPED_RESET_VECTOR_ADDRESS 0x1000 //Reset adress for the correct bootloader jump
    #define REMAPPED_HIGH_INTERRUPT_VECTOR _ADDRESS 0x1008 //High priority interruption adress for the correct bootloader jump
    #define REMAPPED_LOW_INTERRUPT_VECTOR_ ADDRESS 0x1018 //Low priority interruption adress for the correct bootloader jump

    void YourHighPriorityISRCode(); //Function that executes the needed code in case of the high priority interruption jumps.
    void YourLowPriorityISRCode(); //Function that executes the needed code in case of the low priority interruption jumps.
    //*********************RESET, HIGH AND LOW PRIORITY INTERRUPTION REMAP************************* ***//
    extern void _startup (void);
    #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
    void _reset (void)
    {
    _asm goto _startup _endasm
    }
    #pragma code

    #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR _ADDRESS
    void Remapped_High_ISR (void) { _asm goto YourHighPriorityISRCode _endasm }

    #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ ADDRESS
    void Remapped_Low_ISR (void) { _asm goto YourLowPriorityISRCode _endasm }

    #pragma code

    #pragma interrupt YourHighPriorityISRCode
    void YourHighPriorityISRCode() {
    //high priority interrupt code
    }
    #pragma interruptlow YourLowPriorityISRCode
    void YourLowPriorityISRCode() {
    //low priority interrupt code
    }

    //****************************** ******[MAIN]****************************** ********************
    void main()
    {
    char a = 0;
    int compt = 0;
    //**********SENSOR CONFIGURATION************//
    SEN_CONFIG();
    // enregistrer un son
    // SEN_MIC_ANALOG()

    Ici je fais une boucle pour augmenter le temps de saisie du bruit que je veux enregistrer.
    for (compt = 0; compt <5; compt ++);{

    J'allume une LED pour me donner le signal d'enregistrement du son.
    LED_FRONT_ON();

    Je mets dans une variable "a" l'intensité du son (mais là, j'ai l'impression que ça ne marche pas).
    a= SEN_MIC_ANALOG();

    Je laisse un peu de temps pour l'enregistrement du son. Tant que la LED est allumée, je produit un son.
    Delay10KTCYx (500);
    }

    J'éteins la LED pour signaler qu'il faut interrompre le bruit (il doit être enregistré maintenant)
    LED_FRONT_OFF();

    Une petite boucle pour une petite pause
    for (compt = 0; compt <5; compt ++);{
    Delay10KTCYx (100);
    }

    J'allume une autre LED pour indiquer le passage à l'étape suivante
    for (compt = 0; compt <5; compt ++);{
    LED_TOP_GREEN_ON();
    Delay10KTCYx (500);
    }
    Test sur l'intensité du bruit. S'il est supérieur à "a", la LED doit s'allumer.
    C'est vraiment ici qu'il y a un preblème

    while(1){
    if (SEN_MIC_ANALOG()==a ) {
    LED_FRONT_ON();}
    }
    }

    Ce qui se passe, c'est que même sans générer de bruit, la LED s'allume.

    Si quelqu'un maitrise bien le Moway ou le PIC 18f86j50 et peut me renseigner, je serais preneur et très reconnaissant.
    Et si quelqu'un a des idées mettant en œuvre le capteur de température ou de lumière, ça serait le top.

    Pour info, j'ai lu (plutôt survolé) : Christian Dupaty, noxyben, PBelectronique (video), Fabrice Sincère, Pascal Mayeux, Bigonoff …
    Documents généralement très complets mais qui nécessitent beaucoup de temps pour maitriser les microcontroleurs. Mon ambition est bien plus limitée que la portée de ces documents.
    Je veux limiter à l'algorithmique du programme de STI2D tronc commun. Juste ce petit programme : avancer et arrêter en frappant dans les mains.

    En remerciant tous ceux qui pourraient m'apporter des renseignements et les autres aussi pour avoir pris la peine de me lire (je sais c'était un peu long).

    -----


  2. #2
    jls28

    Re : Moway capteur de son - micro ADC

    Bonjour,

    Frapper dans les mains pour commander un robot ? bof...

    moi je me tournerai plutot vers une solution à DTMF,

    un circuit DTMF codeur et un décodeur avec quartzs ou résonnateurs céramiques ,
    ces circuits sont assez bon marché
    et ça sera bien plus fiable.

  3. #3
    danest

    Re : Moway capteur de son - micro ADC

    bonjour jls28,

    Mais le lycée a fait l'acquisition du Moway ! j'ai pas le choix.

    Puis avec DTM Codeur décodeur quartz ou résonateur céramique, pour les plus gentils c'est juste des boulettes de papier qui vont me balancer !

    C'est pour de l'enseignement. Cad il faut amuser les enfants, du ludique !!

Sur le même thème :

Discussions similaires

  1. capteur micro
    Par BertrandDupont dans le forum Électronique
    Réponses: 1
    Dernier message: 16/04/2013, 20h22
  2. Un micro-ondes avec capteur automatique de la cuisson
    Par Tom311 dans le forum Technologies
    Réponses: 3
    Dernier message: 31/08/2012, 09h17
  3. micro capteur distance/altitude
    Par tim_world dans le forum Électronique
    Réponses: 3
    Dernier message: 25/08/2011, 17h18
  4. Capteur à ultrasons + Arduino ADC
    Par vlad59134 dans le forum Électronique
    Réponses: 8
    Dernier message: 17/02/2011, 18h53
  5. Centrage de tension capteur pour ADC
    Par alienx dans le forum Électronique
    Réponses: 6
    Dernier message: 02/03/2010, 20h06