IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Plantage Arduino Mega


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut Plantage Arduino Mega
    Bonjour tout le monde
    Je suis nouveau ici et je suis autodidacte sur l'Arduino et débutant dans l'électronique en général voila pour une courte présentation
    Mon problème :
    j'ai utilisé un Arduino méga marque ELEGOO hein le matos ça compte ;p j'ai créé un "programme" pour un système de chauffage (gestion chaudière bois, ecs)
    tout marche bien mais par moment de manière aléatoire ça plante et se fige, plus de réaction de l'Arduino du coup surchauffe de la chaudière bon je vais ajouter des thermostats mécaniques de sécurité au cas où mais j'aimerais comprendre mon problème
    donc en matos j'ai
    • un Arduino méga
    • un écran 3.5" tactile
    • 4 sonde 18B20
    • 4 relais pour l'alimentation j'utilise un chargeur de téléphone 5V 2A


    pour le code je pense qu'il peut être amélioré comme mon orthographe mais j'ai pas les capacités à ce jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    /********************************************************************************************
    Information utile pour raccordement 
    K0 = sortie 26 circulateur chaudière bois 
    K1 = sortie 27 circulateur radiateur
    K2 = sortie 28 circulateur eau chaude sanitaire
    K3 = sortie 29 By passe radiateur
    sonde brancher sur 14
    *********************************************************************************************/
     
    #include <EEPROM.h>                                                      // librairy pour utiliser la mémoir interne
    #include <MCUFRIEND_kbv.h>                                               // librairy pour l'écran
    MCUFRIEND_kbv tft;                                                       // librairy pour l'écran
    #include <TouchScreen.h>                                                 // librairy pour le tactile
    #include "Adafruit_GFX.h"                                                // librairy pour l'écran
    #include <Wire.h>                                                        // librairy pour bus de communication
    #include <OneWire.h>                                                     // librairy pour le bus de comunication 
    #include <DallasTemperature.h>                                           // librairy pour les sonde de temperature 
    DeviceAddress sensorDeviceAddress;                                       // Vérifie la compatibilité des capteurs avec la librairie
    uint16_t ID, oldcolor, currentcolor;                                     //
    int tempV1;                                                              //
    int tempV2;                                                              //
    int tempV3;                                                              //
    int tempV4;                                                              //
                                                                             //
     // écran tactil //                                                      //
    #define LCD_CS A3                                                        // Chip Select goes to Analog 3
    #define LCD_CD A2                                                        // Command/Data goes to Analog 2
    #define LCD_WR A1                                                        // LCD Write goes to Analog 1
    #define LCD_RD A0                                                        // LCD Read goes to Analog 0
    #define LCD_RESET A4                                                     // Can alternately just connect to Arduino's reset pin
    #define LCDROTATION    1                                                 //
    #define YP A3                                                            // must be an analog pin, use "An" notation!
    #define XM A2                                                            // must be an analog pin, use "An" notation!
    #define YM 9                                                             // can be a digital pin
    #define XP 8                                                             // can be a digital pin
    #define TS_MINX 150                                                      //  150
    #define TS_MINY 120                                                      //  120
    #define TS_MAXX 920                                                      //  920
    #define TS_MAXY 940                                                      //  940
    TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);                       //
    #define MINPRESSURE 10                                                   //
    #define MAXPRESSURE 1000                                                 //
                                                                             //
     // couleur écran //                                                     //
    #define BLACK           0xFFFF                                           //
    #define WHITE           0x0000                                           //
    #define BLUE            0xEEE0                                           //
    #define RED             0x07FF                                           //
    #define GREEN           0xF81F                                           //
    #define YELLOW          0x001F                                           //
    #define ORANGE          0x053C                                           // 
    #define GREY            0x39C7                                           //
                                                                             //
    // temporisatio                                                          //
    unsigned long previousMillisPaf = 0;                                     //
    unsigned long previousMillisPif = 0;                                     //
    unsigned long tempo1 = 2000;                                             //
    unsigned long tempo2 = 0;                                                //
                                                                             //
    //Menu Variables                                                         //
    String CurrentPage;                                                      //
                                                                             //
    // raccordement et selection borne pour bus ondrive                      //                                                                         //
    #define ONE_WIRE_BUS 14                                                  // entre 14 sur la carte pour les sondes
    OneWire oneWire(ONE_WIRE_BUS);                                           //
                                                                             //
    // oneWire reference to Dallas Temperature.                              //
    DallasTemperature sensors(&oneWire);                                     // 
                                                                             //
                                                                             //
    // Adrese sonde DS18B20s //                                              // supprimer les adresse non utilisé         
    DeviceAddress S4={0x28, 0x0D, 0x8D, 0x11, 0x28, 0x19, 0x01, 0x75};       // adresse sonde 4  chaudiere bois
    DeviceAddress S12={0x28, 0x55, 0x90, 0xA9, 0x27, 0x19, 0x01, 0xB8};      // adresse sonde 12 haut ballon tampon
    DeviceAddress S14={0x28, 0x90, 0xD6, 0x07, 0xD6, 0x01, 0x3C, 0xFA};      // adresse sonde 14 bas ballon tampon
    DeviceAddress S16={0x28, 0x53, 0xE3, 0x07, 0xD6, 0x01, 0x3C, 0x6A};      // adresse sonde 16 bas ECS
                                                                             //
    // Menue affichage (thermostat)                                          //
    void termostat()  {                                                      //
                                                                             //
     CurrentPage     =  "termostat";                                         // nom de la page
     tft.setTextColor(BLACK);                                                // couleur de texte noir
     tft.setTextSize(3);                                                     // taille de texte 3
     tft.fillRect(0, 0, 500, 350, BLACK);                                    // carré noir qui prend toute  l'écran  
     tft.fillCircle(210, 170, 60, GREY);                                     // cercle gris
     tft.drawCircle(210,170, 60, WHITE);                                     // contoure de cercle blanc
     tft.setTextColor(WHITE);                                                // couleur texte blanc
     tft.setCursor(80, 20);                                                  // emplacement texte
     tft.print("THERMOSTAT ECS");                                            // texte thermostat
                                                                             //
     // bouton -                                                             // indication
     tft.setTextSize(4);                                                     // taille de texte 4
     tft.setTextColor(GREEN);                                                //
     tft.drawCircle(120, 120, 45, GREY);                                     // contour du bouton vert
     tft.setCursor(110, 110);                                                // position du texte
     tft.print("-");                                                         // texte -
                                                                             //
     // bouton +                                                             // indication
     tft.setTextColor(RED);                                                  //
     tft.drawCircle(300, 220, 45, GREY);                                     // contour bouton rouge
     tft.setCursor(290, 210);                                                // position du texte
     tft.print("+");                                                         // texte +
                                                                             //
     //bar menu du bas                                                       // indication
     tft.drawRect(305, 270, 170, 40, GREY);                                  // rectangle rouge
     tft.setTextSize(3);                                                     // taille de texte 3
     tft.setTextColor(WHITE);                                                // couleur de texte blanc
     tft.setCursor(345, 280);                                                // emplacement du texte
     tft.println("SECU");                                                    // texte INFO
     tft.drawRect(0, 270, 170, 40, GREY);                                    // rectangle rouge
     tft.setCursor(10, 280);                                                 // emplacement du texte
     tft.println("TAMPON");                                                  // texte tampon
     }                                                                       // fin 
                                                                             //
    void acceuil()  {                                                        //
                                                                             //
    // affichage page d'acceuil                                              //
     CurrentPage     =  "acceuil";                                           // nom de la page
      tft.fillRect(0, 0, 500, 350, BLACK);                                   // carré noir qui prend toute  l'écran 
      tft.setTextSize(3);                                                    // taille du texte 3
      tft.setTextColor(WHITE);                                               // couleur du texte blanc
      tft.setCursor(25, 20);                                                 // positionement du texte 
      tft.println("TEMPERATURE CHAUDIERE s4");                               // texte temperature eau radiateur
    }                                                                        // fin
                                                                             //
    void  info()  {                                                          // menue ECS
    // affichage menue info                                                  //
        CurrentPage     =  "info";                                           // nom de la page
        tft.fillRect(0, 0, 500, 350, BLACK);                                 // carré noir qui prend toute  l'écran 
        tft.setTextColor(GREY);                                              // couleur du texte bleu claire
        tft.setTextSize(4);                                                  // taille du texte 3
        tft.setCursor(200, 10);                                              // position du texte
        tft.print("SECU");                                                   // texte ecs
       // bouton - 1                                                            // indication
     tft.setTextSize(4);                                                     // taille de texte 4
     tft.setTextColor(GREEN);                                                //
     tft.drawCircle(50, 80, 30, GREY);                                     // contour du bouton vert
     tft.setCursor(40, 70);                                                // position du texte
     tft.print("-");                                                         // texte -
                                                                             //
     // bouton +  1                                                           // indication
     tft.setTextColor(RED);                                                  //
     tft.drawCircle(150, 80, 30, GREY);                                     // contour bouton rouge
     tft.setCursor(140, 140);                                                // position du texte
     tft.print("+");                                                         // texte +
     // bouton - 2                                                            // indication
     tft.setTextSize(4);                                                     // taille de texte 4
     tft.setTextColor(GREEN);                                                //
     tft.drawCircle(50, 150, 30, GREY);                                     // contour du bouton vert
     tft.setCursor(40, 140);                                                // position du texte
     tft.print("-");                                                         // texte -                                                                         //
     // bouton +  2                                                           // indication
     tft.setTextColor(RED);                                                  //
     tft.drawCircle(150, 150, 30, GREY);                                     // contour bouton rouge
     tft.setCursor(140, 70);                                                // position du texte
     tft.print("+");                                                         // texte +
    // bouton - 3                                                            // indication
     tft.setTextSize(4);                                                     // taille de texte 4
     tft.setTextColor(GREEN);                                                //
     tft.drawCircle(50, 220, 30, GREY);                                     // contour du bouton vert
     tft.setCursor(40, 210);                                                // position du texte
     tft.print("-");                                                         // texte -                                                                         //
     // bouton +  3                                                           // indication
     tft.setTextColor(RED);                                                  //
     tft.drawCircle(150, 220, 30, GREY);                                     // contour bouton rouge
     tft.setCursor(140, 210);                                                // position du texte
     tft.print("+");                                                         // texte +
     
     tft.fillCircle(250, 80, 30, GREY);                                     // cercle gris
     tft.fillCircle(250, 150, 30, GREY);                                     // cercle gris
     tft.fillCircle(250, 220, 30, GREY);                                     // cercle gris
     
     tft.setTextColor(GREY);                                              // couleur du texte bleu claire
     tft.setTextSize(3);                                                  // taille du texte 3
     tft.setCursor(300, 70);                                              // position du texte
     tft.print("Dif bois");                                                   // texte ecs
     tft.setCursor(300, 140);                                              // position du texte
     tft.print("Dif ECS");                                                   // texte ecs
     tft.setCursor(300, 210);                                              // position du texte
     tft.print("T secu");                                                   // texte ecs
     
     tft.drawRect(180, 270, 170, 40, GREY);                                  // rectangle rouge
     tft.setTextSize(3);                                                     // taille de texte 3
     tft.setTextColor(WHITE);                                                // couleur de texte blanc
     tft.setCursor(185, 280);                                                // emplacement du texte
     tft.println("RETOUR");                                                    // texte INFO
    }                                                                        // fin  
    void  tampon()  {                                                        // Menue Tampon
                                                                             //
        CurrentPage     =  "tampon";                                         // Nom de la page
        tft.fillRect(0, 0, 500, 350, BLACK);                                 // grrand carree noire
        tft.setTextColor(GREY);                                              // couleur texte gris
        tft.setTextSize(2);                                                  // taille du texte 3
        tft.setCursor(220, 10);                                              // position du texte
        tft.print("Vers radiateur");                                         // texte
        tft.fillCircle(150, 130, 48, BLUE);                                  // partie haute du ballon
        tft.fillCircle(150, 270, 48, BLUE);                                  // partie basse du ballon
        tft.fillRect(102, 130, 98, 143, BLUE);                               // corps du ballon
        tft.fillCircle(420, 130, 48, BLUE);                                  // partie haute du ballon
        tft.fillCircle(420, 270, 48, BLUE);                                  // partie basse du ballon
        tft.fillRect(372, 130, 98, 143, BLUE);                               // corps du ballon
        tft.fillRect(50, 60, 245, 5, RED);                                   // Bar horisontal by Pass
        tft.fillRect(50, 60, 5, 45, RED);                                    // Bar vertical by passe 
        tft.fillRect(1, 100, 110,5, RED);                                    // Bar horisontal pompe bois                              
        tft.fillRect(200, 150, 30, 5, RED);                                  // Bar horisontal vers vanne 3 voie
        tft.fillRect(200, 120, 170, 5, RED);                                 // Bar horisontal vers ECS
        tft.fillRect(1, 250, 100, 5, BLUE);                                  // Bar horisontal retour coté chaudiere
        tft.fillRect(200, 250, 120, 5, BLUE);                                // Bar horisontal retour ballon cote radiateur
        tft.fillRect(200, 270, 170, 5, BLUE);                                // Bar horisontal retour ballon ECS
        tft.fillRect(320, 40, 5, 215, BLUE);                                 // Bar vertical retour cote radiateur
        tft.fillRect(240, 150, 60, 5, RED);                                  // Bar horisontal vers radiateur
        tft.fillRect(295, 40, 5, 110, RED);                                  // Bar vertical vers radiateur
        tft.setCursor(5, 120);                                               // position texte
        tft.print("Pompe B");                                                // texte
        tft.setCursor(50, 40);                                               // position texte
        tft.print("By passe");                                               // texte
        tft.setCursor(5, 230);                                               // position texte
        tft.print("Retour");                                                 // texte
        tft.setCursor(340, 80);                                              // position texte
        tft.print("ECS");                                                    // texte
        tft.setTextSize(1);                                                  // taille du texte
        tft.setCursor(125, 110);                                             // position texte
        tft.print("T haute s12");                                            // texte
        tft.setCursor(125, 230);                                             // position texte
        tft.print("T Bas s14");                                              // texte
        tft.setCursor(395, 150);                                             // position texte
        tft.print("T ECS s16");                                              // texte
    }                                                                        // fin
                                                                             //
    void setup() {                                                           //
     while(!Serial);                                                         //
         pinMode(26, OUTPUT);                                                // sortie k0 pompe bois
         pinMode(27, OUTPUT);                                                // sortie k1 pompe radiateur
         pinMode(28, OUTPUT);                                                // sortie k2 pompe ECS
         pinMode(29, OUTPUT);                                                // sortie k3 BY Pass
                                                                             //
      Serial.begin(115200);                                                  // vitesse ce comunication
      tempV1 = EEPROM.read (3);                                              // memoire 1
      tempV2 = EEPROM.read (4);                                              // memoire 2
      tempV3 = EEPROM.read (5);                                              // memoire 3
      tempV4 = EEPROM.read (6);                                              // memoire 4
      tft.reset();                                                           // reset ecran
      ID = tft.readID();                                                     // type d'écran
      tft.begin(ID);                                                         // type d'écran
      tft.setRotation(LCDROTATION);                                          // Need for the Mega, please changed for your choice or rotation initial
                                                                             //
      tampon();                                                             //
    }                                                                        //
                                                                             //
    void loop() {                                                            //
      unsigned long currentMillis = millis();                                //
      sensors.requestTemperatures();                                         // lecture des sonde  
      //float Tc =(tempV1-(sensors.getTempC(S8)-20)*10);                     // calcule de loie d'eau 10 deg. de moins départ pour 1deg de plus int
     
      float Tc =tempV1;                                                      //
       float Secu = tempV2;                                                       //
      float Tecs = (sensors.getTempC(S16)+tempV3);                               // calcule temp. ECS
      float Tbois = (sensors.getTempC(S14)+tempV4);                              // calcule temp. bois
                                                                             //
      boolean K0=digitalRead(26);                                            //pompe bois 
      boolean K1=digitalRead(27);                                            //pompe radiateur
      boolean K2=digitalRead(28);                                            //Pompe ECS
      boolean K3=digitalRead(29);                                            //By passe
                                                                             //
     Touch();                                                                //
                                                                             //
     if  (CurrentPage == "termostat") {                                      //
     if (currentMillis > previousMillisPaf + tempo2) {                       //
        previousMillisPaf = currentMillis;                                   //
        tft.setTextColor(BLACK, GREY);                                       // couleur texte
        tft.setTextSize(4);                                                  // taille de taxte
        tft.setCursor(185, 155);                                             // emplacement texte
        tft.print(tempV1);                                                   // temporisation non blocante
        tft.setTextColor(WHITE, BLACK);                                      // couleur texte
        tft.setTextSize(2);                                                  // taille de texte
        tft.setCursor(5, 245);                                               //
    }}                                                                       //
                                                                             //
     if  (CurrentPage == "acceuil") {                                        //
       tft.setTextColor(WHITE, BLACK);                                       // couleur du texte 
       tft.setTextSize(10);                                                  // taille du texte
                                                                             //
     if (currentMillis > previousMillisPaf + tempo2) {                       //
        previousMillisPaf = currentMillis;                                   //
        tft.setCursor(50, 70);                                               // position du texte
        tft.println(sensors.getTempC(S4));                                   // sonde temperature ECS
        tft.setCursor(400, 70);                                              // position du texte 
        tft.println("C");                                                    // texte C
                                                                             //
        tft.drawCircle(250,230, 65, GREY);                                   // contoure de cercle orang
        tft.drawCircle(250,230, 55, GREY);                                   // contoure de cercle orange
        tft.drawCircle(250,230, 45, GREY);                                   // contoure de cercle orange
        tft.drawCircle(250,230, 35, GREY);                                   // contoure de cercle orange
        tft.drawCircle(250,230, 25, GREY);                                   // contoure de cercle orange
        tft.drawCircle(250,230, 15, GREY);                                   // contoure de cercle orange
        tft.drawCircle(250,230, 65, BLACK);                                  // contoure de cercle orange
        tft.drawCircle(250,230, 55, BLACK);                                  // contoure de cercle orange
        tft.drawCircle(250,230, 45, BLACK);                                  // contoure de cercle orange
        tft.drawCircle(250,230, 35, BLACK);                                  // contoure de cercle orange
        tft.drawCircle(250,230, 25, BLACK);                                  // contoure de cercle orange
        }}                                                                   // fin
                                                                             //
     if  (CurrentPage == "info") {                                           //
      tft.setTextColor(WHITE);                                               //
     if (currentMillis > previousMillisPaf + tempo2) {                       //
        previousMillisPaf = currentMillis;                                   //
      tft.setTextColor(BLACK, GREY);                                         // couleur du texte bleu claire
      tft.setCursor(235, 70);                                                // position du texte
      tft.print(tempV4);                                                   // temporisation non blocante
      tft.setCursor(235, 140);                                                // position du texte
      tft.print(tempV3);                                                   // temporisation non blocante
      tft.setCursor(235, 210);                                                // position du texte
      tft.print(tempV2);                                                   // temporisation non blocante
     }}                                                                      //
                                                                             //
     if  (CurrentPage == "tampon") {                                         //
      tft.setTextColor(WHITE, BLACK);                                               //
      tft.setTextSize(2);                                                    //
       if (currentMillis > previousMillisPaf + tempo2) {                     //
        previousMillisPaf = currentMillis;                                   //
      tft.setCursor(10, 10);
      tft.print(" bois");
      tft.setCursor(100,10);                                                // affichage position
      tft.println(sensors.getTempC(S4));                                    // affichage sonde ECS Bas                                                                        //
      tft.setTextColor(WHITE, BLUE);                                         // taille de texte
      tft.setCursor(125,125);                                                // affichage position
      tft.println(sensors.getTempC(S12));                                    // affichage sonde TAMPON haute
      tft.setCursor(125,255);                                                // affichage position
      tft.println(sensors.getTempC(S14));                                    // affichage sonde TAMPON Bas
      tft.setCursor(390,170);                                                // affichage position
      tft.println(sensors.getTempC(S16));                                    // affichage sonde ECS Bas
     
        if (K0==0)                                                           // si état relais en marche
        {tft.fillCircle(20,100,15,GREEN);}                                   // POMPE CHAUDIERE
        else                                                                 // sinon
        {tft.fillCircle(20,100,15, RED);}                                    // POMPE CHAUDIERE
        if (K3==0)                                                           // si état relais en marche
        {tft.fillCircle(170,63,15,GREEN);}                                   // BY PASSE
        else                                                                 // sinon
        {tft.fillCircle(170,63,15,RED);}                                     // BY PASSE
        if (K1==0)                                                           // si état relais en marche
        {tft.fillCircle(233,150,15,GREEN);}                                  // POMPE CHAUFFAHE
        else                                                                 // sinon
        {tft.fillCircle(233,150,15,RED);}                                    // POMPE CHAUFFAGE
         if (K2==0)                                                          // si état relais en marche
        {tft.fillCircle(350,120,15,GREEN);}                                  // POMPE ECS
        else                                                                 // sinon
        {tft.fillCircle(350,120,15,RED);}                                    // POMPE ECS
     }}                                                                      //
                                                                             //
       /// fonction sortie ///                                               // fonction des sortie 
         // pompe radiateur //                                               // fonction pompe radiateur
                                                                             //
       if(sensors.getTempC(S12)>(40))                                        // si haut tampon superrieur a 35
      {digitalWrite(27,LOW);}                                                // on alume la pompe bois 
       if(sensors.getTempC(S12)<(30))                                        // si haut tampon superrieur a 35
      {digitalWrite(27,HIGH);}                                               // on arret la pompe bois
      if (K1==1)                                                             // si pompe radiateur en arreter
      {digitalWrite(29, LOW);}                                               // on active le by passe
      else                                                                   // sinon
      {digitalWrite(29, HIGH);}                                              // on desactive le by passe
                                                                             //
      /// pompe chaudiere bois///                                            // fonction pompe chauffage bois 
                                                                             //
      if(sensors.getTempC(S4)>(Secu))                                          // si la chaudière et supperieur a 80 degré
      {digitalWrite(26,LOW);}                                                // on active le circulateur
      else                                                                   // sionon 
      {if(sensors.getTempC(S4)>(60))                                         // si temperatute départ bois superieur a 60
      {if(sensors.getTempC(S4)>(Tbois))                                      // si temperature chaudière bois superieur de 15 degre
      {digitalWrite(26,LOW);}                                                // on alume la pompe bois                                      
       else                                                                  // sinon
      {digitalWrite(26,HIGH);}}                                              // on arret la pompe bois
      else                                                                   // sinon
      {digitalWrite(26,HIGH);}}                                              // on arret la pompe bois
                                                                             //
       /// eau chaude sanitaire ///                                          // fonction ECS
                                                                             //
       if(sensors.getTempC(S4)>(Secu))                                         //si ballon tampon superieur à 80 degré
       {digitalWrite(28,LOW);}                                               //on active la pompe ecs   
        else                                                                 //sionon
      {if((sensors.getTempC(S12)>(Tecs))&&(sensors.getTempC(S16)<(Tc)))      // si temperature tampon haut superieur de 10 degre de ECS
      {digitalWrite(28,LOW);}                                                // marche pompe ECS
       else                                                                  // sinon
      {digitalWrite(28,HIGH);}}                                              // arret pompe ECS
      }                                                                      //
                                                                             //
    void  Touch() {                                                          //
                                                                             //
      TSPoint p = ts.getPoint();                                             //
                                                                             //
      pinMode(XM, OUTPUT);                                                   //
      pinMode(YP, OUTPUT);                                                   //
                                                                             //
      if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {                          // minimum pressure we consider 'valid' - pressure of 0 means no pressing!
                                                                             //
        // scale from 0->1023 to tft.width                                   //
        p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);                    //
        p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);                   //
                                                                             //
        /*  Display Touch coordinates and pressure to the Serial console  */ //
        Serial.print("p.x = ");                                              //
        Serial.print(p.x);                                                   //
        Serial.print("  |  p.y = ");                                         //
        Serial.print(p.y);                                                   //
        Serial.print("  |  Pressure = ");                                    //
        Serial.println(p.z);                                                 //
          if  (CurrentPage == "acceuil")                                     //
            {termostat();}                                                   //
          if  (CurrentPage == "tampon")                                      //
            {acceuil();}                                                     //
        //  if  (CurrentPage == "info")                                        //
        //    {acceuil();}                                                     //
                                                                             //
           //bouton suivant                                                  //
        if (p.y > 220 && p.y < 330 && p.x > 440 && p.x < 500) {              //
                                                                             //
          if  (CurrentPage == "termostat")                                   //
           {info();}}                                                        //
                                                                             //
           //bouton precedent                                                //
        if (p.y > 0 && p.y < 110 && p.x > 440 && p.x < 500) {                //
          if (CurrentPage == "termostat")                                    //
          {tampon();}}                                                       //
                                                                             //
        //  bouton +                                                         //
        if  (CurrentPage == "termostat")                                     //
        {                                                                    //
                                                                             //
        }                                                                    //
        if (p.y > 180 && p.y < 240 && p.x > 280 && p.x < 420) {              //
                                                                             //
          if  (CurrentPage == "termostat") {                                 //
            tempV1++;                                                        //
            EEPROM.write (3, tempV1);                                        //
          }}                                                                 //
                                                                             //
        //  Button -                                                         //
        if (p.y > 50 && p.y < 180 && p.x > 130 && p.x < 250) {               //
                                                                             //
          if  (CurrentPage == "termostat") {                                 //
            tempV1--;                                                        //
            EEPROM.write (3, tempV1);                                        //
          }}
     
     
          // dif bois
         if (p.y > 60 && p.y < 130 && p.x > 90 && p.x <170) {              //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV4++;                                                        //
            EEPROM.write (6, tempV4);                                        //
          }}                                                                 //
                                                                             //
        //  Button -                                                         //
        if (p.y > 0 && p.y < 60 && p.x > 90 && p.x < 170) {               //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV4--;                                                        //
            EEPROM.write (6, tempV4);                                        //
          }}
     
           // dif ECS
         if (p.y > 60 && p.y < 130 && p.x > 200 && p.x <290) {              //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV3++;                                                        //
            EEPROM.write (5, tempV3);                                        //
          }}                                                                 //
                                                                             //
        //  Button -                                                         //
        if (p.y > 0 && p.y < 60 && p.x > 180 && p.x < 290) {               //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV3--;                                                        //
            EEPROM.write (5, tempV3);                                        //
          }} 
     
           // secu
         if (p.y > 60 && p.y < 130 && p.x > 300 && p.x <400) {              //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV2++;                                                        //
            EEPROM.write (4, tempV2);                                        //
          }}                                                                 //
                                                                             //
        //  Button -                                                         //
        if (p.y > 0 && p.y < 60 && p.x > 300 && p.x < 400) {               //
                                                                             //
          if  (CurrentPage == "info") {                                 //
            tempV2--;                                                        //
            EEPROM.write (4, tempV2);                                        //
          }} 
     
     
      if (p.y > 120 && p.y < 200 && p.x > 440 && p.x < 500) {              //                                                                  //
          if  (CurrentPage == "info")                                   //
           {acceuil();}}                                                        //     
     
          }}
    merci si une personne a une réponse à mon problème

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Comment contrôlez vous la chaudière? A quoi ressemble le circuit?

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 629
    Par défaut Eléments
    Bonjour,

    J'ai regardé le programme et n'ai pas trouvé de cause à des blocages(mais l'indentation étant ce qu'elle est, la lecture est un peu pénible). Il y a de fortes chances comme le dit Jay que la cause soit hard et non soft.

    Il y a quand même quelques éléments qui sont assez surprenants :
    • Utiliser des chaînes de caractères pour identifier les différents menus (et seulement dans ce but) m'a fait frémir. Il existe une façon simple et économique de faire cela, par exemple : enum Menus_t {mnuHome, mnuTampon, mnuThermo, mnuInfo} Menu;. Par ailleurs, en les mettant dans l'ordre souhaité, on peut passer au suivant ou au précédant facilement sans se préoccuper du Menu courant par Menu = (Menu + 1) & 3; et Menu = (Menu-1) & 3;. Cela ne tient presque pas de place, est aussi lisible que les chaînes et beaucoup plus rapide (même si ce point n'est pas nécessairement important ici).
    • L'ordre des tests mériterait souvent d'être changé. Par exemple, dans Touch() il semble que les tests de menu seraient mieux avant les tests de touche car ils sont communs à plusieurs touches. De même il est possible de simplifier les incréments et décréments quand les touches + et - se touchent : il suffit de tester la macro touche résultant de leur fusion puis de faire par exemple tempV4 += p.y > 60? 1: -1;.
    • Je ne sais pas si l'écriture dans l'EEPROM est fréquente mais il serait peut être utile d'utiliser EEPROM.update() en lieu et place de EEPROM.write(). Il est un peu plus lent car il lit d'abord l'emplacement et n'écrit que si la nouvelle valeur est différente. Mais comme le nombre de cycles d'écritures est limité...


    Salutations

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Par ailleurs, en les mettant dans l'ordre souhaité, on peut passer au suivant ou au précédant facilement sans se préoccuper du Menu courant par Menu = (Menu + 1) & 3; et Menu = (Menu-1) & 3;. Cela ne tient presque pas de place, est aussi lisible que les chaînes et beaucoup plus rapide (même si ce point n'est pas nécessairement important ici).
    Salut @Guesset

    Petite digression (liée à notre autre discussion sur le respect de types en C++)

    Ici encore un point de différence entre C et C++

    En gros un enum en C++ crée un type à part entière et n'est plus équivalent directement à son sous-jacent numérique qu'on avait l'habitude de manipuler en C

    la variable Menu est de type Menus_t maintenant (une unscoped enumeration) et la promotion d'un élément vers la représentation entière sous jacente est implicite. donc on peut faire l'opération (Menu + 1) & 3;En revanche, l'affectation d'une représentation entière à votre variable de type Menu_t n'est pas dans la spécification. Vous devez faire un static_cast ou explicit cast.

    Si vous compilez cela sur UNO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    enum Menus_t {mnuHome, mnuTampon, mnuThermo, mnuInfo} Menu;
     
    void setup() {
      Serial.begin(115200); 
      Serial.print("Menu : "); Serial.println(Menu);
      Menu = (Menu + 1) & 3;
      Serial.print("Menu Suivant: "); Serial.println(Menu);
      Menu = (Menu - 1) & 3;
      Serial.print("Retour au Menu initial: "); Serial.println(Menu);
    }
     
    void loop() {}
    vous verrez bien sur la console série

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Menu : 0
    Menu Suivant: 1
    Retour au Menu initial: 0
    
    mais vous aurez aussi dans la console de compilation des warning du genre

    sketch_dec20b.ino:6:21: warning: invalid conversion from 'int' to 'Menus_t' [-fpermissive]
    Menu = (Menu + 1) & 3;
    ~~~~~~~~~~~^~~


    Maintenant changez de plate-forme pour aller sur ESP32, là ou l'IDE a des règles de compilation moins permissives et vous verrez que la compilation va planter avec ce message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sketch_dec20b.ino: In function 'void setup()':
    sketch_dec20b:6:21: error: invalid conversion from 'int' to 'Menus_t' [-fpermissive]
       Menu = (Menu + 1) & 3;
                         ^
    sketch_dec20b:8:21: error: invalid conversion from 'int' to 'Menus_t' [-fpermissive]
       Menu = (Menu - 1) & 3;
                         ^
    exit status 1
    invalid conversion from 'int' to 'Menus_t' [-fpermissive]

    ==> les règles de promotion d'un entier vers Menu_t ne sont pas autorisées. Le typage en C++ est beaucoup plus strict qu'en C

    Donc pour bien faire il faut écrire Menu = static_cast<Menus_t>((Menu + 1) & 3);et ceci compile sans warning sur les 2 plateformes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    enum Menus_t {mnuHome, mnuTampon, mnuThermo, mnuInfo} Menu;
     
    void setup() {
      Serial.begin(115200); 
      Serial.print("Menu : "); Serial.println(Menu);
      Menu = static_cast<Menus_t>((Menu + 1) & 3);
      Serial.print("Menu Suivant: "); Serial.println(Menu);
      Menu = static_cast<Menus_t>((Menu - 1) & 3);
      Serial.print("Retour au Menu initial: "); Serial.println(Menu);
    }
     
    void loop() {}


    (pour aller plus loin, la spec introduit aussi les "Scoped enumerations" avec enum class ou enum struct)

  5. #5
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par gienas Voir le message
    Salut merci de ta réponse donc les relais sont des relais avec optocoupleur intégré donc j'ai le +5 gnd et "commande" (bref relais Amazon que j'utilise sur d'autre projet sans probleme a ce jour.
    je n'ai pas de photo de l'installation car j'ai mis le system chez un ami et j'ai pas vue ton message avant d'aller chez lui mais déjà je pense que ma résistance entre +5 et data de mes sonde 18b20 est pas bonne car j'ai constaté que je perdait de manière aléatoire les sonde donc je vais déja voir sa . je suis passer aussi sur une alim 9V 1A sur la prise de l'Arduino au lieu du chargeur de téléphone mais c presque pire . bref je deviens fou

    Citation Envoyé par Guesset Voir le message
    salut merci de ta réponse c'est sur que le code peut etre amélioré et alléger mais je n'est pas les connaissance pour déjà la sa ma pris du temps et ce programme résulte de plusieur bout de program que j'ai trouver sur le net mais je cherche a amélioré tout sa quand j'ai le temps apres je pense que c'est un probleme matériel aussi car avec un méga 100% neuf j'ai le meme probleme déjà je perd mes sonde donc je pense que je vais testé une nouvel sonde pour les 18B20 ou passer a des thermocouple bref je cherche mais ta réponse est utile déjà pour l'interrogation de EEPROM meme si c'est des variable qui ne bouge plus une fois reglée ;p de plus j'aimerais donner un plage de réglage mais je ne sais pas encore comment faire
    en tout cas merci

    Citation Envoyé par Jay M Voir le message
    je contrôle 3 circulateur et 1 vanne de by passe . 1 circulateur chaudière 1 tampon 1 ecs et apres c'est selon des condition que j'ai défini le bute étant de fair tourner le circulateur chaudière que si la chaudière et plus chaude que le tampon bref rien de sorcier chez moi j'avais le meme programme pour la chaudière bois / fioul / panneau solaire / résistance / ecs / plusieur vannes 3 voie de régulation et pas de probleme bon le program et matos diffèrent et il y avais pas de tactile mais j'avais environ 12 relais sur l'arduino et 12 ou 15 sonde 18B20 en tout bref il y avais plus de monde et sa a fonctionné sans souci

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut
    Bonsoir Romain

    Citation Envoyé par Romz25 Voir le message
    ... tout marche bien mais par moment de manière aléatoire ça plante et se fige, plus de réaction de l'Arduino du coup surchauffe de la chaudière ... 4 relais pour l'alimentation j'utilise un chargeur de téléphone 5V 2A ...
    La ”liste” que tu proposes et le comportement laissent supposer qu’il s’agit de parasites qui viennent planter le programme, ce qui est un classique.

    Ce qu’il faudrait savoir très précisément, quels interfaces il y a entre les sorties micro et les relais, et aussi savoir ce que commandent au juste tes relais, et les protections que tu y as placées.

    Si des protections sont installées, il faudrait savoir comment elles sont disposées, car, dans ce domaine, tout est important et semé d’embûches.

    Des photos de la réalisation pratique seraient bienvenues, ainsi que les schémas détaillés.

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut
    Bonjour à tous

    Citation Envoyé par Romz25 Voir le message
    ... donc les relais sont des relais avec optocoupleur intégré donc j'ai le +5 gnd et "commande" ...
    Je comprends bien ton architecture, mais il me manque encore des informations capitales pour tenter de contrer ces satanés parasites, qui, le plus souvent, traversent plusieurs "couches", tellement ils sont puissants.

    Tu parles de relais, et ils ont deux sources possibles de nuisances.

    D'abord, la bobine, qui est une inductance, et dont il faut éteindre l'étincelle lors de la coupure. Généralement, c'est le rôle de la diode de roue libre, que j'espère, tu as placée sur toutes les bobines. C'est sûr que tu les as mises, faute de quoi les transistors de leurs commandes ne coupent qu'une fois: la surtension générée provoque un claquage (court circuit).

    L'autre source, c'est le contact du relais. Le plus souvent, il actionne aussi des inductances (moteurs, vannes ...) et là aussi, lors des coupures, il se produit des surtensions avec étincelles qui sont des émetteurs puissants de parasites radio que l'on peut détecter sur des récepteurs à transistors proches.

    Pour les éviter, il faut placer des RC antiparasites (RC série en parallèle sur les contacts) qui vont "étouffer" l'amplitude des parasites.

    Bien entendu, comme le plus souvent, les circuits commandés sont en alternatif, les condensateurs peuvent être rendus conducteurs, rien que par leur présence. Il faut donc doser leur valeur: pas trop fort pour commander même contact ouvert, la charge prévue, mais suffisamment fort pour avoir un effet.

    La valeur du R n'est pas critique, elle est comprise entre 10 ohms et 220 ohms. Elle n'est là que pour empêcher des surintensités dues à l’introduction du condensateur dans le circuit, qui, sur des fronts rapides, occasionne des pointes de courant parfois néfastes.

    C'est chaque contact de relais qui doit être ainsi protégé. Une fois installés et vérifiés partout, tu pourras analyser si les blocages sont toujours présents.

  8. #8
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Merci de ta réponse mais pour le coup j'ai bien compris que les parasite peuvent venir des action relais puissance ou commande mais j'ai pas compris comment les résorbée (je suis assez débutant dans le domaine désolé)
    et encor merci

  9. #9
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut
    Bonjour à tous

    Citation Envoyé par Romz25 Voir le message
    ... j'ai bien compris que les parasite peuvent venir des action relais puissance ou commande mais j'ai pas compris comment les résorbée (je suis asser débutant dans le domaine désolé) ...
    Ce n’est malheureusement pas une ”recette toute faite”. C’est toujours du cas par cas, et il est indispensable de commencer par faire l’inventaire détaillé de toutes les commandes réalisées par les contacts de tous les relais.

    Également, il faut disposer du schéma précis et détaillé des commandes réalisées par les optocoupleurs qui actionnant les bobines des relais. Ceci pour savoir si, par hasard, cette disposition/protection est suffisante.

  10. #10
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par gienas Voir le message
    Bonjour à tous



    Ce n’est malheureusement pas une ”recette toute faite”. C’est toujours du cas par cas, et il est indispensable de commencer par faire l’inventaire détaillé de toutes les commandes réalisées par les contacts de tous les relais.

    Également, il faut disposer du schéma précis et détaillé des commandes réalisées par les optocoupleurs qui actionnant les bobines des relais. Ceci pour savoir si, par hasard, cette disposition/protection est suffisante.
    oui je me doute bien que c'est du cas par cas les relais sont câbler en 26;27;28;29 ce sont c relais :
    https://www.amazon.fr/AZDelivery-1-R...s%2C190&sr=8-9
    pour la partie puissance 230V je passe par un fusible 2A ensuite chaque phase par sur chaque élément les neutre sont regrouper sur un bornier . apres relais trop proche de l'Arduino (3 cm)
    vraiment désolé de pas avoir de photo a envoyer

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    d'où vient le fil rouge d'alimentation des 4 relais ?

  12. #12
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 629
    Par défaut Le hard c'est dur
    Bonjour,

    Est-ce que le circuit de retour de chaque appareil revient près des relais ? Sinon risque accru d'effet de boucle.

    Salutations

  13. #13
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonjour,

    Est-ce que le circuit de retour de chaque appareil revient près des relais ? Sinon risque accru d'effet de boucle.

    Salutations
    je ne comprend pas la question !
    Quel circuit de retour ?
    Merci

  14. #14
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 629
    Par défaut
    Bonsoir,

    Citation Envoyé par Romz25 Voir le message
    je ne comprend pas la question !
    Quel circuit de retour ?
    Merci
    Il y a un fil qui part du relais vers le moteur (ou autre équipement) et bien sûr il y a un autre fil qui repart de cet équipement. Il peut être tentant pour économiser du câblage de câbler ensemble ces divers retours au plus près des appareils pour ne ramener qu'un seul fil (normalement le neutre). Est-ce le cas ?

    Salutations

  15. #15
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonsoir,


    Il y a un fil qui part du relais vers le moteur (ou autre équipement) et bien sûr il y a un autre fil qui repart de cet équipement. Il peut être tentant pour économiser du câblage de câbler ensemble ces divers retours au plus près des appareils pour ne ramener qu'un seul fil (normalement le neutre). Est-ce le cas ?

    Salutations
    Merci de la Réponse donc phase neutre et terre vont du moteur ou électrovanne au boitier de commande .
    chaque phase passe par un relais (sauf l'alim) logique
    les neutre arrive sur un bornier commun relier directement a l'alimentation

  16. #16
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par Jay M Voir le message
    d'où vient le fil rouge d'alimentation des 4 relais ?
    alors le fil rouge viens de l'alimentation 5V j'ais mis des wago et ensuite j'alimente l'Arduino j'ai aussi essayer d'alimenter l'Arduino en 8V via le connecteur dédier et ensuite alimenté les relais depuis le 5V de l'Arduino sa changer rien

  17. #17
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    la raison pour laquelle je demandais l'alimentation des 4 relais c'est parce que chaque bobine interne va tirer du courant pour "coller"

    En général c'est de l'ordre de 70 à 90mA mais comme il n'y a rien de marqué sur vos relais et que j'en ai vu qui montaient jusqu'à 150mA je me disais que si vous tirez trop de courant pour les bobines (4x150 = 600mA) au travers de la pin 5V de l'Arduino vous risquez d'arriver dans un territoire compliqué ou le régulateur peut "planter" (suivant la tension d'alimentation par le Jack)

    maintenant si vous alimentez séparément directement depuis une alimentation 5V en ayant rejoint les GND avec l'Arduino ça ne devrait pas poser de soucis (sauf si les bobines sont mal isolées - vous en avez une dans l'alimentation 5V et une pour l'alim de l'arduino, il peut y avoir des perturbations sur le GND)

  18. #18
    Membre averti
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2021
    Messages : 17
    Par défaut
    Citation Envoyé par Jay M Voir le message
    la raison pour laquelle je demandais l'alimentation des 4 relais c'est parce que chaque bobine interne va tirer du courant pour "coller"

    En général c'est de l'ordre de 70 à 90mA mais comme il n'y a rien de marqué sur vos relais et que j'en ai vu qui montaient jusqu'à 150mA je me disais que si vous tirez trop de courant pour les bobines (4x150 = 600mA) au travers de la pin 5V de l'Arduino vous risquez d'arriver dans un territoire compliqué ou le régulateur peut "planter" (suivant la tension d'alimentation par le Jack)

    maintenant si vous alimentez séparément directement depuis une alimentation 5V en ayant rejoint les GND avec l'Arduino ça ne devrait pas poser de soucis (sauf si les bobines sont mal isolées - vous en avez une dans l'alimentation 5V et une pour l'alim de l'arduino, il peut y avoir des perturbations sur le GND)
    Merci de du retour
    toute les alim 5V arrive sur un domino et j'avais regarder les consommation théorique de chaque élément et j'arrive a une consommation théorique de 1.7A sur 5V j'avais donc pris un chargeur de tel de 2A mais quand je remonte je lui mais une vrai alim 5V 5A

Discussions similaires

  1. Erreur arduino mega 2560
    Par arielus3 dans le forum Arduino
    Réponses: 23
    Dernier message: 12/04/2017, 10h22
  2. Problème avec ARDUINO MEGA
    Par cip.maldonado dans le forum Arduino
    Réponses: 3
    Dernier message: 26/04/2016, 08h55
  3. Question carte Arduino Mega 2560
    Par Invité dans le forum Arduino
    Réponses: 5
    Dernier message: 17/03/2016, 01h32
  4. Alimentation Arduino Mega + USB
    Par elafitz dans le forum Arduino
    Réponses: 2
    Dernier message: 15/03/2016, 21h56
  5. [Débutant] Charger un programme MATLAB sur Arduino MEGA ADK
    Par amibluesky dans le forum MATLAB
    Réponses: 1
    Dernier message: 15/08/2015, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo