Comme dit 68tjs (au fait ca veut dire quoi ? t'es un vieux 68tard ? révolutionnaire ?
)
Comme dit notre ami, afficher les valeurs pour voir avec quoi vous travailler
Là vous êtes en aveugle pur
si la commande est à 5V et le capteur à 0V le rapport cyclique sera maximal, si la commande et le rapport cycliques sont égaux le rapport cyclique est nul.
Et si le capteur est supérieur à la commande ?
Votre code ne fait rien si valCapt > valCom
En quoi est-ce un problème ?
==> Il est impératif que tous les cas ammène à un résultat défini.
Apparemment votre signal hachPin va commander quelque chose qui va amener une grandeur physique mesurée par le capteur à grandir : une position, une température, je ne sais pas.
Si à un moment donné valCapt < valCom vous activez du signal sur hachPin (par exemple, vous chauffez)
Admettons que le système réagisse vite et qu'au tour de loop() suivant vous vous retrouviez avec valCapt > valCom
Résultat votre code ne fais rien ET GARDE LA SORTIE ACTIVE
Le système se met alors à dériver hors de contrôle !
Je suggère de modifier comme ceci :
if(valCom-valCapt< 0 )
analogWrite(hachPin, (valCapt-valCom)/4);
else
analogWrite(hachPin, 0);
@68tjs : PID : Proportionnelle Intégrale Dérivée : algorithme d'asservissement très réputé.
Il consiste à définir le signal de sortie comme une combinaison linaire de 3 grandeurs :
- le signal du capteur (proportionnelle)
- l'intégrale du signal du capteur (intégrale)
- la dérivée du signal du capteur
Le tout est de bien calculer les coefficients pour arriver au type d'asservissement souhaité.
C'est tout ce que j'en sais. je suis sensé l'avoir étudié à l'école mais je devais "ailleurs"
Sur mon robot j'ai appliqué un code de PID piqué directement sur le code de Pololu pour leur robot mp3I