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 :

Nouveau tutoriel pour débuter sur Arduino [Tutoriel]


Sujet :

Arduino

  1. #1
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut Nouveau tutoriel pour débuter sur Arduino
    Bonsoir

    J'ai rédigé un tutoriel pour débuter dans Arduino : https://nboulaire.developpez.com/tut...ation-arduino/

    Merci pour vos commentaires et bonne lecture !

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 838
    Points : 5 744
    Points
    5 744
    Par défaut
    Merci pour cette contribution

    Je suis partisan d’apprendre très tôt à respecter une cohérence de type et de ne pas dépendre de promotions automatiques cachées par le langage et d’éviter les valeurs magiques parsemées dans le code. Quand vous proposez de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     {
      boolean etatBouton = digitalRead(2);
      if (etatBouton == 1)
    ca me choque donc un peu
    un booléen est vrai ou faux, la fonction digitalRead ne retourne pas vrai ou faux mais un concept d’état de la tension sur cette pin avec HIGH ou LOW représenté par un entier de type int.

    Je proposerais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const byte pinBouton = 2;
    int etatBouton = digitalRead(pinBouton);
    if (etatBouton == HIGH)

  3. #3
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut
    Bonjour Jay M,

    Merci de ta remarque, très pertinente : je modifierai le type de etatBouton ainsi que le test du if.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 838
    Points : 5 744
    Points
    5 744
    Par défaut
    Merci

    et j'ai vu que vous traitez de cela dans la partie "Amélioration de la lisibilité du code d’un programme" (et la notion de const est aussi importante car elle permet au compilateur de faire des optimisations.)


    j'ai repéré quelques autres améliorations:

    * Quand vous parlez de
    la ligne 31, on convertit en fait une valeur d’une échelle (qui va de 0 à 1023) en une valeur dans une autre échelle (qui va de 0 V à 5 V). Au lieu de faire un produit en croix, on peut utiliser une instruction Arduino qui fait la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map(valeur, limite_inf_1,  limite_sup_1, limite_inf_2, limite_sup_2)
    où valeur est la valeur à convertir, limite_inf_1 et limite_sup_1 sont les limites de la 1re échelle dans laquelle est mesurée la valeur (dans notre cas 0 et 1023), limite_inf_2 et limite_sup_2 sont les limites de la nouvelle échelle (dans notre cas 0 et 5 V) → la ligne 31 pourrait donc s’écrire de manière équivalente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float tension = map(valeurTemp, 0, 1023, 0, 5);
    --> map() travaille uniquement en entier donc vous auriez dans tension uniquement un entier de 0 à 5 (et 5 uniquement si vous avez obtenu 1023 pile) même si vous stockez le résultat dans un nombre décimal.

    * dans "Les précautions pour éviter de détruire la carte Arduino voire plus", vous dites
    la résistance d’un fil est quasi nulle (mettons 0,1 W pour le calcul)
    ou encore
    La valeur minimale est de 125 W, mais il vaut mieux prévoir un peu plus et opter pour une résistance de 220 W.
    --> il ne s'agit pas de Watts mais d'Ohm bien sûr (peut-être le symbole ("Ω") ne s'affiche-t-il pas bien ?)


    * je vous suggère aussi de prendre 115200 (voir plus) comme débit par défaut pour le port Série. il n'y a plus aucune raison d'aller à 9600 bauds comme au temps des premier arduino. en fait aller lentement risque de générer certains bugs de timing dans les programme car un appel à print devient bloquant dès que vous avez plus de 64 octets à émettre en attente.



    bravo et merci encore pour ce partage !

  5. #5
    Membre éprouvé

    Homme Profil pro
    Technicien
    Inscrit en
    Août 2013
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2013
    Messages : 440
    Points : 1 192
    Points
    1 192
    Par défaut
    Citation Envoyé par Jay M Voir le message
    * Quand vous parlez de

    --> map() travaille uniquement en entier donc vous auriez dans tension uniquement un entier de 0 à 5 (et 5 uniquement si vous avez obtenu 1023 pile) même si vous stockez le résultat dans un nombre décimal.
    Ah oui, c'est juste : j'ajouterai une petite précision.

    Citation Envoyé par Jay M Voir le message
    * dans "Les précautions pour éviter de détruire la carte Arduino voire plus", vous dites ou encore --> il ne s'agit pas de Watts mais d'Ohm bien sûr (peut-être le symbole ("Ω") ne s'affiche-t-il pas bien ?)
    J'ai corrigé une partie des symboles qui restaient mais apparemment pas tous : j'ai effectivement un souci lors de l'exportation (que je passe par la police symbol ou par l'insertion d'un caractère spécial) qui n'affiche pas les lettres grecques.

    Citation Envoyé par Jay M Voir le message
    * je vous suggère aussi de prendre 115200 (voir plus) comme débit par défaut pour le port Série. il n'y a plus aucune raison d'aller à 9600 bauds comme au temps des premier arduino. en fait aller lentement risque de générer certains bugs de timing dans les programme car un appel à print devient bloquant dès que vous avez plus de 64 octets à émettre en attente.
    En pratique, j'opte désormais pour 115200 mais comme j'ai repris certaines anciennes versions de mes programmes, j'avoue ne pas avoir fait la mise à jour le débit.

    Citation Envoyé par Jay M Voir le message
    bravo et merci encore pour ce partage !
    Merci

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 893
    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 893
    Points : 58 641
    Points
    58 641
    Billets dans le blog
    46
    Par défaut
    Plus de raison de ne pas s'y mettre, merci pour ce cours

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2020
    Messages : 1
    Points : 2
    Points
    2
    Par défaut question programme
    bonsoir monsieur,
    tout d'abord merci beaucoup pour votre cours qui m'a permis d'acquérir vraiment rapidement les bases d'arduino
    j'ai une petite question : à quoi sert l'opération:

    float valeurTension = valeurCapteur * 5.0 / 1023.0; dans le programme de mesure de lumisoté avec une photo-résistance, je me doute qu'il s'agit d'une conversion avec le binaire mais je n'arrive pas à savoir exactement quoi

    merci d'avance et bonne soirée.

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 838
    Points : 5 744
    Points
    5 744
    Par défaut
    Bonjour @cilodix

    Lorsque vous faites une lecture de la sortie du convertisseur analogique vers numérique (ADC) par la fonction analogRead() vous effectuez un échantillonnage de la tension présentée sur la broche choisie, par exemple A0. Cette valeur numérique est entre 0 et 1023 car l’échantillonnage se fait sur 10 bits sur un UNO.

    Ensuite on peut choisir quelle est la référence de tension pour l’ADC, c’est à dire avec quelle tension maximale il fait son échantillonnage par la fonction analogReference(). Si on ne dit rien, par défaut ce sera 5 volts sur un UNO.

    Donc quand la lecture de l’ADC dit 0 c’est qu’on avait 0 Volt sur la broche et quand la lecture de l’ADC dit 1023 c’est qu’on avait 5 Volt sur la broche et entre les deux c’est une droite.

    Une formule qui permet de passer donc de la valeur numérique lue vers la tension est la fonction affine Y = aX+ b passant par ces deux points (0,0) et (1023,5).

    Comme on passe par l’origine b=0 et la pente c’est 5.0 / 1023.0 d’où la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeurCapteur * 5.0 / 1023.0;
    (Il y a un débat entre les puristes pour savoir s’il vaut mieux diviser par 1024 ou 1023. Mon point de vue c’est que les deux donnent une évaluation possible de la valeur d’origine puisqu’on a échantilloné. Chaque valeur numérique corrrespond en réalité à toute une plage de tension d’origine et on n’a pas une fonction affine mais une fonction en escalier discontinue par morceaux). La division par 1023 est sympathique car elle donne un joli 5V tout rond si vous lisez 1023 donc c’est ce que je préfère, mais faut bien se souvenir que la valeur calculée a une incertitude d’environ 5mV.)

Discussions similaires

  1. Cours et tutoriels pour débuter avec SAP
    Par birdy85 dans le forum SAP
    Réponses: 22
    Dernier message: 14/09/2016, 22h37
  2. Tutoriels pour débuter en Assembleur
    Par Alcatîz dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/03/2013, 18h50
  3. [Portlet] Tutoriel pour débuter avec les portlets
    Par AbdeL02 dans le forum Portails
    Réponses: 7
    Dernier message: 20/08/2008, 01h24
  4. Réponses: 2
    Dernier message: 23/11/2007, 10h50
  5. Cherche tutoriels pour débuter
    Par Torkan dans le forum DirectX
    Réponses: 2
    Dernier message: 28/02/2006, 19h48

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