Retrofit Motorized Shades
Monitoring the current of a linear actuator

Questo esempio di codice utilizza MegaMoto Plus e un Arduino Uno per monitorare la Corrente di un Attuatore lineare; tuttavia, prodotti simili possono essere usati come sostituti.

/*  Codice per monitorare l'assorbimento di Corrente dell'Attuatore e togliere alimentazione se
  sale oltre una certa soglia.

  Scritto da Progressive Automations
  19 agosto 2015

  Hardware:
  - Schede di controllo RobotPower MegaMoto
  - Arduino Uno
  - 2 pulsanti
 */

const int EnablePin = 8;
const int PWMPinA = 11;
const int PWMPinB = 3; // pin per Megamoto

const int buttonLeft = 4;
const int buttonRight = 5;//pulsanti per muovere il Motore

const int CPin1 = A5;  // Feedback del Motore

int leftlatch = LOW;
int rightlatch = LOW;//latch del Motore (usati per la logica del codice)

int hitLimits = 0;//inizia a 0
int hitLimitsmax = 10;//valori per sapere se sono stati raggiunti i limiti di Corsa

long lastfeedbacktime = 0; // deve essere long, altrimenti va in overflow
int firstfeedbacktimedelay = 750; // primo ritardo per ignorare il picco di Corrente
int feedbacktimedelay = 50; // ritardo tra i cicli di Feedback, quanto spesso vuoi che il Motore venga controllato
long currentTimefeedback = 0; // deve essere long, altrimenti va in overflow

int debounceTime = 300; // tempo per il debounce dei pulsanti; valori più bassi rendono i pulsanti più sensibili
long lastButtonpress = 0; // timer per il debounce
long currentTimedebounce = 0;

int CRaw = 0;      // valore di ingresso per le letture di Corrente
int maxAmps = 0; // soglia di intervento 

bool dontExtend = false;
bool firstRun = true;
bool fullyRetracted = false;//logica del programma

void setup()
{
  Serial.begin(9600);
  pinMode(EnablePin, OUTPUT);
  pinMode(PWMPinA, OUTPUT);
  pinMode(PWMPinB, OUTPUT);//Imposta le uscite del Motore
  pinMode(buttonLeft, INPUT);
  pinMode(buttonRight, INPUT);//pulsanti
  
  digitalWrite(buttonLeft, HIGH);
  digitalWrite(buttonRight, HIGH);//abilita le pull-up interne
  pinMode(CPin1, INPUT);//imposta l'ingresso di Feedback
  
  currentTimedebounce = millis();
  currentTimefeedback = 0;//Imposta i tempi iniziali

  maxAmps = 15;// IMPOSTA QUI LA CORRENTE MASSIMA

}//fine setup

void loop()
{
  latchButtons();//controlla i pulsanti, verifica se dobbiamo muoverci

  moveMotor();//controlla i latch, muovi il Motore avanti o indietro

}//fine main loop

void latchButtons()
{
  if (digitalRead(buttonLeft)==LOW)//sinistra = avanti
  {
    currentTimedebounce = millis() - lastButtonpress;// controlla il tempo dall'ultima pressione
    if (currentTimedebounce > debounceTime && dontExtend == false)//una volta attivato dontExtend, ignora tutte le pressioni in avanti
    {
      leftlatch = !leftlatch;// se il Motore è in movimento, fermalo; se è fermo, avvialo
      firstRun = true;// imposta il flag firstRun per ignorare il picco di Corrente
      fullyRetracted = false; // una volta che ti muovi in avanti, non sei completamente retratto
      lastButtonpress = millis();//memorizza l'ora dell'ultima pressione del pulsante
      return;
    }//fine if
  }//fine btnLEFT

  if (digitalRead(buttonRight)==LOW)//destra = indietro
  {
    currentTimedebounce = millis() - lastButtonpress;// controlla il tempo dall'ultima pressione

    if (currentTimedebounce > debounceTime)
    {
      rightlatch = !rightlatch;// se il Motore è in movimento, fermalo; se è fermo, avvialo
      firstRun = true;// imposta il flag firstRun per ignorare il picco di Corrente
      lastButtonpress = millis();//memorizza l'ora dell'ultima pressione del pulsante
      return;    }//fine if
  }//fine btnRIGHT
}//fine latchButtons

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

}//fine moveMotor

void motorForward(int speeed)
{
  while (dontExtend == false && leftlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, speeed);
    analogWrite(PWMPinB, 0);//muovi il Motore
    if (firstRun == true) delay(firstfeedbacktimedelay); // ritardo maggiore per ignorare il picco di Corrente
    else delay(feedbacktimedelay); //breve ritardo per raggiungere la Velocità

    getFeedback();
    firstRun = false;
    
    latchButtons();//controlla di nuovo i pulsanti
  }//fine while

}//fine motorForward

void motorBack (int speeed)
{
  while (rightlatch == HIGH)
  {
    digitalWrite(EnablePin, HIGH);
    analogWrite(PWMPinA, 0);
    analogWrite(PWMPinB, speeed);//muovi il Motore
    if (firstRun == true) delay(firstfeedbacktimedelay);// ritardo maggiore per ignorare il picco di Corrente
    else delay(feedbacktimedelay); //breve ritardo per raggiungere la Velocità
    getFeedback();

    firstRun = false;
    
    latchButtons();//controlla di nuovo i pulsanti

  }//fine while

  dontExtend = false;//consenti di nuovo l'estensione del Motore, dopo che è stato retratto

}//fine motorBack

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

  digitalWrite(EnablePin, LOW);
  firstRun = true;//una volta che il Motore si è fermato, riabilita firstRun per tenere conto dei picchi di Corrente all'avvio

}//fine stopMotor

void getFeedback()
{
  CRaw = analogRead(CPin1); // Leggi la Corrente

  if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
  else hitLimits = 0; // verifica se il Motore è ai limiti e la Corrente si è fermata 

  if (hitLimits == hitLimitsmax && rightlatch == HIGH)
  {
    rightlatch = LOW; // ferma il Motore
    fullyRetracted = true;
  }//fine if

  else if (hitLimits == hitLimitsmax && leftlatch == HIGH)
  {
    leftlatch = LOW;//ferma il Motore
    hitLimits = 0;
  }//fine if

  if (CRaw > maxAmps)
  {
    dontExtend = true;
    leftlatch = LOW; //ferma se il Feedback supera il massimo
  }//fine if

  lastfeedbacktime = millis();//memorizza l'ora precedente per la ricezione del Feedback
}//fine 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?
Voglio che il lato più lungo del mio piano sia a sinistra. Il telaio della scrivania ad L può essere installato sia a sinistra che a destra?

Sì, la scrivania ad L è reversibile e può essere installata secondo le tue preferenze. Ecco un articolo passo passo che spiega come fare: Manuale utente FLT-05

Come imposto l’altezza massima/minima per il telaio della mia scrivania regolabile?

NOTA: I passaggi seguenti possono variare a seconda del modello di telecomando in tuo possesso. Le seguenti istruzioni sono per il telecomando standard RT-11. Per impostare l’altezza massima del telaio, porta la scrivania all’altezza desiderata e segui questi passaggi:

  1. Premere M e verificare che sul display compaia [5 -]
  2. Premere il pulsante UP e notare che [5 -] lampeggia
  3. Tenere premuto il pulsante M finché non compare [999] sul display
  4. L’altezza massima è stata impostata

Per impostare l’altezza minima del telaio, porta la scrivania all’altezza desiderata e segui questi passaggi:

  1. Premere M e verificare che sul display compaia [5 -]
  2. Premere il pulsante DOWN e notare che [5 -] lampeggia
  3. Tenere premuto il pulsante M finché non compare [000] sul display
  4. L’altezza minima è stata impostata

Per reimpostare i limiti, segui i passaggi seguenti:

  1. Premere M, verificare che sul display sia indicato [5 -], quindi rilasciare
  2. Tenere premuto M finché non vedi [555]
  3. I limiti sono stati reimpostati
Devo tenere premuti i pulsanti del telecomando per raggiungere l’altezza preimpostata. Posso farlo con una sola pressione?

NOTA: I passaggi seguenti possono variare a seconda del modello di telecomando in tuo possesso. Le seguenti istruzioni sono per il telecomando standard RT-11.

Se devi tenere premuti i pulsanti del telecomando per raggiungere l’altezza preimpostata, significa che la centralina è in modalità momentanea. Per impostare il telecomando in modalità non momentanea, segui i passaggi seguenti

  1. Assicurati che non ci sia nulla sotto la scrivania, perché dobbiamo avviare la procedura di reset
  2. Premi e tieni premuto il pulsante DOWN finché sul display non compare [ASr]
  3. Quando appare [ASr], premi e tieni premuto [1] e potresti vedere due valori:

    a. 10.1 = Modalità non momentanea
    b. 10.2 = Modalità momentanea

  4. Completa la procedura di reset tenendo premuto il pulsante DOWN finché la scrivania non si abbassa leggermente e poi risale.
Come posso modificare la sensibilità del rilevamento delle collisioni?

Le nostre scrivanie regolabili hanno 3 impostazioni per il rilevamento delle collisioni, regolabili in base alle tue preferenze. Per procedere, segui i passaggi seguenti:

  1. Assicurati che non ci sia nulla sotto la scrivania perché dobbiamo avviare la procedura di reset
  2. Premi e tieni premuto il pulsante DOWN finché sul display non compare [ASr]
  3. Quando appare [ASr], premi e tieni premuto il pulsante UP [ ^ ] e potresti vedere tre valori:

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

  4. Completa la procedura di reset tenendo premuto il pulsante DOWN finché la scrivania non si abbassa leggermente e poi risale.
Il mio telecomando mostra un codice di errore sul display. Cosa devo fare?

Ecco alcuni passaggi di risoluzione dei problemi da eseguire se vedi uno dei seguenti codici di errore sui telai con centraline della serie FLTCON:

Controlla il codice di errore qui.

Se il problema persiste dopo aver seguito questi passaggi, contatta pure i nostri ingegneri tecnici di prodotto al 1-800-676-6123 oppure inviaci un’email a sales@progressiveautomations.com.