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, egy lineáris aktuátor (mi a PA-14-ünket használjuk mini aktuátor), egy Arduino Uno és egy tápegység legalább 12 V-os.

Kezdésként be kell kábeleznünk mindent, hogy mindent összekössünk. Először is csatlakoztasd a MegaMoto-t az Arduino-hoz, egyszerűen helyezd a MegaMoto-t az Uno tetejére. Ezután kösd össze a MegaMoto BAT+ csatlakozóját a Vin lábával.

Most csatlakoztatnunk kell a lineáris aktuátorok vezetékeit a MegaMoto A és B csatlakozóihoz, és a 12 V-os tápegységet a BAT+, a GND- pedig a BAT- jelhez kell csatlakoztatnunk. Két gombot is be kell kötnünk a vezérléshez, mindegyiket egy fel nem használt láb és a GND közé kötve. Javasoljuk, hogy a gombokat egy próbapanelre kösd be.

Most pedig itt az ideje egy kis kódolásnak az Arduino Uno-val. A gombokat úgy szeretnénk programozni, hogy azok vezérelhessék, mikor nyúlik ki és be a működtető. Az áramerősség figyelése akkor kezdődik, amikor a működtető kinyúlik, és ez lehetővé teszi számunkra, hogy megfigyeljük, hogy túllépi-e a maximális áramkorlátot vagy sem. Ha átlépi a határértéket, akkor a működtető automatikusan leáll, amíg úgy nem döntünk, hogy behúzzuk. Figyelembe véve, hogy a működtetőkben lévő motorok nagy áramcsúccsal rendelkeznek, amikor először be vannak kapcsolva, a beírt kód rövid késleltetéssel kezdi meg az áramerősség figyelését. Ez a kód képes lesz leolvasni, hogy mikor érte el a működtető a végálláskapcsolóit, azaz amikor az áramerősség 0-ra csökken.
konstans int EnablePin = 8;
konstans int PWMPinA = 11;
const int PWMPinB = 3; // tűk a Megamoto számára
const int gombBalra = 4;
const int buttonRight = 5;//gombok a motor mozgatásához
const int CPin1 = A5; // motor visszacsatolás
int balra zár = LOW;
int rightlatch = LOW;//motor reteszek (kódlogikához használatos)
int hitLimits = 0;//0-tól kezdődik
int hitLimitsmax = 10;//értékek, amelyekből megtudhatjuk, hogy elérték-e az utazási korlátokat
longlastfeedbacktime = 0; // longnak kell lennie, különben túlcsordul
int firstfeedbacktimedelay = 750; //első késleltetés az áramcsúcs figyelmen kívül hagyásához
int feedbacktimedelay = 50; //a visszacsatolási ciklusok közötti késleltetés, a motor ellenőrzésének gyakorisága
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
hosszú áramIdőlepergés = 0;
int CRaw = 0; // bemeneti érték az aktuális leolvasásokhoz
int maxAmps = 0; // kioldási határérték
bool dontExtend = false;
bool elsőFuttatás = igaz;
bool fullyRetracted = false;//program logikája
void setup()
{
Sorozat.kezdet(9600);
pinMode(EnablePin, OUTPUT);
pinMode(PWMPinA, KIMENET);
pinMode(PWMPinB, OUTPUT);//Motor kimenetek beállítása
pinMode(Bal gomb, BEVITEL);
pinMode(jobbgomb, INPUT);//gombok
digitalWrite(bal oldali gomb, MAGAS);
digitalWrite(buttonRight, HIGH);//belső felhúzások engedélyezése
pinMode(CPin1, INPUT);//visszacsatolás bemenet beállítása
currentTimedebounce = millis();
currentTimefeedback = 0;//Kezdeti idők beállítása
maxAmps = 15;// IDE ÁLLÍTSA BE A MAX. ÁRAMERŐSSÉGET
}//beállítás vége
void ciklus()
{
latchButtons();//gombok ellenőrzése, hogy kell-e mozgatni
moveMotor();//reteszek ellenőrzése, motor be- vagy kimozdítása
}//fő ciklus vége
void latchButtons()
{
if (digitalRead(buttonLeft)==LOW)//balra van előre
{
currentTimedebounce = millis() - lastButtonpress;// az utolsó gombnyomás óta eltelt idő ellenőrzése
if (currentTimedebounce> debounceTime && dontExtend == false)//miután kikapcsoltad a dontExtend-et, hagyd figyelmen kívül az összes előre nyomógombot
{
leftlatch = !leftlatch;// ha a motor mozog, megáll, ha megállt, elindulfirstRun = true;// a firstRun jelzőt úgy állítja be, hogy figyelmen kívül hagyja az áramcsúcsot
fullyRetracted = false; // ha előrelépsz, akkor nem húzódsz vissza teljesen
lastButtonpress = millis();//az utolsó gombnyomás időpontjának tárolása
visszatérés;
}//vége, ha
}//BALRA gomb vége
if (digitalRead(buttonRight)==LOW)//jobbra fordítottan
{
currentTimedebounce = millis() - lastButtonpress;// az utolsó gombnyomás óta eltelt idő ellenőrzése
ha (jelenlegiIdőlepattanás> lepattanásIdő)
{
rightlatch = !rightlatch;// ha a motor mozog, megáll, ha megállt, elindul
firstRun = true;// beállítja a firstRun jelzőt az aktuális csúcs figyelmen kívül hagyására
lastButtonpress = millis();//az utolsó gombnyomás időpontjának tárolása
visszatérés;
}//vége, ha
}//JOBBRA gomb vége
}//vége reteszgombok
void moveMotor()
{
ha (leftlatch == HIGH) motorForward(255); //sebesség = 0-255
ha (leftlatch == LOW) motorStop();
ha (jobbra zár == HIGH) motorBack(255); //sebesség = 0-255
ha (jobboldali retesz == LOW) motorStop();
}//mozgatómotor vége
void motorForward(int sebesség)
{
míg (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EngedélyezPin, MAGAS);
analogWrite(PWMPinA, sebesség);
analogWrite(PWMPinB, 0);//motor mozgatása
if (firstRun == true) delay(firstfeedbacktimedelay); // nagyobb késleltetés az áramcsúcs figyelmen kívül hagyásához
else delay(feedbacktimedelay); //kis késleltetés a sebesség eléréséhez
getFeedback();
elsőFuttatás = false;
latchButtons();//gombok újraellenőrzése
}//vége közben
}//motorForward vége
void motorBack (int sebesség)
{
míg (jobboldali retesz == MAGAS)
{
digitalWrite(EngedélyezPin, MAGAS);
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, speeed);//motor mozgatása
if (firstRun == true) delay(firstfeedbacktimedelay);// nagyobb késleltetés az áramcsúcs figyelmen kívül hagyásához
else delay(feedbacktimedelay); //kis késleltetés a sebesség eléréséhez
getFeedback();
elsőFuttatás = false;
latchButtons();//gombok újraellenőrzése
}//vége közben
dontExtend = false;//engedélyezi a motor újbóli kinyúlását, miután behúzták
}//motorBack vége
void motorStop()
{
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, 0);
digitalWrite(EngedélyezPin, LOW);
firstRun = true;//miután a motor leállt, engedélyezze újra a firstRun-t az indítási áramcsúcsok figyelembevételéhez
}//végpont leállítómotor
void getFeedback()
{
CRaw = analogRead(CPin1); // Aktuális áram beolvasása
ha (CRaw == 0 && találatiKorlátok < találatiKorlátokmax) találatiKorlátok = találatiKorlátok + 1;
egyébként hitLimits = 0; // ellenőrizzük, hogy a motor a határértékeken van-e, és az áram megszűnt-e
ha (hitLimits == hitLimitsmax && rightlatch == MAGAS)
{
jobb retesz = LOW; // motor leállítása
teljesenVisszavontott = igaz;
}//vége, ha
egyébként ha (hitLimits == hitLimitsmax && leftlatch == HIGH)
{
bal retesz = LOW;//motor leállítása
találatiKorlátok = 0;
}//vége, ha
ha (CRaw> maxAmps)
{
dontExtend = igaz;
leftlatch = LOW; //megállás, ha a visszacsatolás meghaladja a maximumot
}//vége, ha
lastfeedbacktime = millis();//tárolja az előző időpontot a visszajelzés fogadásához
}//visszajelzés vége
Az új és továbbfejlesztett PA-01 mini aktuátor A (PA-14 frissítés) a jelenlegi modellünk, számos további előnnyel. Összehasonlításképpen tekintse meg az alábbi táblázatokat, és frissítsen bizalommal!
|
|
PA-01 |
PA-14 |
|
Dinamikus betöltési beállítások |
16, 28, 56, 112, 169, 225 font |
35, 50, 75, 110, 150 font |
|
Legnagyobb terhelés |
225 lb |
150 lb |
|
Leggyorsabb sebesség |
3.54 "/sec |
2.00"/sec |
|
Behatolás elleni védelem |
IP65 |
IP54 |
|
Ecsetvonási beállítások |
1 hüvelyktől 40 hüvelykig |
1 hüvelyktől 40 hüvelykig |
|
Hall-effektus visszajelzés |
Választható |
Nem |
With this basic code, you will successfully monitor the feedback of your linear actuator. In II. rész 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 termékek, kérlek lépjen kapcsolatba velünk.