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.

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.

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.

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.