آموزش آردوینو بصورت عملی+فیلم و کد(جدید: پروژه کنترل سروو)

آموزش 

C++/C

توسط hossein-mclaren در 5 ماه پیش
1 4k 8 4 ماه پیش
hossein-mclaren
5

بسم الله الرحمن الرحیم

(پروژه کنترل سروو موتور با پتانسیومتر اضافه شد+فیلم و کد)

با عرض سلام خدمت دوستان محترم. امیدوارم تو این تاپیک بتونیم از تجربیات هم بهرمند بشیم و در زمینه میکروکنترلرها، آردوینو، کار با حسگرها و ماژولهای مختلف، اینترنت اشیا، برنامه نویسی بردهای اپن سورس و... پیشرفت کنیم. بنده شخصا در این زمینه تازه کارم ولی امیدوارم بتونم دانسته های اندکمو با دوستان به اشتراک بذارم و این تاپیک مفید واقع بشه. همونطور که میدونید این زمینه خیلی جای کار داره و بیس و پایه کار آفرینی در بسیاری از زمینه هاست و قطعات و سیستمهایی رو که بعضا تا هزاران دلار از خارجی ها میخریم میتونیم خودمون با هزینه بسیار کمتر بسازیم.

معرفی برد آردوینو

انواع برد آردوینو

آردوینو یه برد اپن سورس هست که سخت افزار و نرم افزارش در اختیار عموم قرار گرفته. زبانش ++c هست و میکرو کنترلش عموما AVR ATMEGA هست مثلا در برد آردوینو یونو(UNO) از میکرو ATMEGA328 شرکت اتمل بهره میبره. با یه سرچ ساده انواع بردها و ماژولها و کاربردشون در پروژه های دانشجویی و نمونه های اولیه پیش تولید خیلی از پروژه های صنعتی میبینید. کاربردهایی مثل طراحی و کنترل انواع سنسورها و راه اندازی انواع موتورها مثل استپ موتور و سروو و کنترل اونها با پالس PWM. سنسورهایی مثل دما، رطوبت، گاز، رنگ، ولتاژ، جریان الکتریکی، جریان آب و... و ماژولهایی مثل GSM سیمکارت، بلوتوث، وایفای، رادیو کنترل، درایور موتورو... از اتوماسیون مرغداری ها و گلخانه ها و کنترل آبیاری قطره ای گرفته تا پرینترهای 3 بعدی، CNC ها و... رو میشه با آردوینو طراحی و ساخت، با هزینه ای حتی کمتر از نمونه های بازار! بردهای آردوینو رو با برنامه رسمی خودش برنامه نویسی میکنن و کتابخانه ها و آموزشهای اون در فضای اینترنت موجوده و به جای استفاده از میکرو کنترلر و پروگرامر و دردسرهاش با یه بردی کار میکنین که کامپایلر خوبی داره، برنامه نویسیش راحت تره و نیازی به اضافه کردن کریستال و تغذیه و... نیست چون روی خود برد آردوینو همه امکانات اولیه فراهم شده و فقط کافیه با USB به کامپیوتر وصل بشه و با همون تغذیه مدار هم صورت میگیره.

برد آردوینو یونو

آردوینو مگا

کامپایلر آردوینو

راه اندازی موتور dc با پالس PWM و ترانزیستور TIP120

آخرین ویرایش: 16-11-2018 ساعت 13:25، توسط Hossein-McLaren
3

سلام مجدد اولین پروژه ساده ترین پروژه ای است که میشه با برد آردوینو اجرا کرد یعنی چشمک زن LED با آردوینو:

اتصال ال ای دی و مقاومت روی برد

توضیح تصویر

توضیح تصویر

در برنامه آردوینو از آدرس File/Examples میتونید کتابخانه ها رو مشاهده کنید و در بخش Basics میتونید با انتخاب Blink این پروژه رو اجرا کنید. البته نیازی هم به نصب ال ای دی نیست چون روی پین 13 به صورت پیشفرض یک عدد LED SMD قرار داره که بعد از برنامه ریزی برد شروع به چشمک زدن میکنه. در مورد کدها هم که شما برنامه نویسها از ماها خیلی بهتر متوجه میشید. پین 13 اول HIGH میشه یعنی 5 ولت و بعد LOW میشه یعنی 0 ولت. با این 0 و 1 شدن ال ای دی چشمک میزنه و اون delay ها اون وسط به میلی ثانیه هست(1000 میلی ثانیه میشه یک ثانیه) و زمان قطع بودن و وصل بودن LED رو تعیین میکنن.

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
آخرین ویرایش: 10-11-2018 ساعت 13:01، توسط Hossein-McLaren
1

بسم الله الرحمن الرحیم

سلام مجدد خدمت دوستان عزیز امروز میخوایم با کنترل موتور DC در آردوینو آشنا بشیم. آردوینو قابلیت اینو داره که پالس PWM درست کنه و برخی پایه های اون میتونن با این قابلیت دیوتی سایکل یا دوره کاری رو تغییر بدن و اینجوری میشه موتورهای استپر، موتورهای دی سی و موتورهای براشلس رو کنترل کرد و حتی میشه مثلا آلترناتور ماشینو به موتور تبدیل کرد.

توضیح تصویر

دوره کاری چیست؟ خوب ببینید وقتی شما پین خروجی اردوینو تون 5 ولت بیشتر نداره و دیجیتال هست یعنی یا صفر هست یا 1 پس نمیتونید با این روش ولتاژ رو تغییر بدید. برای این کار نیاز دارید در هر سیکلی که پالس ایجاد میکنید عرض پالستون رو کم و یا زیاد کنید و مثلا با یه ولوم هم کنترلش کنید تا بتونید با تغییر زمان 0 و 1 بودن اون پین ولتاژشو کنترل کنید.

توضیح تصویر

همونطور که میبینید با تغییر دیوتی سایکل مقدار ولتاژ تغییر میکنه و از اونجایی که شما نمیتونید همین رو مستقیما به موتور وصل کنید(چون میکرو کنترلرها محدودیت ولتاژ و جریان دارن) باید از یه ماسفت یا ترانزیستور و حتی بهتر اینکه از یه درایور موتور مثل ULN2003 و یا L298 استفاده کنید.توضیح تصویرتوضیح تصویراین درایور مثل ترانزیستور میمونه و در واقع دو تا پل H ترانزیستوری هست و شما با پالس PWM که بهش میدین اون رو روشن و خاموش میکنید و اون هم تغریبا با همون نظم ولتاژ منبع تغذیه خارجی که بهش وصل کردین(مثلا 12 ولت) رو به پالس PWM تبدیل میکنه و ولتاژ موتور شما تغییر میکنه.

توضیح تصویر

>>>دانلود فیلم آموزشی پروژه با حجم 24 مگابایت<<<

int in1 = 8;        //Declaring where our module is wired  
int in2 = 9;
int ConA = 10;     // Don’t forget this is a PWM DI/DO   
int speed1;

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);    
}



void loop() {


  digitalWrite(in1, LOW);            //Switch between this HIGH and LOW to change direction
  digitalWrite(in2, HIGH);
  speed1 = analogRead(A0);
  speed1 = speed1 * 0.2492668622;      //We read thea analog value from the potentiometer calibrate it
  analogWrite(ConA, speed1);            // Then inject it to our motor
}

دوستان اگر سوالی داشتین در خدمتم

آخرین ویرایش: 14-11-2018 ساعت 13:14، توسط Hossein-McLaren
2

ضمنا دوستان میتونین با ماسفت و درایور های دیگه مثل ای سی ULN2003 هم این کارو انجام بدین

توضیح تصویر

توضیح تصویر

توضیح تصویر

توضیح تصویر

2

بسم الله الرحمن الرحیم

امروز میخوایم با راه اندازی سروو موتور در خدمتتون باشیم.

توضیح تصویر

سروموتور(به انگلیسی: Servo motor) یا موتور کنترل(به انگلیسی: Control motor) نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستم‌های کنترل فیدبک طراحی می‌شود. لختی (اینرسی) در این موتورها پایین بوده و در نتیجه تغییر سرعت در این موتورها بسیار سریع است. سروو برگرفته از کلمه یونانی Servus به معنی خدمتکار است و شاید به این دلیل یه این نوع از موتورها و سیستم‌های کنترلی سروو گفته می‌شود که مثل یک خدمتکار تحت کنترل بوده و با دقت به فرامین پاسخ می‌دهد.

پروژه بسیار ساده ایه و کدش هم کوتاهه. شما با یه ولوم(مقدارش فرقی نداره) که پایه وسطش به پایه A1 انالوگ آردوینو وصله، زاویه بازوی سروو رو کنترل میکنید. به این شکل که آردوینو مقدار مقاومت رو میخونه و به همون نسبت به پین 9 پالس میفرسته و سنسور زاویه سروو دستور به تغییر زاویه میده.

توضیح تصویر

توضیح تصویر

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

توضیح تصویر

>>>دانلود کلیپ آموزش این پروژه<<<

آخرین ویرایش: 16-11-2018 ساعت 13:30، توسط Hossein-McLaren
2

بسم الله الرحمن الرحیم

امروز میخوایم براتون آموزش راه اندازی استپ موتور رو با استفاده از برد آردوینو و 3 نوع درایور(ULN2003 و L298 و A4988) قرار بدم.

توضیح تصویر

توضیح تصویر

خوب اول از همه استپ موتور:

موتور پله ای – Stepper Motor یکی از موتور های پرکاربرد در صنایع کوچک و کارهای کنترلی بخصوص دانش رباتیک می باشد. موتورهای پله ای در واقع نوعی از موتور الکتریکی هستند که در آنها گردش کامل رخ نداده و با توجه به نیاز تنها به میزان درجه ای خاص می چرخند. بزرگترین تفاوت ظاهری این موتور، بدون در نظر گرفتن درون آن، تعداد سیم های خروجی است که نسبت به یک موتور DC به راحتی قابل تشخیص است(بیش از 2 سیم خروجی دارد). کیفیت کاری و یا به زبان ساده تر دقیق تر بودن در موتور پله ای توسط زاویه گام(برخی مراجع آن را Stepping Angle نیز می نامند) تعیین می گردد و هرچه این عدد کوچک تر باشد موتور در زاویه های کمتری به صورت پله ای واکنش نشان می دهد، در برخی از موتورها این عدد را تا 0.60 درجه هم ذکر کرده اند که بسیار دقت بالایی میباشد. هرچند کاربرد استپر موتور ها امروزه بسیار گسترده است اما استپ موتور ها را می توان در وسایلی مانند CNC ها ، پرینتر های ۳ بعدی ( ۳D Printer ) ، پرینتر های جوهر افشان ، اسکنر ها ، پلاتر ها ، فلاپی درایو ها ، دی وی دی درایو ها ( DVD Drive ) ، لنز بعضی از دوربین های دیجیتال یافت که البته این موارد گوشه ای از کاربرد استپ موتور هاست . به طور کلی برای سیستم هایی که نیاز است موقعیت دقیق ( افقی ، عمودی ) یا زاویه دقیق را تعیین کنیم می توانیم از استپ موتور ها استفاده نماییم.

استپر موتورها دارای حداکثر گشتاور در وضعیت متوقف و قفل هستند و گشتاور آنها با افزایش سرعت شروع به کاهش می کند و اگر فرکانس موج ورودی از مقدار مشخصی بالاتر برود، گشتاور خروجی موتور به حدی کاهش می یابد که حتی قادر به چرخاندن روتور خود هم نیست. پس از نظر گشتاور مزیت استپر موتور حرکت در دورهای پائین اما با گشتاور بالاست.

توضیح تصویر

اینم اضافه کنم که استپر موتورها معمولا در دو نوع 4 سیمه و بیش از چهار سیمه تولید میشن و نوع 4 سیمه رو Bipolar و نوع 5،6،7 و 8 سیمه رو Unipolar میگن. با دقت به نقشه بالا و یه مولتی متر و تست مقاومت سیم پیچ ها میتونید با انواع درایور راه اندازیشون کنید. مهم ترین و اولین قدم برای راه اندازی این نوع موتور تشخیص نوع و ترتیب سیمهاست که اونم در ادامه توضیح خواهم داد.

اگر سوالی داشتین در خدمتم

2

راه اندازی استپر موتور با درایور A4988 و آردوینو:

توضیح تصویر

>>>دانلود ویدئو این پروژه با حجم 10 مگابایت<<<

کد پروژه اول برای حرکت دقیق استپر موتور و تست اون(یک گردش دقیق 360 درجه ساعتگرد و بعد پادساعتگرد):

const int stepPin = 4; 
const int dirPin = 3; 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

توضیح تصویر

کد پروژه دوم مربوط به کنترل سرعت استپر موتور بوسیله پتانسیومتر:

int steppin = 4;
int dirpin = 3;
int stepdelay;
void setup() {
  pinMode(steppin, OUTPUT);
  pinMode(dirpin, OUTPUT);
  digitalWrite(dirpin, HIGH); // direction pin either LOW or HIGH to move in either direction.

}

void loop() {
  int val = analogRead(A0);
  stepdelay = map(val,0,1023,1,1000);
  digitalWrite(steppin, HIGH);
  delayMicroseconds(stepdelay);
  digitalWrite(steppin, LOW);
  delayMicroseconds(stepdelay);

}
2

بسم الله الرحمن الرحیم

راه اندازی استپر موتور با ماژول L298 و آردوینو :

توضیح تصویر

توضیح تصویر

در تصاویر بالا پایه ها و جامپر های مربوطه رو مشاهده میکنید. توضیح پایه ها و جامپرها:

1--> خروجی اول استپر موتور(+)

2--> خروجی اول استپر موتور(-)

3--> جامپر مربوط به رگلاتور(در صورتی که ولتاژ اعمالی به ماژول بیش از 12 ولت بود اینو بردارید چون رگلاتور داخلی ماژول رو فعال میکنه)

4--> اتصال + منبع تغذیه جهت تغذیه موتور تا 35 ولت(اگر بیش از 12 ولت بود جامپری که گفتم رو بردارید)

5-->زمین(GND)

6--> خروجی 5 ولت جهت تغذیه(البته اگر جامپر بالا وصل باشه)

7--> موتور 1 فعال(اگر استپ موتور میبندین مثل همین پروژه که بذارید جامپرش بمونه وگرنه برای موتور DC با پالس PWM کنترلش میکنن)

8،9،10 و11--> به پایه های همنام آردوینو جهت اعمال پالس PWM

12--> موتور 2 فعال(مثل 7 بذارید جامپرش بمونه)

13-->خروجی دوم استپر موتور(+)

14-->خروجی دوم استپر موتور(-)

مسیر دسترسی به کد در نرم افزار آردوینو:

توضیح تصویر

>>>لینک یوتیوب تست این پروژه<<<


/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}
1

بسم الله الرحمن الرحیم

اینبار میخوایم راه اندازی موتورها از جمله استپر موتور رو با آی سی ULN2003 آموزش بدیم.

توضیح تصویر

توضیح تصویر

همونطور که میبینید پین ها و پایه هایی که باید وصل کنید مشخصه و کدش هم مثل همون L298 هست و اینم بگم که بر خلاف L298 که روی ماژولش دیود هرزگرد داشت این آی سی نیاز به دیود هرزگرد نداره چون خودش داخل خودش داره(دیود هرزگرد دیودی هست که از آی سی و ترانزیستورش در برابر جریان معکوس موتور محافظت میکنه).


/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید