IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Capteur ultrasons


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut Capteur ultrasons
    Bonjour/bonsoir à tous et à toutes,

    Moi et mes collègues de terminales STI2D planchons sur notre projet pour le bac, en spécialité SIN (d'où notre présence ici, vous me direz). Nous devons concevoir un orgue électrique automatisé, et nous devons retoucher la soufflerie afin qu'elle aussi soit autonome, et nous passerons pour cela par l'utilisation d'un capteur. Ayant démarrés le C uniquement cette année, nous rencontrons des difficultés avec le programme. Pour faire simple, nous utilisons un capteur à ultrasons qui doit calculer la distance entre le ballon d'air et lui même, et, en fonction de la distance ( distance<2cm vitesse=diminue // distance>2 vitesse=augmente), modifier la vitesse du rotor, donc le débit d'air afin que le ballon garde une constante, de manière à ce que les flûtes n'aient jamais d'arrêt ou de surplus d'air lorsque que l'orgue jouera. Voici notre avancée actuelle sur le code en question :
    (oui le code parle d'un servomoteur car nous nous entrainons sur cela)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <Servo.h>
    Servo myservo;
    int pos =0;
    int augmente =1; 
    int ultrason (7);
    int cm;
     
    void setup()
    {
        myservo.attach(5);
        myservo.write(90);
    }
     
     
    void loop()
    {
    while (cm<5)
    {
    if (augmente)
    pos++;
    if(!augmente)
    pos--;
    if(pos>180)
    augmente =0;
    if (pos<0)
    augmente =1; 
    myservo.write(pos); 
    delay(15);
    }
    }
     
    /*for(pos = 0; pos < 180; pos += 1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    for(pos = 180; pos>=1; pos-=1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    }*/

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut Tintin,
    Quelle est la question ?
    Sur quoi bloques tu exactement ?

    Il va falloir être plus précis que ça si tu veux que l'on t'aide ou que l'on t'aiguille (sans pour autant tout faire à ta place.)

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Vincent,
    Nous devons faire de l'asservissement de position pour que la soufflerie donne un volume d'air constant. Pour cela, nous devons régler la vitesse du "ventilateur" en fonction de la hauteur de la soufflerie pour que celle-ci n'explose pas ou soit dégonflée.
    Nous avons donc réalisé un code et nous aimerions savoir si nous sommes sur la bonne route, nous hésitons à utiliser le "while" ou le "for" qui est en commentaire dans le code, car avec "for", nous n'y arrivons pas, arduino nous mets une erreur.

    Merci et bonne soirée

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Tu es dur Tintin,
    C'est un projet top secret pour que tu ne me dises même pas l'erreur que tu donnes le compilateur sur la boucle for ?
    Il faut que tu donnes plus d'info, je comprends que tu ais ton projet en tête et que tout ce que tu dis te semble précis mais pour nous ce n'est pas le cas.
    Regarde les questions que je dois me poser pour tenter de comprendre ce que tu souhaites faire (regarde les commentaires que j'ai mis dans ton code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <Servo.h>
    Servo myservo; 
     
    int pos =0; 
    int augmente =1; 
     
    int ultrason (7); /* ???? untrason (7) ??? Un prototype de fonction ? */
     
    int cm; /* cm n'est pas initialisée */
     
     
    /* Je ne vois pas où cette fonction est utilisée dans le programme principale qui s'appelle "main" ? */
    void setup()
    {
        myservo.attach(5);
        myservo.write(90);
    }
     
    /* Je ne vois pas où cette fonction est utilisée dans le programme principale qui s'appelle "main" ? */
    void loop()
    {
        while (cm<5) /* cm n'étant pas initialisée ni utilisée, la comparaison n'est pas possible et forme un boucle sans fin 
                        sauf si cm est initialisée et modifiée par une fonction d'interruption, puisqu'elle est globale c'est possible */
        {
            if (augmente) /* écrire ça est équivalent à "Si augmente est VRAI Alors pos++ Fin Si" en sachant que toutes valeurs différentes de 0 est forcément VRAI */
                pos++;
     
            if(!augmente) /* écrire ça est équivalent à "Si augmente est FAUX Alors pos-- Fin Si" en sachant que seule la valeur 0 est FAUSSE */
                pos--;
     
    /* 
     * Si pos > 180 alors augmente = 0, donc au prochain tour de while on aura des pos-- jusqu'à ce que pos arrive à -1
     * une fois à -1, augmente passe à 1 et au prochain tour de while on aura des pos++ jusque 181.
     *
     * C'est ce que tu souhaites faire ? 
     * 
     *
     */
     
            if(pos>180)
                augmente =0;
     
            if (pos<0)
                augmente =1; 
     
         myservo.write(pos); 
         delay(15);
        }
     
    }
     
    /* Donne moi le message d'erreur du compilateur pour que je comprenne un peu mieux */
     
    /*for(pos = 0; pos < 180; pos += 1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    for(pos = 180; pos>=1; pos-=1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    }*/
    Peut être qu'en reformulant plus simplement ce que tu souhaites ça ira mieux ?

    Par exemple :
    J'ai une variable "cm" qui contient l'info de mon capteur ultrason. Elle varie de ? à ?.
    Je voudrai que la variable "pos", qui est destinée au pilotage de mon ventilateur fasse telle ou telle chose en fonction de "cm".



    A+
    Vincent
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Je vais essayer de répondre à vos questions, mais n'ayant pas le matériel à disposition avant demain après-midi, je ne peux pas avancer, désolé. Je vous prépare un petit fichier du problème "simplifié" et de ce que nous souhaitons faire. Merci encore, à demain après-midi

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    @Vincent :
    /* Je ne vois pas où cette fonction est utilisée dans le programme principale qui s'appelle "main" ? */
    void setup()
    {
    myservo.attach(5);
    myservo.write(90);
    }

    /* Je ne vois pas où cette fonction est utilisée dans le programme principale qui s'appelle "main" ? */
    void loop()
    Je vais répondre à ces deux questions :
    Quand on programme avec un arduino le code comprend 2 fonctions essentielles :
    -setup()
    qui permet l'initialisation des entrées / sorties de la platine. Dans cette fonction tu peux également initialiser tes variables.
    Cette fonction est exécutée 1 fois, lors de la mise sous tension de la platine, juste après son initialisation.
    - loop() qui, comme son nom l'indique est une boucle infinie. Cela correspond au main.

    Donc le main() que l'on retrouve dans les code C ou C++ est sous-entendu dans les codes conçus pour Arduino.
    La structure du code posté par TintinTerm est donc juste


    @TintinTerm
    Je ne vois nulle part la configuration de tes pins de ton Arduino.
    - Tu utilises un capteur ultra-son. Mais sur quelle entrée l'as-tu branché ?
    - Pour pouvoir piloter le servomoteur il faut également configurer la sortie laquelle as-tu choisi ?
    - Dans tes boucles tu ne lis aucune entrée (= la valeur du capteur ultra-son) donc dans ce cas comment piloter le servomoteur ?

    Je vois des délais de 15ms à quoi correspondent-ils ?

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Citation Envoyé par Auteur Voir le message
    @Vincent :


    Je vais répondre à ces deux questions :
    Quand on programme avec un arduino le code comprend 2 fonctions essentielles :
    -setup()
    qui permet l'initialisation des entrées / sorties de la platine. Dans cette fonction tu peux également initialiser tes variables.
    Cette fonction est exécutée 1 fois, lors de la mise sous tension de la platine, juste après son initialisation.
    - loop() qui, comme son nom l'indique est une boucle infinie. Cela correspond au main.

    Donc le main() que l'on retrouve dans les code C ou C++ est sous-entendu dans les codes conçus pour Arduino.
    La structure du code posté par TintinTerm est donc juste
    Salut Auteur,
    Je n'ai jamais utilisé Arduino (ATMEL si je ne m'abuse ?) J'ai travaillé, à l'époque où j'étais developpeur électronique, sur du TEXAS MSP430, un peu de ARM chez NXP et sur quelques PIC.
    Merci pour ces élements je comprends mieux.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Demain je vous mettrais un code bien propre avec les commentaires nécessaire à coté, merci Auteur pour ton aide

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Salut Auteur,
    Je n'ai jamais utilisé Arduino (ATMEL si je ne m'abuse ?) J'ai travaillé, à l'époque où j'étais developpeur électronique, sur du TEXAS MSP430, un peu de ARM chez NXP et sur quelques PIC.
    Merci pour ces élements je comprends mieux.
    Effectivement, la platine Arduino incorpore un micro-contrôleur ATMEL. Tu devrais essayer, c'est un régal de programmer ces micro-contrôleurs en utilisant cette interface. Tu peux mettre les mains de le cambouis en développant des bibliothèques. Par exemple TintinTerm utilise la bibliothèque servo.h.

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Citation Envoyé par TintinTerm Voir le message
    Pour faire simple, nous utilisons un capteur à ultrasons ...
    Peut-être qu'il faudrait aussi préciser le capteur que tu utilises. Il y en a qui fonctionnent en analogique, d'autres en largeur d'impulsion, en signaux série TTL, en I2C...

  11. #11
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Je dois avouer que Arduino est très populaire et c'est tentant mais j'allais me commander le Launch Pad de chez Texas http://www.ti.com/tool/msp-exp430f55...-EN-Everything il faut compter environ 13$ pour cette démo board.
    Après je n'aurai plus que installer sur ma Debian la toolchaine gcc-MSP430 + gdb-MSP430 + Eclipse (qui sont déjà dans les dépôts Wheezy) mais avant je m'assurerai que le micro concerné est bien supporté par GDB.

    La force d'Arduino est que cette démo board a été bien pensé, facile a prendre en main avec son bootloader, prix attractif, faisant office de prototype rapide, bonne communication et avec une grosse communauté. A l'instar de Raspberry qui a été pensé de la même manière même si on est pas du tout sur le même calibre. Par contre quand on regarde de prêt chez la concurrence de Arduino ou même de Raspberry on peut se faire un peu peur quant à notre engouement pour elles !!!!!

    D'ailleurs en parlant de ça, je n'ai pas encore déballé le mien de Raspberry.


    En reparlant du projet de notre ami Tintin, je pense qu'il veut implémenter un régulateur PID pour faire son asservissement. Du moins c'est ce que je crois deviner au travers de son programme d'essai.
    On attend ton code.

    A demain.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  12. #12
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Si vous le pensez utile, dite moi si j'ai totalement tord ou si ma méthode n'est pas la plus simpliste, car je suis perdu et démoralisé, cela fait plus d'un mois que nous travaillons dessus :/ ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #include <Servo.h> //inclus la librairie Servo
    Servo myservo; // Servo délaré
    int pos =0; //position de debut 0
    int augmente =1; //Quand la variable le servo bouge
    int ultrason (7); //le capteur US est sur la sortie 7
    int cm; // variable cm
    int dg // variable degrès
     
    void setup()
    {
        myservo.attach(5); //le servo est branché sur la sortie 5
        myservo.write(90); //90°
    }
     
     
    void loop()
     
    digitalRead (7); //lit la valeur de l'ultrason
    cm = digitalRead (7);
    {
    while (cm<5) //distance inférieure à 12cm
    {
    if (augmente)
    pos++; //le servo tourne
    if(!augmente) //ne bouge pas
    pos--; //il tourne en sens inverse
    if(pos>180) //quand le capteur arrive en fin de course
    augmente =0; //il revient à 0, debut de course
    if (pos<0) // lorsqu'il arrive au debut de course
    augmente =1; // on incremente donc il va en fin de course
    myservo.write(pos); //lecture de la position 
    delay(15); //pause de 15 sec
    }
    }
     
    /*for(pos = 0; pos < 180; pos += 1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    for(pos = 180; pos>=1; pos-=1) 
    { 
    myservo.write(pos); 
    delay(15); 
    }
    }*/
    Images attachées Images attachées

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Salut,

    Je pense qu'il faut d'abord comprendre comment tu peux récupérer la distance de l'obstacle avec ton capteur en mettant provisoirement de côté le servo.

    Tu as un code de démonstration ici avec une bibliothèque "Ultrasonic.h". As-tu essayé ce code (après l'avoir adapté si tu n'as pas le LCD) ?

  14. #14
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ultrason (7); //le capteur US est sur la sortie 7
    je répète mon précédent message :
    Citation Envoyé par Auteur
    Je ne vois nulle part la configuration de tes pins de ton Arduino.
    Pour configurer les entrées et les sorties de l'Arduino il faut passer par pinMode

    Toutefois si tu passes par la bibliothèque "Ultrasonic.h" il n'est pas nécessaire d'utiliser pinMode (cf. exemples donnés par f-leb).

    -------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    digitalRead (7); //lit la valeur de l'ultrason
    cm = digitalRead (7);
    pourquoi 2 appels à digitalRead ?
    La fonction digitalRead() lit une valeur numérique au sens électronique du terme c'est à dire qu'elle retournera soit 0 (=0V en entrée) soit 1 (=5V en entrée). Il n'y a aucune valeur intermédiaire. Donc le while (cm<5) n'a aucun sens.

    -------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void loop()
    
        digitalRead (7); //lit la valeur de l'ultrason
        cm = digitalRead (7);
    {
    Il n'y a pas un petit problème ? L'accolade vient après le nom de la fonction.

  15. #15
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Nous avons mit au point un programme qui règle la vitesse du servomoteur (simule un ventilo) avec un potentiomètre, mais nous aimerions maintenant changer le potentiomètre par le capteur ultrason. ((la vitesse en fonction de la distance entre le capteur et la réserve d'air)) Comment pourrions-nous faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //SIGNAL PWM
     
    #include <Servo.h> 
     
    Servo myservo;  //création de l'objet servo pour contrôler un servo 
     
    int potpin = 0;  // potentiomètre connecter en analogique
    int val;    // variable qui lit les données du potentiomètre
     
    void setup() 
    { 
      myservo.attach(8);  // le servo est connecté sur la sortie 9 
    } 
     
    void loop() 
    { 
      val = analogRead(potpin);            // lit la valeur du potentiomètre (0-1023) 
      val = map(val, 0, 1023, 0, 180);     // échelle utiliser pour le servo (0-180) 
      myservo.write(val);                  // règle le servo avec l'echelle
      delay(15);                           // attente pour que le servo va à la position 
    }

  16. #16
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Sur le plan matériel, comment tu relies ton capteur à l'Arduino ? Tu disposes de ce shield ?

  17. #17
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Oui effectivement f-leb

  18. #18
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Hé bien il reste à télécharger la bibliothèque comme indiqué dans le wiki.

    En reprenant le code de démo :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include "Ultrasonic.h"
     
    Ultrasonic ultrasonic(7); // déclaration d'une instance de l'objet Ultrasonic, capteur branché sur D7 du shield
     
    long RangeInCentimeters;
     
    void setup()
    {
     
    }
    void loop()
    {
        RangeInCentimeters = ultrasonic.MeasureInCentimeters(); //récupération de la distance en cm
     
    // ah ben ça y est, j'ai ma distance en cm et j'en fais ce que j'en veux
     
    }

  19. #19
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2015
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Donc le code serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include "Ultrasonic.h"
    Ultrasonic ultrasonic(8); // déclaration d'une instance de l'objet Ultrasonic, capteur branché sur D8 du shield
    long RangeInCentimeters;
    #include <Servo.h>
    Servo myservo;  //création de l'objet servo pour contrôler un servo
    int val;    // variable qui lit les données du capteur ultra son
     
     
    void setup()
    {
     Serial.begin (9600);
     myservo.attach(8);  // le servo est connecté sur la sortie 8
    }
     
     
    void loop()
    {
        RangeInCentimeters = ultrasonic.MeasureInCentimeters(); //récupération de la distance en cm
        val = map(val, 3, 400, 0, 180); // échelle utiliser pour le servo (0-180) /le capteur ultra son peut aller de 3 à 400cm 
        myservo.write(val); // règle le servo avec l'echelle
        delay(15); // attente pour que le servo va à la position 
    }

  20. #20
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Ca ferait plus ça Tintin
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include "Ultrasonic.h"
    Ultrasonic ultrasonic(8); // déclaration d'une instance de l'objet Ultrasonic, capteur branché sur D8 du shield
     
    #include <Servo.h>
    Servo myservo;  //création de l'objet servo pour contrôler un servo
    int val;    // variable qui lit les données du capteur ultra son
     
     
    void setup()
    {
     Serial.begin (9600);
     myservo.attach(8);  // le servo est connecté sur la sortie 8
    }
     
     
    void loop()
    {
        val = ultrasonic.MeasureInCentimeters(); //récupération de la distance en cm
        val = map(val, 3, 400, 0, 180); // échelle utiliser pour le servo (0-180) /le capteur ultra son peut aller de 3 à 400cm 
        myservo.write(val); // règle le servo avec l'echelle
        delay(15); // attente pour que le servo va à la position 
    }
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [STM32] Capteurs ultrasons + bip sonore STM32F4
    Par safaensi dans le forum Embarqué
    Réponses: 2
    Dernier message: 06/02/2015, 08h41
  2. commande d un capteur des ultrasons à l'aide du langage VHDL
    Par moussaoui.yasir dans le forum VHDL
    Réponses: 1
    Dernier message: 04/11/2013, 15h34
  3. Réponses: 0
    Dernier message: 20/06/2013, 00h32
  4. Modulation d'un signal pour capteur ultrasons
    Par inter69 dans le forum Signal
    Réponses: 4
    Dernier message: 05/01/2008, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo