Bonjour !

Suite aux réglages de ma pompe et de ma jauge de contrainte (capteurs de force), me revoici pour l'étape cruciale, l'asservissement !

Je souhaite régler correctement un PID à l'aide de la bibliothèque PID_v1 d'Arduino, hélas, j'ai un peu de
mal à faire les réglages en fonction de mes besoins.

Mon projet : Faire tourner une pompe plus ou moins vite, en fonction d'un capteur de force qui pèserait un liquide contenu dans une poche (cette dernière bien sur rattaché à la pompe) . La pompe devrait diminuer ses tours par minute quand la poche se vide et augmente sa rotation quand la poche se remplit.

Je ne sais pas comment donner une fourchette de valeur à la consigne "setpoint", et j'aimerais aussi que le moteur ait un RPM par défaut que je pourrais définir dans le serial.

Voici le premier jet de mon programme (Il a en gros la logique de fonctionnement, mais il me manque le rmp par défaut, la fourchette de valeur, ainsi que la précision que je reglerais à la fin en modifiant les trois K) :

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
#include <PID_v1.h>
#include "HX711.h" //Utiliser la librairie modifiée
 
HX711 scale(A2, A3);  //Prise de la tension differentielle entre A2 et A3 
 
const int rotation = 2; //Pilote de la rotation branché sur la broche 2
const int stopAndRun = 4; //Pilote du maeche/arret branché sur la broche 4
const int motorPin = 5; //Pilote du moteur connecté sur la branche 5
 
double Setpoint, Input, Output;
double Kp=2, Ki=0, Kd=0;
 
PID myPID(&Input, &Output, &Setpoint,Kp, Ki, Kd, REVERSE);
 
void setup()
{
TCCR0B = TCCR0B & B11111000 | B00000001; //changement de la frequence du pwm pour faire depasser la fc du passe bas
Serial.begin(9600); //initialise la liaison série
pinMode(stopAndRun, OUTPUT); //pin du parametre STOP/RUN en sortie
pinMode(rotation, OUTPUT); //pin du parametre SENS HORAIRE en sortie
pinMode(motorPin, OUTPUT); //pin du parametre VITESSE du moteur en sortie
Serial.begin(9600);
scale.tare();                // Tare du capteur
scale.set_scale(2165.f);     // Calibration de l'echelle du capteur
 
Input = analogRead(0);
Setpoint = 20;
myPID.SetMode(AUTOMATIC);
}
 
void loop()
{
Input = (scale.get_units(230));
 
Serial.println(Input);
 
myPID.Compute();
analogWrite(5,Output);
 
}
La logique de fonctionnement est la mienne, si vous en avez une autre en tête n'hésitez pas à me la suggérer...