ARTNOW:
Bonjour NIKUS972 ; bravo pour ton projet déjà bien abouti , quelques petites choses me paraissent à ajuster :
Chauffage 3kw + pompe 2,2kw soit 5200 W sous 240v = 21 ampères , et je note que ton disjoncteur fait seulement 16 A ......
Attention aussi à ton relais qui pilote ta résistance il doit supporter 12.5 Ampères donc il doit avoir un pouvoir de coupure d'au moins 16A.
En électromécanique lorsque l'on utilise une résistance chauffante on prend l'habitude d'utiliser deux contacts de relais à fermeture( avec deux relais différents) , de cette façons la résistance ne risque pas de rester en fonction si les contacts du relais reste collés .
Bonne continuation.
Oui je m'en doutais mais pour le moment la resistance n'est pas encore acheté vu que celle d'origine est morte et il se peut que j'en achete une moins puissante, car l'eau de mon spa est naturellement à 32°c.
Cependant ta remarque avec 2 contacts plutot qu'un n'est pas tombé dans l'oreille d'un sourd, et comme j'avais un relay de libre j'ai ajouté la modif dans le programme, Merci.
McGiver_13:
Étant très curieux, j'ai regardé ton programme et j'ai vu que pour prendre la température c'est une sacré galère. J'utilise la même sonde que toi mais avec la bibliothèque <DallasTemperature.h> et <OneWire.h> qui simplifie pas mal la vie pour ce que je voulais faire, sans forcement une très grande précision.
La prise de température tien en 2 lignes :
sensors.requestTemperatures(); // Prise température
float tempeau = (sensors.getTempCByIndex(0)); // tempeau prend la valeur du sensors
le résultat est directement en degré Celsius.
A+
En un mot PARFAIT et j'en rajoute un deuxième MERCI, cependant le code généré est plus gros de 1000octets mais c'est pas grave car c'est plus lisible.
Donc vos deux remarques sont dans la version 1.4 du programme téléchargeable en pièce jointe.
version 1.4 :
- correction de petit bug
- simplification de la prise de température
- commande de la résistance de chauffage par deux contacts
- affichage de la version du programme dans le menu 6
- plus quelques petits nettoyage du code
Par contre j'ai DEUX questions
Comment fixer proprement l'arduino Nano sur ma plaque?
Pour la gestion des massages, j'ai une grosse question :
Dans mon code lorsque j'appuie sur la touche 1 de la telecommande alors que je suis dans la loop(), je vais dans un sous programme qui gere le cycle du massage (PompeGV pendant 15mn et bulleur 45s tout les 3mn)
Une fois fini il sort et retourne dans la loop()
Si je cree d'autre programme de massage, commandé par la touche 2 ou 3 de la telecommande, je vais juste changer la duree du cycle ainsi que celle du bulleur, mais le probleme c'est que je n'arrive pas a inclure les variables dans le sous programme du massage, il me dit qu'il ne sont pas défini dans le scope.
En fait je vais vous mettre un bout du code que je pense etre bon mais celui ci ne marche pas...
int //creation des variables
dureeMassage,
dureeBulleurMarche,
dureeBulleurArret,
consigneTemperatureProgMass
void setup () {}
void loop () {
if (irrecv.decode(&results)) { //attente de l'arrivé d'un signal de la telecommande
if (results.value==0xFD00FF){ //Touche 1 programmeMassage1
//programmation des durées des variables
dureeMassage=15; //temps en minute
dureeBulleurMarche=45; //temps en second
dureeBulleurArret=3; //temps en minute
consigneTemperatureProgMass=35; //temperature du chauffage pour le programmeMassage1
programmeMassage();} //lancement du programme de massage
if (results.value==0xFD807F){ //Touche 2 programmeMassage2
//programmation des durées des variables
dureeMassage=10, //temps en minute
dureeBulleurMarche=15, //temps en second
dureeBulleurArret=1, //temps en minute
consigneTemperatureProgMass=38; //temperature du chauffage pour le programmeMassage2
programmeMassage();} //lancement du programme de massage
}
}
void programmeMassage(){ //programme de massage
//mise à l'arret des actionneurs phase de sécurité
digitalWrite(pompePV, HIGH); //arret de la pompePV
digitalWrite(pompeGV, HIGH); //arret de la pompeGV
digitalWrite(bulleur, HIGH); //arret du bulleur
digitalWrite(resistance1, HIGH); //arret de la resistance
digitalWrite(resistance2, HIGH); //arret de la resistance
DateTime now = horloge.now(); //mise à l'heure
DateTime debutMassage, finMassage, bulleurOn, bulleurOff; //creation des variables heures
//parametrage des variables heures
debutMassage=now;
finMassage = (now + TimeSpan(0,0,dureeMassage,0));
bulleurOn =(now + TimeSpan(0,0,dureeBulleurArret,0));
bulleurOff =now;
delay(200);
while(true) //Boucle pour realiser le programme du massage
{
temperature(); //prise de temperature
//gestion des actionneurs
digitalWrite(pompeGV,LOW); //mise en marche pompeGV
//CHAUFFAGE
if(celsiusNet <= consigneTemperatureProgMass1-1){ //Mise en marche du chauffage -1° pour eviter les etats indecis
digitalWrite(resistance1, LOW);
digitalWrite(resistance2, LOW);}
if(celsiusNet >= consigneTemperatureProgMass1+1){ //Mise en arret du chauffage +1° pour eviter les etats indecis
digitalWrite(resistance1 , HIGH);
digitalWrite(resistance2 , HIGH);}
//Mise en marche du bulleur
if (now.minute()==bulleurOn.minute() && now.second()==bulleurOn.second()) {
digitalWrite(bulleur,LOW);
bulleurOff = (now + TimeSpan(0,0,0,dureeBulleurMarche)); //programmation de l'heure d'arret du bulleur
}
//Mise à l'arret du bulleur
if (now.minute()==bulleurOff.minute() && now.second()==bulleurOff.second()) {
digitalWrite(bulleur,HIGH);
bulleurOn = (now + TimeSpan(0,0,dureeBulleurArret,0)); //programmation de l'heure de depart du bulleur
}
//Les modes d'Arret du programmeMassage1
// Par le temps finMassage
if (finMassage.minute()==now.minute() && finMassage.second()==now.second() ) {
digitalWrite(pompeGV,HIGH); securiteGV=0;
digitalWrite(resistance1, HIGH);
digitalWrite(resistance2, HIGH);
digitalWrite(bulleur,HIGH);
lcd_4x20.clear();
break;
}
//Par la telecommande touche 0
if (irrecv.decode(&results)){
if (results.value==0xFDB04F) { //annuler appuie 0
delay(100);
irrecv.resume();
lcd_4x20.clear();
digitalWrite(pompeGV,HIGH); securiteGV=0;
digitalWrite(resistance1 ,HIGH);
digitalWrite(resistance2 ,HIGH);
digitalWrite(bulleur,HIGH);
break;
}
if (results.value==0xFFFFFFFF) { //nettoyage bug
debugInit();}
}
delay(10);
}
return;
}
SpaDuino-v1_4.ino (20.8 KB)