Slik styrer du aktuatoren din ved hjelp av en ultralydsensor

Slik styrer du aktuatoren din ved hjelp av en ultralydsensor

Josh Nigh
Josh Nigh
PA Engineer

Noen ganger når vi lager et prosjekt ved hjelp av en lineær aktuator, prøver vi å løse et problem som ikke kunne vært løst uten fordelene som disse mekanismene tilbyr. Andre ganger prøver vi å gjøre en bestemt oppgave enklere ved å automatisere den. Men nå og da lager vi noe bare fordi vi kan. Dette er et av disse prosjektene.

Ta den lineære aktuatorkontrollen din til neste nivå med våre Arduino-mikrokontrollere!

I denne artikkelen skal vi gå gjennom hvordan du kan bruke en ultralydsensor til å måle den lineære aktuatoravstanden til et objekt og bruke den til automatisk å endre posisjonen til aktuatorens slaglengde. Selv om dette ikke ble laget med noen spesifikk applikasjon i tankene, er mulighetene uendelige.

 

Her er hva du trenger

 

For kontroll bruker vi en Arduino Uno med en MegaMoto-motordriver. Aktuatoren vår er PA-04-12-400-HS-24 VDCDet er viktig at aktuator har en slags tilbakemelding slik at Arduinoen kan overvåke posisjonen sin – en hvilken som helst lineær aktuator-tilbakemeldingskontroll kan fungere, for eksempel ville potensiometer-tilbakemelding også være effektiv her. Potensiometeret ville være mindre nøyaktig, men ville ha fordelen av å ikke kreve en homing-prosedyre etter et strømbrudd. Koden må også endres.

 

Trinn 1: Kabling

Step 1: Actuator Wiring

 

Kablingen for dette prosjektet er veldig enkel. Vi skal bare bruke én av de to hall-effektsensorene i PA-04-HS her – det spiller ingen rolle hvilken (pinne 4 eller 5). Pinouten nedenfor er for 6-pinners Molex-kontakten som følger med PA-04-HS:

Actuator’s 6-pin connector to Arduino/MegaMoto

 

Aktuatorens 6-pins kontakt til Arduino/MegaMoto

  • Pinne 3 til 5V
  • Pinne 2 til GND
  • Pinne 1 til Arduino pinne 2
  • Pinne 4 til A på MegaMotoen
  • Pinne 5 til B på MegaMotoen

 

Ultralydsensor til Arduino/Megamoto

  • VCC til 5V
  • GND til GND
  • Trig til pinne 8
  • Ekko til pinne 7

 

MegaMoto til strømforsyning

  • + til V+
  • - til V-

 

Trinn 2: Programmering av Arduinoen

Koden som brukes i veiledningen er en modifisert versjon av det vi brukte i et annet innlegg, Hall-effektsensorer 1: PosisjonskontrollTa gjerne en titt på denne veiledningen for å bedre forstå hvordan vi bruker halleffektsensoren til posisjonskontroll! Ultralydsensoren fungerer ved å sende ut en ultralydping som utløses av en av GPIO-pinnene på Arduinoen. Denne ultralydpingen reflekteres deretter fra et objekt og detekteres av mottakeren. Når mottakeren registrerer pingen, sender den en puls til Arduinoen. Gjennom dette kan vi utføre en ligning for å beregne avstanden for en lineær aktuator ved å måle tiden mellom sending og mottak, og bruke en formel for å konvertere denne målingen til tommer.

Slik bestemmer vi aktuatorens posisjon, er ved å telle antall pulser som sendes ut av Hall-effektsensoren (dette er beskrevet mer detaljert i innlegget nevnt ovenfor). Vi kan bestemme slagposisjonen i tommer ved å finne ut hvor mange pulser/tomme som sendes ut av vår spesifikke aktuator, og deretter dele pulsantallet vårt på det tallet. Å ha avlesningen fra ultralydsensoren og avlesningen fra Hall-effektsensoren begge konvertert til tommer, gjør kodingen mye renere og enklere. Derfra forteller vi i hovedsak Arduinoen: "Hvis objektet er x tommer unna, forleng aktuatoren x tommer." Ved å laste opp koden nedenfor kan du installere den lineære aktuatorens kontrollerte avstandsmodell på en av våre PA-04-12-400-HS-24 VDC aktuatorer. I neste trinn vil vi gå gjennom modifikasjoner som kan gjøres i koden.

[code]
/* The purpose of this code it to be able to measure the distance of an object and position the stroke of a linear acuator accordingly. * The required components are an Arduion Uno, a PobotPower MegaMoto Driver, and an Ultra sonic sensor. * Written by Progressive Automations 2/02/21 */ #define PWMA0 6
#define PWMB0 5
#define enable0 13 //pins for MegaMoto #define hall0 2 //interrupt pins for hall effect sensors #define echoPin 7 //echo pin on ultra sonic sensor
#define trigPin 8 //output on ultra sonic sensor float duration, distance; int enable = 0; //enable pin for megaMoto int count[] = {0};
int currentPos = 0;//current position
int threshold = 100;//position tolerance
int destination = 0; bool forwards = false;
bool backwards = false;// motor states void setup() { pinMode(PWMA0, OUTPUT); pinMode(PWMB0, OUTPUT);//set PWM outputs pinMode(enable0, OUTPUT); digitalWrite(enable0, LOW);//set enable and turn board OFF pinMode(hall0, INPUT); digitalWrite(hall0, LOW);//set hall, set low to start for rising edge attachInterrupt(0, speed0, RISING); //enable the hall effect interupts pinMode(trigPin,OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); //homeActuator();//fully retracts actuator Serial.println("READY"); }//end setup void loop() {
getDistance();//measure distance of object from ultra sonic sensor
currentPos = count[0]; if(distance < 13) //ignore value if greater than stroke length
{
destination = distance * 275; //translate measured distance (in inches) to desired stroke position (in pulses)
} if ((destination>= (currentPos - threshold)) && (destination <= (currentPos + threshold))) stopMoving();//stop acuator if it is in the desired position else if (destination> currentPos) goForwards(); else if (destination < currentPos) goBackwards(); Serial.print("Counts: "); Serial.println(count[0]); Serial.print("currentPos: "); Serial.println(currentPos); Serial.print("Destination: "); Serial.println(destination); }//end loop void speed0() { //Serial.println("Update 1 tommer); if (forwards == true) count[0]++; //if moving forwards, add counts else if (backwards == true) count[0]--; //if moving back, subtract counts
}//end speed0 /*void ReadInputs() { sw[0] = digitalRead(switch0), sw[1] = digitalRead(switch1);//check switches currentPos = count[0];
}//end read inputs
*/
void goForwards()
{ forwards = true; backwards = false; //Serial.println("Moving forwards"); digitalWrite(enable0, HIGH);//enable board //Serial.print(" Speeds "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]); //Serial.print(" Counts "), Serial.println(count[0]); analogWrite(PWMA0, 255); analogWrite(PWMB0, 0);//apply speeds
}//end goForwards void goBackwards()
{ forwards = false; backwards = true; //Serial.println("Moving backwards"); digitalWrite(enable0, HIGH);//enable board //Serial.print(" Speeds "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]); //Serial.print(" Counts "), Serial.println(count[0]); analogWrite(PWMA0, 0); analogWrite(PWMB0, 255);//apply speeds
}//end goBackwards void stopMoving()
{ forwards = false; backwards = false; Serial.println("Stopped"); analogWrite(PWMA0, 0); analogWrite(PWMB0, 0);//set speeds to 0 delay(10); digitalWrite(enable0, LOW);//disable board
}//end stopMoving void getDistance()
{
digitalWrite(trigPin, LOW); delayMicroseconds(10); digitalWrite(trigPin, HIGH);
delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration/58.2/2.5;
Serial.print("Distance:"); Serial.println(distance);
} void homeActuator() //fully retract actuator and set count to 0
{ goBackwards(); delay(25000);//change this value to the amount of time it takes for the actuator to fully retract count[0] = {0};
}
[/code] 

Trinn 3: Endre koden

Terskelens verdi bestemmer hvor nøyaktig aktuatorens posisjon skal samsvare med avlesningen fra ultralydsensoren. Å øke den vil redusere nøyaktigheten, å redusere den vil ha den motsatte effekten. Ved å sette denne verdien til 100, forteller vi i hovedsak Arduinoen at den ikke skal bevege aktuatoren så lenge pulsene fra Hall-effekt- og ultralydsensorene er innenfor 100 pulser fra hverandre. Hvis dette tallet er for lavt, kan det føre til at aktuatoren beveger seg i hyppige rykkete bevegelser mens den prøver å komme i nøyaktig riktig posisjon.

Step 3: Modifying the Code

 

Endre denne verdien til slaglengden på aktuatoren din (eller en tomme lenger). Dette vil fortelle Arduinoen at den skal ignorere eventuelle verdier som er for høye.

 

Endre denne verdien til pulser/tomme for aktuatoren din.

 

Vår PA-04-HS har en innebygd Hall-effektsensor!

Konklusjon

Vi håper inderlig at du synes dette prosjektet er nyttig – eller i det minste interessant! Du kan gjerne endre det og gjøre det til ditt eget. Som alltid vil vi gjerne se eventuelle relaterte prosjekter du har, enten du bruker denne ideen eller lager noe annerledes med produktene våre! Du kan også nå oss på e-post på sales@progressiveautomations.com og per telefon på 1-800-676-6123.