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 :

Contrôleur de richesse lambda


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Contrôleur de richesse lambda
    Bonjour
    je restaure un véhicule ancien et je souhaiterais monter un contrôleur de richesse, je souhaiterais en créer un avec un Arduino et des LED pour indication,10 au total.
    La sonde lambda fournit une tension variant de 0V à 1V, je souhaiterais programmer mon Arduino pour qu'il commande les LED graduellement de 0v a 1v le max.
    je cherche part tout comment programmer cela mais j'ai beaucoup de mal a comprendre.
    je vous demande votre aide pour la programmation merci.

  2. #2
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    un Arduino genre UNO dispose d'un convertisseur Analogique vers Numérique. Il est donc capable de lire votre tension entre 0 et 1V et vous représenter cela sous forme numérique.

    --> regarder la fonction analogRead()

    dans votre cas particulier, la tension étant inférieure à 1.1V, vous pouvez améliorer la précision de la mesure en utilisant la fonction analogReference() et en choisissant INTERNAL1V1

    Ainsi un analogRead() vous donnera 0 pour 0V et 1023 pour 1.1V (et donc environ 930 pour 1V et une échelle linéaire entre les deux).

    Ensuite il faut convertir ce nombre en commande d'allumage des LEDs, là ça dépend du type d'afficheur que vous aurez choisi.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'ai choisi d'afficher cela part un 10 LEDs 3mm monter directement sur Arduino,je suppose qu'il y a une fonction mais comment convertir ce nombre en commande d'allumage des LEDs ??
    merci

  4. #4
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    OK donc chaque LED est attachée à une PIN (avec une résistance de limitation de courant).

    vous mettez ces pins dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const byte pinsAfficheur[] = {2,3,4,5,6,7,8,9,10,11}; // les 10 pins des LEDs, dans l'ordre d'allumage
    Comme vous aurez lu une valeur entre 0 et 930 pour la tension, il faut convertir cela en nombre de LEDs de 0 à 10. les fonctions map() et constrain () peuvent vous aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte nombreDeLeds = map (analogRead(pinCapteur), 0, 931, 0, 11); 
    nombreDeLeds = constrain(nombreDeLeds, 0, 10); // pour être sûr d'être entre 0 et 10
    ensuite il suffit de faire une boucle pour allumer et éteindre les LEDs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (byte i = 0; i < nombreDeLeds; i++) digitalWrite(pinsAfficheur[i], HIGH); // on allume celles là
    for (byte i = nombreDeLeds; i < 10; i++) digitalWrite(pinsAfficheur[i], LOW); // on éteint le reste

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    d'accord je vais préparer ma programmation cette après midi et tout comprendre dans le calme, pour les LEDs je compte mettre une Résistance 220 ohm pour chacun.
    Merci beaucoup pour votre aide je vous tien au courant.

  6. #6
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    Citation Envoyé par uioph Voir le message
    pour les LEDs je compte mettre une Résistance 220 ohm pour chacun
    Attention 5V / 220Ω = 22,7mA par LED. On essaye le plus souvent de rester sous 25/30mA (les pins tiennent 40 en pointe mais faut pas pousser) donc on est un peu limite. Mais le souci c'est quand vous en aurez 10 allumées, ça va tirer plus de ~230mA sur les pins de votre Arduino c'est trop élevé (faut pas dépasser 200 en tout) et en plus il y a une limite à 150mA par groupe de pins, donc suivant celle retenues pour les LEDs vous pourrez peut-être dépasser cela.

    --> En prenant une résistance plus grande (330Ω) les LEDs brilleront un peu moins mais vous ne prendrez pas de risque avec votre arduino.

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Bonjour,

    Juste un détail pour uioph
    Code arduino : Sélectionner tout - Visualiser dans une fenêtre à part
    const byte pinsAfficheur[] = {2,3,4,5,6,7,8,9,10,11}; // les 10 pins des LEDs, dans l'ordre d'allumage
    Si Jay a omis les broches 0 et 1 c'est que ces broches sont utilisées pour la liaison série sur les cartes UNO. Donc si dans ton code tu utilises l'objet Serial, tu ne dois pas utiliser les broches 0 et 1.

  8. #8
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    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 208
    Points : 11 688
    Points
    11 688
    Par défaut
    Salut,
    Citation Envoyé par uioph Voir le message
    [...]véhicule [...] avec un Arduino
    Il faudra faire très attention à la tension d'alimentation disponible pour alimenter ton montage électronique. Si tu prends un Arduino UNO par exemple + 10 LED allumées ce qui va faire environ 150mA le tout alimenté avec les 13V ou 14V alternateur allumée... je dirai que le petit régulateur sur la carte Arduino va cramer bien avant que tu n'alimentes la 10ème LED


    Je prends le cas parfait, pas d'alternateur ; 12V dispo pour alimenter le Arduino et 10 LED allumées en même temps.

    (12V - 3.3V) * 150mA = 1.3W a dissiper en chaleur par le pauvre petit régulateur de la carte Arduino.
    A cette puissance le régulateur va monter à 208°C au dessus de la température ambiante hors à 150°C (incluant la température ambiante) il est cuit !


    toute l'info est ici https://www.developpez.net/forums/d2.../#post11499717 ; tu es dans le cas de figure n°3

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    D'accord et si j'installe un régulateur de tension passer de 12v à 5v concernant les LEDs j'installe une résistance de 330ohm par Led pour ne pas tirer sur le arduino. Qu'en pensez vous ?

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Vincent, ce n'est pas 3,3V mais 5V. Sur le UNO, l'ATmega 16u et le 328P sont alimentés en 5V par le NCP1117ST503G (c'est un ST333 qui sur les ESP). Il y a bien une sortie 3,3V sur cette platine, mais elle n'alimente aucun composant.


    uioph, si tu ajoutes un régulateur avant ton Arduino, sa tension de sortie doit-être légèrement supérieure à 5V. Une tension d'entrée sur le jack doit être de 7V au minimum.
    https://store.arduino.cc/arduino-uno-rev3

    Citation Envoyé par uioph Voir le message
    concernant les LEDs j'installe une résistance de 330ohm par Led pour ne pas tirer sur le arduino. Qu'en pensez vous ?
    Je monte à 1kohm avec des LED 5mm.

  11. #11
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    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 208
    Points : 11 688
    Points
    11 688
    Par défaut
    Oui c'est ce qu'il faut faire.
    Il existe des petits modules tout fait qui ne coûte quasi rien - recherche : shield lm2596. Il y en a d'autre, celui là est réglable mais il doit y en avoir des fixes en tension de sortie.

    Il doit être de type à découpage, soit DC/DC step down aussi appelé Buck regulator

  12. #12
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    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 208
    Points : 11 688
    Points
    11 688
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Vincent, ce n'est pas 3,3V mais 5V. Sur le UNO
    Oups... c'est vrai merci pour cette correction mais il cramera tout aussi vite.

    (12V - 5V) * 150mA = 1.05W ce qui provoquera une élévation de 168°C au dessus de la température ambiante.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En ce qui s'agit de l'alimentation le vais abaisser la tension avec un module lm2596 pas de problème merci du conseille.
    Je suis en pleine programmation et sa fume dans la tête
    Je vous ai joins ce que j'ai commencer a faire c'est peut être pas bon mais comment améliorer merci de votre aide
    Images attachées Images attachées  

  14. #14
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    ne postez pas une image du code, on ne peut pas faire de copier coller .... --> copiez le texte et mettez le ici en utilisant la balise de code #

    lisez un tuto ou deux sur Arduino... comment on contrôle une LED... il faut la mettre en OUTPUT dans le setup()

    --> par exemple pour vous ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (byte i = 0; i < 10; i++) pinMode(pinsAfficheur[i], OUTPUT);
    vous n'avez pas à déclarer 2 fois le tableau des pins...

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    bonjour a tous j'ai écouter les conseille précédent
    Après une matinée j'en suis arriver la.
    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
    const int analogPin = A5;   //entre sonde
    const int ledCount = 10;    // nombre de led 
    int pinsAfficheur[] = {
      2, 3, 4, 5, 6, 7, 8, 9, 10, 11
    };   
    void setup() {  
    for (byte i = 0; i < 10; i++) pinMode(pinsAfficheur[i], OUTPUT);
    analogReference(INTERNAL);
    }
     
    void loop() {
       byte nombreDeLeds = map (analogRead(A5), 0, 931, 0, 11); 
    nombreDeLeds = constrain(nombreDeLeds, 0, 10); // 
     
    for (byte i = 0; i < nombreDeLeds; i++) digitalWrite(pinsAfficheur[i], HIGH); // on allume celles là
    for (byte i = nombreDeLeds; i < 10; i++) digitalWrite(pinsAfficheur[i], LOW); // on éteint le reste
     
     
    }
    j’espère qu'il y a pas trop d'erreur dans l'utilisation des fonction,j’attends vos avis et votre aide pour améliorer merci

  16. #16
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    bravo

    on peut affiner un peu les types et noms de variables et rendre le nombre de LEDs un peu plus dynamique et bien sûr indenter correctement et mettre des commentaires
    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
    const byte sondeMoteur = A5;   // entrée sonde, donne un résultat entre 0 et 1V
    const long borneMaxSonde = 1024.0 / 1.1; // 1024 pas correspondront à 1,1V donc 1V correspond à 1024/1,1 
    const byte pinsAfficheur[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // les pins associées à nos LEDs, dans l'ordre croissant d'affichage 
    const byte nombreDeLeds = sizeof(pinsAfficheur) / sizeof (pinsAfficheur[0]); // le nombre de LEDs dans l'affichage. 10 dans notre cas
     
    void setup()
    {
      // on mesurera moins de 1.1V, donc on peut utliser la référence interne
      analogReference(INTERNAL);
     
      // on met les pins des LEDs en sortie
      for (byte i = 0; i < nombreDeLeds; i++) pinMode(pinsAfficheur[i], OUTPUT);
    }
     
    void loop()
    {
      byte compteurLed = map (analogRead(sondeMoteur), 0, borneMaxSonde, 0, nombreDeLeds + 1); // on transforme la valeur en nombre de LED à allumer
      compteurLed = constrain(compteurLed, 0, nombreDeLeds); // on s'assure de ne pas déborder
     
      for (byte i = 0; i < compteurLed; i++) digitalWrite(pinsAfficheur[i], HIGH); // on allume celles là
      for (byte i = compteurLed; i < 10; i++) digitalWrite(pinsAfficheur[i], LOW); // on éteint le reste
     
      // comme on n'a pas besoin de le faire trop souvent, on attend un peu
      delay(1000); // attente d'une seconde
    }

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    ouffffff merci beaucoup donc je peut le charger dans mon Arduino?
    J'ai quelque petite question j'ai lu que je pouvait utiliser la fonction analogReference(INTERNAL1v1) ,mais dans mon code j'ai mis analogReference(INTERNAL) cela change t'il quelque chose?
    Si j'ai envie de faire aussi un indicateur de température avec le module LCD , il faudrait que je prennent un second Arduino ou je peut faire cohabiter les deux code dans un seul Arduino?
    Merci encore.

  18. #18
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    INTERNAL1v1 n'existe que sur une Arduino Mega. Sur une UNO INTERNAL c'est 1.1 V (attention ça dépend des cartes, cf la doc de analogReference)

    Vous pouvez le charger, bien sûr, à condition que vous ayez bien mis en place les éléments matériels concernant la consommation de courant dont on a discuté plus bas.

    vous pouvez aussi pour vous amuser simuler le fonctionnement si vous avez une alimentation variable (mais ne dépassez pas 5V en entrée sur vos pins)

    comme le code ne fait quasiment rien, vous pouvez bien sûr rajouter un capteur de T° sans souci

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Avril 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Avril 2020
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour Je déterre un peu ce sujet j'ai déjà effectué le montage et cela fonctionne je souhaite intégrer mon capteur de température à led au programme comment faire j'ai déjà écrit mon code
    Merci

  20. #20
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 808
    Points : 5 664
    Points
    5 664
    Par défaut
    Bonsoir

    Postez votre code existant et expliquez nous ce qu’est cette intégration (et quel capteur) exactement. On y verra ainsi plus clair

Discussions similaires

  1. [systeme] contrôleur PCMCIA fictif
    Par titus55 dans le forum Composants
    Réponses: 1
    Dernier message: 28/04/2006, 16h37
  2. Réponses: 1
    Dernier message: 18/11/2005, 07h47
  3. MSDE sur un contrôleur de domaine
    Par m4 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 17h55
  4. Adaptateur Disque SATA vers contrôleur IDE
    Par Rom_1 dans le forum Composants
    Réponses: 1
    Dernier message: 15/09/2005, 09h53
  5. [STRUTS] Redirection vers un contrôleur
    Par noah42 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/02/2005, 09h23

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