Aller au contenu

Un flip flat pour 4 sous


gehelem

Messages recommandés

@olivier1986 

en mode commando, mais ça marche

je te mets juste le bout de code de SetShutter

Révélation

void SetShutter(int val)
{
	if( val == OPEN && coverStatus != OPEN )
	{
    myservo.write (150);
    for (int angle = 150; angle <= 180; angle+=1) 
    {
      myservo.write (angle);
      delay (70);
    } 
		coverStatus = OPEN;
		// TODO: Implement code to OPEN the shutter.
	}
	else if( val == CLOSED && coverStatus != CLOSED )
	{
    myservo.write (30);  
    for (int angle = 30; angle > 0; angle-=1) 
    {
      myservo.write (angle);
      delay (70);
    } 
		coverStatus = CLOSED;
		// TODO: Implement code to CLOSE the shutter
	}
	else
	{
		// TODO: Actually handle this case
		coverStatus = val;
	}
	
}

 

 

Lien vers le commentaire
Partager sur d’autres sites

@gehelem nikel! merci :)

 

@gehelem je viens de faire une chose et je pense qu'on peut encore améliorer le système!

en fait j'ai ajouter un pti bout de code pour aussi commencer doucement et pas arracher le moteur au départ!! la fin tu l'as fait mais une rampe d'accélération au début je trouve ça aussi bien!

bon ça ça marche.

 

Mais je rencontre un petit soucis.

Lorsque l'arduino est branché à la Tinker il se trouve qu'a chaque démarrage de Ekos il ne sait pas où est le cap, il dit non ouvert / non fermé.

 

du coup, alors que je sais moi qu'il est fermé puisque je l'ai fermé avant d'éteindre la tinker, si je clique sur fermé, au lieu de rester en place, le servo se met à tourner et reviens après sur la position fermé avec l'indication fermé qui apparait bien!!

 

Je pense donc que l'info de la position ne se stocke pas.

je me demande donc s'il l'on ne pourrait pas ajouter un pti bout de code pour sauvegarder la position du cap et qu'à chaque démarrage il sache où il en est.

 

as tu remarqué ce pti défaut de ton coté?

 

genre eeprom non?

 edit: hmm si on ajoute la biblio eeprom, on peut y stocker la valeur de l'angle et a chaque démarrage on peut lui redemander la valeur. Mais pour que INDI nous donne l'info, quand il demande le status à l'arduino il faudrait que celui ci soit capable de lui dire... je réfléchi hein!!!

Lien vers le commentaire
Partager sur d’autres sites

Le 21/04/2019 à 12:42, Raphael_OD a dit :

un status en EEPROM devrait faire l'affaire ...

je suis pas trop chaud : il faut gérer le fait que si on écrit trop souvent dedans, ça la bouzille

j'essaie avec un petit servo.read au démarrage, histoire de voir.

 

 

bien vu

dès que je mets le servo sous tension, il se met en milieu de course.

c'est chiant, on va réfléchir.

Lien vers le commentaire
Partager sur d’autres sites

@gehelem j'ai une solution pas élégante!!

Dans les choix du status tu as closed, open and unknow.

la par défaut c'est le 3ème choix.

j'ai forcé en closed dans le cover status et dans la void setup() j'ai mis un myservo.write(0).

 

Pour le coup cela marche puisque quand tu connectes l'arduino indi voit qu'il est en closed et le moteur est resté à 0.

Par contre, si pour une raison ou une autre le cap est revenu à sa position au prochain redémarrage il pensera  qu'il est fermé....

 

Je pense sincèrement qu'un simple eeprom avec la valeur de l'angle enregistré peut marcher.

Après tu fais juste un EEPROM.update(lieu d'enregistrement, angle), et si la valeur n'a pas changer il n'écrit rien!! et faut aussi se dire que c'est un cap pour l'astro!! si il fonctionnera dans l'année 100 fois c'est bien! et le jour où il claque hop, on le remplace et zou remet le programme et c'est reparti!! Tous mes duino sont posé sur support pour faire ca!!

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, olivier1986 a dit :

Par contre, si pour une raison ou une autre le cap est revenu à sa position au prochain redémarrage il pensera  qu'il est fermé....

oui, on peut faire plein de trucs, faut juste bien connaitre les conséquences effectivement

par exemple, j'ai essayé en ajoutant ça dans le setup :

  // read actual servo position
  int angle;
  angle = myservo.read();
  if (angle <=30) coverStatus = CLOSED; else coverStatus = OPEN;

mais ça ne sert pas à grand chose, puisque de toute façon ce code n'est appelé que lorsque l'arduino est mis sous tension

et donc à tous les coups, il me fait de toutes façon cette connerie de s'initialiser en milieu de course (ça ne te le fait pas ???)

 

Je pense plutôt qu'il faut piloter carrément l'alimentation du servo avec un petit transistor ou FET

Ce qui permettra de faire une remise en close bidon avant d'alimenter le servo.

accessoirement, on pourra mettre un timer qui mette le servo hors tension au bout de xx secondes, histoire de soulager la batterie dans les champs.

(faudrait regarder la conso du servo, aussi)

Lien vers le commentaire
Partager sur d’autres sites

Ba si justement mais la j'essaye avec eeprom.

le truc c'est que la valeur de la position 0 ou 180 pour ouvert / fermé et bien enregistrer.

Mais, dès que je le mets sous tension je demande a lire la valeur enregistrée et après j'envoie le servo a cette position, mais il repart toujours car quand je reconnecte l'arduino dans le moniteur serie quand j'envoie >S000 il me dit tjrs unknow ;)

Lien vers le commentaire
Partager sur d’autres sites

Ben... c'est souvent du Chinois pour moi mais j'arrive à suivre le sens général de vols élucubrations et c'est passionnant.

Si un de ces jours je parviens à en construire un c'est que vous aurez super bien bossé... et expliqué !

Un vrai test ça!  :god:

Lien vers le commentaire
Partager sur d’autres sites

il y a 47 minutes, olivier1986 a dit :

Ba si justement mais la j'essaye avec eeprom.

le truc c'est que la valeur de la position 0 ou 180 pour ouvert / fermé et bien enregistrer.

Mais, dès que je le mets sous tension je demande a lire la valeur enregistrée et après j'envoie le servo a cette position, mais il repart toujours car quand je reconnecte l'arduino dans le moniteur serie quand j'envoie >S000 il me dit tjrs unknow ;)

Je ne pige pas :

Lorsque tu mets sous tension, le "attach" pendant le setup te colle le servo en milieu de course quoiqu'il arrive

du coup, que ça vienne d'une eeprom ou d'une valeur par défaut, tout ce que tu feras après ne servira qu'à remettre dans la position qui t'arrange

dans tous les cas, le servo va s'ouvrir un peu (moi je le referme tout de suite) à la mise sous tension

et ça je voudrais absolument l'éviter

ça ne te gène pas ?

Lien vers le commentaire
Partager sur d’autres sites

Les servo commande ont leur position neutre à "zéro," cad en milieu de couse , en général (je programme pas mais je suis modéliste)

il suffirait sans doute d'utiliser seulement une demie course de servo pour résoudre le souci... non ?

quitte à bricoler la mécanique pour le débattement total espéré (je suppose 180° ?)

 

 

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, JMDSomme a dit :

il suffirait sans doute d'utiliser seulement une demie course de servo pour résoudre le souci... non ?

quitte à bricoler la mécanique pour le débattement total espéré (je suppose 18?)

 

Bonne idée! Dans la même veine on pourrai  imaginer mettre une resistance en talon sur le potentiomètre  pour que le point neutre électronique  corresponde à une fin de course mécanique. Par contre apres, attention aux ordres envoyés au servo.

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, Cedric02700 a dit :

 

Bonne idée! Dans la même veine on pourrai  imaginer mettre une resistance en talon sur le potentiomètre  pour que le point neutre électronique  corresponde à une fin de course mécanique. Par contre apres, attention aux ordres envoyés au servo.

Ouaip

Ça ça me va.

Simple

Pragmatique 

Efficace 

On voit ça demain 

Lien vers le commentaire
Partager sur d’autres sites

@gehelem

Il y a 18 heures, gehelem a dit :

Je ne pige pas :

Lorsque tu mets sous tension, le "attach" pendant le setup te colle le servo en milieu de course quoiqu'il arrive

du coup, que ça vienne d'une eeprom ou d'une valeur par défaut, tout ce que tu feras après ne servira qu'à remettre dans la position qui t'arrange

dans tous les cas, le servo va s'ouvrir un peu (moi je le referme tout de suite) à la mise sous tension

et ça je voudrais absolument l'éviter

ça ne te gène pas ?

Oui ça me fait ça aussi.

Mais en farfouillant sur le net j'ai peut être trouver une autre solution autre que de rajouter de l'éléctronique!!

Attention je cite:

  • Lors de l'appel de l'instruction attach(), le servomoteur est positionné sur la dernière valeur utilisée avec l'instruction write ou writemicroseconds() ou à 90° par défaut. Pour positionner les servomoteurs à une certaine position dès l'initialisation, mettre une instruction write() ou writemicroseconds() 

lien de la citation:

http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Servoattach

 

Du coup je suis au boulot et je pourrais pas tester, mais si on fait quelque chose du genre:

 

Révélation

 

 /*
What: LEDLightBoxAlnitak - PC controlled lightbox implmented using the
    Alnitak (Flip-Flat/Flat-Man) command set found here:
  http://www.optecinc.com/astronomy/pdf/Alnitak Astrosystems GenericCommandsR3.pdf

Who:
    Created By: Jared Wellman - jared@mainsequencesoftware.com

When:
    Last modified:  2013/May/05


Typical usage on the command prompt:
Send     : >S000\n      //request state
Recieve  : *S19000\n    //returned state

Send     : >B128\n      //set brightness 128
Recieve  : *B19128\n    //confirming brightness set to 128

Send     : >J000\n      //get brightness
Recieve  : *B19128\n    //brightness value of 128 (assuming as set from above)

Send     : >L000\n      //turn light on (uses set brightness value)
Recieve  : *L19000\n    //confirms light turned on

Send     : >D000\n      //turn light off (brightness value should not be changed)
Recieve  : *D19000\n    //confirms light turned off.
*/

#include <Servo.h>
Servo myservo;

volatile int ledPin   = 6;      // the pin that the LED is attached to, needs to be a PWM pin.
volatile int servoPin = 9;      // the pin that the servo signal is attached to, needs to be a PWM pin.
int brightness = 0;

enum devices
{
    FLAT_MAN_L = 10,
    FLAT_MAN_XL = 15,
    FLAT_MAN = 19,
    FLIP_FLAT = 99
};

enum motorStatuses
{
    STOPPED = 0,
    RUNNING
};

enum lightStatuses
{
    OFF = 0,
    ON
};

enum shutterStatuses
{
    UNKNOWN = 0, // ie not open or closed...could be moving
    CLOSED,
    OPEN
};


int deviceId = FLIP_FLAT;
int motorStatus = STOPPED;
int lightStatus = OFF;
int coverStatus = UNKNOWN;

int impulsion_min=544;

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
  analogWrite(ledPin, 0);
  myservo.writeMicroseconds(impulsion_min);
  myservo.attach(servoPin);  
}

void loop()
{
  handleSerial();
}


void handleSerial()
{
  delay(100);
  if( Serial.available() >= 5 )  // all incoming communications are fixed length at 6 bytes including the \n
  {
    char* cmd;
    char* data;
    char temp[10];
    
    int len = 0;

    char str[20];
    memset(str, 0, 20);
    
    // I don't personally like using the \n as a command character for reading.  
    // but that's how the command set is.
  //  Serial.readBytesUntil('\n', str, 20);
  Serial.readBytes( str, 5);

    cmd = str + 1;
    data = str + 2;
    
    // useful for debugging to make sure your commands came through and are parsed correctly.
    if( false )
    {
      sprintf( temp, "cmd = >%s%s;", cmd, data);
      Serial.println(temp);
    }
    


    switch( *cmd )
    {
      /*
        Ping device
            Request: >P000\n
            Return : *Pii000\n
                id = deviceId
      */
      case 'P':
          sprintf(temp, "*P%d000\n", deviceId);
          Serial.print(temp);
          break;

      /*
        Open shutter
            Request: >O000\n
            Return : *Oii000\n
                id = deviceId

            This command is only supported on the Flip-Flat!
      */
      case 'O':
          sprintf(temp, "*O%d000\n", deviceId);
          SetShutter(OPEN);
          Serial.print(temp);
          break;


      /*
        Close shutter
            Request: >C000\n
            Return : *Cii000\n
                id = deviceId

            This command is only supported on the Flip-Flat!
      */
      case 'C':
          sprintf(temp, "*C%d000\n", deviceId);
          SetShutter(CLOSED);
          Serial.print(temp);
          break;

      /*
        Turn light on
            Request: >L000\n
            Return : *Lii000\n
                id = deviceId
      */
      case 'L':
          sprintf(temp, "*L%d000\n", deviceId);
          Serial.print(temp);
          lightStatus = ON;
          analogWrite(ledPin, brightness);
          break;

      /*
        Turn light off
            Request: >D000\n
            Return : *Dii000\n
                id = deviceId
      */
      case 'D':
          sprintf(temp, "*D%d000\n", deviceId);
          Serial.print(temp);
          lightStatus = OFF;
          analogWrite(ledPin, 0);
          break;

      /*
        Set brightness
            Request: >Bxxx\n
                xxx = brightness value from 000-255
            Return : *Biiyyy\n
                id = deviceId
                yyy = value that brightness was set from 000-255
      */
      case 'B':
          brightness = atoi(data);    
          if( lightStatus == ON )
              analogWrite(ledPin, brightness);   
          sprintf( temp, "*B%d%03d\n", deviceId, brightness );
          Serial.print(temp);
        break;

      /*
        Get brightness
            Request: >J000\n
            Return : *Jiiyyy\n
                id = deviceId
                yyy = current brightness value from 000-255
      */
      case 'J':
        sprintf( temp, "*J%d%03d\n", deviceId, brightness);
        Serial.print(temp);
        break;
      
      /*
        Get device status:
            Request: >S000\n
            Return : *SidMLC\n
                id = deviceId
                M  = motor status( 0 stopped, 1 running)
                L  = light status( 0 off, 1 on)
                C  = Cover Status( 0 moving, 1 closed, 2 open)
      */
      case 'S':
        sprintf( temp, "*S%d%d%d%d\n",deviceId, motorStatus, lightStatus, coverStatus);
        Serial.print(temp);
        break;

      /*
        Get firmware version
            Request: >V000\n
            Return : *Vii001\n
                id = deviceId
      */
      case 'V': // get firmware version
          sprintf(temp, "*V%d001\n", deviceId);
          Serial.print(temp);
          break;
    }    

    while( Serial.available() > 0 )
        Serial.read();
            

  }
}

void SetShutter(int val)
{
    if( val == OPEN && coverStatuGs != OPEN )
    {
    myservo.write(180);
        coverStatus = OPEN;
        // TODO: Implement code to OPEN the shutter.
    }
    else if( val == CLOSED && coverStatus != CLOSED )
    {
   myservo.write(0);  
        coverStatus = CLOSED;
        // TODO: Implement code to CLOSE the shutter
    }
    else
    {
        // TODO: Actually handle this case
        coverStatus = val;
    }
    
}

 

 

Du coup, juste avant le attach() on ajoute la commande "myservo.writeMicroseconds(xxx);" où xxx est la valeur d'impulsion minimum du servo.

Par exemple, dans le cas d'un type 9G on peut supposer cette valeur proche de 544 µs.

Cette valeur est soit fourni sur une datasheet soit à trouver par tatonnement en partant du fait qu'en général c'est proche des 544 µs.

 

Quelqu'un pour essayer ce matin??

 

Modifié par olivier1986
Lien vers le commentaire
Partager sur d’autres sites

je pense que je vais partir sur l'option de couper l'alim du servo quand il ne sert pas.

j'ai commandé un petit module avec un Mosfet tout prêt, pas de prise de tête à souder

 

Le 22/04/2019 à 12:19, olivier1986 a dit :

Et je peux te demander ce qui ne fonctionne  pas car moi en simu sur tinkercad ca fonctionne 😕

c'est quoi tinkercad ?

ce qui ne marche pas c'est qu'avec l'ajout du "write" avant le "attach", mon servo se met toujours en position médiane à l'allumage

Lien vers le commentaire
Partager sur d’autres sites

On peut aussi modifier par défaut le fichier Servo.h où il est mis dedans la valeur à la connexion et qui a pour argument 1500 soit une position à 90°....

pareil reste à chercher la valeur du 0°!! 

 

Tinkecad est un logiciel de simu en ligne  gratuit appartenant à Autocad où tu peux simuler des composants et des codes arduino, du coup je teste dessus par défaut au boulot sur la pause!!

Lien vers le commentaire
Partager sur d’autres sites

il y a 5 minutes, olivier1986 a dit :

On peut aussi modifier par défaut le fichier Servo.h où il est mis dedans la valeur à la connexion et qui a pour argument 1500 soit une position à 90°....

pareil reste à chercher la valeur du 0°!! 

ça ne marche pas non plus

 

il y a 4 minutes, olivier1986 a dit :

Tinkecad est un logiciel de simu en ligne  gratuit appartenant à Autocad où tu peux simuler des composants et des codes arduino, du coup je teste dessus par défaut au boulot sur la pause!!

merci, mais à mon avis la simulation a ses limites

je pense que notre problème est plus général, lié carrément au servo lui même,

ça n'est sans doute pas un pb de soft...

Hypothèse = le servo de lui même est conçu pour se mettre au milieu quand on l'allume, et basta

 

 

Lien vers le commentaire
Partager sur d’autres sites

je ne sais pas quel Servo tu utilises.

Je vais essayer celui fourni avec un starter kit, c'est un 9g et je vais pouvoir comparer à la simu...

 

Une autre piste aussi mais qui demande de l'éléctronique... il suffirait de brancher la masse du servo à un retardateur.

En gros on branche l'arduino, lui le servo ne l'est pas qques secondes et ensuite il s'allume sans passer par la mise à 90°, il irait directement à la position write qu'on peut définir à 0°.

Mais là moi je sais po faire...

 

réflexion... si on le met sur un simple relai, le relais s'allumerai en permanence après le démarrage de l'arduino avec un simple pin ca marcherait peut être... j'essaierai bien ca ^^

Lien vers le commentaire
Partager sur d’autres sites

@gehelem

un truc du genre:

Révélation

 

 /*
What: LEDLightBoxAlnitak - PC controlled lightbox implmented using the
    Alnitak (Flip-Flat/Flat-Man) command set found here:
  http://www.optecinc.com/astronomy/pdf/Alnitak Astrosystems GenericCommandsR3.pdf

Who:
    Created By: Jared Wellman - jared@mainsequencesoftware.com

When:
    Last modified:  2013/May/05


Typical usage on the command prompt:
Send     : >S000\n      //request state
Recieve  : *S19000\n    //returned state

Send     : >B128\n      //set brightness 128
Recieve  : *B19128\n    //confirming brightness set to 128

Send     : >J000\n      //get brightness
Recieve  : *B19128\n    //brightness value of 128 (assuming as set from above)

Send     : >L000\n      //turn light on (uses set brightness value)
Recieve  : *L19000\n    //confirms light turned on

Send     : >D000\n      //turn light off (brightness value should not be changed)
Recieve  : *D19000\n    //confirms light turned off.
*/

#include <Servo.h>
Servo myservo;

volatile int ledPin   = 11;      // the pin that the LED is attached to, needs to be a PWM pin.
volatile int servoPin = 9;      // the pin that the servo signal is attached to, needs to be a PWM pin.
int brightness = 0;

enum devices
{
    FLAT_MAN_L = 10,
    FLAT_MAN_XL = 15,
    FLAT_MAN = 19,
    FLIP_FLAT = 99
};

enum motorStatuses
{
    STOPPED = 0,
    RUNNING
};

enum lightStatuses
{
    OFF = 0,
    ON
};

enum shutterStatuses
{
    UNKNOWN = 0, // ie not open or closed...could be moving
    CLOSED,
    OPEN
};


int deviceId = FLIP_FLAT;
int motorStatus = STOPPED;
int lightStatus = OFF;
int coverStatus = UNKNOWN;
int relai=7;

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
  pinMode(servoPin, OUTPUT);
  pinMode(relai, OUTPUT);
  analogWrite(ledPin, 0);
  myservo.attach(servoPin);
  digitalWrite(relai, HIGH);
  myservo.write(0);
}

void loop()
{
  
  handleSerial();
}


void handleSerial()
{
  delay(100);
  if( Serial.available() >= 5 )  // all incoming communications are fixed length at 6 bytes including the \n
  {
    char* cmd;
    char* data;
    char temp[10];
    
    int len = 0;

    char str[20];
    memset(str, 0, 20);
    
    // I don't personally like using the \n as a command character for reading.  
    // but that's how the command set is.
  //  Serial.readBytesUntil('\n', str, 20);
  Serial.readBytes( str, 5);

    cmd = str + 1;
    data = str + 2;
    
    // useful for debugging to make sure your commands came through and are parsed correctly.
    if( false )
    {
      sprintf( temp, "cmd = >%s%s;", cmd, data);
      Serial.println(temp);
    }
    


    switch( *cmd )
    {
      /*
        Ping device
            Request: >P000\n
            Return : *Pii000\n
                id = deviceId
      */
      case 'P':
          sprintf(temp, "*P%d000\n", deviceId);
          Serial.print(temp);
          break;

      /*
        Open shutter
            Request: >O000\n
            Return : *Oii000\n
                id = deviceId

            This command is only supported on the Flip-Flat!
      */
      case 'O':
          sprintf(temp, "*O%d000\n", deviceId);
          SetShutter(OPEN);
          Serial.print(temp);
          break;


      /*
        Close shutter
            Request: >C000\n
            Return : *Cii000\n
                id = deviceId

            This command is only supported on the Flip-Flat!
      */
      case 'C':
          sprintf(temp, "*C%d000\n", deviceId);
          SetShutter(CLOSED);
          Serial.print(temp);
          break;

      /*
        Turn light on
            Request: >L000\n
            Return : *Lii000\n
                id = deviceId
      */
      case 'L':
          sprintf(temp, "*L%d000\n", deviceId);
          Serial.print(temp);
          lightStatus = ON;
          analogWrite(ledPin, brightness);
          break;

      /*
        Turn light off
            Request: >D000\n
            Return : *Dii000\n
                id = deviceId
      */
      case 'D':
          sprintf(temp, "*D%d000\n", deviceId);
          Serial.print(temp);
          lightStatus = OFF;
          analogWrite(ledPin, 0);
          break;

      /*
        Set brightness
            Request: >Bxxx\n
                xxx = brightness value from 000-255
            Return : *Biiyyy\n
                id = deviceId
                yyy = value that brightness was set from 000-255
      */
      case 'B':
          brightness = atoi(data);    
          if( lightStatus == ON )
              analogWrite(ledPin, brightness);   
          sprintf( temp, "*B%d%03d\n", deviceId, brightness );
          Serial.print(temp);
        break;

      /*
        Get brightness
            Request: >J000\n
            Return : *Jiiyyy\n
                id = deviceId
                yyy = current brightness value from 000-255
      */
      case 'J':
        sprintf( temp, "*J%d%03d\n", deviceId, brightness);
        Serial.print(temp);
        break;
      
      /*
        Get device status:
            Request: >S000\n
            Return : *SidMLC\n
                id = deviceId
                M  = motor status( 0 stopped, 1 running)
                L  = light status( 0 off, 1 on)
                C  = Cover Status( 0 moving, 1 closed, 2 open)
      */
      case 'S':
        sprintf( temp, "*S%d%d%d%d\n",deviceId, motorStatus, lightStatus, coverStatus);
        Serial.print(temp);
        break;

      /*
        Get firmware version
            Request: >V000\n
            Return : *Vii001\n
                id = deviceId
      */
      case 'V': // get firmware version
          sprintf(temp, "*V%d001\n", deviceId);
          Serial.print(temp);
          break;
    }    

    while( Serial.available() > 0 )
        Serial.read();
            

  }
}

void SetShutter(int val)
{
    if( val == OPEN && coverStatus != OPEN )
    {
    myservo.write(180);
        coverStatus = OPEN;
        // TODO: Implement code to OPEN the shutter.
    }
    else if( val == CLOSED && coverStatus != CLOSED )
    {
   myservo.write(0);  
        coverStatus = CLOSED;
        // TODO: Implement code to CLOSE the shutter
    }
    else
    {
        // TODO: Actually handle this case
        coverStatus = val;
    }
    
}

 

 

t'a moyen d'essayer?

 

@supaii

Oui on peut essayer ca aussi! mais du coup il faut faire la mécanique pour que quand le servo fait une rotation de 90° que le cache lui fasse 180° (ou bien les gens le laisse à 90°...

il y a aussi plus de code car il faut mapper les 180° d'angle possible pour es passer à 90°! pas le temps de l'écrire aujourd'hui 😕

Modifié par olivier1986
Lien vers le commentaire
Partager sur d’autres sites

il y a 6 minutes, olivier1986 a dit :

@supaii

Oui on peut essayer ca aussi! mais du coup il faut faire la mécanique pour que quand le servo fait une rotation de 90° que le cache lui fasse 180° (ou bien les gens le laisse à 90°...

Pas besoin de faire de mécanique. Il suffit d'ouvrir le servo et  mettre une résistance en talon sur le potentiomètre. Une résistance de la même valeur que le potentiomètre. Le neutre du servo se retrouve sur une fin de course.

Modifié par Cedric02700
Lien vers le commentaire
Partager sur d’autres sites

Je parle du potentiomètre a l'intérieur du servo. 

IMG_20190422_131203.thumb.jpg.fd56d537c66e8d393ac1fbba11aba949.jpg

 

La résistance leurre le servo. Il croit être au neutre alors que mécaniquement il est en position max. Après dans le code évidement le servo ne se déplace que de 0 a 90°, mais physiquement il se déplace de 0 a 180°. Ainsi a la mise sous tension il se positionne en position maxi.

  • Merci / Quelle qualité! 2
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.