• Home
  • Firgelli Articles
  • একটি আরডুইনো সহ পজিশন-ইনপুট অ্যাকুয়ে...

একটি আরডুইনো সহ পজিশন-ইনপুট অ্যাকুয়েটর নিয়ন্ত্রণ

আপনার অ্যাকিউউটারকে নিয়ন্ত্রণ করতে পিএলসি প্রোগ্রামিং করা আরও কঠিন প্রকল্পগুলির মধ্যে একটি হতে পারে। এটির জন্য ট্রায়াল এবং ত্রুটি, পরীক্ষা এবং ধৈর্য্যের একটি স্তূপ প্রয়োজন; যদিও ফলাফলগুলি অবিশ্বাস্যভাবে কার্যকরী এবং ফলপ্রসূ হতে পারে।

আপনি কীভাবে একটি আরডুইনো দিয়ে লিনিয়ার অ্যাকুয়েটরকে নিয়ন্ত্রণ করবেন?

এই কোডটি একটি কার্যকরী জন্য সিরিয়াল প্রতিক্রিয়াশীল অ্যাকুয়েটর। এটি থেকে গ্রাহক-নির্মিত কোড নিকোলা বুকোলিয়েরো, রোমের ইউনিভার্স্ট ক্যাম্পাস বায়ো-মেডিকোর 24 বছর বয়সী ইতালিয়ান ইঞ্জিনিয়ার, আপেনের সাথে তাদের থিসিসে কাজ করছেন।

সিরিয়াল ফিডটি একটি আরডুইনো গ্রহণের অপারেশনগুলির একটি লেজার, প্রোগ্রাম হিসাবে আরডুইনো ইউনিটের বাইরে বা বাইরে পাঠানো অতিরিক্ত ডেটা। এই কোডটি সহ, সিরিয়াল মনিটরে একটি নম্বর টাইপ করা আপনার আরডুইনোকে বলবে যেখানে আপনি আপনার অ্যাকিউউটরটি সরাতে চান।

কোডটি কী করে তা এখানে:

  1. সূচনা (সেট আপ):
    • এটি মোটর এবং অ্যাকুয়েটর ফিডব্যাক সেন্সরের সংযোগগুলি সেট আপ করে।
  2. নির্দেশাবলীর জন্য সিরিয়াল মনিটর দেখছেন:
    • আরডুইনো আপনাকে একটি নম্বর ইনপুট করতে খুঁজছে। যখন এটি সিরিয়াল ফিডে প্রবেশ করা একটি সংখ্যা দেখে, এটি মোটরটি সরানো শুরু করে।
  3. মোটর সরানো:
    • যখন লক্ষ্য অবস্থানটি সেট করা থাকে, তখন আরডুইনো অ্যাকুয়েটরটিকে লক্ষ্যটির দিকে নিয়ে যেতে শুরু করবে। এটি সেন্সরটির দিকে নজর রাখে এটি কখন সেই পয়েন্টে পৌঁছায়।
  4. অবস্থান থামানো:
    • এটি চলার সাথে সাথে এটি সেন্সরটি পরীক্ষা করে রাখে। সেন্সরটি একবার বলে যে এটি সঠিক জায়গায় রয়েছে, সিস্টেমটি মোটর থামিয়ে দেয়।
  5. পরবর্তী নির্দেশের জন্য অপেক্ষা করুন:
    • সিস্টেমটি আরও নির্দেশের জন্য অপেক্ষা করবে। যখন এটি একটি নতুন বার্তা শোনাচ্ছে, এটি একই প্রক্রিয়া অনুসরণ করে আবার চলতে শুরু করে।

এই কোডটি একটি মোটরকে একটি নির্দিষ্ট জায়গায় যেতে, সেখানে থামাতে এবং যখন বলা হয় তখন আবার এটি করার জন্য প্রস্তুত থাকতে সহায়তা করে।

এই কোডটি একটি দিয়ে শুরু করার উদ্দেশ্যে সম্পূর্ণ প্রত্যাহার অ্যাকিউউটর, অর্থ "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: