Baisser consomation de montage arduino

Bonsoir à tous et a toute.

Je viens vers vous car j'aurais besoin de vos conseils sur l'arduino.

J'aimerais fair baisser la consommation de mon montage arduino.
Je vous explique, j'ai créé un antidémarrage pour ma voiture qui est est trop vieille pour en être équipé. Mon montage fonctionne parfaitement comme je le souhaite, mais consomme trop (60 mA), ce qui est bien trop pour la consommation du voiture arrêtée (maxi 30 mA).
Mon montage est équipé d'un arduino nano et d'un lecteur de RFID RC523, qui sont les seuls composents alimentés en mode anti-demarage. Et 2 relais et résistance mais pas alimentés en coupure.

Merci pour votre aide en espérant en avoir.

PS: je vous joint mon code

#include <SPI.h>
#include <RFID.h>

int ledRouge = 2;
int relais1 = 3;
RFID monModuleRFID(10,9);
int UID[5]={};
int MASTERKEY[5]={42,163,79,223,25};

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();  
  pinMode(ledRouge, OUTPUT);
  pinMode(relais1, OUTPUT);
  digitalWrite(ledRouge, HIGH);
  digitalWrite(relais1, LOW);
}

void loop()
{
  if (monModuleRFID.isCard()) {  
    if (monModuleRFID.readCardSerial()) 
    {        
      Serial.print("L'UID est: ");
      for(int i=0;i<=4;i++)
      {
        UID[i]=monModuleRFID.serNum[i];
        Serial.print(UID[i],DEC);
        Serial.print(".");
      }
      Serial.println("");
    }
    if (UID[0] == MASTERKEY[0]
      && UID[1] == MASTERKEY[1]
      && UID[2] == MASTERKEY[2]
      && UID[3] == MASTERKEY[3]
      && UID[4] == MASTERKEY[4]) 
    {
      digitalWrite(ledRouge,LOW);
      digitalWrite(relais1, HIGH);
      delay(45000);
      digitalWrite(relais1, LOW);
    }
    else
    {
      digitalWrite(relais1, LOW);
      digitalWrite(ledRouge, HIGH);
    }
    monModuleRFID.halt(); 
  }
  delay(500);    
}

Remplace le nano par un pro-mini (l'interface USB<-->série consomme inutilement)
Désactive les périphériques inutilisés (par exemple l'ADC si tu n'utilises pas analogRead())
Utilise les fonctions de mise en sommeil avec un réveil périodique par timer.

Le plus simple sans doute est de rajouter un interrupteur pour démarrer l'Arduino avant de présenter votre RFID; que fait le relai exactement, comment et où est -il connecté?

Sinon un consommateur moins gourmand détecteur de présence qui enverrait une interruption pour réveiller votre arduino

Sinon réveiller arduino avec un Timer toute les secondes pour quelques ms le temps de vérifier si la RFID est là et SE rendormir

Par acquis de conscience je changerai delay(45000); en delay(45000[b]ul[/b]); pour forcer la représentation unsigned long.

Bonsoir,
Deja merci pour vos réponces, et comment je peu fair pour endormir pui réveiller arduino avec un timer? (comme JML me propose)

Et qu'ce que veux dire forcer la representation unsigned long?

Une bible :
https://www.gammon.com.au/power

Merci pour le lien mais je ne comprand pas trop comment fair pour avoir une mise en veiller et un reveille toute les 2 seconds pour verifier si il y a pas un badge rfid

Tu lis bien le chapitre "Waking from sleep with a timer" et tu comprendras

Ce serai pas plus simple d'alimenter ton montage avec un "+12v après contact".

L'arduino demarre quais instantanément, tu verra pas la différence

Jambe: oui cest bin plus simple et surtout plus de problème de consomation, mais le truck c'est que mon badge RFID ce met sur le porter clef de la voiture, si il faut 2 porte clef pas très pratique

Inspire toi de ce qui ce fait actuellement.

Le RFID est contenu dans la clé avec une bague autour du neiman. La lecture de la clé se fait à la mise sous tension.

À moins que tu aies une essence, pour un diesel tu as le temps de préchauffage pour lire le badge et autoriser le démarrage.

Coco42801:
mon badge RFID ce met sur le porter clef de la voiture, si il faut 2 porte clef pas très pratique

Je propose juste un changement sur la méthode d'alimentation du système, ça ne change rien sur son fonctionnement, pas besoin d'un second porte clefs

Jambe:
Je propose juste un changement sur la méthode d'alimentation du système, ça ne change rien sur son fonctionnement, pas besoin d'un second porte clefs

je pense que ce qu'il veut dire c'est que son badge étant accroché à la clé et la clé étant dans le contact, il ne poura plus approcher le badge du lecteur...

la solution si le lecteur de badge n'est pas trop loin c'est de monter le badge sur un cordon auto-enrouleur

ça vaut ~1 euro sur eBay (faut attendre que ça arrive d'Asie)

Jambe: oui oui t’inquiète pas je connais parfaitement comment cela fonctionne actuellement je suis technicien auto, et oui c'est un essence. Oui je sais que tu propose juste il n'y a pas de problème bien au contraire ça fait avancer de dialoguer

J M L: a oui pas mal sa j'i avais pas pensé ce système de porte clef enrouleur :slight_smile:
Mais j'aimerai bien car même trouver pour endormir l'arduino. ça pourrai me servir pour d'autre projet et j'aime apprendre de nouvelle chose.

J-M-L:
je pense que ce qu'il veut dire c'est que son badge étant accroché à la clé et la clé étant dans le contact, il ne poura plus approcher le badge du lecteur...

Ok c'est plus clair pour moi comme ça.

Jambe: oui desoler je me suis mal exprimé

@coco42

Si vous ne voulez pas trop vous compliquer la vie, regardez la librairie Low-Power et leur exemple powerDownWakePeriodic qui est exactement ce dont vous parlez. Le code avec leur librairie devient minimaliste - 1 seule ligne de code en début de loop() + un include

#include "LowPower.h"

void setup()
{}

void loop() 
{
    // état power down pour  2 s avec les modules ADC et BOD inactifs 
    LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);  
    
    // ici vous vous êtes réveillé 
    // Testez si le badge est présent, sinon retournez dormir.
}

(il y a un bug dans la dernière version de l'IDE avec le power.h de AVR qui fait que pour le moment ça ne marche pas avec un Arduino Mega, mais pas de soucis avec un Uno par exemple - le pb a été reporté)

Mais si vous voulez vraiment optimiser le courant il faudra choisir un arduino 8Mhz (suffisant pour vos besoins sans doute) et 3.3V, virer les LEDs qui restent allumées etc...

Avec le watchdog vous pouvez faire dormir votre arduino pendant 8s max mais pour votre usage probablement 2s sera déjà bien pour ne pas frustrer l'utilisateur - l'approche de la clé pour alimenter l'Arduino est équivalente à l'interrupteur physique dont je parlais au début - en plus intégré.

J-M-L: je vous remercie vraiment je vient de comprendre comment ça fonctionne plus qu'a l'incorporer dans mon code, ce qui ne devrai pas poser de problème a première vu. Encore merci a vous.

Et un grand merci a touts ceux qui on participer a mon topic.

J-M-L:
... Mais si vous voulez vraiment optimiser le courant il faudra choisir un arduino 8Mhz (suffisant pour vos besoins sans doute) et 3.3V, virer les LEDs qui restent allumées etc...

J'ai mis en œuvre cette technique aujourd'hui. Attention, du fait de l'utilisation d'un pro mini à 8 MHz, les temps sont à multiplier par 2.

Cordialement.

Pierre

ChPr: Ok merci pour l'info si jamais je doit passer en pro mini 8 MHz pour ce projet ou pour un autre je pence plutôt.

J-M-L:
Si vous ne voulez pas trop vous compliquer la vie, regardez la librairie Low-Power

Je suis intéressé par cette discussion, mais si j'ai bien compris, cette lib n'est pas compatible avec ESP. N'est ce pas ?