Manchmal, wenn wir ein Projekt mit einem linearen Aktuator erstellen, versuchen wir, ein Problem zu lösen, das ohne die Vorteile, die diese Mechanismen bieten, nicht gelöst werden könnte. An anderen Tagen versuchen wir, eine bestimmte Aufgabe zu erleichtern, indem wir sie automatisieren. Aber hin und wieder erstellen wir etwas nur, weil wir es können. Dies ist eines dieser Projekte.
In diesem Artikel werden wir erläutern, wie Sie einen Ultraschallsensor verwenden können, um die Entfernung des linearen Aktuators zu einem Objekt zu messen und diese zu nutzen, um automatisch die Position des Aktuators zu ändern. Obwohl dies nicht mit einer bestimmten Anwendung im Hinterkopf erstellt wurde, sind die Möglichkeiten endlos.
Hier ist, was Sie benötigen
- 1 x RobotPower MegaMoto Motor Driver Shield
- 1 x Arduino Uno
- 1 x Ultraschallsensor
- 1 x PA-04-12-400-HS-24VDC (kann jeder Aktuator mit Hall-Effekt-Rückmeldung sein)
- 1 x PS-20-24 (oder jede 24VDC-Stromversorgung mit einer Nennleistung von mindestens 6 Ampere)
Für die Steuerung verwenden wir ein Arduino Uno mit einem MegaMoto-Motortreiber. Unser Aktuator ist der PA-04-12-400-HS-24VDC. Es ist wichtig, dass der Aktuator eine Art Rückmeldung hat, damit das Arduino seine Position überwachen kann – jede Rückmeldungskontrolle eines linearen Aktuators kann funktionieren, zum Beispiel wäre die Rückmeldung eines Potenziometers hier ebenfalls effektiv. Der Potenziometer wäre weniger genau, hätte aber den Vorteil, dass nach einem Stromausfall kein Referenzverfahren erforderlich wäre. Der Code müsste ebenfalls angepasst werden.
Schritt 1: Verkabelung

Die Verkabelung für dieses Projekt ist sehr einfach. Wir werden hier nur einen der beiden Hall-Effekt-Sensoren im PA-04-HS verwenden – es spielt keine Rolle, welcher (Pin 4 oder 5). Die folgende Pinbelegung ist für den 6-poligen Molex-Stecker, der mit dem PA-04-HS geliefert wird:

6-poliger Stecker des Aktuators zu Arduino/MegaMoto
- Pin 3 zu 5V
- Pin 2 zu GND
- Pin 1 zu Arduino-Pin 2
- Pin 4 zu A auf dem MegaMoto
- Pin 5 zu B auf dem MegaMoto
Ultraschallsensor zu Arduino/Megamoto
- VCC zu 5V
- GND zu GND
- Trig zu Pin 8
- Echo zu Pin 7
MegaMoto zur Stromversorgung
- + zu V+
- - zu V-
Schritt 2: Programmierung des Arduino
Der im Tutorial verwendete Code ist eine modifizierte Version dessen, was wir in einem anderen Beitrag verwendet haben, Hall-Effekt-Sensoren 1: Positionskontrolle. Fühlen Sie sich frei, sich dieses Tutorial anzusehen, um besser zu verstehen, wie wir den Hall-Effekt-Sensor zur Positionskontrolle verwenden! Der Ultraschallsensor funktioniert, indem er ein Ultraschall-Ping sendet, das durch einen der GPIO-Pins des Arduino ausgelöst wird. Dieses Ultraschall-Ping wird dann von einem Objekt reflektiert und vom Empfänger erkannt. Wenn der Empfänger das Ping erkennt, sendet er einen Puls an das Arduino. Dadurch können wir eine Gleichung durchführen, um die Entfernung für einen linearen Aktuator zu berechnen, indem wir die Zeit zwischen Übertragung und Empfang messen und eine Formel verwenden, um diese Messung in Zoll umzurechnen.
Wie wir die Position des Aktuators bestimmen, geschieht durch Zählen der Anzahl der Pulse, die vom Hall-Effekt-Sensor ausgegeben werden (dies wird im oben genannten Beitrag ausführlicher beschrieben). Wir können die Position des Hubs in Zoll bestimmen, indem wir herausfinden, wie viele Pulse/Zoll unser spezifischer Aktuator ausgibt, und dann unsere Pulsanzahl durch diese Zahl teilen. Wenn die Lesung vom Ultraschallsensor und die Lesung vom Hall-Effekt-Sensor beide in Zoll umgerechnet werden, wird das Codieren viel sauberer und einfacher. Von dort aus sagen wir im Wesentlichen dem Arduino: „Wenn das Objekt x Zoll entfernt ist, strecken Sie den Aktuator um x Zoll aus.“ Das Hochladen des folgenden Codes ermöglicht es Ihnen, das Modell der durch den Aktuator gesteuerten Entfernung auf einen unserer PA-04-12-400-HS-24VDC-Aktoren anzuwenden. Im nächsten Schritt werden wir die Änderungen durchgehen, die am Code vorgenommen werden können.
[code]
/* Der Zweck dieses Codes ist es, die Entfernung eines Objekts zu messen und den Hub eines linearen Aktuators entsprechend zu positionieren.
* Die erforderlichen Komponenten sind ein Arduino Uno, ein PobotPower MegaMoto-Treiber und ein Ultraschallsensor.
* Geschrieben von Progressive Automations 02.02.21
*/
#define PWMA0 6
#define PWMB0 5
#define enable0 13 //Pins für MegaMoto
#define hall0 2 //Interrupt-Pins für Hall-Effekt-Sensoren
#define echoPin 7 //Echo-Pin am Ultraschallsensor
#define trigPin 8 //Ausgang am Ultraschallsensor
float duration, distance;
int enable = 0; //Enable-Pin für MegaMoto
int count[] = {0};
int currentPos = 0;//aktuelle Position
int threshold = 100;//Positionstoleranz
int destination = 0;
bool forwards = false;
bool backwards = false;//Motorzustände
void setup() {
pinMode(PWMA0, OUTPUT);
pinMode(PWMB0, OUTPUT);//PWM-Ausgänge festlegen
pinMode(enable0, OUTPUT);
digitalWrite(enable0, LOW);//Enable festlegen und Platine ausschalten
pinMode(hall0, INPUT);
digitalWrite(hall0, LOW);//Hall festlegen, niedrig setzen, um mit der steigenden Flanke zu beginnen
attachInterrupt(0, speed0, RISING); //Hall-Effekt-Interrupts aktivieren
pinMode(trigPin,OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
//homeActuator();//Aktuator vollständig zurückziehen
Serial.println("BEREIT");
}//Ende Setup
void loop() {
getDistance();//Entfernung des Objekts vom Ultraschallsensor messen
currentPos = count[0];
if(distance < 13) //Wert ignorieren, wenn er größer als die Hublänge ist
{
destination = distance * 275; //Gemessene Entfernung (in Zoll) in die gewünschte Hubposition (in Puls) umrechnen
}
if ((destination >= (currentPos - threshold)) && (destination <= (currentPos + threshold))) stopMoving();//Aktuator stoppen, wenn er sich in der gewünschten Position befindet
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);
}//Ende Loop
void speed0() {
//Serial.println("Aktualisierung 1");
if (forwards == true) count[0]++; //Wenn wir vorwärts fahren, zählen wir hinzu
else if (backwards == true) count[0]--; //Wenn wir rückwärts fahren, zählen wir ab
}//Ende speed0
/*void ReadInputs() {
sw[0] = digitalRead(switch0), sw[1] = digitalRead(switch1);//Schalter überprüfen
currentPos = count[0];
}//Ende Eingaben lesen
*/
void goForwards()
{
forwards = true;
backwards = false;
//Serial.println("Vorwärts bewegen");
digitalWrite(enable0, HIGH);//Platine aktivieren
//Serial.print(" Geschwindigkeiten "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]);
//Serial.print(" Zählungen "), Serial.println(count[0]);
analogWrite(PWMA0, 255);
analogWrite(PWMB0, 0);//Geschwindigkeiten anwenden
}//Ende goForwards
void goBackwards()
{
forwards = false;
backwards = true;
//Serial.println("Rückwärts bewegen");
digitalWrite(enable0, HIGH);//Platine aktivieren
//Serial.print(" Geschwindigkeiten "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]);
//Serial.print(" Zählungen "), Serial.println(count[0]);
analogWrite(PWMA0, 0);
analogWrite(PWMB0, 255);//Geschwindigkeiten anwenden
}//Ende goBackwards
void stopMoving()
{
forwards = false;
backwards = false;
Serial.println("Gestoppt");
analogWrite(PWMA0, 0);
analogWrite(PWMB0, 0);//Geschwindigkeiten auf 0 setzen
delay(10);
digitalWrite(enable0, LOW);//Platine deaktivieren
}//Ende 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("Entfernung:"); Serial.println(distance);
}
void homeActuator() //Aktuator vollständig zurückziehen und Zählung auf 0 setzen
{
goBackwards();
delay(25000);//Ändern Sie diesen Wert auf die Zeit, die der Aktuator benötigt, um vollständig zurückgezogen zu werden
count[0] = {0};
}
[/code]
Schritt 3: Den Code ändern
Der Wert des Schwellenwerts bestimmt, wie genau die Position des Aktuators mit der Lesung des Ultraschallsensors übereinstimmen sollte. Eine Erhöhung verringert die Genauigkeit, eine Verringerung hat den umgekehrten Effekt. Wenn dieser Wert auf 100 eingestellt ist, sagen wir im Wesentlichen dem Arduino, dass der Aktuator nicht bewegt werden soll, solange die Pulse des Hall-Effekts und der Ultraschallsensor innerhalb von 100 Pulsen voneinander liegen. Wenn diese Zahl zu niedrig ist, kann dies dazu führen, dass der Aktuator häufig ruckartig bewegt wird, während er versucht, die genaue Position zu erreichen.

Ändern Sie diesen Wert auf die Hublänge Ihres Aktuators (oder einen Zoll länger). Dies wird dem Arduino sagen, dass er alle Werte ignorieren soll, die zu hoch sind.

Ändern Sie diesen Wert auf die Pulse/Zoll Ihres Aktuators.

Fazit
Wir hoffen aufrichtig, dass Sie dieses Projekt nützlich finden – oder zumindest interessant! Bitte zögern Sie nicht, dies zu ändern und es zu Ihrem eigenen zu machen. Wie immer würden wir uns freuen, alle verwandten Projekte zu sehen, die Sie haben, egal ob Sie diese Idee verwenden oder etwas anderes mit unseren Produkten erstellen! Sie können uns auch per E-Mail unter sales@progressiveautomations.com und telefonisch unter 1-800-676-6123 erreichen.