Bilde av MegaMoto Plus H-bro for Arduino Modell: LC-80 av Progressive Automations

Del I: Hvordan overvåke tilbakemelding fra en lineær aktuator?

Anna Sapiga
Anna Sapiga
PA Engineer

In today’s guide, we will go over how to find out how much force a linear actuator is applying by monitoring the amount of current it is using. This will be one of our more advanced guides and will require some complex coding, calibrating and programming. We will be covering the monitoring of analog input and how it utilizes its functions. For this project, we’ll be using a MegaMoto Plus, en lineær aktuator (vi bruker vår PA-14 miniaktuator), en Arduino Uno og en strømforsyning på minst 12V.

Photo of PA-14 mini actuator, an Arduino Uno and a power supply

For å begynne må vi koble alt sammen. Start med å koble MegaMotoen til Arduinoen. Plasser MegaMotoen oppå Unoen. Koble deretter en ledning fra BAT+-terminalen på MegaMotoen til Vin-pinnen på Unoen.

Photo of MegaMoto Plus H-bridge for Arduino Model: LC-80 by Progressive Automations


Nå må vi koble ledningene til de lineære aktuatorene til A- og B-terminalene på MegaMotoen og koble 12V-strømkilden til BAT+ og GND til BAT-. Vi må også koble to knapper for kontroll ved å koble dem hver mellom en ubrukt pinne og GND. Vi anbefaler å koble knappene til et koblingsbrett.

Photo of the linear actuators wires connecting to the A and B terminals on the MegaMoto and connect the 12V power source to BAT+ and GND to BAT


Nå er det tid for litt koding med Arduino Uno. Vi ønsker å programmere knappene slik at de kan kontrollere når aktuatoren skal forlenges og trekkes tilbake. Strømmen vil begynne å overvåkes når aktuatoren forlenges, og dette lar oss observere om den overskrider den maksimale strømgrensen eller ikke. Hvis den passerer grensen, vil aktuatoren automatisk stoppe inntil du velger å trekke den tilbake. Med tanke på at motorene inne i aktuatorene har en stor strømtopp når de først slås på, vil koden vi skriver inn ha en kort forsinkelse før den begynner å overvåke strømmen. Denne koden vil kunne lese når aktuatoren har nådd grensebryterne sine, som er når strømmen synker til 0.

const int AktiverPin = 8;
konstant int PWMPinA = 11;
const int PWMPinB = 3; // pins for Megamoto
const int knappVenstre = 4;
const int buttonHøyre = 5;//knapper for å bevege motoren
konstant int CPin1 = A5; // motortilbakemelding

int venstrelås = LAV;
int rightlatch = LOW;//motorlåser (brukes til kodelogikk)
int treffGrenser = 0;//start på 0
int hitLimitsmax = 10;//verdier for å vite om reisegrensene ble nådd
lang siste tilbakemeldingstid = 0; // må være lang, ellers går det over
int førstetilbakemeldingstidsforsinkelse = 750; //første forsinkelse for å ignorere strømtopp
int tilbakemeldingstidsforsinkelse = 50; //forsinkelse mellom tilbakemeldingssykluser, hvor ofte du vil at motoren skal kontrolleres
currentTimefeedback = 0; // must be long, else it overflows unceTime = 300; //amount to debounce buttons, lower values makes the buttons more sensitivelong lastButtonpress = 0; // timer for debouncing
lang strømTidavvisning = 0;
int CRaw = 0; // inngangsverdi for gjeldende avlesninger
int maksampere = 0; // utkoblingsgrense
bool dontExtend = false;
bool førsteKjør = sann;
bool fullstendig trukket tilbake = false; // programlogikk
void oppsett()
{
Seriell.begin(9600);
pinMode(AktiverPin, UTGANG);
pinMode(PWMPinA, UTGANG);
pinMode(PWMPinB, OUTPUT);//Angi motorutganger
pinMode(knappVenstre, INNGANG);
pinMode(knappHøyre, INNGANG); //knapper
digitalWrite(knappVenstre, HØY);
digitalWrite(buttonRight, HIGH);//aktiver interne pullups
pinMode(CPin1, INPUT);//sett tilbakemeldingsinngang
gjeldendeTidavvisning = millis();
tilbakemeldingstiden for nåværende tid = 0; // Angi starttider
maxAmps = 15;// ANGI MAKS. STRØM HER
}//avslutt oppsett
tomromsløkke()
{
latchButtons();//sjekk knapper, se om vi trenger å flytte
moveMotor();//sjekk låser, flytt motoren inn eller ut
}//avslutt hovedløkken
void latchButtons()
{
hvis (digitalRead(buttonLeft)==LOW)//venstre er fremover
{
currentTimedebounce = millis() - sisteKnappetrykk;// sjekk tiden siden siste trykk
hvis (currentTimedebounce> debounceTime && dontExtend == false)//når du har utløst dontExtend, ignorer alle fremovergående trykk
{
leftlatch = !leftlatch;// hvis motoren beveger seg, stopp, hvis stoppet, start bevegelsefirstRun = true;// sett firstRun-flagget for å ignorere strømtopp
fullyRetracted = false; // når du beveger deg fremover, er du ikke helt trukket tilbake
siste knappetrykk = millis(); //lagre tidspunktet for siste knappetrykk
retur;
}//slutt hvis
}//slutt btnLEFT
hvis (digitalRead(buttonRight)==LOW)//høyre er baklengs
{
currentTimedebounce = millis() - sisteKnappetrykk;// sjekk tiden siden siste trykk
hvis (gjeldendeTidavvisning> avvisningstid)
{
rightlatch = !rightlatch;// Hvis motoren beveger seg, stopp, hvis den stopper, begynn å bevege seg
firstRun = true;// sett firstRun-flagget for å ignorere gjeldende topp
siste knappetrykk = millis(); //lagre tidspunktet for siste knappetrykk
retur;
}//slutt hvis
}//slutt bnHØYRE
}//sluttlåsknapper
void moveMotor()
{
hvis (venstrelås == HØY) motorForward(255); //hastighet = 0-255
hvis (venstrelås == LAV) motorStopp();
hvis (høyrelås == HØY) motorBack(255); //hastighet = 0-255
hvis (høyrelås == LAV) motorStopp();
}//slutt på bevegelseMotor
void motorForward(int speed)
{
mens (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, HØY);
analogWrite(PWMPinA, speed);
analogWrite(PWMPinB, 0); //flytt motor
hvis (firstRun == true) delay(firstfeedbacktimedelay); // større forsinkelse for å ignorere strømtopp
ellers delay(feedbacktimedelay); //liten forsinkelse for å komme i gang
hentTilbakemelding();
førsteKjør = usann;
latchButtons();//sjekk knappene igjen
}//slutt mens
}//slutt motorFremover

void motorBack (int speed)
{
mens (høyrelås == HØY)
{
digitalWrite(EnablePin, HØY);
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, speed); //flytt motor
hvis (firstRun == true) delay(firstfeedbacktimedelay); // større forsinkelse for å ignorere strømtopp
ellers delay(feedbacktimedelay); //liten forsinkelse for å komme i gang
hentTilbakemelding();
førsteKjør = usann;
latchButtons();//sjekk knappene igjen
}//slutt mens
dontExtend = false;//la motoren strekke seg ut igjen etter at den er trukket tilbake
}//slutt motorTilbake
void motorStop()
{
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, 0);
digitalWrite(AktiverPin, LAV);
firstRun = true;//Når motoren har stoppet, aktiver firstRun på nytt for å ta hensyn til oppstartsstrømtopper
}//endestoppMotor

void getTilbakemelding()
{
CRaw = analogRead(CPin1); // Les strøm
hvis (CRaw == 0 && treffGrenser < treffGrensermaks) treffGrenser = treffGrenser + 1;
ellers hitLimits = 0; // sjekk om motoren er ved grensene og strømmen har stoppet
hvis (hitLimits == hitLimitsmax && rightlatch == HØY)
{
høyrelås = LAV; // stopp motoren
fullstendigTilbaketrukket = sann;
}//slutt hvis
ellers hvis (hitLimits == hitLimitsmax && leftlatch == HØY)
{
venstrelås = LAV;//stopp motoren
treffGrenser = 0;
}//slutt hvis
hvis (CRaw> maksampere)
{
ikkeUtvid = sann;
leftlatch = LAV; //stopp hvis tilbakemeldingen er over maksimum
}//slutt hvis
siste tilbakemeldingstid = millis(); // lagrer forrige tidspunkt for mottak av tilbakemelding
}//slutt hentTilbakemelding


Det nye og forbedrede PA-01 miniaktuator (PA-14-oppgradering) er den nåværende modellen vi tilbyr med en rekke tilleggsfordeler. For en sammenligning, sjekk ut tabellene nedenfor og oppgrader med trygghet!

 

PA-01

PA-14

Dynamiske lastealternativer

16, 28, 56, 112, 169, 225 lb

35, 50, 75, 110, 150 lb

Høyeste belastning

225 lb

150 lb

Raskeste hastighet

3.54 "/sec

2.00"/sec

Inntrengningsbeskyttelse

IP65

IP54

Strekalternativer

1 tommer til 40 tommer

1 tommer til 40 tommer

Hall-effekttilbakemelding

Valgfri

Ingen

With this basic code, you will successfully monitor the feedback of your linear actuator. In Del II we will go more into how the code works and how to edit it to your liking. Hopefully, you found this post helpful and stay tuned for Part II in the coming weeks. If you'd like to order any units we used in this example or want to learn more about our produkter, vær så snill kontakt oss.