Bonjour useralacon
Dans ton explication, émetteur et collecteur sont inversés.
As-tu mis une diode de protection "sur" le moteur?

Quand ton installation dysfonctionne, est-ce que le transistor chauffe?
Avec delay() ton programme est bloqué en permanence, tu ne pourrais rien faire d'autre. Quand de longs temps sont nécessaires, il est préférable d'utiliser millis() comme proposé dans l'exemple Blink Without Delay
Voilà un exemple pour ta pompe,
const byte pompeCommande = 2;
unsigned long pompePeriode = 5000; //10*60*1000; // 10 minutes en millisecondes
unsigned long pompePeriodeMillis = millis();
unsigned long pompeImpulsion = 1000; //10*1000; // 10 secondes en millisecondes
unsigned long pompeImpulsionMillis = 0;
bool isLightOn = false;
void setup()
{
pinMode(pompeCommande, OUTPUT);
digitalWrite(pompeCommande, LOW);
}
void loop()
{
if (millis()-pompePeriodeMillis >= pompePeriode)
{
pompePeriodeMillis = millis(); // Réarmer chrono période
digitalWrite(pompeCommande, HIGH); // Pompe En
pompeImpulsionMillis = millis(); // Pompe impulsion début
}
if (pompeImpulsionMillis && millis()-pompeImpulsionMillis >= pompeImpulsion) // Si fin impussion pompe
{
digitalWrite(pompeCommande, LOW); // Pompe Hors
pompeImpulsionMillis = 0;
}
}
C'est un tout petit peu plus compliqué, mais plus pratique.
Il est "accéléré", 1 seconde toutes les 5 secondes, pour la démo, il faut enlever les remarques pour les temps réels.
unsigned long pompePeriode = 10*60*1000; // 10 minutes en millisecondes
unsigned long pompeImpulsion = 10*1000; // 10 secondes en millisecondes
Cordialement
jpbbricole