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 bruger vores PA-14 mini-aktuator), en Arduino Uno og en strømforsyning på mindst 12V.

Til at starte med skal vi lave ledningsføring for at forbinde alt sammen. Start med at tilslutte MegaMoto'en til Arduino'en. Placer blot MegaMoto'en oven på Uno'en. Tilslut derefter en ledning fra BAT+-terminalen på MegaMoto'en til Vin-pin'en på Uno'en.

Nu skal vi forbinde ledningerne til de lineære aktuatorer til A- og B-terminalerne på MegaMoto'en og tilslutte 12V-strømkilden til BAT+ og GND til BAT-. Vi skal også forbinde to knapper til styring ved at forbinde dem hver mellem en ubrugt pin og GND. Vi anbefaler at forbinde knapperne til et breadboard.

Nu er det tid til noget kodning med Arduino Uno. Vi vil programmere knapperne, så de kan styre, hvornår aktuatoren trækkes ud og ind. Strømmen vil begynde at blive overvåget, når aktuatoren trækkes ud, og dette vil lade os observere, om den overstiger den maksimale strømgrænse eller ej. Hvis den overskrider grænsen, stopper aktuatoren automatisk, indtil du vælger at trække den ind. I betragtning af at motorerne i aktuatorerne har en stor strømstigning, når de tændes første gang, vil den kode, vi indtaster, have en kort forsinkelse, før den begynder at overvåge strømmen. Denne kode vil kunne læse, hvornår aktuatoren har nået sine grænseafbrydere, hvilket er når strømmen falder til 0.
const int AktivérPin = 8;
konstant int PWMPinA = 11;
const int PWMPinB = 3; // stifter til Megamoto
const int knapVenstre = 4;
const int buttonRight = 5;//knapper til at bevæge motoren
konstant int CPin1 = A5; // motorfeedback
int venstrelås = LAV;
int rightlatch = LOW;//motorlåse (bruges til kodelogik)
int hitLimits = 0;//start ved 0
int hitLimitsmax = 10;//værdier for at vide om rejsegrænserne blev nået
longlastfeedbacktime = 0; // skal være lang, ellers løber den over
int førstefeedbacktidsforsinkelse = 750; //første forsinkelse for at ignorere strømspids
int feedbacktidsforsinkelse = 50; //forsinkelse mellem feedbackcyklusser, hvor ofte du ønsker 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ømTidafbøjning = 0;
int CRaw = 0; // inputværdi for aktuelle aflæsninger
int maxAmps = 0; // tripgrænse
bool dontExtend = falsk;
bool førsteKørsel = sand;
bool fuldt tilbagetrukket = falsk; // programlogik
void opsætning()
{
Seriel.begin(9600);
pinMode(AktiverPin, OUTPUT);
pinMode(PWMPinA, OUTPUT);
pinMode(PWMPinB, OUTPUT);//Indstil motorudgange
pinMode(knapVenstre, INPUT);
pinMode(knapHøjre, INPUT);//knapper
digitalWrite(knapVenstre, HØJ);
digitalWrite(buttonRight, HIGH);//aktiver interne pullups
pinMode(CPin1, INPUT);//indstil feedbackindgang
nuværendeTidsafbrydelse = millis();
currentTimefeedback = 0;//Indstil starttider
maxAmps = 15;// INDSTIL MAKS. STRØM HER
}//afslut opsætning
void loop()
{
latchButtons();//tjek knapper, se om vi skal flytte
moveMotor();//tjek låse, flyt motor ind eller ud
}//afslut hovedløkken
void latchButtons()
{
hvis (digitalRead(buttonLeft)==LOW)//venstre er fremad
{
currentTimedebounce = millis() - sidsteKnaptryk;// tjek tid siden sidste tryk
hvis (currentTimedebounce> debounceTime && dontExtend == false)//når du har aktiveret dontExtend, ignorer alle fremadgående tryk
{
leftlatch = !leftlatch;// Hvis motoren bevæger sig, stop, hvis den er stoppet, start den at bevæge sigfirstRun = true;// Indstil firstRun-flaget til at ignorere strømstigning
fuldt tilbagetrukket = falsk; // når du bevæger dig fremad, er du ikke helt tilbagetrukket
sidste knaptryk = millis();//gemmer tidspunktet for sidste knaptryk
tilbagevenden;
}//slut hvis
}//slut btnLEFT
hvis (digitalRead(buttonRight)==LOW)//højre er baglæns
{
currentTimedebounce = millis() - sidsteKnaptryk;// tjek tid siden sidste tryk
hvis (nuværendeTiddebounce> debounceTid)
{
rightlatch = !rightlatch;// Hvis motoren bevæger sig, stop, hvis den er stoppet, start bevægelse
firstRun = true;// sæt firstRun-flaget til at ignorere den aktuelle spids
sidste knaptryk = millis();//gemmer tidspunktet for sidste knaptryk
tilbagevenden;
}//slut hvis
}//slut btnHØJRE
}//slut låseknapper
void moveMotor()
{
hvis (venstrelås == HØJ) motorFremad(255); //hastighed = 0-255
hvis (leftlatch == LAV) motorStop();
hvis (højrelås == HØJ) motorBack(255); //hastighed = 0-255
hvis (højrelås == LAV) motorStop();
}//slut bevægelseMotor
void motorForward(int speed)
{
mens (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, HØJ);
analogWrite(PWMPinA, hastighed);
analogWrite(PWMPinB, 0); // flyt motor
hvis (firstRun == true) delay(firstfeedbacktimedelay); // større forsinkelse for at ignorere strømstigning
ellers delay(feedbacktimedelay); //lille forsinkelse for at komme i gang
hentFeedback();
førsteKørsel = falsk;
latchButtons();//tjek knapper igen
}//slut mens
}//slut motorFremad
void motorBack (int speed)
{
mens (højrelås == HØJ)
{
digitalWrite(EnablePin, HØJ);
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, speed);//flyt motor
hvis (firstRun == true) delay(firstfeedbacktimedelay); // større forsinkelse for at ignorere strømstigning
ellers delay(feedbacktimedelay); //lille forsinkelse for at komme i gang
hentFeedback();
førsteKørsel = falsk;
latchButtons();//tjek knapper igen
}//slut mens
dontExtend = false;// tillad motoren at forlænges igen, efter den er blevet trukket tilbage
}//slut motorTilbage
void motorStop()
{
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, 0);
digitalWrite(EnablePin, LAV);
firstRun = true;// når motoren er stoppet, genaktiver firstRun for at tage højde for opstartsstrømsstigninger
}//endestopMotor
void getFeedback()
{
CRaw = analogRead(CPin1); // Læs strøm
hvis (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
ellers hitLimits = 0; // tjek om motoren er ved grænserne, og om strømmen er stoppet
hvis (hitLimits == hitLimitsmax && rightlatch == HØJ)
{
højrelås = LAV; // stop motor
fuldt trukket tilbage = sandt;
}//slut hvis
ellers hvis (hitLimits == hitLimitsmax && leftlatch == HØJ)
{
venstrelås = LAV;//stop motor
hitLimits = 0;
}//slut hvis
hvis (CRaw> maks. amps)
{
dontExtend = sandt;
leftlatch = LAV; //stop hvis feedback er over maksimum
}//slut hvis
lastfeedbacktime = millis(); // gem tidligere tidspunkt for modtagelse af feedback
}//slut hentFeedback
Det nye og forbedrede PA-01 miniaktuator (PA-14 opgradering) er den nuværende model, vi tilbyder, med en række ekstra fordele. For en sammenligning kan du se tabellerne nedenfor og opgradere med ro i sindet!
|
|
PA-01 |
PA-14 |
|
Dynamiske indlæsningsmuligheder |
16, 28, 56, 112, 169, 225 lb |
35, 50, 75, 110, 150 lb |
|
Højeste belastning |
225 lb |
150 lb |
|
Hurtigste hastighed |
3.54 "/sec |
2.00"/sec |
|
Indtrængningsbeskyttelse |
IP65 |
IP54 |
|
Stregmuligheder |
2,5 cm til 102 cm |
2,5 cm til 102 cm |
|
Hall-effekt-feedback |
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, tak kontakt os.