Asservissement position

J'essaye de faire un capteur d'angle (j'ai un capteur avec un câble qui s'enroule et se déroule) avec une petite formule trigonométrique j'obtient la valeur de mon angle avec la longueur du câble déroulé ou enrouler...
Mais il faut que je face de l’asservissement de position => un moteur se met en route pour enrouler ou dérouler le câble tant que le capteur n'atteint pas la valeur voulu l'"angle_cible" j'ai écris ce doe mais le moteur enroule constamment et ne s'arrête pas à la valeur voulue... en gros il faut que le moteur tourne pour atteindre la valeur cible du capteur

//Liste des PIN
#define PIN_SENSOR_ANGLE A0 // capteur du câble
#define PIN_MONT 36 // enroule 
#define PIN_DES 37 // deroule

//allume les relais à partir angle=500 avec une hystérésis pour les parasites
#define ANGLE_CHANGE_UP 505
#define ANGLE_CHANGE_DOWN 496

//Com série
#define BAUDRATE 9600

//Mode de fonctionnement
#define MODE_AUTO 1
#define MODE_MANU 2
#define DEFAULT_MODE MODE_AUTO


void setup(){
	//défini la fonction des pins
	pinMode(PIN_MONT, OUTPUT);
	pinMode(PIN_DES, OUTPUT);
	//état des relais pas défaut
	digitalWrite(PIN_MONT, LOW); 
	digitalWrite(PIN_DES, LOW);

	//initialise le port com
	Serial.begin(BAUDRATE);
}

void loop(){
	//var et init var
	int angle;
	bool relayCmd=false; //donne l'ordre activer/désactiver les rélais
	bool relayState=false; //indique l'états des rélais
	unsigned char mode=DEFAULT_MODE;
	
	//boucle principale
	while(true){
		//lecture des capteurs
		angle=analogRead(PIN_SENSOR_ANGLE);
		
		//communication et traitement
		if (Serial.available()) {
			char c=Serial.read();
			switch(c){
				case 'A': //mode auto
					mode=MODE_AUTO;
					break;
				case 'H': //activation des relais + mode manu
					relayCmd=true;
					mode=MODE_MANU;
					break;
				case 'L': //activation des relais + mode manu
					relayCmd=true;
					mode=MODE_MANU;
					break;
				case 'G': //demande de lecture de l'angle
					Serial.println(angle,HEX); //en hexadécimal
					break;
			}
		}
		
		//calcul et traitement
		if(mode==MODE_AUTO){
			if (angle>ANGLE_CHANGE_UP)
				relayCmd=true;
			if (angle<ANGLE_CHANGE_DOWN)
				relayCmd=false;
		}
		
		//exécution des ordres
		if (relayCmd==true && relayState==false){ //front montant
			digitalWrite(PIN_MONT,HIGH);
			digitalWrite(PIN_DES,LOW);
			relayState=true;
		}
		if (relayCmd==false && relayState==true){ //front descendant
			digitalWrite(PIN_MONT,LOW);
			digitalWrite(PIN_DES,HIGH);
			relayState=false;
		}
		if(angle >= 485 && angle <= 515)
		{
			digitalWrite(PIN_MONT,LOW);
			digitalWrite(PIN_DES,LOW);
		
		}
		}
}

Sonis:
J'essaye de faire un capteur d'angle (j'ai un capteur avec un câble qui s'enroule et se déroule) avec une petite formule trigonométrique j'obtient la valeur de mon angle avec la longueur du câble déroulé ou enrouler...
Mais il faut que je face de l’asservissement de position => un moteur se met en route pour enrouler ou dérouler le câble tant que le capteur n'atteint pas la valeur voulu l'"angle_cible" j'ai écris ce doe mais le moteur enroule constamment et ne s'arrête pas à la valeur voulue... en gros il faut que le moteur tourne pour atteindre la valeur cible du capteur

...

bonsoir
tu es trop vague dans tes explications
c'est quoi ton capteur ?
quelle longueur de cable veux tu ( pouvoir) mesurer ?

en supposant un cylindre enrouleur, la longueur à mesurer pour un angle compris entre 0/360° est un simple calcul de circonference

Pour un projet de domotique je dois mesurer l'angle former entre le toit et un panneau solaire, comme sa forme un triangle je peux mesurer l'angle via la longueur du côté opposé (distance entre le haut du panneau et le toit) de l'angle je peux calculer l'angle. J'ai un capteur avec une ficelle de 80 cm qui envoi une résistance de 10k en fonction de la longueur de câble dérouler. J'ais fais une platine d'essai avec des repères er un petit moteur électrique qui enroule et déroule le câble. mon but est que l'arduino pilote seul le moteur de mmanière à atteindre le repère (donc une certaine valeur ADC du capteur)

Sonis:
Pour un projet de domotique je dois mesurer l'angle former entre le toit et un panneau solaire, comme sa forme un triangle je peux mesurer l'angle via la longueur du côté opposé (distance entre le haut du panneau et le toit) de l'angle je peux calculer l'angle. J'ai un capteur avec une ficelle de 80 cm qui envoi une résistance de 10k en fonction de la longueur de câble dérouler. J'ais fais une platine d'essai avec des repères er un petit moteur électrique qui enroule et déroule le câble. mon but est que l'arduino pilote seul le moteur de mmanière à atteindre le repère (donc une certaine valeur ADC du capteur)

ok
ton capteur c'est un capteur de type potentiometrique ou un capteur qui te renvoie une valeur analogique.
un lien vers ce capteur ?

lorsque tu manipule simplement ce capteur , tu lis des infos coherentes avec l'exemple InOutserial ?

Mon capteur est le sp1-12 de chez SCAIME

quand j'enroule et déroule ça donne de valeurs cohérente comme dis dans mon avant dernier post j'ai surveiller la valeur renvoyé par le capteur et tracé des repères en fonction des valeurs pour vérifier si mon algo arrêt de bouger le câble quand il atteint la bonne valeur (les valeurs ADC vont de 0 à 024 j'ai gradué de 200 à 800 avec un pas de 100 et j'essaye de faire arrêter le moteur à 500

Sonis:
Mon capteur est le sp1-12 de chez SCAIME

quand j'enroule et déroule ça donne de valeurs cohérente comme dis dans mon avant dernier post j'ai surveiller la valeur renvoyé par le capteur et tracé des repères en fonction des valeurs pour vérifier si mon algo arrêt de bouger le câble quand il atteint la bonne valeur (les valeurs ADC vont de 0 à 024 j'ai gradué de 200 à 800 avec un pas de 100 et j'essaye de faire arrêter le moteur à 500

tu veux dire qu'entre min et max la valeur "lue" issue de ton capteur par l'arduino ne varie qu'entre 0 et 24 ?

Désolé j'ai fais une faute de frappe c'est de 0 à 1024

Sonis:
Désolé j'ai fais une faute de frappe c'est de 0 à 1024

encore perdu , et non
c'est de 0 à 1023 8)

je regarde ton capteur plus tard

C'est bien çà comme capteur ?

tu evoque 80cm (800mm) de ficelle, le sp1-12 semble avoir une étendue de mesure de 317mm (31,7cm)

Sinon, il y a le servomoteur, il s'asservit tout seul...

Ou l'accéléromètre qui mesure très bien des angles d'inclinaisons, sans ficelles et trucs mécaniques fragiles.