Toutes mes réponses sur les forums
Le pourquoi est bien celui indiqué plus haut : ton RTC doit fournir une référence continue, sinon le retour d’une heure crée des instants ambigus. Avec RTClib, où dimanche vaut 0, tu peux calculer les transitions européennes ainsi :
bool eteEurope(DateTime u) {
DateTime m(u.year(), 3, 31, 1, 0, 0);
DateTime o(u.year(), 10, 31, 1, 0, 0);
uint32_t debut = m.unixtime() – m.dayOfTheWeek() * 86400UL;
uint32_t fin = o.unixtime() – o.dayOfTheWeek() * 86400UL;
return u.unixtime() >= debut && u.unixtime() < fin;
}
Puis construis l’heure locale avec DateTime locale(u.unixtime() + (eteEurope(u) ? 7200UL : 3600UL));. Supprime tes deux anciennes corrections et n’appelle pas rtc.adjust() dans la boucle. Pour la porte, compare heure et minute, mais ajoute un verrou mémorisant la date de la dernière ouverture.
Un relais peut convenir, mais je ne suivrais pas cette piste avant de connaître le courant de blocage et d’ajouter un interverrouillage matériel : deux relais actifs simultanément peuvent eux aussi court-circuiter le 12 V. Ici, les 1,8 V mesurés pendant le démarrage de l’Arduino expliquent déjà une commande indéterminée. Remplace les deux IRLZ44N de la branche, garde 68 Ω en série et 10 kΩ grille-source, puis impose 20 µs de temps mort dans le code. Mesure également le moteur bloqué moins de 500 ms ; si tu dépasses 6 A, la LRS-75-12 est sous-dimensionnée et une LRS-150-12, donnée pour 12,5 A, sera plus cohérente. Un module BTS7960 bon marché n’est pas automatiquement une solution : beaucoup supportent nettement moins que les 43 A imprimés.
Clara a raison sur la chute de tension : le flash ajoute un appel de courant bref, simultané aux pointes de l’ESP32 et de la caméra. Le condensateur de 1 000 µF ne compense pas une résistance excessive du câble ; vérifie aussi qu’il est bien sur l’entrée 5 V, et non sur le rail 3,3 V. Je te conseille deux fils de 0,5 mm² de moins de 30 cm, le 1 000 µF avec une tension nominale d’au moins 6,3 V, plus un céramique de 100 nF directement entre 5V et GND. Mesure également le 3,3 V : s’il descend sous environ 3,0 V au switch du flash, le brownout explique le reboot. Ne désactive pas le détecteur logiciellement ; teste d’abord avec une alimentation réglée à 5,1 V et limitée à 1,5 A. Ton câble coupé contient-il des conducteurs très fins, type 28 AWG ?
Je précise un point pour éviter une fausse manipulation : remplacer seulement #include <LoRa.h> par #include <RadioLib.h> ne suffit pas, car les API sont différentes. Dans RadioLib, une initialisation cohérente pour cette carte est radio.begin(868.0, 125.0, 9, 7, 0x12, 10, 8, 1.8), puis il faut vérifier le code de retour ; zéro signifie que l’initialisation a réussi. Active aussi la compilation détaillée dans les préférences : les lignes commençant par « -I » montreront immédiatement quelles bibliothèques l’IDE 2.3.4 utilise réellement.
Il y a deux problèmes distincts. L’erreur actuelle signifie uniquement que le compilateur ne voit pas le fichier demandé ; la carte et le câble USB n’interviennent pas encore. Ensuite, même en restaurant LoRa.h, la bibliothèque de Sandeep Mistry ne pilote pas le SX1262 de la Heltec V3. Avec RadioLib, le câblage intégré se déclare ainsi :
#include <RadioLib.h>
SX1262 radio = new Module(8, 14, 12, 13);
Pour un premier essai en Bretagne, utilise 868,0 MHz, une bande passante de 125,0 kHz, SF9, CR 4/7 et une puissance de 10 dBm. Il faudra également activer le switch RF sur DIO2 et fournir 1,8 V au TCXO. Commence par compiler un exemple SX1262 vierge avant de reporter ton suivi de cuve.
Puisque le moteur se verrouille, la puissance et SLEEP fonctionnent désormais. Avec AccelStepper en mode DRIVER, vérifie surtout que run() est appelé à chaque passage dans loop() : AccelStepper moteur(AccelStepper::DRIVER, 3, 2);, puis setMaxSpeed(400); setAcceleration(200); moveTo(800); dans setup, et uniquement moteur.run(); dans loop. Évite tout delay() dans cette boucle. Si le test manuel ne produit rien non plus, déplace STEP sur une autre sortie numérique et mesure les impulsions par rapport à la masse commune.
Le point bloquant est probablement déjà trouvé : RESET et SLEEP reliés uniquement entre eux restent au niveau bas à cause du rappel interne de SLEEP. Relie leur jonction au 5 V de l’Arduino, avec toutes les masses communes. Pour un test sans AccelStepper, fixe DIR puis envoie 200 impulsions sur STEP, chacune avec digitalWrite(STEP,HIGH); delayMicroseconds(1000); digitalWrite(STEP,LOW); delayMicroseconds(1000);. Si le moteur se verrouille mais ne tourne toujours pas, mesure ensuite les deux paires de bobines hors tension.
