MONITORING THE CURRENT OF A LINEAR ACTUATOR

This example code uses a MegaMoto Plus and an Arduino Uno to monitor the current of a linear actuator.

/*  Code to monitor the current amp draw of the actuator, and to cut power if it
  rises above a certain amount.

  Written by Progressive Automations
  August 19th, 2015

  Hardware:
  - RobotPower MegaMoto control boards
  - Arduino Uno
  - 2 pushbuttons
 */

const int EnablePin = 8;
const int PWMPinA = 11;
const int PWMPinB = 3; // pins for Megamoto

const int buttonLeft = 4;
const int buttonRight = 5;//buttons to move the motor

const int CPin1 = A5;  // motor feedback

int leftlatch = LOW;
int rightlatch = LOW;//motor latches (used for code logic)

int hitLimits = 0;//start at 0
int hitLimitsmax = 10;//values to know if travel limits were reached

long lastfeedbacktime = 0; // must be long, else it overflows
int firstfeedbacktimedelay = 750; //first delay to ignore current spike
int feedbacktimedelay = 50; //delay between feedback cycles, how often you want the motor to be checked
long currentTimefeedback = 0; // must be long, else it overflows

int debounceTime = 300; //amount to debounce buttons, lower values makes the buttons more sensitive
long lastButtonpress = 0; // timer for debouncing
long currentTimedebounce = 0;

int CRaw = 0;      // input value for current readings
int maxAmps = 0; // trip limit 

bool dontExtend = false;
bool firstRun = true;
bool fullyRetracted = false;//program logic

void setup()
{
  Serial.begin(9600);
  pinMode(EnablePin, OUTPUT);
  pinMode(PWMPinA, OUTPUT);
  pinMode(PWMPinB, OUTPUT);//Set motor outputs
  pinMode(buttonLeft, INPUT);
  pinMode(buttonRight, INPUT);//buttons
  
  digitalWrite(buttonLeft, HIGH);
  digitalWrite(buttonRight, HIGH);//enable internal pullups
  pinMode(CPin1, INPUT);//set feedback input
  
  currentTimedebounce = millis();
  currentTimefeedback = 0;//Set initial times

  maxAmps = 15;// SET MAX CURRENT HERE

}//end setup

void loop()
{
  latchButtons();//check buttons, see if we need to move

  moveMotor();//check latches, move motor in or out

}//end main loop

void latchButtons()
{
  if (digitalRead(buttonLeft)==LOW)//left is forwards
  {
    currentTimedebounce = millis() - lastButtonpress;// check time since last press
    if (currentTimedebounce > debounceTime && dontExtend == false)//once you've tripped dontExtend, ignore all forwards presses
    {
      leftlatch = !leftlatch;// if motor is moving, stop, if stopped, start moving
      firstRun = true;// set firstRun flag to ignore current spike
      fullyRetracted = false; // once you move forwards, you are not fully retracted
      lastButtonpress = millis();//store time of last button press
      return;
    }//end if
  }//end btnLEFT

  if (digitalRead(buttonRight)==LOW)//right is backwards
  {
    currentTimedebounce = millis() - lastButtonpress;// check time since last press

    if (currentTimedebounce > debounceTime)
    {
      rightlatch = !rightlatch;// if motor is moving, stop, if stopped, start moving
      firstRun = true;// set firstRun flag to ignore current spike
      lastButtonpress = millis();//store time of last button press
      return;    }//end if
  }//end btnRIGHT
}//end latchButtons

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

}//end moveMotor

void motorForward(int speeed)
{
  while (dontExtend == false && leftlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, speeed);
    analogWrite(PWMPinB, 0);//move motor
    if (firstRun == true) delay(firstfeedbacktimedelay); // bigger delay to ignore current spike
    else delay(feedbacktimedelay); //small delay to get to speed

    getFeedback();
    firstRun = false;
    
    latchButtons();//check buttons again
  }//end while

}//end motorForward

void motorBack (int speeed)
{
  while (rightlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, 0);
    analogWrite(PWMPinB, speeed);//move motor
    if (firstRun == true) delay(firstfeedbacktimedelay);// bigger delay to ignore current spike
    else delay(feedbacktimedelay); //small delay to get to speed
    getFeedback();

    firstRun = false;
    
    latchButtons();//check buttons again

  }//end while

  dontExtend = false;//allow motor to extend again, after it has been retracted

}//end motorBack

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

  digitalWrite(EnablePin, LOW);
  firstRun = true;//once the motor has stopped, reenable firstRun to account for startup current spikes

}//end stopMotor

void getFeedback()
{
  CRaw = analogRead(CPin1); // Read current

  if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
  else hitLimits = 0; // check to see if the motor is at the limits and the current has stopped 

  if (hitLimits == hitLimitsmax && rightlatch == HIGH)
  {
    rightlatch = LOW; // stop motor
    fullyRetracted = true;
  }//end if

  else if (hitLimits == hitLimitsmax && leftlatch == HIGH)
  {
    leftlatch = LOW;//stop motor
    hitLimits = 0;
  }//end if

  if (CRaw > maxAmps)
  {
    dontExtend = true;
    leftlatch = LOW; //stop if feedback is over maximum
  }//end if

  lastfeedbacktime = millis();//store previous time for receiving feedback
}//end 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
Où puis-je trouver des informations supplémentaires sur vos produits ?

Nous avons des fiches techniques, des manuels d'utilisation, des modèles 3D, des schémas de câblage et plus encore dans nos sections Ressources et Centre d'apprentissage .

Comment puis-je déterminer quel actionneur linéaire est le mieux adapté à mon application ?
Qu'est-ce que le cycle de service et comment est-il calculé ?
Puis-je utiliser vos actionneurs pour remplacer celui que je possède déjà ?
Que signifie la course ? Comment suis-je censé savoir quelle taille choisir ?
Comment puis-je savoir quel indice de force convient à mon application ?
Puis-je utiliser ma propre source d'alimentation pour mes actionneurs ?
Comment puis-je commander le mouvement des actionneurs pour qu'ils se déplacent en même temps ?
Pourquoi mon actionneur linéaire fait-il du bruit ?
Puis-je personnaliser un actionneur linéaire sur mesure selon mes spécifications ?
Puis-je synchroniser mes actionneurs linéaires ?
Des kits d'actionneurs linéaires sont-ils disponibles ?
La température affectera-t-elle mon actionneur linéaire ?
Puis-je jumeler l’un de vos actionneurs à un mécanisme de tiers ?
Quel est le brochage de mon actionneur linéaire ?
Puis-je obtenir des modèles 3D CAO pour mon actionneur linéaire ?
Quelles sont les options du boîtier de commande pour mon actionneur ?
Puis-je utiliser vos boîtiers de commande avec un produit de tiers ?
Vendez-vous des boîtiers de commande Wi-Fi ?
Tous vos boîtiers de commande sont-ils compatibles avec tous vos actionneurs linéaires ?
Puis-je utiliser mon propre boîtier de commande ?
Avez-vous un exemple de codage que je pourrais utiliser ?
Je n'ai pas de source d'alimentation – Que puis-je faire ?
Puis-je utiliser ma propre source d'alimentation ?
Disposez-vous de sources d'alimentation 220 VAC ?
Puis-je commander les colonnes de levage avec un boîtier de commande de tiers ?
Puis-je utiliser deux colonnes de levage Flt-11 ensemble ?
Quel boîtier de commande dois-je jumeler à mes colonnes élévatrices ?
Vos systèmes de levage de table/bureau/TV peuvent-ils être faits sur mesure?
Quelles tailles de téléviseurs vos systèmes de levage TV peuvent-ils soutenir ?
Quelle est la capacité de poids de vossystème de levage de table/bureau ?
Mon actionneur linéaire est-il livré avec des supports de fixation ?
Où puis-je trouver un guide d'utilisation étape par étape pour mon produit ?
J'ai suivi le schéma de câblage mais ça ne fonctionne pas – que dois-je faire ?
Organigramme pour la sélection d'actionneur
Les boîtiers de commande FLTCON peuvent-ils fonctionner avec mes actionneurs ?
Qu’est-ce que le retour arrière ? -- Que signifient les charges nominales dynamiques et statiques ? -- Qu'est-ce que le chargement latéral ?
Comment puis-je passer une commande ?

Les commandes peuvent être passées par l'un des moyens suivants :

En ligne : Utilisez notre processus de commande en ligne avec des options de paiement par carte de crédit ou PayPal.

Téléphone : 1-800 – 676 – 6123

Courriel : sales@progressiveautomations.com

Offrez-vous des rabais par rapport aux quantités commandées ?
Quels modes de paiement acceptez-vous?
Dans quelle devise sont vos prix ?
Comment savoir si le produit que je souhaite commander est en stock ?
Combien coûteront les frais d'expédition et quelles méthodes de livraison proposez-vous ?

Les frais d'expédition de Progressive Automations sont calculés en fonction de divers facteurs, y compris, mais sans s'y limiter : l'emplacement, les quantités et le poids total de votre commande. Les petits articles sont expédiés par colis tandis que les articles plus volumineux et les commandes de grande quantité sont expédiés via un service de transport de marchandises. Nous nous efforçons toujours de fournir des prix d'expédition compétitifs à tous nos clients.

Les méthodes d'expédition sont disponibles via les commandes en ligne et par téléphone. Si vous souhaitez recevoir une estimation des frais d'expédition de votre commande, vous pouvez le faire en consultant votre panier final.

Quelles compagnies de transport de marchandise utilisez-vous ?
Vais-je devoir payer des droits de douanes?
Quelle est votre politique de retour ?
Combien de temps dure la livraison ?
Offrez-vous la livraison gratuite ?
Je veux que le côté le plus long de ma table soit à gauche. Le cadre de bureau debout en forme de L peut-il être installé à gauche ou à droite ?

Oui, le bureau debout en forme de L facilite l'orientation et peut être installé selon vos préférences. Voici un article étape par étape qui explique comment cela est possible : Manuel d'utilisation du FLT-05

Comment puis-je définir les hauteurs maximales/minimales de mon(mes) cadre(s) de bureau debout ?

REMARQUE : Les étapes ci-dessous peuvent varier en fonction du modèle de télécommande dont vous disposez. Les instructions suivantes ont été faites pour la télécommande RT-11 standard. Pour définir la hauteur maximale de votre cadre, accédez à la hauteur souhaitée que vous souhaitez définir et suivez les étapes ci-dessous :

  1. Appuyez sur M et voyez [5 -] indiqué sur l'écran
  2. Appuyez sur le bouton UP et remarquez que [5 -] clignote
  3. Maintenez le bouton M enfoncé jusqu'à ce que vous voyiez [999] sur l'écran.
  4. La hauteur maximale a maintenant été définie

Pour définir la hauteur minimale de votre cadre, accédez à la hauteur souhaitée que vous souhaitez définir et suivez les étapes ci-dessous :

  1. Appuyez sur M et voyez [5 -] indiqué sur l'écran
  2. Appuyez sur le bouton DOWN et remarquez que [5 -] clignote
  3. Maintenez le bouton M enfoncé jusqu'à ce que [000] s'affiche à l'écran.
  4. La hauteur minimale a maintenant été définie

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

  1. Appuyez sur M et voyez [5 -] indiqué sur l'écran et relâchez
  2. Tenez le M que vous voyez [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édéfinie. Existe-t-il un moyen de le faire avec une seule pression ?

REMARQUE : Les étapes ci-dessous peuvent varier en fonction du modèle de télécommande dont vous disposez. Les instructions suivantes ont été faites pour la télécommande RT-11 standard.

Si vous devez maintenir enfoncés les boutons de la télécommande pour atteindre votre hauteur prédéfinie, cela signifie que votre boîtier de commande est en contrôle momentané. Pour régler 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 entrer dans la procédure de réinitialisation
  2. Appuyez et maintenez enfoncé le bouton DOWN jusqu'à ce que l'écran affiche [ASr]
  3. Une fois que [ASr] est affiché, appuyez et maintenez [1] et vous pouvez voir deux valeurs :

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

  4. Terminez la procédure de réinitialisation en maintenant le bouton BAS jusqu'à ce que votre bureau debout descende et monte légèrement.
Comment modifier la sensibilité de la détection de collision ?

Nos bureaux debout disposent de 3 paramètres de détection de collision, qui peuvent être définis selon vos préférences. Pour continuer, suivez les étapes ci-dessous :

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

    un. 10,5 = 11 livres
    b. 10,6 = 22 livres
    c. 10,7 = 33 livres

  4. Terminez la procédure de réinitialisation en maintenant le bouton BAS jusqu'à ce que votre bureau debout descende et monte légèrement.
Ma télécommande affiche un code d'erreur sur l'écran ? Que dois-je faire?

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

Vérifiez le code d'erreur ici .

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