Messages : 3,420
Sujets : 19
Inscription : 2019-10-29
Bon le problème est en effet hardware mais aussi logiciel ... J'ai des pertes assez importantes à cause de tous les fils avec
leurs résistances internes et mauvais contact du coup ça fausse les mesures derrières ... ( chute tension, toussa )
Du coup j'ai également contrôlé les capteurs de pression, ce sont bien des capteurs électronique car les valeurs ohmique
ne changent pas en fonction de la pression, au final le capteur BP est prévu pour aller en dépression jusqu'à 0.2V mais pas
le capteur HP ( je suppose ) ce qui serait logique et par contre les deux font une lecture en pression
absolue . ( 0.2V à -0.95bars relatif )
J'ai essayé d'étalonner les échelles en 3 points à partir du mini, maxi et d'un point mesuré en réel mais c'est pas vraiment conclulant
à croire que ce n'est pas linéaire non plus ... Difficile à vérifier sans les démonter.
Et le code à jour, plus pour moi ça
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;
float Capteur_BP_Out;
int Capteur_HP;
float Capteur_HP_Out;
// initialize the stepper library on pins 2 through 5:
Stepper myStepper(480, 2, 3, 4, 5);
void setup() {
//analogReference(EXTERNAL);
// 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);
}
void loop() {
// Récupération des températures
sensors.requestTemperatures();
int Tension_Analog = map(A1, 0, 1023, 0, 4920);
// Récupération pression BP
Capteur_BP = analogRead(Pin_Capteur_BP);
int Tension_BP = map(Capteur_BP, 0, 1023, 0, 4920);
float Capteur_BP_Out = (float)map(Tension_BP, 0, 4920, 0, 98) / 10;
Serial.println("CAPTEUR BP");
Serial.println(Capteur_BP);
Serial.println(Tension_BP);
Serial.println(Capteur_BP_Out);
Serial.println("-----------");
// Conversion Pression/température BP
float Temp_BP_Out = (float)map(Tension_BP, 0, 4920, -13, 42.30);
// Récupération pression HP
Capteur_HP = analogRead(Pin_Capteur_HP);
int Tension_HP = map(Capteur_HP, 0, 1023, 0, 4920);
float Capteur_HP_Out = (float)map(Tension_HP, 160, 4920, 0, 343) / 10 - 1;
Serial.println("CAPTEUR HP");
Serial.println(Capteur_HP);
Serial.println(Tension_HP);
Serial.println(Capteur_HP_Out);
Serial.println("-----------");
// Conversion Pression/température HP
float Temp_HP_Out = (float)map(Tension_HP, 0, 4920, 10, 92.75);
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 > 900)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Te:");
lcd.print(Temp_BP_Out);
lcd.setCursor(8,0);
lcd.print("Tc:");
lcd.print(Temp_HP_Out);
lcd.setCursor(0,1);
lcd.print("SC:");
lcd.print(Sonde_SC - Temp_BP_Out);
lcd.setCursor(8,1);
lcd.print("SR:");
lcd.print(Temp_HP_Out - Sonde_SR);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pe:");
lcd.print(Capteur_BP_Out);
lcd.setCursor(8,0);
lcd.print("Pc:");
lcd.print(Capteur_HP_Out);
lcd.setCursor(0,1);
lcd.print("Pos det:");
lcd.print(Position_det);
}
delay(250);
}
T'as un problème, t'veux un ban ?