Sådan styrer du din aktuator ved hjælp af en ultralydssensor

Sådan styrer du din aktuator ved hjælp af en ultralydssensor

Josh Nigh
Josh Nigh
PA Engineer

Nogle gange når vi opretter et projekt ved hjælp af en lineær aktuator, vi forsøger at løse et problem, der ikke kunne løses uden de fordele, som disse mekanismer tilbyder. Andre gange forsøger vi at gøre en bestemt opgave lettere ved at automatisere den. Men nu og da skaber vi noget, bare fordi vi kan. Dette er et af de projekter.

Tag din lineære aktuatorstyring til det næste niveau med vores Arduino mikrocontrollere!

I denne artikel vil vi gennemgå, hvordan du kan bruge en ultralydssensor til at måle den lineære aktuatorafstand til et objekt og bruge den til automatisk at ændre positionen af aktuatorens slaglængde. Selvom dette ikke blev skabt med nogen specifik anvendelse i tankerne, er mulighederne uendelige.

 

Her er hvad du skal bruge

 

Til styring bruger vi en Arduino Uno med en MegaMoto motordriver. Vores aktuator er PA-04-12-400-HS-24 VDCDet er vigtigt, at aktuator har en form for feedback, så Arduinoen kan overvåge sin position – enhver lineær aktuatorfeedbackkontrol kan fungere, for eksempel ville potentiometerfeedback også være effektivt her. Potentiometeret ville være mindre præcist, men ville have den fordel, at det ikke kræver en homing-procedure efter et strømsvigt. Koden skal også ændres.

 

Trin 1: Ledningsføring

Step 1: Actuator Wiring

 

Ledningsføringen til dette projekt er meget enkel. Vi vil kun bruge en af de to hall-effektsensorer i PA-04-HS her – det er ligegyldigt hvilken (ben 4 eller 5). Benudgangen nedenfor er for det 6-benede Molex-stik, der følger med PA-04-HS:

Actuator’s 6-pin connector to Arduino/MegaMoto

 

Aktuatorens 6-bens stik til Arduino/MegaMoto

  • Ben 3 til 5V
  • Ben 2 til GND
  • Ben 1 til Arduino ben 2
  • Ben 4 til A på MegaMoto'en
  • Ben 5 til B på MegaMoto'en

 

Ultralydsensor til Arduino/Megamoto

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

 

MegaMoto til strømforsyning

  • + til V+
  • - til V-

 

Trin 2: Programmering af Arduinoen

Koden, der bruges i vejledningen, er en modificeret version af den, vi brugte i et andet indlæg. Hall-effektsensorer 1: PositionskontrolDu er velkommen til at tage et kig på denne vejledning for bedre at forstå, hvordan vi bruger Hall-effektsensoren til positionskontrol! Ultralydsensoren fungerer ved at sende en ultralydsping, der udløses af en af GPIO-benene på Arduinoen. Denne ultralydsping reflekteres derefter fra et objekt og detekteres af modtageren. Når modtageren registrerer pingen, sender den en puls til Arduinoen. Gennem dette kan vi lave en ligning til at beregne afstanden for en lineær aktuator ved at måle tiden mellem transmission og modtagelse og bruge en formel til at konvertere denne måling til tommer.

Vi bestemmer aktuatorens position ved at tælle antallet af pulser, der udsendes af Hall-effektsensoren (dette er beskrevet mere detaljeret i ovenstående indlæg). Vi kan bestemme slaglængdens position i tommer ved at finde ud af, hvor mange pulser/tomme der udsendes af vores specifikke aktuator, og derefter dividere vores pulsantal med dette tal. At konvertere aflæsningen fra ultralydssensoren og aflæsningen fra Hall-effektsensoren begge til tommer gør kodningen meget renere og nemmere. Derfra fortæller vi i bund og grund Arduinoen: "Hvis objektet er x tommer væk, skal du forlænge aktuatoren x tommer." Ved at uploade koden nedenfor kan du installere den lineære aktuatorstyrede afstandsmodel på en af vores PA-04-12-400-HS-24 VDC aktuatorer. I næste trin vil vi gennemgå de ændringer, der kan foretages 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 inch); 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] 

Trin 3: Ændring af koden

Tærskelværdien bestemmer, hvor præcist aktuatorens position skal stemme overens med ultralydssensorens aflæsning. En forøgelse af den vil mindske nøjagtigheden, en reduktion vil have den omvendte effekt. Ved at sætte denne værdi til 100, fortæller vi i bund og grund Arduinoen, at den ikke må bevæge aktuatoren, så længe pulserne fra Hall-effekt- og ultralydssensorerne er inden for 100 pulser fra hinanden. Hvis dette tal er for lavt, kan det resultere i, at aktuatoren bevæger sig i hyppige rykvise bevægelser, mens den forsøger at komme i den præcis korrekte position.

Step 3: Modifying the Code

 

Ændr denne værdi til din aktuators slaglængde (eller en tomme længere). Dette vil fortælle Arduinoen, at den skal ignorere alle værdier, der er for høje.

 

Skift denne værdi til pulser/tomme for din aktuator.

 

Vores PA-04-HS har en indbygget Hall-effektsensor!

Konklusion

Vi håber inderligt, at du finder dette projekt nyttigt – eller i det mindste interessant! Du er velkommen til at ændre det og gøre det til dit eget. Som altid vil vi meget gerne se eventuelle relaterede projekter, du har, uanset om du bruger denne idé eller skaber noget anderledes med vores produkter! Du kan også kontakte os via e-mail på sales@progressiveautomations.com og telefonisk på 1-800-676-6123.