Retrofit Motorized Shades
Gas Springs
Monitoring the current of a linear actuator

Ce code d’exemple utilise MegaMoto Plus et un Arduino Uno pour surveiller le courant d’un vérin linéaire; toutefois, des produits similaires peuvent être utilisés en remplacement.

/*  Code pour surveiller l’intensité de courant consommée par l’actionneur, et couper l’alimentation si elle
  dépasse un certain seuil.

  Rédigé par Progressive Automations
  19 août 2015

  Matériel:
  - Cartes de commande RobotPower MegaMoto
  - Arduino Uno
  - 2 boutons-poussoirs
 */

const int EnablePin = 8;
const int PWMPinA = 11;
const int PWMPinB = 3; // broches pour Megamoto

const int buttonLeft = 4;
const int buttonRight = 5;//boutons pour déplacer le moteur

const int CPin1 = A5;  // rétroaction du moteur

int leftlatch = LOW;
int rightlatch = LOW;//verrous du moteur (utilisés pour la logique du code)

int hitLimits = 0;//commencer à 0
int hitLimitsmax = 10;//valeurs pour savoir si les limites de course ont été atteintes

long lastfeedbacktime = 0; // doit être de type long, sinon dépassement
int firstfeedbacktimedelay = 750; //premier délai pour ignorer le pic de courant
int feedbacktimedelay = 50; //délai entre les cycles de rétroaction, fréquence de vérification du moteur
long currentTimefeedback = 0; // doit être de type long, sinon dépassement

int debounceTime = 300; //durée d’anti-rebond des boutons, des valeurs plus faibles rendent les boutons plus sensibles
long lastButtonpress = 0; // minuterie pour l’anti-rebond
long currentTimedebounce = 0;

int CRaw = 0;      // valeur d’entrée pour les mesures de courant
int maxAmps = 0; // seuil de déclenchement 

bool dontExtend = false;
bool firstRun = true;
bool fullyRetracted = false;//logique du programme

void setup()
{
  Serial.begin(9600);
  pinMode(EnablePin, OUTPUT);
  pinMode(PWMPinA, OUTPUT);
  pinMode(PWMPinB, OUTPUT);//Définir les sorties du moteur
  pinMode(buttonLeft, INPUT);
  pinMode(buttonRight, INPUT);//boutons
  
  digitalWrite(buttonLeft, HIGH);
  digitalWrite(buttonRight, HIGH);//activer les pull-up internes
  pinMode(CPin1, INPUT);//définir l’entrée de rétroaction
  
  currentTimedebounce = millis();
  currentTimefeedback = 0;//Définir les temps initiaux

  maxAmps = 15;// DÉFINIR ICI LE COURANT MAXIMUM

}//fin setup

void loop()
{
  latchButtons();//vérifier les boutons, voir s’il faut bouger

  moveMotor();//vérifier les verrous, faire avancer ou reculer le moteur

}//fin boucle principale

void latchButtons()
{
  if (digitalRead(buttonLeft)==LOW)//gauche = avancer
  {
    currentTimedebounce = millis() - lastButtonpress;// vérifier le temps depuis la dernière pression
    if (currentTimedebounce > debounceTime && dontExtend == false)//une fois dontExtend déclenché, ignorer toutes les pressions vers l’avant
    {
      leftlatch = !leftlatch;// si le moteur est en mouvement, arrêter; s’il est arrêté, démarrer
      firstRun = true;// définir l’indicateur firstRun pour ignorer le pic de courant
      fullyRetracted = false; // une fois que vous avancez, il n’est plus entièrement rétracté
      lastButtonpress = millis();//enregistrer l’heure de la dernière pression sur un bouton
      return;
    }//fin if
  }//fin btnLEFT

  if (digitalRead(buttonRight)==LOW)//droite = reculer
  {
    currentTimedebounce = millis() - lastButtonpress;// vérifier le temps depuis la dernière pression

    if (currentTimedebounce > debounceTime)
    {
      rightlatch = !rightlatch;// si le moteur est en mouvement, arrêter; s’il est arrêté, démarrer
      firstRun = true;// définir l’indicateur firstRun pour ignorer le pic de courant
      lastButtonpress = millis();//enregistrer l’heure de la dernière pression sur un bouton
      return;    }//fin if
  }//fin btnRIGHT
}//fin latchButtons

void moveMotor()
{
  if (leftlatch == HIGH) motorForward(255); //vitesse = 0-255
  if (leftlatch == LOW) motorStop();
  if (rightlatch == HIGH) motorBack(255); //vitesse = 0-255
  if (rightlatch == LOW) motorStop();

}//fin moveMotor

void motorForward(int speeed)
{
  while (dontExtend == false && leftlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, speeed);
    analogWrite(PWMPinB, 0);//déplacer le moteur
    if (firstRun == true) delay(firstfeedbacktimedelay); // délai plus long pour ignorer le pic de courant
    else delay(feedbacktimedelay); //petit délai pour atteindre la vitesse

    getFeedback();
    firstRun = false;
    
    latchButtons();//revérifier les boutons
  }//fin while

}//fin motorForward

void motorBack (int speeed)
{
  while (rightlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, 0);
    analogWrite(PWMPinB, speeed);//déplacer le moteur
    if (firstRun == true) delay(firstfeedbacktimedelay);// délai plus long pour ignorer le pic de courant
    else delay(feedbacktimedelay); //petit délai pour atteindre la vitesse
    getFeedback();

    firstRun = false;
    
    latchButtons();//revérifier les boutons

  }//fin while

  dontExtend = false;//permettre au moteur de s’étendre à nouveau après rétraction

}//fin motorBack

void motorStop()
{
  analogWrite(PWMPinA, 0);
  analogWrite(PWMPinB, 0);

  digitalWrite(EnablePin, LOW);
  firstRun = true;//une fois le moteur arrêté, réactiver firstRun pour tenir compte des pics de courant au démarrage

}//fin stopMotor

void getFeedback()
{
  CRaw = analogRead(CPin1); // Lire le courant

  if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
  else hitLimits = 0; // vérifier si le moteur est aux limites et si le courant s’est arrêté 

  if (hitLimits == hitLimitsmax && rightlatch == HIGH)
  {
    rightlatch = LOW; // arrêter le moteur
    fullyRetracted = true;
  }//fin if

  else if (hitLimits == hitLimitsmax && leftlatch == HIGH)
  {
    leftlatch = LOW;//arrêter le moteur
    hitLimits = 0;
  }//fin if

  if (CRaw > maxAmps)
  {
    dontExtend = true;
    leftlatch = LOW; //arrêter si la rétroaction est supérieure au maximum
  }//fin if

  lastfeedbacktime = millis();//enregistrer l’heure précédente pour la réception de la rétroaction
}//fin getFeedback
Controlling multiple actuators with the multimoto Arduino shield
Wasp motor controller for linear actuator control
Using relays to control linear actuators
Controlling the timing of a single linear actuators motion
Continuously extend & retract a linear actuator with brushless DC motor
PA-12 micro servo actuator sample codes
Where can I find additional information on your products?

We have data sheets, user manuals, 3D models, wiring diagrams and more in our Resources and Learning Center sections.

How can I determine which progressive automations linear actuator is best suited for my application?
What is duty cycle and how is it calculated?
Can I use your actuators to replace the one that I already have?
What does stroke mean? How am I supposed to know which size to choose?
How do I know which force rating is right for my application?
Can I use my own power supply as a source for my actuators?
How can I control actuators to travel at the same time?
Why is my linear actuator making so much noise?
Can I customize a linear actuator to my specifications?
Can I synchronize my linear actuators?
Are linear actuator kits available?
Will temperature affect my linear actuator?
Can I implement one of your actuators into a third-party mechanism?
What is the pin out for my linear actuator?
Can I get 3D CAD models for my linear actuator?
What are the control box options for my actuator?
Can I use your control boxes with a third-party product?
Do you sell Wi-Fi control boxes?
Are all of your control boxes compatible with all of your linear actuators?
Can I use my own control box?
Do you have sample coding I could use?
I don’t have a power source – what can I do?
Can I use my own power supply?
Do you have 220 VAC power supplies available?
Can I control the lifting columns with a third-party controller?
Can I use two of the LG-11 lifting columns together?
What control box should I pair with my lifting columns?
Are your table/desk/TV lifts customizable?
What TV sizes can your TV lifts hold?
What is the weight capacity of your table/desk lifts?
Does my linear actuator come with mounting brackets?
Where can I find a step-by-step guide for my product?
I followed the wiring diagram but it’s not working – what should I do?
Flowchart for actuator selection
Can the FLTCON control boxes work with my actuators?
What is backdriving? -- What does dynamic and static load ratings mean? -- What is lateral loading?
How can I place an order?

Orders can be placed by one of the following ways:

Online: Use our online order process with options to pay by Credit Card or PayPal.

Phone: 1-800 – 676 – 6123

Email: sales@progressiveautomations.com

Do you offer quantity discounts?
What methods of payment do you accept?
What form of currency are your prices in?
How do I know if the product I want is in stock?
How much will shipping cost and what methods do you offer?

Progressive Automations’ shipping fees are calculated based on a variety of factors including but not limited to: location, quantities, and the total weight of your order. Smaller items are shipped via parcel while larger items and bulk orders are shipped via a freight carrier service. We always endeavor to provide competitive shipping prices for all our customers.

Shipping methods are available through online and phone orders. If you wish to receive an estimated shipping cost of your order, this can be done by reviewing your final shopping cart.

What freight companies do you use?
Will I be charged with any duty tax?
What is your return policy?
How long is delivery?
Do you offer free shipping?
Je veux que le côté le plus long de mon plateau soit à gauche. Le cadre de bureau assis-debout en L peut-il être installé à gauche ou à droite ?

Oui, le bureau assis-debout en L est adaptable à l'orientation et peut être installé selon vos préférences. Voici un article pas à pas qui explique comment procéder : Manuel d'utilisation FLT-05

Comment régler les hauteurs maximale/minimale de mon cadre de bureau assis-debout ?

REMARQUE : Les étapes ci-dessous peuvent varier selon le modèle de télécommande que vous possédez. Les instructions suivantes concernent la télécommande standard RT-11. Pour régler la hauteur maximale de votre cadre, allez à la hauteur souhaitée, puis suivez les étapes ci-dessous :

  1. Appuyez sur M et vérifiez que [5 -] s'affiche à l'écran
  2. Appuyez sur la touche HAUT et constatez que [5 -] clignote
  3. Maintenez la touche M enfoncée jusqu'à voir [999] sur l'écran
  4. La hauteur maximale est maintenant définie

Pour régler la hauteur minimale de votre cadre, allez à la hauteur souhaitée, puis suivez les étapes ci-dessous :

  1. Appuyez sur M et vérifiez que [5 -] s'affiche à l'écran
  2. Appuyez sur la touche BAS et constatez que [5 -] clignote
  3. Maintenez la touche M enfoncée jusqu'à voir [000] sur l'écran
  4. La hauteur minimale est maintenant définie

Pour réinitialiser les limites, suivez les étapes ci-dessous :

  1. Appuyez sur M, vérifiez que [5 -] s'affiche à l'écran, puis relâchez
  2. Maintenez la touche M enfoncée jusqu'à voir [555]
  3. Les limites ont été réinitialisées
Je dois maintenir les boutons de la télécommande enfoncés pour atteindre ma hauteur préréglée. Existe-t-il un moyen de le faire avec une seule pression ?

REMARQUE : Les étapes ci-dessous peuvent varier selon le modèle de télécommande que vous possédez. Les instructions suivantes concernent la télécommande standard RT-11.

Si vous devez maintenir les boutons de la télécommande enfoncés pour atteindre votre hauteur préréglée, cela signifie que votre boîtier de commande est en mode momentané. Pour passer votre télécommande en mode non momentané, suivez les étapes ci-dessous

  1. Assurez-vous qu'il n'y a rien sous votre bureau, car nous devons lancer la procédure de réinitialisation
  2. Appuyez et maintenez la touche BAS jusqu'à ce que l'écran affiche [ASr]
  3. Une fois [ASr] affiché, appuyez et maintenez [1] enfoncé et vous pouvez voir deux valeurs :

    a. 10.1 = Mode non momentané
    b. 10.2 = Mode momentané

  4. Terminez la procédure de réinitialisation en maintenant la touche BAS enfoncée jusqu'à ce que votre bureau assis-debout s'abaisse légèrement puis se relève.
Comment modifier la sensibilité de la détection des collisions ?

Nos bureaux assis-debout disposent de 3 réglages pour la détection des collisions, que vous pouvez ajuster selon vos préférences. Procédez comme suit :

  1. Assurez-vous qu'il n'y a rien sous votre bureau, car nous devons lancer la procédure de réinitialisation
  2. Appuyez et maintenez la touche BAS jusqu'à ce que l'écran affiche [ASr]
  3. Une fois [ASr] affiché, appuyez et maintenez la touche HAUT [ ^ ] et vous pouvez voir trois valeurs :

    a. 10.5 = 11 lbs
    b. 10.6 = 22 lbs
    c. 10.7 = 33 lbs

  4. Terminez la procédure de réinitialisation en maintenant la touche BAS enfoncée jusqu'à ce que votre bureau assis-debout s'abaisse légèrement puis se relève.
Ma télécommande affiche un code d'erreur à l'écran ? Que dois-je faire ?

Nous avons préparé quelques étapes de dépannage à suivre si vous voyez l'un des codes d'erreur suivants sur les cadres avec boîtiers de commande de la série FLTCON :

Vérifiez le code d'erreur ici.

Si le problème persiste après avoir suivi ces étapes, n'hésitez pas à contacter nos ingénieurs produits au 1-800-676-6123, ou à nous écrire à sales@progressiveautomations.com.