Bonsoir à tous!
En ce moment je joue avec une jauge de contrainte de 100kg à 4 fils + son petit HX711 pour lire via une arduino des pressions exercées. Le montage fonctionne tip top. Pour une valeur donnée, j'ouvre un petit relais un certain temps, et il lui est impossible de s'ouvrir à nouveau si la valeur n'est pas repassée sous une certaine pression (comme une sorte d'anti-rebond au final).
MAIS, je trouve que la lecture de la valeur de la pression de la sonde est un peu mollassonne [voir molle du cul
] , et je me demande si il y a moyen d'optimiser mon code. J'utilise une version qui ne renvoie rien du tout, aucune utilisation de Serial, mais voici ma version "qui parle" que j'utilise pour pour mes réglages avant de passer à la version mutted
El codigo:
#include "HX711.h"
#define CLK 2
#define DOUT 3
HX711 scale (DOUT, CLK);
const int pinShift = 4;
const int capteurEmbrayage = 5;
const int ledDebrayage = 13;
// Déclaration des variables
unsigned long deb = 0;
float weight;
float calibration_factor = 35000; //Valeur pour que le calibrage soit à 0kg a vide (avec jauge de 100Kg)
boolean onPeutShifter = true; //Validation pour le prochain cycle
/***********REGLAGE DU SHIFTER***********/
const float seuil_Enclenchement = 5 ; //SEUIL DE DÉCLENCHEMENT DE LA COUPURE EN KG (0.75 = 750g)
const float seuil_Rearmement = 3; //SEUIL DE RÉ-ARMEMENT (quand la pression rediminue, seuil a dépasser pour pouvoir reclaquer un shifting)
const int temps_Coupure = 65; //Délai de coupure allumage (en ms -> 70=70ms), ne pas descendre sous 59ms!))
const int delai_Post_Embrayage = 500; //Délai après lequel on récupère le shifter, une fois la moto ré-embrayée (en ms)
/***************************************/
void setup() {
Serial.begin(115200); //Activation du moniteur (mettre //devant pour faire taire)
Serial.println("_____________________________________");
Serial.println("Shifter par gauge de contrainte");
Serial.println("");
Serial.println("Initilisation:...");
Serial.println("Réglages:");
Serial.println("");
Serial.print("Seuil déclenchement: ");Serial.print(seuil_Enclenchement*1000);Serial.println(" grammes");
Serial.print("Seuil réarmement: ");Serial.print(seuil_Rearmement*1000);Serial.println(" grammes");
Serial.print("Temps coupure: ");Serial.print(temps_Coupure);Serial.println("ms");
Serial.print("Delai réactivation après embrayage: ");Serial.print(delai_Post_Embrayage);Serial.println("ms");Serial.println("");
pinMode(pinShift, OUTPUT);
digitalWrite(pinShift, LOW);
pinMode(capteurEmbrayage, INPUT_PULLUP);
pinMode(ledDebrayage, OUTPUT);
digitalWrite(ledDebrayage, LOW);
scale.set_scale();
scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading
Serial.println("Done!");
Serial.println("Pensez à bien faire chauffer la moto avant de shifter");
Serial.println("_____________________________________");
delay(2000);
}
void loop() {
while (digitalRead(capteurEmbrayage) != LOW) //Actionne la fonction shifter, SI t'es embraye
{
digitalWrite(ledDebrayage, LOW); //Led interne de l'arduino OFF = shifter dispo
strain();
shifter();
}
//Si tu debrayes, coupure du systeme (pas besoin de shifter pour rien)
Serial.println("->Débrayage: coupure fonction shifter");
digitalWrite(ledDebrayage, HIGH); //Led interne de l'arduino ON = shifter desactive
delay(delai_Post_Embrayage); //le temps de lacher completement le levier, pour reactiver le shifter
}
/***********Fonctions***********/
void strain() {
scale.set_scale(calibration_factor); //Ajustement du facteur de calibrage
weight = scale.get_units(1);
Serial.print("Shifter autorisé, pression: "); //RETIRER LES // AVANT LES LIGNES SUIVANTES POUR AFFICHER LE POIDS LU
Serial.print(weight); //BIEN PENSER A REMETTRE //DEVANT CES LIGNES AVANT LA MISE EN SERVICE REELLE
Serial.println("Kg");
}
void shifter() {
if (weight > seuil_Enclenchement && onPeutShifter) { //Seuil de déclenchement
deb = millis();
digitalWrite(pinShift, HIGH);
Serial.println("_____________________________________");
Serial.println("Seuil déclenchement dépassé: Shift");
Serial.println("_____________________________________");
onPeutShifter = false;
}
if (millis() - deb > temps_Coupure)
digitalWrite(pinShift, LOW);
if (weight <= seuil_Rearmement)
onPeutShifter = true; //Seuil de ré-engament
}
Il y a des commentaires débiles, mais c'est pour que mon petit frère puisse s'en servir ![]()
Plus sérieusement, y voyez-vous un quelconque moyen d'optimisation? Le but recherché est que si la valeur faut immédiatement 5Kg (par exemple), boum relais ouvert immédiatement. Et non que la sonde à pression immédiate dise: 4,3Kg; 4,5K; 4,9kg; AH! 5Kg, on ouvre!
Je suis preneur de toute bizarreries
Vous trouverez en PJ le look général de la jauge + le schéma de mon montage. La jauge est la même, mais pas de cette marque, c'est juste pour vous donner une petite idée du visu
Merci à vous et bonne soirée
T.










