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 linjär ställdon (vi använder vår PA-14 mini-ställdon), en Arduino Uno och en strömförsörjning på minst 12V.

Till att börja med behöver vi dra kablar för att koppla ihop allting. Börja med att ansluta MegaMoto till Arduino, placera bara MegaMoto ovanpå Uno för att göra det. Anslut sedan en kabel från BAT+-terminalen som finns på MegaMoto till Vin-pinnen som finns på Uno.

Nu behöver vi ansluta kablarna till de linjära ställdonen till A- och B-terminalerna på MegaMoto och ansluta 12V-strömkällan till BAT+ och GND till BAT-. Vi behöver också koppla två knappar för styrning genom att koppla dem var och en mellan ett oanvänt stift och GND. Vi rekommenderar att koppla knapparna till ett kopplingsdäck.

Nu är det dags för lite kodning med Arduino Uno. Vi vill programmera knapparna så att de kan styra när ställdonet ska förlängas och dras in. Strömmen börjar övervakas när ställdonet förlängs och detta låter oss observera om det överskrider den maximala strömgränsen eller inte. Om det passerar gränsen kommer ställdonet automatiskt att stanna tills du väljer att dra in det. Med tanke på att motorerna inuti ställdonen har en stor strömtopp när de först slås på, kommer koden vi anger att ha en kort fördröjning innan den börjar övervaka strömmen. Denna kod kommer att kunna läsa av när ställdonet har nått sina gränsbrytare, vilket är när strömmen sjunker till 0.
const int AktiveraPin = 8;
konstant int PWMPinA = 11;
const int PWMPinB = 3; // stift för Megamoto
const int knappVänster = 4;
const int knappHöger = 5;//knappar för att flytta motorn
konstant int CPin1 = A5; // motoråterkoppling
int vänsterspärr = LÅG;
int rightlatch = LOW;//motorlås (används för kodlogik)
int träffgränser = 0;//börja vid 0
int hitLimitsmax = 10;//värden för att veta om resegränserna har uppnåtts
longlastfeedbacktime = 0; // måste vara lång, annars överfylls tiden
int firstfeedbacktimedelay = 750; //första fördröjningen för att ignorera strömtopp
int återkopplingstidsfördröjning = 50; //fördröjning mellan återkopplingscykler, hur ofta du vill att motorn ska kontrolleras
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
lång strömTidavstudsning = 0;
int CRaw = 0; // ingångsvärde för aktuella avläsningar
int maxAmpere = 0; // utlösningsgräns
bool dontExtend = false;
bool firstRun = true;
bool helt indragen = falskt;//programlogik
void setup()
{
Seriell.börja(9600);
pinMode(AktiveraPin, UTGÅNG);
pinMode(PWMPinA, UTGÅNG);
pinMode(PWMPinB, OUTPUT);//Ställ in motorutgångar
pinMode(knappVänster, INGÅNG);
pinMode(knappHöger, INGÅNG);//knappar
digitalWrite(knappVänster, HÖG);
digitalWrite(buttonRight, HIGH);//aktivera interna pullups
pinMode(CPin1, INPUT);//ställ in återkopplingsingång
aktuellTidavstängning = millis();
aktuellTidåterkoppling = 0;//Ställ in initiala tider
maxAmpere = 15;// STÄLL IN MAX STRÖM HÄR
}//avsluta installationen
void loop()
{
latchButtons();//kontrollera knappar, se om vi behöver flytta
moveMotor();//kontrollera spärrarna, flytta motorn in eller ut
}//avsluta huvudslingan
void latchButtons()
{
om (digitalRead(buttonLeft)==LOW)//vänster är framåt
{
currentTimedebounce = millis() - sistaKnapptryckning;// kontrollerar tiden sedan senaste tryckning
om (currentTimedebounce> debounceTime && dontExtend == false)//när du har utlöst dontExtend, ignorera alla framåttryckningar
{
leftlatch = !leftlatch;// Om motorn rör sig, stoppa, om den stoppas, börja röra sigfirstRun = true;// Ställ in firstRun-flaggan för att ignorera strömtopp
helt indragen = falsk; // när du rör dig framåt är du inte helt indragen
sista knapptryckning = millis();//lagra tid för senaste knapptryckning
återvända;
}//slut om
}//slut btnLEFT
om (digitalRead(buttonRight)==LOW)//höger är bakåt
{
currentTimedebounce = millis() - sistaKnapptryckning;// kontrollerar tiden sedan senaste tryckning
om (nuvarandeTidavstudsning> avstudsningstid)
{
rightlatch = !rightlatch;// Om motorn rör sig, stanna, om den stannar, börja röra sig
firstRun = true;// sätt firstRun-flaggan för att ignorera aktuell topp
sista knapptryckning = millis();//lagra tid för senaste knapptryckning
återvända;
}//slut om
}//slut bntnHÖGER
}//slutlåsknappar
void moveMotor()
{
om (vänsterspärr == HÖG) motorFramåt(255); //hastighet = 0-255
om (leftlatch == LOW) motorStop();
om (högerspärr == HÖG) motorBack(255); //hastighet = 0-255
om (rightlatch == LOW) motorStop();
}//slut på moveMotor
void motorForward(int speed)
{
medan (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, HÖG);
analogWrite(PWMPinA, hastighet);
analogWrite(PWMPinB, 0); // flytta motorn
om (firstRun == true) delay(firstfeedbacktimedelay); // större fördröjning för att ignorera strömtopp
annars delay(feedbacktimedelay); //liten fördröjning för att komma igång
fåÅterkoppling();
firstRun = false;
latchButtons();//kontrollera knapparna igen
}//slut medan
}//slut motorframåt
void motorBack (int speed)
{
medan (högerspärr == HÖG)
{
digitalWrite(EnablePin, HÖG);
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, hastighet); // flytta motorn
om (firstRun == true) delay(firstfeedbacktimedelay); // större fördröjning för att ignorera strömtopp
annars delay(feedbacktimedelay); //liten fördröjning för att komma igång
fåÅterkoppling();
firstRun = false;
latchButtons();//kontrollera knapparna igen
}//slut medan
dontExtend = false;//låt motorn förlängas igen efter att den har dragits in
}//slut motorTillbaka
void motorStop()
{
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, 0);
digitalWrite(EnablePin, LOW);
firstRun = true;//när motorn har stannat, återaktivera firstRun för att ta hänsyn till startströmstoppar
}//ändstoppMotor
void getFeedback()
{
CRaw = analogRead(CPin1); // Läs ström
om (CRaw == 0 && träffLimits < träffLimitsmax) träffLimits = träffLimits + 1;
annars hitLimits = 0; // kontrollera om motorn är vid gränserna och strömmen har slutat
om (hitLimits == hitLimitsmax && rightlatch == HÖG)
{
högerspärr = LÅG; // stoppa motorn
heltTillbakadragen = sant;
}//slut om
annars om (hitLimits == hitLimitsmax && leftlatch == HÖG)
{
vänsterspärr = LÅG;//stoppa motorn
träffgränser = 0;
}//slut om
om (CRaw> maxAmpere)
{
dontExtend = true;
vänsterspärr = LÅG; //stoppa om återkopplingen är över maximum
}//slut om
lastfeedbacktime = millis(); // lagra tidigare tid för att ta emot feedback
}//slut få återkoppling
Det nya och förbättrade PA-01 ministälldon (PA-14-uppgradering) är den nuvarande modellen vi erbjuder med en mängd olika fördelar. För en jämförelse, kolla in tabellerna nedan och uppgradera tryggt!
|
|
PA-01 |
PA-14 |
|
Dynamiska laddningsalternativ |
16, 28, 56, 112, 169, 225 lb |
35, 50, 75, 110, 150 lb |
|
Högsta belastning |
225 lb |
150 lb |
|
Snabbaste hastighet |
3.54 "/sec |
2.00"/sec |
|
Inträngningsskydd |
IP65 |
IP54 |
|
Strokealternativ |
1 varv till 40 varv |
1 varv till 40 varv |
|
Halleffektåterkoppling |
Frivillig |
Inga |
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, snälla kontakta oss.