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 :

Sirène avec accéléromètre mpu-6050 et Bluetooth hc05


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut Sirène avec accéléromètre mpu-6050 et Bluetooth hc05
    Bonjour,;
    j'essaye de faire un système genre alarme avec un accéléromètre et une télécommande via gsm.
    Sans télécommande ,j'arrive à mettre en marche l'alarme dés qu'il y a une accélération >1.2
    des que j'essaye d'intégrer le code du hc05 , en mettant 2 conditions pour mise en route. Rien ne fonctionne!
    Pourriez vous m'aider ?
    voici le code et attend vos remarques et suggestions
    merci

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
     
    //definition des entrees sorties
     
     const int sirene = 7; //numero de pin de la sortie sirene
      int  PowerValue = 0;
     
    //definition des variables
     
      unsigned long code;
      long timer = 0;
      float acceleration = 0;
     
    //bibliotheque utilisée
    #include <SoftwareSerial.h>  // librairie pour creer une nouvelle connexion serie max 9600 baud
    #include <MPU6050_tockn.h> // librairie carte accelerometre mpu6050
    #include <Wire.h>
    MPU6050 mpu6050(Wire);
     SoftwareSerial BTSerial(10, 11); // RX | TX  = > BT-TX=10 BT-RX=11
     
    //boucle de demarrage
    void setup() {
      Serial.begin(9600);
     Serial.println("Enter a command:");
      BTSerial.begin(9600);  // HC-05 9600 baud 
     
     // pinMode(PIN_SIRENE, OUTPUT);
     
    //sorties
     pinMode(sirene, OUTPUT);    // definit le pin "sirene" pin 7 comme sortie
     digitalWrite(sirene, LOW);  // l'initialise a 0
     Wire.begin();
     
     while (millis() < 8000) // tempo de 8 sec
     
    // calibration accelerometre   
      mpu6050.begin();
      mpu6050.calcGyroOffsets(true);
     
      // un petit bip pour indiquer que l'accéléromètre est prèt
      digitalWrite(sirene, HIGH);
      delay(800);
      digitalWrite(sirene, LOW);
     
    }
     
    void loop() {
     
      String message;
        // Boucle de lecture sur le BT
        // Reading BT
        while (BTSerial.available()){
          // Lecture du message envoyé par le BT
          // Read message send by BT
          message = BTSerial.readString();
          // Ecriture du message dans le serial usb
          // write in serial usb
          Serial.println(message);
        }
        // Boucle de lecture sur le serial usb
        // Reading serial usb
        while (Serial.available()){
          // Lecture du message envoyé par le serial usb
          // Read message send by serial usb
          message = Serial.readString();
          // Ecriture du message dans le BT
          // write in BT 
          BTSerial.println(message);
          PowerValue = Serial.println(message);
     
      mpu6050.update();
     
      acceleration = max(acceleration, abs(mpu6050.getAccX()));
      acceleration = max(acceleration, abs(mpu6050.getAccY()));
      acceleration = max(acceleration, abs(mpu6050.getAccZ()));
     
     
     // si mon message est egal a "on"  
      // if message equal to "on"
        if(message == "on"){
         PowerValue = 1; // power on 
        }// else if message off
        else if(message == "off"){
           PowerValue = 0; // power off
     
     if (acceleration > 1.2 && PowerValue == 1) {digitalWrite(sirene, HIGH);
       delay(1200);
       digitalWrite(sirene, LOW);
      }
     else if(PowerValue = 0){
          digitalWrite(sirene ,LOW);  // led off
     // if (acceleration < 0.5) {digitalWrite(sirene, HIGH);
      //  delay(1200);
      //  digitalWrite(sirene, LOW);
      //}
     
      acceleration = 0;
       } 
      }
     } 
    }
     
     
    //fin de boucle principale

  2. #2
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    ReadString est bloquant et vous n’êtes pas garanti d’avoir reçu tout le message quand le buffer est vide. De plus vous utilisez la même strung pour les 2 lignes de communication

    Il manque un point virgule à la fin du while (ou une paire d’accolades pour montrer l’intention de ne rien faire) dans Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     while (millis() < 8000) // tempo de 8 sec
     
    // calibration accelerometre   
      mpu6050.begin();
    …
    Sinon vous répétez l’instruction qui suit jusqu’à la 8eme seconde après le boot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    // tempo de 8 sec
    while (millis() < 8000) { /* attente active */ } 
     
    // puis calibration accelerometre   
      mpu6050.begin();

    Indentez le code dans l’IDE pour vous assurer que tous vos blocs (statements) sont au bon endroit

  3. #3
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Jay M
    Citation Envoyé par Jay M Voir le message
    ReadString est bloquant ...
    Pas forcément, ReadString a un timout, par défaut, de 1 sec. et on peut le rendre plus réactif en mettant timout plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	BTSerial.begin(9600);  // HC-05 9600 baud
    	BTSerial.setTimeout(50);     // Pour fin des commandes depuis Bluetooth
    Pour moi, cette méthode, avec ReadString est excellente pour des dialogues Bluetooth/Arduino ou Console/Arduino, comme les données arrivent, dans les 2 cas, "d'un coup", il n'y a pas besoin de terminaison, c'est le timout qui donne la fin de la réception. Reste l'ajout d'un messageRecu.trim(); pour nettoyer les caractères inutiles comme les espaces et les \n ou \r.

    Cordialement
    jpbbricole

  4. #4
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour franck27290

    Une partie de tes problèmes provient de ta façon de lire les ports série (Serial et BTSerial),readString fonctionne très bien pour ce type d'usage, il faut juste lui adjoindre un timout, ça rend la méthode plus réactive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void setup()
    {
    	Serial.begin(9600);
    	Serial.setTimeout(50);     // Pour fin des commandes depuis le moniteur
    Avec l'usage de readString et du timout, la terminaison de la commande n'a pas d'importance, il peut même ne pas y en avoir. S'il y en avait, ce serait nettoyé par le .trim()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	if (Serial.available())
    	{
    		message = Serial.readString();
    		message.trim();
    		....
    	}
    Un autre problème était l'imbrication des divers test, j'ai essayé de "redresser" tout ça, pas sûre d'avoir fait juste, j'ai testé depuis la console et depuis Bluetooth, sans problème.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
     
    //definition des entrees sorties
     
    const int sirene = 7; //numero de pin de la sortie sirene
    int  PowerValue = 0;
     
    //definition des variables
     
    unsigned long code;
    long timer = 0;
    float acceleration = 0;
     
    //bibliotheque utilisée
    #include <SoftwareSerial.h>  // librairie pour creer une nouvelle connexion serie max 9600 baud
    #include <MPU6050_tockn.h> // librairie carte accelerometre mpu6050
    #include <Wire.h>
    MPU6050 mpu6050(Wire);
    SoftwareSerial BTSerial(10, 11); // RX | TX  = > BT-TX=10 BT-RX=11
     
    //boucle de demarrage
    void setup()
    {
    	Serial.begin(9600);
    	Serial.setTimeout(50);     // Pour fin des commandes depuis le moniteur
    	Serial.println("Enter a command:");
    	BTSerial.begin(9600);  // HC-05 9600 baud
    	BTSerial.setTimeout(50);     // Pour fin des commandes depuis Bluetooth
     
    	// pinMode(PIN_SIRENE, OUTPUT);
     
    	//sorties
    	pinMode(sirene, OUTPUT);    // definit le pin "sirene" pin 7 comme sortie
    	digitalWrite(sirene, LOW);  // l'initialise a 0
    	Wire.begin();
     
    	while (millis() < 8000) // tempo de 8 sec
     
    	// calibration accelerometre
    	mpu6050.begin();
    	mpu6050.calcGyroOffsets(true);
     
    	// un petit bip pour indiquer que l'accéléromètre est prèt
    	digitalWrite(sirene, HIGH);
    	delay(800);
    	digitalWrite(sirene, LOW);
     
    }
     
    void loop()
    {
     
    	String message = "";
    	// Boucle de lecture sur le BT
    	// Reading BT
    	if (BTSerial.available())
    	{
    		// Lecture du message envoyé par le BT
    		// Read message send by BT
    		message = BTSerial.readString();
    		// Nettoyage des caractères indésirables, CR, LF, TAB... et les espace de début et de fin
    		message.trim();
    		// Ecriture du message dans le serial usb
    		// write in serial usb
    		Serial.println(message);
    	}
    	// Boucle de lecture sur le serial usb
    	// Reading serial usb
    	if (Serial.available())
    	{
    		// Lecture du message envoyé par le serial usb
    		// Read message send by serial usb
    		message = Serial.readString();
    		// Nettoyage des caractères indésirables, CR, LF, TAB... et les espace de début et de fin
    		message.trim();
    		// Ecriture du message dans le BT
    		// write in BT
    		BTSerial.println(message);
    		//PowerValue = Serial.println(message);
    	}
     
    	if (message != "")     // Si un message a été reçu
    	{
    		// si mon message est egal a "on"
    		// if message equal to "on"
    		if (message == "on") 
    		{
    			PowerValue = 1; // power on
    			Serial.println("Power ON");
    		}// else if message off
    		else if (message == "off") 
    		{
    			PowerValue = 0; // power off
    			Serial.println("Power OFF");
     
    		}
    		message = "";
    	}
     
    	mpu6050.update();
    	acceleration = max(acceleration, abs(mpu6050.getAccX()));
    	acceleration = max(acceleration, abs(mpu6050.getAccY()));
    	acceleration = max(acceleration, abs(mpu6050.getAccZ()));
     
    	if (acceleration > 1.2 && PowerValue == 1)
    	{
    		digitalWrite(sirene, HIGH);
    		delay(1200);
    		digitalWrite(sirene, LOW);
    	}
    	else if (PowerValue == 0)
    	{
    		digitalWrite(sirene , LOW); // led off
    		// if (acceleration < 0.5) {digitalWrite(sirene, HIGH);
    		//  delay(1200);
    		//  digitalWrite(sirene, LOW);
    		//}
     
    		acceleration = 0;
    	}
    }
    //fin de boucle principale
    Je n'ai pas de MPU-6050 sous la mais, j'ai juste contrôlé que PowerValue change bien suite à on ou off.

    A ta disposition pour toutes questions.

    Cordialement
    jpbbricole

  5. #5
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    Oui on peut baisser le délai mais avec 50ms on a le temps de recevoir aussi 50 caractères sur l’autre port série - si vous avez reçu avant une vingtaine de caractères aussi ça veut dire que vous n’avez pas lu l’autre port série pendant 70ms - soit le temps (même a 9600 bauds) de remplir et dépasser la taille du buffer série et donc de perdre des données

    cela dit Ca peut fonctionner pour des cas simples ou avec des commandes relativement courtes

  6. #6
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir Jay M

    Je pensait que, vu la simplicité du programme de départ, que @franck27290 allait envoyer des ordres par l'une ou par l'autre des entrées, mais pas par les 2, ce qui me semble logique.

    Citation Envoyé par Jay M Voir le message
    cela dit Ca peut fonctionner pour des cas simples ou avec des commandes relativement courtes
    J'ai essayé jusqu'à 80 caractères et ça fonctionne, à 9600.

    Cordialement
    jpbbricole

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut Suite à vos retours
    Suite à vos retours ,
    J'essaye la modification au plus vite et vous tiens au courant .
    Merci pour vos retours et commentaires.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut Suite à vos retours
    Bonsoir,
    Désolé pas encore habitué au fonctionnement du forum!
    J'ai essayé ,cela fonctionne et vous remercie pour vos retours, commentaires et aide pour le code .
    Je souhaite mettre cela sur une carte Arduino Nano avec l'accéléromètre, je contrôle le mouvement d'une caravane !Si elle bouge en ayant enclenché le power On , une sirene avertie .Qu'en pensez-vous ?
    Merci à vous
    Bonne soirée
    Franck 27290

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut un petit bug
    Suite à nos échange, le projet semble avoir un léger bug.
    lorsque les 2 conditions sont remplies la sirène est on et normalement après 12 sec, elle devrait s'éteindre et le seul moyen de l'éteindre est de renvoyer un Power Off

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     if (acceleration > 1.2 && PowerValue == 1)
      {
        digitalWrite(sirene, HIGH);
        delay(1200);
        digitalWrite(sirene, LOW);
      }
      else if (PowerValue == 0)
      {
        digitalWrite(sirene , LOW); // sirene off
        // if (acceleration < 0.5) {digitalWrite(sirene, HIGH);
        //  delay(1200);
        //  digitalWrite(sirene, LOW);
        //}
    auriez-vous une idée ?
    Bonne soirée
    Franck27290

  10. #10
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonsoir Jay M

    Je pensait que, vu la simplicité du programme de départ, que @franck27290 allait envoyer des ordres par l'une ou par l'autre des entrées, mais pas par les 2, ce qui me semble logique.
    Oui comme je l’ai dit, pour ce genre de code ça doit fonctionner à peu près correctement tant qu’on n’a pas de conflits de timing qui feraient qu’un des deux buffers En réception serait rempli et déborderait parce que le code serait bloqué en attente sur l’autre port série.

    Ma remarque était plus générale et sur votre affirmation
    Pour moi, cette méthode, avec ReadString est excellente pour des dialogues Bluetooth/Arduino ou Console/Arduino, comme les données arrivent, dans les 2 cas, "d'un coup"
    On ne reçoit jamais les données d’un coup, c’est asynchrone. Elles arrivent au fil de l’eau, vous êtes juste (à peu près) sûr que le timings des bits d’un octet sont alignés sur la vitesse en bauds, mais le timing entre 2 octets peut dépendre de l’émetteur (par un mauvais déclenchement du garbage collector java dans le terminal série de l’IDE qui bloquerait l’émission pour 51ms ou plus et vous êtes coincé).

    C’est pour cela que Dans l’absolu pour gérer des lignes série il vaut mieux éviter les codes bloquants, dans la pratique pour des cas simples votre approche va fonctionner avec potentiellement de temps en temps, peut être très rarement, un bug. Faut juste le savoir

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut question sur ce bug
    Le bug semble être après avoir reçu les 2 conditions , il s'agirait de la commande qui ne tient pas compte du délais de fonctionnement des 12 sec .
    êtes vous d'accord ? t à votre avis que peut il bloquer ce délais ?
    Bonne journée
    Franck 27290

  12. #12
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour franck27290
    Citation Envoyé par franck27290 Voir le message
    Le bug semble être après avoir reçu les 2 conditions , il s'agirait de la commande qui ne tient pas compte du délais de fonctionnement des 12 sec .
    J'ai testé ces conditions, la sirène s'enclenche dès que acceleration dépasse le seuil et que PowerValue == 1 et ce pour le durée delay(12000); minimum
    La sirène se déclenche si PowerValue == 0 et ou que acceleration passe au-dessous du seuil.
    Quel que soit les conditions, si la temporisation est enclenchée, il ne se passe rien d'autre, delay() est une fonction dite bloquante.

    Cordialement
    jpbbricole

  13. #13
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    pouvez vous décrire le circuit complet? vous aviez parlé d'une alarme avec un accéléromètre et une télécommande via gsm

    (une pile 9V ça ne donne pas bcp de courant pendant longtemps - ce n'est généralement pas un bon choix d'alim si vous avez des composants qui consomment un tant soit peu)

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut schéma du montage
    Bonjour,
    Voici le montage , la pile 9 volts alimente le détecteur d'incendie qui me sert de sirène grâce au bouton poussoir. Je ne peux changer le relais par un optocoupleur car sur le bouton poussoir la tension est de 9 volts .
    voici le schéma en pièce jointe
    Nom : schema.png
Affichages : 341
Taille : 172,6 Ko

    j’insère le tout dans un boitier supplémentaire de détecteur d'incendie qui s'insere en dessous du prmier boitier.
    Merci de vos retour
    FC

  15. #15
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    même si vous mettez la Nano en sleep (et ce n'est pas la carte la plus optimale pour cela), le reste continue à consommer.
    avez vous pu regarder combien ça consomme à vide?

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 279
    Par défaut
    Bonsoir

    Le nombre de ligne de code ne change pas la consommation d'un Arduino. Il n'y a pas de gestion de puissance comme un processeur de PC.

    L'ATMega consomme 9mA à 5V et 16MHz (configuration en Arduino).
    -> Concevoir son programme pour tourner à 0.5MHz (Oscillateur interne 4MHz divisé par 8) et paramétrer l'ATMega de la sorte permet de passer sous les 1mA de consommation (grosso-modo 1/32ème de consommation).
    Nom : 328pPower.png
Affichages : 319
Taille : 37,3 Ko

    Virer la Led Power qui consomme plusieurs mA.

    Le module HC05 consomme beaucoup, j'ai trouvé une indication à 30mA.
    -> L'arrêter le plus souvent possible, pour cela il faut mettre son alimentation en commande par un pin de l'Arduino.

    C'est classique, les communications sans fils ne sont pas économe en énergie, sauf peut-être le LoRa quand il est bien fait, car développé dans ce but.

    Utiliser deux régulateurs à découpage pour générer le 5V et le 3.3V. Par contre cela n'est pas aussi simple à mettre en oeuvre que les régulateurs linéaires.

    Delias

  17. #17
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 894
    Par défaut
    il y a aussi le mauvais régulateur de la Nano qui consomme et un peu la puce Série

  18. #18
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut Sirène avec accéléromètre mpu-6050 et Bluetooth hc05
    Bonjour,
    Mon montage consomme 58 ma , j'utilise le 9 volts sur la pin VIN et ensuite prends du 5 volts pour les circuits.
    peut on trouver un composant autre que le relais pour réduire la consommation , optocoupleur pas possible le contact étant sur 9 volts ?
    la carte HC05 me permets de valider la'antivol , j'avais pensais au départ un interrupteur , mais c'est pas discret. auriez vous une autre idée?
    Merci de vos commentaires
    FC

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Par défaut Sirène avec accéléromètre mpu-6050 et Bluetooth hc05
    Bonjour,
    Suite à mon dernier post , pas de réaction ? Il semblerait que je sois dans une impasse !
    Si vous avez idées ,suggestions ou autres.
    Merci

  20. #20
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 599
    Par défaut Isolation
    Bonjour,

    Je ne comprends pas trop cette volonté d'utiliser des moyens assurant l'isolation galvanique (relais ou optocoupleur) alors que le montage partage la masse et l'alimentation (même si via un régulateur).

    A moins que ce ne soit un montage test avant raccordement à une centrale d'alarme. Ces dernières utilisent des boucles sèches pour les entrées de capteurs simples genre contact. Un optocoupleur peut très bien faire le travail (un photodarlington consommera moins coté Arduino). Par rapport au relais, il faut juste repérer le sens (multimètre sur les entrées de la centrale). Le besoin d'isoler les deux n'est pas indispensable pour un montage alimenté par pile et certainement dans un boitier isolant. Un simple transistor pourrait faire le job en lieu et place du relais ou de l'optocoupleur (partage de masse avec la centrale via l'entrée). Le seul problème serait une alimentation négative de la centrale (multimètre à nouveau).

    Si l'accéléromètre est utilisé comme dispositif anti arrachement, il y a plus simple. Souvent on utilise un simple interrupteur au dos du boitier. Dès qu'on essaie de retirer le boitier, le programme le détecte, l'inscrit en eprom et gueule tant que le contenu de l'eprom a la valeur d'alerte (et qu'il y a de l'énergie).

    Salutations

Discussions similaires

  1. Changement nom et pin du module Bluetooth HC05
    Par keusty78 dans le forum Embarqué
    Réponses: 0
    Dernier message: 07/01/2021, 18h31
  2. Réponses: 1
    Dernier message: 13/02/2020, 12h34
  3. Raspberry Pi 3 arrive avec un support WiFi et Bluetooth intégré
    Par Michael Guilloux dans le forum Raspberry Pi
    Réponses: 35
    Dernier message: 28/03/2016, 01h37
  4. inclinomètre avec accéléromètre(ADXL 345)
    Par eternelle64 dans le forum Windows
    Réponses: 0
    Dernier message: 29/11/2013, 09h37
  5. Imprimer avec un PDA sur imprimante bluetooth
    Par Dodey21 dans le forum C#
    Réponses: 0
    Dernier message: 21/04/2010, 15h20

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