01-04-2025, 08:25 PM
Good morning . I have a problem with the definition of the pins that you sent on the KC868-A4S can I have some clarification with an example of code using two ds18b20 two between digital switches and I use a current sensor and another sensor power outage detection
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PCF8574.h> // Pour le contrôle des relais via I2C (adresse 0x24)
// Pin DS18B20
#define ONE_WIRE_BUS_1 5 // DS18B20 - 1er capteur (bande de DEL - 1)
#define ONE_WIRE_BUS_2 14 // DS18B20 - 2ème capteur (bande de DEL - 2)
OneWire oneWire1(ONE_WIRE_BUS_1);
OneWire oneWire2(ONE_WIRE_BUS_2);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
// Relais I2C Adresse 0x24
PCF8574 pcf8574(0x24);
// Entrées de détection (interrupteurs)
#define INTERRUPT_PIN1 2 // Interrupteur 1
#define INTERRUPT_PIN2 3 // Interrupteur 2
// Capteur de courant (ACS712)
#define CURRENT_SENSOR_PIN A0
// Capteur de coupure de courant
#define POWER_FAILURE_PIN 7
// Variables pour stocker les températures
float temp1 = 0.0;
float temp2 = 0.0;
void setup() {
// Initialisation de la communication série
Serial.begin(115200);
// Initialisation du bus I2C
Wire.begin();
// Initialisation des capteurs de température DS18B20
sensors1.begin();
sensors2.begin();
// Initialisation des relais via I2C
pcf8574.begin();
pcf8574.pinMode(P0, OUTPUT);
pcf8574.pinMode(P1, OUTPUT);
pcf8574.pinMode(P2, OUTPUT);
pcf8574.pinMode(P3, OUTPUT);
// Initialisation des interrupteurs
pinMode(INTERRUPT_PIN1, INPUT_PULLUP); // Interrupteur 1
pinMode(INTERRUPT_PIN2, INPUT_PULLUP); // Interrupteur 2
// Initialisation du capteur de courant (ACS712)
pinMode(CURRENT_SENSOR_PIN, INPUT);
// Initialisation du capteur de coupure de courant
pinMode(POWER_FAILURE_PIN, INPUT_PULLUP);
// Attacher les interruptions aux pins des interrupteurs
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN1), handleInterrupt1, FALLING); // Déclenchement sur INT1
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN2), handleInterrupt2, FALLING); // Déclenchement sur INT2
}
void loop() {
// Lire les températures des capteurs DS18B20
sensors1.requestTemperatures();
sensors2.requestTemperatures();
temp1 = sensors1.getTempCByIndex(0); // Température du premier DS18B20
temp2 = sensors2.getTempCByIndex(0); // Température du deuxième DS18B20
// Lire le capteur de courant (ACS712)
int sensorValue = analogRead(CURRENT_SENSOR_PIN);
float voltage = sensorValue * (5.0 / 1023.0); // Conversion de la valeur analogique en tension
float current = (voltage - 2.5) / 0.185; // Conversion de la tension en courant (en fonction de votre capteur)
// Vérifier si une coupure de courant a été détectée
bool powerFailure = digitalRead(POWER_FAILURE_PIN) == LOW; // Si le pin est bas, coupure de courant détectée
// Affichage des résultats sur le moniteur série
Serial.print("Température 1 : ");
Serial.print(temp1);
Serial.print(" °C, Température 2 : ");
Serial.print(temp2);
Serial.print(" °C, Courant : ");
Serial.print(current);
Serial.print(" A, Coupure de courant : ");
if (powerFailure) {
Serial.println("Oui");
} else {
Serial.println("Non");
}
// Activation des relais (P0 à P3 sur I2C via PCF8574)
// Exemple d'activation des relais 1 à 4
pcf8574.digitalWrite(P0, HIGH); // Relais 1 ON
delay(1000); // Délai d'une seconde
pcf8574.digitalWrite(P1, HIGH); // Relais 2 ON
delay(1000);
pcf8574.digitalWrite(P2, HIGH); // Relais 3 ON
delay(1000);
pcf8574.digitalWrite(P3, HIGH); // Relais 4 ON
delay(1000);
// Désactivation des relais
pcf8574.digitalWrite(P0, LOW); // Relais 1 OFF
pcf8574.digitalWrite(P1, LOW); // Relais 2 OFF
pcf8574.digitalWrite(P2, LOW); // Relais 3 OFF
pcf8574.digitalWrite(P3, LOW); // Relais 4 OFF
delay(1000); // Délai de 1 seconde
}
// Fonction pour gérer l'interruption 1
void handleInterrupt1() {
Serial.println("Interrupteur 1 activé!");
// Ajoutez ici votre logique pour réagir à l'interruption
}
// Fonction pour gérer l'interruption 2
void handleInterrupt2() {
Serial.println("Interrupteur 2 activé!");
// Ajoutez ici votre logique pour réagir à l'interruption
}
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PCF8574.h> // Pour le contrôle des relais via I2C (adresse 0x24)
// Pin DS18B20
#define ONE_WIRE_BUS_1 5 // DS18B20 - 1er capteur (bande de DEL - 1)
#define ONE_WIRE_BUS_2 14 // DS18B20 - 2ème capteur (bande de DEL - 2)
OneWire oneWire1(ONE_WIRE_BUS_1);
OneWire oneWire2(ONE_WIRE_BUS_2);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
// Relais I2C Adresse 0x24
PCF8574 pcf8574(0x24);
// Entrées de détection (interrupteurs)
#define INTERRUPT_PIN1 2 // Interrupteur 1
#define INTERRUPT_PIN2 3 // Interrupteur 2
// Capteur de courant (ACS712)
#define CURRENT_SENSOR_PIN A0
// Capteur de coupure de courant
#define POWER_FAILURE_PIN 7
// Variables pour stocker les températures
float temp1 = 0.0;
float temp2 = 0.0;
void setup() {
// Initialisation de la communication série
Serial.begin(115200);
// Initialisation du bus I2C
Wire.begin();
// Initialisation des capteurs de température DS18B20
sensors1.begin();
sensors2.begin();
// Initialisation des relais via I2C
pcf8574.begin();
pcf8574.pinMode(P0, OUTPUT);
pcf8574.pinMode(P1, OUTPUT);
pcf8574.pinMode(P2, OUTPUT);
pcf8574.pinMode(P3, OUTPUT);
// Initialisation des interrupteurs
pinMode(INTERRUPT_PIN1, INPUT_PULLUP); // Interrupteur 1
pinMode(INTERRUPT_PIN2, INPUT_PULLUP); // Interrupteur 2
// Initialisation du capteur de courant (ACS712)
pinMode(CURRENT_SENSOR_PIN, INPUT);
// Initialisation du capteur de coupure de courant
pinMode(POWER_FAILURE_PIN, INPUT_PULLUP);
// Attacher les interruptions aux pins des interrupteurs
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN1), handleInterrupt1, FALLING); // Déclenchement sur INT1
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN2), handleInterrupt2, FALLING); // Déclenchement sur INT2
}
void loop() {
// Lire les températures des capteurs DS18B20
sensors1.requestTemperatures();
sensors2.requestTemperatures();
temp1 = sensors1.getTempCByIndex(0); // Température du premier DS18B20
temp2 = sensors2.getTempCByIndex(0); // Température du deuxième DS18B20
// Lire le capteur de courant (ACS712)
int sensorValue = analogRead(CURRENT_SENSOR_PIN);
float voltage = sensorValue * (5.0 / 1023.0); // Conversion de la valeur analogique en tension
float current = (voltage - 2.5) / 0.185; // Conversion de la tension en courant (en fonction de votre capteur)
// Vérifier si une coupure de courant a été détectée
bool powerFailure = digitalRead(POWER_FAILURE_PIN) == LOW; // Si le pin est bas, coupure de courant détectée
// Affichage des résultats sur le moniteur série
Serial.print("Température 1 : ");
Serial.print(temp1);
Serial.print(" °C, Température 2 : ");
Serial.print(temp2);
Serial.print(" °C, Courant : ");
Serial.print(current);
Serial.print(" A, Coupure de courant : ");
if (powerFailure) {
Serial.println("Oui");
} else {
Serial.println("Non");
}
// Activation des relais (P0 à P3 sur I2C via PCF8574)
// Exemple d'activation des relais 1 à 4
pcf8574.digitalWrite(P0, HIGH); // Relais 1 ON
delay(1000); // Délai d'une seconde
pcf8574.digitalWrite(P1, HIGH); // Relais 2 ON
delay(1000);
pcf8574.digitalWrite(P2, HIGH); // Relais 3 ON
delay(1000);
pcf8574.digitalWrite(P3, HIGH); // Relais 4 ON
delay(1000);
// Désactivation des relais
pcf8574.digitalWrite(P0, LOW); // Relais 1 OFF
pcf8574.digitalWrite(P1, LOW); // Relais 2 OFF
pcf8574.digitalWrite(P2, LOW); // Relais 3 OFF
pcf8574.digitalWrite(P3, LOW); // Relais 4 OFF
delay(1000); // Délai de 1 seconde
}
// Fonction pour gérer l'interruption 1
void handleInterrupt1() {
Serial.println("Interrupteur 1 activé!");
// Ajoutez ici votre logique pour réagir à l'interruption
}
// Fonction pour gérer l'interruption 2
void handleInterrupt2() {
Serial.println("Interrupteur 2 activé!");
// Ajoutez ici votre logique pour réagir à l'interruption
}