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

أدوات الموضوع

306hamza
:: مهندس ::
تاريخ التسجيل: Jun 2015
المشاركات: 34
نشاط [ 306hamza ]
قوة السمعة:0
قديم 16-04-2017, 05:52 PM المشاركة 1   
افتراضي مساعدة في انشاء كود برمجي لمحرك dc مع انكودر Twitter FaceBook Google+



السلام عليكم
اخوتي الكرام عندي محرك dc withe encoder
اريد انشاء كود للاردوينو اتحكم في المحرك
5لفات ببطء بعدها 50لفة بسرعة عالية بعدها 5لفات ببطء يمين ويسار
زي باب المصعد تقريبا
بحثت كثيرا اما الاكواد معقدة جدا او ليست متاحة من منشئيها
[IMG][/IMG]

اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 17-04-2017, 12:34 PM المشاركة 2   
sun


السلام عليكم و رحمة الله و بركاته

ممكن اخى تجرب هذا البرنامج ,
و لو محتاج تعديل نعدله معا , لكن بخصوص الانكودر , الدورة بها كم نبضة


كود:
int speedPin = 9;      // PWM pin motor connected to digital pin 9
int left = 10;   // direction
int right = 11;   // direction

int potentiometerPin = A0;   // potentiometer connected to analog pin 3 to control speed 
int val = 0;         // variable to store the read value

void setup()
{
  pinMode(speedPin, OUTPUT);   // sets the pin as output
  pinMode(right, OUTPUT);
  pinMode(left, OUTPUT); 
}

void loop()
{
  val = analogRead(potentiometerPin);   // read the input pin
  digitalWrite(right, 1);
  digitalWrite(left, 0);
  analogWrite(speedPin, val / 4);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
و ما توفيقى الا بالله



احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً 306hamza ( شكر العضو على هذه المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

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


بارك الله فيك اخ مشتاق
ديسك الانكودر 100 خرم والجير بوكس تقريبا 15 لفة بالنسبة للمحرك بعد التجربة سيتبين لي اللفة الكاملة كم نبضة انكودر
لكن لاحظت في الكود لا يوجد امر دوران تصاعدي وفي الاخير تنازي بالنبضات pwm
النقطة التي لم استوعبها ان المحرك على القليلة يرد جزء من اللفة لكي يقرا الانكودر وياخذ امر النبضات منها
كمان بالنسبة للفرملة ماذا عنها حصلت على كود لكني لم افهم منه شي ساضعه بالردود
لاحظت ايضا ان كثيرا من الشباب العربي والاجنبي يبحث عن هكذا كود لكن للاسف العرب لم يقدموا شي لبعضهم والاجانب للاسف لم افهم عليهم


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


#define InA1 10 // INA motor pin
#define InB1 11 // INB motor pin
#define PWM1 6 // PWM motor pin
#define encodPinA1 2 // encoder A pin
#define encodPinB1 3 // 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 tickNumber = 0;
boolean run = false; // motor moves

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

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

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

void rencoder() { // pulse and direction, direct port reading to save cycles
if (PINB & 0b00000001) count++; // if(digitalRead(encodPinB1)==HIGH) count_r ++;
else count--; // if (digitalRead(encodPinB1)==LOW) count_r --;
if(run)
if((abs(abs(count)-abs(countInit))) >= tickNumber) 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
المشاركات: 34
نشاط [ 306hamza ]
قوة السمعة:0
قديم 17-04-2017, 09:13 PM المشاركة 5   
افتراضي


يوجد كود اخر
ملاحظة عندي الانكودر حسساس واحد وليس دبل
// MD03A_Motor_basic + encoder

#define InA1 10 // INA motor pin
#define InB1 11 // INB motor pin
#define PWM1 6 // PWM motor pin
#define encodPinA1 3 // encoder A 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 tickNumber = 0;
boolean run = false; // motor moves

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

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

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

void rencoder() { // pulse and direction, direct port reading to save cycles
if (PINB & 0b00000001) count++; // if(digitalRead(encodPinB1)==HIGH) count_r ++;
else count--; // if (digitalRead(encodPinB1)==LOW) count_r --;
if(run)
if((abs(abs(count)-abs(countInit))) >= tickNumber) 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
المشاركات: 34
نشاط [ 306hamza ]
قوة السمعة:0
قديم 18-04-2017, 09:24 PM المشاركة 6   
افتراضي


اخ مشتاق جربت احسب عدد البلصات تبع الانكودر للدورة الواحدة عن طريف الاردوينو مدخل الانالوج
المفروض تكون 1500 لكن بكل تجربة يطلع الرقم مختلف بحسب سرعة المحرك تختلف القرائة
مع اني رفعت سيريال بيجين لل 2 مليون
عندك شي كود يقرا بلصات الانكودر بسرعة كبيرة


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 19-04-2017, 06:16 AM المشاركة 7   
sun


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

و ما توفيقى الا بالله


306hamza
:: مهندس ::
تاريخ التسجيل: Jun 2015
المشاركات: 34
نشاط [ 306hamza ]
قوة السمعة:0
قديم 19-04-2017, 06:41 PM المشاركة 8   
افتراضي


https://youtu.be/jgYYqwek4Pg

المشروع انشاء باب جرار اتوماتيك

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025