Как да управлявате задвижващия си механизъм с помощта на ултразвуков сензор

Как да управлявате задвижващия си механизъм с помощта на ултразвуков сензор

Josh Nigh
Josh Nigh
PA Engineer

Понякога, когато създаваме проект, използвайки линеен задвижващ механизъм, опитваме се да решим проблем, който не би могъл да бъде решен без предимствата, които тези механизми предлагат. Друг път се опитваме да улесним определена задача, като я автоматизираме. Но от време на време ще създадем нещо, просто защото можем. Това е един от тези проекти.

Издигнете управлението на линейните си задвижвания на следващото ниво с нашите Arduino микроконтролери!

В тази статия ще разгледаме как можете да използвате ултразвуков сензор за измерване на линейното разстояние на задвижващия механизъм на обект и да го използвате за автоматична промяна на позицията на хода на задвижващия механизъм. Въпреки че това не е създадено с мисъл за някакво конкретно приложение, възможностите са безкрайни.

 

Ето какво ще ви е необходимо

 

За управление използваме Arduino Uno с драйвер за мотор MegaMoto. Нашият задвижващ механизъм е... PA-04-12-400-HS-24 VDCВажно е, че задвижващ механизъм има някакъв вид обратна връзка, така че Arduino да може да следи позицията си – всяко управление с обратна връзка от линеен задвижващ механизъм може да работи, например обратната връзка от потенциометър също би била ефективна тук. Потенциометърът би бил по-малко точен, но би имал предимството да не изисква процедура за връщане в началото след загуба на захранване. Кодът също би трябвало да бъде променен.

 

Стъпка 1: Окабеляване

Step 1: Actuator Wiring

 

Окабеляването за този проект е много просто. Тук ще използваме само един от двата сензора на Хол в PA-04-HS – няма значение кой (пин 4 или 5). Разположението на пиновете по-долу е за 6-пиновия Molex конектор, който е включен в PA-04-HS:

Actuator’s 6-pin connector to Arduino/MegaMoto

 

6-пинов конектор на задвижващия механизъм към Arduino/MegaMoto

  • Пин 3 към 5V
  • Пин 2 към GND
  • Пин 1 към пин 2 на Arduino
  • Пин 4 към A на MegaMoto
  • Пин 5 към B на MegaMoto

 

Ултразвуков сензор за Arduino/Megamoto

  • VCC към 5V
  • GND към GND
  • Триг към пин 8
  • Ехо към Пин 7

 

MegaMoto към захранване

  • + до V+
  • - до V-

 

Стъпка 2: Програмиране на Arduino

Кодът, използван в урока, е модифицирана версия на това, което използвахме в друга публикация, Сензори на Холов ефект 1: Контрол на позициятаЧувствайте се свободни да разгледате този урок, за да разберете по-добре как използваме сензора на Хол за контрол на позицията! Ултразвуковият сензор работи чрез предаване на ултразвуков пинг, който се задейства от един от GPIO пиновете на Arduino. Този ултразвуков пинг се отразява от обект и се открива от приемника. Когато приемникът засече пинга, той изпраща импулс към Arduino. Чрез това можем да използваме уравнение за изчисляване на разстоянието за линеен задвижващ механизъм, като измерим времето между предаването и приемането и използваме формула за преобразуване на това измерване в инчове.

Определяме позицията на задвижващия механизъм чрез преброяване на броя импулси, изведени от сензора на Хол (това е описано по-подробно в публикацията по-горе). Можем да определим позицията на хода в инчове, като разберем колко импулса/инч се извеждат от нашия специфичен задвижващ механизъм и след това разделим броя на импулсите си на това число. Преобразуването на показанията от ултразвуковия сензор и от сензора на Хол в инчове прави кодирането много по-чисто и лесно. Оттам нататък ние по същество казваме на Arduino: „Ако обектът е на x инча разстояние, удължете задвижващия механизъм на x инча“. Качването на кода по-долу ще ви позволи да инсталирате модела на линейния задвижващ механизъм, контролиран от разстояние, в един от нашите задвижващи механизми PA-04-12-400-HS-24 VDC. В следващата стъпка ще разгледаме модификациите, които могат да бъдат направени в кода.

[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] 

Стъпка 3: Промяна на кода

Стойността на прага определя колко точно позицията на задвижващия механизъм трябва да съвпада с показанията на ултразвуковия сензор. Увеличаването му ще намали точността, а намаляването ще има обратен ефект. Като зададем тази стойност на 100, ние по същество казваме на Arduino да не движи задвижващия механизъм, докато импулсите на ефекта на Хол и ултразвуковите сензори са в рамките на 100 импулса един от друг. Ако това число е твърде ниско, това може да доведе до чести резки движения на задвижващия механизъм, докато се опитва да заеме точно правилната позиция.

Step 3: Modifying the Code

 

Променете тази стойност на дължината на хода на вашия задвижващ механизъм (или с един инч по-дълго). Това ще каже на Arduino да игнорира всички стойности, които са твърде високи.

 

Променете тази стойност на импулси/инч на вашия задвижващ механизъм.

 

Нашият PA-04-HS има вграден сензор на Хол!

Заключение

Искрено се надяваме, че ще намерите този проект полезен – или поне интересен! Чувствайте се свободни да го промените и да го направите свой собствен. Както винаги, ще се радваме да видим всички ваши подобни проекти, независимо дали използвате тази идея или създавате нещо различно с нашите продукти! Можете също да се свържете с нас по имейл на sales@progressiveautomations.com и по телефона на 1-800-676-6123.