قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

306hamza
:: مهندس ::
تاريخ التسجيل: Jun 2015
المشاركات: 32
نشاط [ 306hamza ]
قوة السمعة:
قديم 19-04-2017, 09:46 PM المشاركة 9   
افتراضي



https://youtu.be/XIUrnR8bLAI

لو سمحت شاهد الدقيقة 25:25


التعديل الأخير تم بواسطة : 306hamza بتاريخ 19-04-2017 الساعة 10:01 PM
اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 19-04-2017, 10:09 PM المشاركة 10   
sun


السلام عليكم و رحمة الله و بركاته
اخى العزيز , قم بتجربة هذا الكود
كود:
MD03A_Motor_basic + encoder

#define InA1 10 // INA motor pin
#define InB1 11 // INB motor pin
#define PWM1 6 // PWM motor pin
#define encodPin 3 // encoder pin
//#define encodPinB1 8 // encoder B pin

//#define LOOPTIME 100 // PID loop time
#define FORWARD 1 // direction of rotation
#define BACKWARD 2 // direction of rotation

//unsigned long lastMilli = 0; // loop timing
//unsigned long lastMilliPrint = 0; // loop timing
long count = 0; // rotation counter
long countInit;
long encoderPulses = 0;
boolean run = false; // motor moves

void setup() {
    pinMode(InA1, OUTPUT);
    pinMode(InB1, OUTPUT);
    pinMode(PWM1, OUTPUT);
    pinMode(encodPin, INPUT_PULLUP);
//    pinMode(encodPinB1, INPUT);
//    digitalWrite(encodPinA1, HIGH); // turn on pullup resistor
//    digitalWrite(encodPinB1, HIGH);
    attachInterrupt(digitalPinToInterrupt(encodPin), encoderCounter, FALLING);
}

void loop() {
    moveMotor(FORWARD, 50, 100*5); // direction, PWM, ticks number
    delay(3000);
    moveMotor(BACKWARD, 50, 100*5); // 464=360°
    delay(3000);
}

void moveMotor(int direction, int PWM_val, long tick) {
countInit = count; // abs(count)
encoderPulses = tick;
if(direction==FORWARD) motorForward(PWM_val);
else if(direction==BACKWARD) motorBackward(PWM_val);
}

void encoderCounter() { // pulse and direction, direct port reading to save cycles
if(digitalRead(encodPin)==HIGH) count ++;
//if (digitalRead(encodPinA1)==LOW) count --;
if(run)
if((abs(abs(count)-abs(countInit))) >= encoderPulses) motorBrake();
}

void motorForward(int PWM_val) {
    analogWrite(PWM1, PWM_val);
    digitalWrite(InA1, LOW);
    digitalWrite(InB1, HIGH);
    run = true;
}

void motorBackward(int PWM_val) {
    analogWrite(PWM1, PWM_val);
    digitalWrite(InA1, HIGH);
    digitalWrite(InB1, LOW);
    run = true;
}

void motorBrake() {
    analogWrite(PWM1, 0);
    digitalWrite(InA1, HIGH);
    digitalWrite(InB1, HIGH);
    run = false;
}
و ما توفيقى الا بالله



اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

306hamza
:: مهندس ::
تاريخ التسجيل: Jun 2015
المشاركات: 32
نشاط [ 306hamza ]
قوة السمعة:
قديم 24-04-2017, 10:33 PM المشاركة 11   
افتراضي


اخي بهاذا الكود الي ارسلته لي يدور المحرك 3 ثواني يمين و3 يسار وغير مرتبط ببلصات الانكودر
لو سمحت اريد التحكم بالمحرك بكبستين يمين ويسار بدرجات محددة
وكمان لو الانكودر مش موصولة او فيها مشكلة يبقى المحرك ثابت
ملاحظة الانكودر دبل A and B
[IMG][/IMG]


306hamza
:: مهندس ::
تاريخ التسجيل: Jun 2015
المشاركات: 32
نشاط [ 306hamza ]
قوة السمعة:
قديم 25-04-2017, 09:12 PM المشاركة 12   
افتراضي


السلام عليكم
ايها الاخوة على حسب معلوماتي منتدانا من انشط المنتديات وبه عمالقة الالكترونيات والمبرمجين
ما الذي تغير اذا كان كان الاخ مشتاق مشغول الله يعطيكم العافية جميعا اين باقي الاخوة المخضرمين والفنانين
الكود موجود يريد بعض التعديلات



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:44 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)