Memprogram PLC untuk mengendalikan aktuator Anda dapat menjadi salah satu proyek yang lebih sulit untuk dilakukan. Dibutuhkan coba -coba, pengujian dan tumpukan kesabaran; meskipun hasilnya bisa sangat fungsional dan bermanfaat.
Kode ini untuk fungsional Aktuator responsif serial. Ini adalah kode yang dibangun oleh pelanggan Nicola Buccoliero, seorang insinyur Italia berusia 24 tahun dari Universtà Campus Bio-Medico di Roma, mengerjakan tesis mereka dengan UPENN.
Umpan serial adalah leger operasi yang diambil Arduino, dengan data tambahan dikirim masuk atau keluar dari unit Arduino seperti yang diprogram. Dengan kode ini, mengetik angka ke monitor serial akan memberi tahu Arduino Anda di mana Anda ingin aktuator Anda pindah.
Inilah yang dilakukan kodenya:
-
Inisialisasi (pengaturan):
- Ini mengatur koneksi ke motor dan sensor umpan balik aktuator.
-
Menyaksikan monitor serial untuk instruksi:
- Arduino sedang mencari Anda untuk memasukkan nomor. Ketika melihat angka dimasukkan ke dalam feed serial, ia mulai menggerakkan motor.
-
Memindahkan motor:
- Ketika posisi target ditetapkan, Arduino akan mulai menggerakkan aktuator ke arah target. Itu mengawasi sensor untuk mengetahui kapan mencapai titik itu.
-
Berhenti di lokasi:
- Saat bergerak, ia terus memeriksa sensor. Setelah sensor mengatakan itu di tempat yang tepat, sistem menghentikan motor.
-
Tunggu instruksi berikutnya:
- Sistem akan menunggu instruksi lebih lanjut. Ketika mendengar pesan baru, itu mulai bergerak lagi, mengikuti proses yang sama.
Kode ini membantu mengendalikan motor untuk pergi ke tempat tertentu, berhenti di situ, dan siap untuk melakukannya lagi ketika diberitahu.
Kode ini dimaksudkan untuk memulai dengan a Aktuator yang sepenuhnya ditarik, yang berarti posisi "0" adalah ujung stroke yang ditarik sepenuhnya. Namun, kode ini akan berfungsi jika aktuator diinisialisasi saat diperpanjang - Anda perlu memasukkan nilai integer negatif untuk memindahkan aktuator ke belakang (mis: -1200)
Kode Nicola// Input / Output Pins
const int motorPin1 = 10; // Pin to control the motor forward
const int motorPin2 = 11; // Pin to control the motor backward
const int sensorPin = 3; // Pin to read the sensor
// Variables
int speed = 255; // Adjust to change actuator speed (0-255)
int sensorValue = 0;
int previousSensorValue = 0;
int motorChangeCount = 0;
int lastStoppedCount = 0;
int targetNumber = 0;
bool motorEnabled = false;
bool waitForCommand = true;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(sensorPin, INPUT);
Serial.begin(115200);
}
void loop() {
if (!motorEnabled && Serial.available() > 0) {
targetNumber = Serial.parseInt();
if (targetNumber != 0) {
Serial.print("Target number: ");
Serial.println(targetNumber);
motorEnabled = true;
analogWrite(motorPin1, speed); // Move forward
analogWrite(motorPin2, 0); // Stop
// Set the counter to the stopped value, considering the difference between targetNumber and lastStoppedCount
if (targetNumber > lastStoppedCount) {
motorChangeCount = lastStoppedCount + 1; // Start from +1
} else if (targetNumber < lastStoppedCount) {
motorChangeCount = lastStoppedCount - 1; // Start from -1
} else {
motorChangeCount = lastStoppedCount; // Keep the same value
}
waitForCommand = true; // Wait for a new input from the serial
}
}
if (motorEnabled) {
sensorValue = digitalRead(sensorPin);
if (sensorValue == 1 && previousSensorValue == 0) {
if (motorChangeCount < targetNumber) {
motorChangeCount++;
} else if (motorChangeCount > targetNumber) {
motorChangeCount--;
}
Serial.print("Change from 0 to 1: ");
Serial.print(motorChangeCount);
Serial.print(" - Target number: ");
Serial.println(targetNumber);
}
previousSensorValue = sensorValue;
if (motorChangeCount < targetNumber) {
analogWrite(motorPin1, speed); // Move forward
analogWrite(motorPin2, 0);
} else if (motorChangeCount > targetNumber) {
analogWrite(motorPin1, 0);
analogWrite(motorPin2, speed); // Move backward
} else {
analogWrite(motorPin1, 0); // Stop the motor when the motor count corresponds to the target number
analogWrite(motorPin2, 0);
motorEnabled = false;
Serial.println("Motor stopped. Awaiting a new number.");
lastStoppedCount = motorChangeCount; // Store the value of motorChangeCount when the motor stops
waitForCommand = true; // Wait for new instructions
}
}
}
// Code by Nicola Buccoliero