2019-12-04 19:58:36
Pour les curieux voilà le code, même si je sais que y'en a qui vont sauter au plafond
Et le calcul c'est pour remplacer la fonction "map" qui ne prend pas les virgules et moi je les veux ^_^
Pour les régulateurs, c'est pourtant le genre de chose qui est utilisé par les fabricants de clim mais bon
Code :
#include <Stepper.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
// Définition des pins utilisés par le Shield LCD
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define ONE_WIRE_BUS 6 // Définition de la valeur du BUS OneWire
OneWire oneWire(ONE_WIRE_BUS); // Définition du BUS OneWire
DallasTemperature sensors(&oneWire); // Conversion OneWire > DallasTemperature
// Adressage des sondes DS18B20 ( Evap, surchauffe )
DeviceAddress Sonde_SR = { 0x28, 0xC2, 0x75, 0x82, 0x05, 0x00, 0x00, 0xBB };
DeviceAddress Sonde_SC = { 0x28, 0xFF, 0xEC, 0x99, 0x3C, 0x04, 0x00, 0x9F };
float Surchauffe = 6.5;
float Surchauffe_cal;
int Position_det = 0;
float Temp_BP = 0;
float Temp_HP = 0;
int Pin_Capteur_BP = A4;
int Pin_Capteur_HP = A5;
int Capteur_BP;
int Capteur_HP;
// initialize the stepper library on pins 2 through 5:
Stepper myStepper(480, 2, 3, 4, 5);
void setup() {
// Initialisation écran
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Initialisation");
delay(500);
// initialize the serial port:
Serial.begin(9600);
// Configuration des sondes DS18B20
sensors.begin();
sensors.setResolution(Sonde_SR, 10);
sensors.setResolution(Sonde_SC, 10);
// Nombre de tour/min détendeur
myStepper.setSpeed(4);
// Fermeture détendeur
lcd.setCursor(0,1);
lcd.print("Ferm EEV > 0%");
//myStepper.step(-500); // 480 + 20 ( sécu )
delay(3000);
// Ouverture détendeur 50%
lcd.setCursor(0,1);
lcd.print("Ouv EEV > 50%");
//myStepper.step(+240);
Position_det = 240;
delay(3000);
}
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void loop() {
// Récupération des températures
sensors.requestTemperatures();
// Récupération pression BP
Capteur_BP = analogRead(Pin_Capteur_BP);
float Capteur_BP_Out = mapf(Capteur_BP, 102, 1023, 0.0, 9.8); // 102 = 0.5V mini / 1023 = 5V maxi / 0 bars mini / 9.8 bars maxi
// Conversion Pression/température BP
float Temp_BP_Out = mapf(Capteur_BP, 102, 1023, -26, 42);
// Récupération pression HP
Capteur_HP = analogRead(Pin_Capteur_HP);
float Capteur_HP_Out = mapf(Capteur_HP, 102, 1023, 0, 38.5); // 102 = 0.5V mini / 1023 = 5V maxi / 0 bars mini / 38.5 bars maxi
// Conversion Pression/température HP
float Temp_HP_Out = mapf(Capteur_HP, 102, 1023, -25, 100); // 102 = 0.5V mini / 1023 = 5V maxi / -25°C mini / 100°C maxi
delay(250);
// Attribution des valeurs
float Sonde_SR = sensors.getTempCByIndex(0);
float Sonde_SC = sensors.getTempCByIndex(1);
Surchauffe_cal = Temp_BP + Surchauffe;
// Action si Surchauffe_Réelle supérieur à Surchauffe_Calculée
if (Sonde_SC > Surchauffe_cal && Position_det < 480)
{
myStepper.step(+1); // Ouverture détendeur
++Position_det;
}
// Action si Surchauffe_Réelle inférieur à Surchauffe_Calculée
else if (Sonde_SC < Surchauffe_cal && Position_det > 10)
{
myStepper.step(-1); // Fermeture détendeur
--Position_det;
}
else {
// Rien
}
int bouton = analogRead(A0);
// Affichage LCD alterné
if (bouton > 1000)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tc:");
lcd.print(Temp_HP_Out);
lcd.setCursor(8,0);
lcd.print("Te:");
lcd.print(Temp_BP_Out);
lcd.setCursor(0,1);
lcd.print("SR:");
lcd.print(Temp_HP_Out - Sonde_SR);
lcd.setCursor(8,1);
lcd.print("SC:");
lcd.print(Sonde_SC - Temp_BP_Out);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pc:");
lcd.print(Capteur_HP_Out);
lcd.setCursor(8,0);
lcd.print("Pe:");
lcd.print(Capteur_BP_Out);
lcd.setCursor(0,1);
lcd.print("Pos det:");
lcd.print(Position_det);
}
delay(250);
}
Et le calcul c'est pour remplacer la fonction "map" qui ne prend pas les virgules et moi je les veux ^_^
Pour les régulateurs, c'est pourtant le genre de chose qui est utilisé par les fabricants de clim mais bon
T'as un problème, t'veux un ban ?