How to Control Your Actuator Using an Ultra-Sonic Sensor

Näin ohjaat toimilaitettasi ultraäänianturilla

Josh Nigh
Josh Nigh
PA Engineer

Joskus kun toteutamme projektia käyttäen lineaarista toimilaitetta, yritämme ratkaista ongelman, jota ei voisi ratkaista ilman näiden mekanismien etuja. Toisinaan taas haluamme helpottaa tiettyä tehtävää automatisoimalla sen. Mutta silloin tällöin luomme jotain vain siksi, että voimme. Tämä on yksi niistä projekteista.

Vie lineaarisen toimilaitteesi ohjaus seuraavalle tasolle Arduino-mikro-ohjaimillamme!

Tässä artikkelissa käymme läpi, miten voit käyttää ultraäänianturia mittaamaan kohteen ja lineaarisen toimilaitteen etäisyyttä ja käyttää mittausta toimilaitteen iskun sijainnin automaattiseen muuttamiseen. Vaikka tätä ei tehty jokin tietty sovellus mielessä, mahdollisuudet ovat lähes rajattomat.

 

Näitä tarvitset

 

Ohjausta varten käytämme Arduino Uno -korttia MegaMoto-moottorinohjaimella. Toimilaite on PA-04-12-400-HS-24VDC. On tärkeää, että toimilaitteessa on jonkinlainen palaute, jotta Arduino voi seurata sen sijaintia – mikä tahansa lineaarisen toimilaitteen palautteenhallinta käy; esimerkiksi potentiometripalaute toimisi tässä myös. Potentiometri olisi vähemmän tarkka, mutta sen etuna olisi, ettei sähkökatkon jälkeen tarvittaisi homing-menettelyä. Koodia pitäisi myös muokata.

 

Vaihe 1: Johdotus

Vaihe 1: Toimilaitteen johdotus

 

Tämän projektin johdotus on hyvin yksinkertainen. Käytämme tässä PA-04-HS:n kahdesta Hall-efektianturista vain toista – sillä ei ole väliä, kumpaa (nasta 4 tai 5). Alla oleva pinnijärjestys on PA-04-HS:n mukana tulevalle 6-napaiselle Molex-liittimelle:

Toimilaitteen 6-napainen liitin Arduinoon/MegaMotoon

 

Toimilaitteen 6-napainen liitin Arduinoon/MegaMotoon

  • Nasta 3 → 5V
  • Nasta 2 → GND
  • Nasta 1 → Arduinon nasta 2
  • Nasta 4 → A MegaMotossa
  • Nasta 5 → B MegaMotossa

 

Ultraäänianturi Arduinoon/MegaMotoon

  • VCC → 5V
  • GND → GND
  • Trig → nasta 8
  • Echo → nasta 7

 

MegaMoto virtalähteeseen

  • + → V+
  • - → V-

 

Vaihe 2: Arduinon ohjelmointi

Ohjeessa käytetty koodi on muokattu versio aiemmin käyttämästämme: Hall Effect Sensors 1: Position Control. Tutustu vapaasti tähän ohjeeseen ymmärtääksesi paremmin, miten käytämme Hall-efektianturia sijainnin ohjaukseen! Ultraäänianturi toimii lähettämällä ultraäänipulssin, jonka laukaisee jokin Arduinon GPIO-nastoista. Pulssi heijastuu kohteesta ja vastaanotin havaitsee sen. Kun vastaanotin havaitsee pulssin, se lähettää impulssin Arduinolle. Näin voimme laskea lineaarisen toimilaitteen etäisyyden mittaamalla ajan lähetyksen ja vastaanoton välillä ja muuntaa sen tuumiksi kaavalla.

Määritämme toimilaitteen sijainnin laskemalla Hall-efektianturin tuottamien pulssien määrän (kuvattu tarkemmin yllä mainitussa artikkelissa). Iskun sijainti tuumina saadaan selvittämällä, montako pulssia/tuuma meidän toimilaitteemme tuottaa, ja jakamalla pulssilukumme sillä. Kun sekä ultraäänianturin että Hall-efektianturin lukemat muunnetaan tuumiksi, koodista tulee paljon siistimpi ja helpompi. Tämän jälkeen kerromme Arduinolle käytännössä: “jos kohde on x tuuman päässä, jatka toimilaitetta x tuumaa.” Alla olevan koodin lataaminen antaa sinun ottaa käyttöön lineaarisen toimilaitteen etäisyysmallin jollekin PA-04-12-400-HS-24VDC-toimilaitteistamme. Seuraavassa vaiheessa käymme läpi koodiin tehtäviä muokkauksia.

[code]
/* Tämän koodin tarkoitus on mitata kohteen etäisyys ja asettaa lineaarisen toimilaitteen isku vastaavasti.
 *  Tarvittavat komponentit: Arduino Uno, PobotPower MegaMoto -ohjain ja ultraäänianturi.
 *  Kirjoittanut Progressive Automations 2/02/21
 */

#define PWMA0 6
#define PWMB0 5
#define enable0 13   //nastat MegaMotolle

#define hall0 2 //keskeytysnastat Hall-efektiantureille

#define echoPin 7 //echo-nasta ultraäänianturissa
#define trigPin 8 //lähtö ultraäänianturissa

float duration, distance; 

int enable = 0; //enable-nasta MegaMotolle

int count[] = {0};
int currentPos = 0;//nykyinen sijainti
int threshold = 100;//sijaintitoleranssi
int destination = 0;

bool forwards = false;
bool backwards = false;// moottorin tilat

void setup() {
  pinMode(PWMA0, OUTPUT);
  pinMode(PWMB0, OUTPUT);//aseta PWM-lähdöt

  pinMode(enable0, OUTPUT);
  digitalWrite(enable0, LOW);//enable matalaksi ja levy POIS PÄÄLTÄ

  pinMode(hall0, INPUT);
  digitalWrite(hall0, LOW);//aseta hall, matalaksi aloitusta varten nousevalle reunalle

  attachInterrupt(0, speed0, RISING); //ota käyttöön Hall-efektin keskeytykset

  pinMode(trigPin,OUTPUT);
  pinMode(echoPin, INPUT);
  
  Serial.begin(9600);
  //homeActuator();//vetää toimilaitteen täysin sisään
  Serial.println("VALMIS"); 
}//setup loppu

void loop() {
getDistance();//mittaa kohteen etäisyyden ultraäänianturilla
currentPos = count[0]; 
if(distance < 13) //ohita arvo, jos se on iskun pituutta suurempi
{
destination = distance * 275; //muunna mitattu etäisyys (tuumina) halutuksi iskun sijainniksi (pulsseina)
}
  if ((destination >= (currentPos - threshold)) && (destination <= (currentPos + threshold))) stopMoving();//pysäytä toimilaite, jos se on halutussa sijainnissa
  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);

}//loop loppu

void speed0() {
  //Serial.println("Päivitys 1");
  if (forwards == true) count[0]++; //jos liikutaan eteenpäin, lisää laskuria
  else if (backwards == true) count[0]--; //jos liikutaan taaksepäin, vähennä laskuria
}//speed0 loppu

/*void ReadInputs() {

  sw[0] = digitalRead(switch0), sw[1] = digitalRead(switch1);//tarkista kytkimet
  currentPos = count[0];
}//read inputs loppu
*/
void goForwards()
{
  forwards = true;
  backwards = false;
  //Serial.println("Liikutaan eteenpäin");
  digitalWrite(enable0, HIGH);//ota levy käyttöön
  //Serial.print(" Nopeat "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]);
  //Serial.print(" Laskurit "), Serial.println(count[0]);
  analogWrite(PWMA0, 255);
  analogWrite(PWMB0, 0);//aseta nopeudet
}//goForwards loppu

void goBackwards()
{
  forwards = false;
  backwards = true;
  //Serial.println("Liikutaan taaksepäin");
  digitalWrite(enable0, HIGH);//ota levy käyttöön
  //Serial.print(" Nopeat "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]);
  //Serial.print(" Laskurit "), Serial.println(count[0]);
  analogWrite(PWMA0, 0);
  analogWrite(PWMB0, 255);//aseta nopeudet
}//goBackwards loppu

void stopMoving()
{
  forwards = false;
  backwards = false;
  Serial.println("Pysäytetty");
  analogWrite(PWMA0, 0);
  analogWrite(PWMB0, 0);//aseta nopeudet nollaan
  delay(10);
  

  digitalWrite(enable0, LOW);//poista levy käytöstä
}//stopMoving loppu

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("Etäisyys:"); Serial.println(distance);
}

void homeActuator() //vedä toimilaite täysin sisään ja aseta laskuri nollaan
{
  goBackwards();
  delay(25000);//muuta tämä arvo vastaamaan aikaa, jonka toimilaitteen täydellinen sisäänveto kestää
  count[0] = {0};
}
[/code]

Vaihe 3: Koodin muokkaus

Threshold-arvo määrittää, kuinka tarkasti toimilaitteen sijainnin tulee vastata ultraäänianturin lukemaa. Sen kasvattaminen vähentää tarkkuutta ja pienentäminen lisää sitä. Kun arvo on 100, kerromme käytännössä Arduinolle, ettei toimilaitetta liikuteta niin kauan kuin Hall-efekti- ja ultraäänianturien pulssit ovat 100 pulssin sisällä toisistaan. Jos arvo on liian pieni, toimilaite voi nykiä usein yrittäessään osua täsmälleen oikeaan sijaintiin.

Vaihe 3: Koodin muokkaus

 

Vaihda tämä arvo toimilaitteesi iskun pituuteen (tai tuuman pidemmäksi). Tämä käskee Arduinon ohittaa liian suuret arvot.

 

Vaihda tämä arvo toimilaitteesi pulssit/tuuma -arvoon.

 

PA-04-HS:ssamme on sisäänrakennettu Hall-efektianturi!

Yhteenveto

Toivomme vilpittömästi, että tämä projekti on sinulle hyödyllinen – tai ainakin mielenkiintoinen! Muokkaa sitä vapaasti ja tee siitä oman näköisesi. Kuten aina, kuulisimme mielellämme kaikista tähän liittyvistä projekteistasi – käytitpä tätä ideaa tai loit jotain muuta tuotteillamme! Saat meihin yhteyden myös sähköpostitse sales@progressiveautomations.com ja puhelimitse numerosta 1-800-676-6123.