ایک ارڈینو کے ساتھ پوزیشن ان پٹ ایکٹیویٹر کنٹرول

اپنے ایکٹیویٹر کو کنٹرول کرنے کے لئے پی ایل سی کا پروگرام بنانا ایک مشکل منصوبوں میں سے ایک ہوسکتا ہے۔ اس کے لئے آزمائش اور غلطی ، جانچ اور صبر کا ڈھیر درکار ہے۔ اگرچہ نتائج ناقابل یقین حد تک فعال اور فائدہ مند ہوسکتے ہیں۔

آپ کسی اردوینو کے ساتھ لکیری ایکچوایٹر کو کیسے کنٹرول کرتے ہیں؟

یہ کوڈ ایک فنکشنل کے لئے ہے سیریل ذمہ دار ایکچوایٹر. یہ کسٹمر سے تیار کردہ کوڈ ہے نیکولا بوکولیرو، روم کے یونیورسٹس کیمپس بائیو میڈیکو سے تعلق رکھنے والا 24 سالہ اطالوی انجینئر ، اپن کے ساتھ اپنے مقالے پر کام کر رہا ہے۔

سیریل فیڈ ایک آرڈوینو لیتا ہے جس میں ایک آرڈینو لیتا ہے ، جس میں ایڈوینو یونٹ میں اضافی ڈیٹا بھیجا جاتا ہے جس میں پروگرام کیا جاتا ہے۔ اس کوڈ کے ساتھ ، سیریل مانیٹر میں ایک نمبر ٹائپ کرنے سے آپ کے ارڈینو کو بتائے گا کہ آپ چاہتے ہیں کہ آپ کا ایکٹیویٹر منتقل ہوجائے۔

یہ ہے کہ کوڈ کیا کرتا ہے:

  1. ابتدا (سیٹ اپ):
    • یہ موٹر اور ایکچوایٹر فیڈ بیک سینسر سے رابطے طے کرتا ہے۔
  2. ہدایات کے لئے سیریل مانیٹر دیکھنا:
    • ارڈینو آپ کو ایک نمبر ان پٹ کرنے کے لئے تلاش کر رہا ہے۔ جب یہ سیریل فیڈ میں داخل ہونے والی ایک تعداد کو دیکھتا ہے تو ، یہ موٹر منتقل کرنا شروع کردیتا ہے۔
  3. موٹر منتقل کرنا:
    • جب ہدف کی پوزیشن طے کی جاتی ہے تو ، اردوینو ایکچواٹر کو ہدف کی طرف بڑھانا شروع کردے گا۔ یہ سینسر پر نگاہ رکھتا ہے کہ یہ جاننے کے لئے کہ یہ اس مقام پر کب پہنچتا ہے۔
  4. مقام پر رکنا:
    • جیسے جیسے یہ چلتا ہے ، یہ سینسر کی جانچ پڑتال کرتا رہتا ہے۔ ایک بار جب سینسر کہتا ہے کہ یہ صحیح جگہ پر ہے تو ، نظام موٹر کو روکتا ہے۔
  5. اگلی ہدایت کا انتظار کریں:
    • سسٹم مزید ہدایت کا انتظار کرے گا۔ جب یہ کوئی نیا پیغام سنتا ہے تو ، اسی عمل کے بعد ، یہ دوبارہ حرکت کرنا شروع کردیتا ہے۔

یہ کوڈ کسی خاص جگہ پر جانے ، وہاں رکنے ، اور جب بتایا گیا تو اسے دوبارہ کرنے کے لئے تیار ہونے کے لئے موٹر کو کنٹرول کرنے میں مدد کرتا ہے۔

اس کوڈ کا مقصد a کے ساتھ شروع کرنا ہے مکمل طور پر پیچھے ہٹ کر ایکچوایٹر، جس کا مطلب ہے "0" پوزیشن اسٹروک کا مکمل طور پر پیچھے ہٹ جانے والا اختتام ہے۔ تاہم ، یہ کوڈ کام کرے گا اگر ایکٹیویٹر کو بڑھاتے ہوئے شروع کیا گیا ہو تو - آپ کو ایکٹیویٹر کو پیچھے کی طرف منتقل کرنے کے لئے منفی انٹیجر ویلیو ان پٹ کرنے کی ضرورت ہوگی (مثال کے طور پر: -1200)

نیکولا کا کوڈ
// 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 
Share This Article
Tags: