Programmateur de charges batterie
Par André F1HVB et Freddy ON6FS
Nous avons tous été confronté à un équipement portable sur batterie complètement déchargée !
Mais laisser les batteries constamment en charge les dégrade fortement.
Il est préférable de leur donner une charge de temps en temps lorsque le matériel n’est pas fréquemment utilisé.
Le dispositif qui est décrit ici prévoit 4 séquences, de charges et de cycles de répétitions différentes, sélectionnables à l’aide de 2 cavaliers (voir tableau en fin d’article).
ATTENTION : La consommation du charger que vous connecterez ne peut excéder les 400 W ou 2A !
La liste des courses :
- PCB que nous pouvons vous fournir (demandez-nous)
- 1 Arduino Nano avec ses broches Dupont mâles (30)
- 2×2 broches mâles double rangée (2,54 mm)
- 2 résistances de 4700 ohms SMD 1206
- 1 résistance de 1000 ohms SMD 1206
- 1 diode LED SMD 1210 ou LED 3mm
- 1 relais statique SSR G3MB-202P, 5V / 240V 2A
- 1 alimentation AC-DC 220 => 5V 700 mA
- 2 borniers à vis 2 pôles (5,08 mm)
- 2 cavaliers (2,54 mm)
- 1 prise de courant étanche (Brico Dépôt – 1,35 €)
- Rehausse imprimée en PLA
- 1 cordon de récupération avec fiche mâle
Schémas :
PCB :
Assemblage :
Avant toutes choses, il faut souder les composants SMD (R1, R2, R3, LED).
Les autres composants pourront être insérés à votre guise.
Percez deux trous de 7 mm dans le fond du boîtier prise de courant, ils permettront le passage des fils 230 V entre les deux espaces.
Une fois le module assemblé, reliez la prise de courant du boîtier au bornier P2.
Connectez le cordon d’arrivée 230 Vau bornier P1.
Fixez la rehausse à l’aide de 2 vis à bois sous le boîtier prise de courant.
Posez en place (dans les encoches prévues) le noyau de la prise et fermez la prise de courant.
Rehausse bloc prise de courant :
Vous trouverez le fichier STL de la rehausse sur : https://www.tinkercad.com/things/2pbzGvrCFRk
Programme ou sketch :
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 |
/******************************************************** PROGRAMMEUR DE CHARGEMENT Déclenche un chargeur durant une période durant un cycle Différentes durées sélectionnables par strap 4 cycles sont disponibles By Freddy STIEVENART ON6FS et André BICHELBERGER F1HVB Version : V1.1 2022/05 ********************************************************/ //------------------------------------------------ //Includes //------------------------------------------------ //------------------------------------------------ // Constants & Allocation pins //------------------------------------------------ #define OutRelay 2 // Commande Extraction #define InTempo2 3 // Strap Tempo2 #define InTempo1 4 // Strap Tempo1 #define TempoRow 2 // #define TempoCol 4 // //------------------------------------------------ // Variables //------------------------------------------------ long TimeNow, TimeStart; long DelayCharge; long DelayTotal; byte Tempo1, Tempo2, PositionTempo; //Tableau des 4 différents cycles //Toutes les durées sont exprimées en millissecondes (ex : 1 seconde = 1000) //Il est donc facile de modifier les timings selon vos besoins long TempoArray [TempoRow][TempoCol] = { {7200000,5400000,3600000,36000000}, // (2h - 1,5 h - 1 h - 1 h) DelayCharge {86400000,604800000,1296000000,2592000000} // (1 J - 7 J - 15 J - 30 J) DelayTotal }; //------------------------------------------------ // SETUP //------------------------------------------------ void setup() { // Start Serial line Serial.begin(9600); TimeStart = millis(); // Declare pins pinMode(OutRelay, OUTPUT); pinMode(InTempo1, INPUT); pinMode(InTempo2, INPUT); // Read strap Tempo1 = digitalRead(InTempo1); Tempo2 = digitalRead(InTempo2); PositionTempo = (2 * Tempo2) + Tempo1; // Lecture DelayCharge et DelayTotal dans le tableau DelayCharge = TempoArray [0][PositionTempo]; DelayTotal = TempoArray [1][PositionTempo]; //Positionne le relay ON digitalWrite(OutRelay, HIGH); Serial.print("PositionTempo : "); Serial.println(PositionTempo); Serial.print("DelayCharge : "); Serial.println(DelayCharge); Serial.print("DelayTotal : "); Serial.println(DelayTotal); } //------------------------------------------------ // LOOP //------------------------------------------------ void loop() { TimeNow = millis(); // Serial.print("TimeNow : "); // Serial.println(TimeNow); if ( (TimeNow - TimeStart) > DelayCharge) { digitalWrite(OutRelay, LOW); } if ( (TimeNow - TimeStart) > DelayTotal) { Serial.println("Reset"); software_Reset(); } } void software_Reset() { asm volatile (" jmp 0"); } |
Les 4 séquences :
Le tableau ci-dessous vous montre les 4 séquences par défaut :
Cavaliers sur broches | Temps de charge | Temps d’un cycle |
1-2 et 3-4 | 2 heure | 1 jour |
1-2 | 1 heure 30 | 7 jours |
3-4 | 1 heure | 15 jours | Aucun | 1 heure | 30 jours |