آموزش آردوینوپروژه های آردوینو

دستگاه پخش خمیر لحیم با آردوینو

زمانی که شما در برد خود از قطعات SMD استفاده میکنید، کار با خمیر لحیم بسیار مهم است. در شرکت های بزرگ از شابلون های SMD استفاده میشود اما اگر در یک کارگاه یا شرکت کوچک فعالیت میکنید، استفاده از خمیر لحیم ممکن است چالش برانگیز باشد. بنابراین ما در این آموزش نحوه ساخت دستگاه پخش خمیر لحیم با زبان آردوینو را آموزش میدهیم.

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

نحوه کار دستگاه پخش خمیر لحیم

عملکرد دستگاه پخش کننده خمیر لحیم کاری بسیار ساده است. ما از یک موتور DC مینیاتوری با گیربکس برای پخش خمیر لحیم از سرنگ استفاده خواهیم کرد. موتور با یک چیپ درایور موتور کارآمد از نوع DRV8833 هدایت می شود. مغز این دستگاه ATMEGA328P خواهد بود که با آردوینو کد نویسی میشود. یک صفحه نمایش OLED به همراه دکمه های فشاری برای پیکربندی و عملکرد آسان در برد قرار داده شده است.

قطعات مورد نیاز ساخت دستگاه پخش خمیر لحیم

تمام قطعاتی که برای ساختن دستگاه پخش خمیر لحیم نیاز دارید در زیر فهرست شده است.

  • میکرو کنترلر Atmega328P-AU AVR
  • آی سی درایور موتور DRV8833
  • صفحه نمایش OLED 128×32
  • موتور DC گیربکس N20 با شفت پیچ بلند
  • 5* سوئیچ های لمسی SMD
  • کلید روشن/خاموش
  • مقاومت های SMD، خازن ها، دیودها، LED ها (همه پکیج 0603 هستند)
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

فایل های تمام قطعات پرینت سه بعدی در فایل دانلودی انتهای صفحه قرار داده شده است. توصیه می شود برای کیفیت و استحکام بهتر قطعات را با پرکننده با کیفیت چاپ کنید.

مدار پخش کننده خمیر لحیم

شماتیک مدار کامل برای دستگاه پخش کننده خمیر لحیم کاری در زیر نشان داده شده است.

مدار پخش کننده خمیر لحیم 

مدار ساده و قابل درک است. همانطور که قبلاً ذکر شد، کنترل‌کننده‌ای که ما از آن استفاده می‌کنیم یک میکروکنترلر AVR از نوع 8 بیتی ATMEGA328P است. همچنین می توانید به جای آن از ATMEGA168 نیز استفاده کنید (البته کمی تغییر در کد لازم میشود).

ابعاد PCB پخش کننده خمیر لحیم کاری

یک پورت میکرو USB هم برای تغذیه برق و هم برای انتقال کد های برنامه نویسی استفاده می شود. VCC از پورت micro-USB به یک سوئیچ کشویی داده می شود. از این کلید برای روشن و خاموش کردن دستگاه استفاده می شود. یک LED پاور برای نشان دادن وضعیت برق ورودی قرار داده شده است. خطوط داده از میکرو USB به مبدل CH340C USB به UART متصل می شوند. یک پورت ISP استاندارد 6 پین نیز به عنوان یک راه جایگزین برای برنامه نویسی ATMEGA328 یا نصب بوت لودر در صورتی که میکروکنترلر بدون آن باشد، قرار داده شده است. اگر تازه کار هستید، می توانید آموزش نصب بوت لودر آردوینو را مشاهده کنید.

PCB دستگاه پخش خمیر لحیم کاری

مدار های متصل به ATMEGA328 با حداقل اجزای کمکی مانند خازن های بای پس و مدار تنظیم مجدد کاملاً استاندارد هستند. یک LED دیباگ به پین PB5 (Arduino Pin D13) وصل شده است. بخش نمایشگر شامل ماژول OLED 0.96 اینچی به همراه تمام اجزای لازم است. یک رگولاتور 3.3 ولت برای تغذیه ماژول OLED گنجانده شده است. سوئیچ ها به پایه های PB0، PB1، PB2 و PD4 (به ترتیب پایه های آردوینو D8، D9، D10 و D4) متصل می شوند.

از آنجایی که ما فقط از یک فاز درایور موتور استفاده می کنیم، برای کنترل DRV883 فقط به دو پایه نیاز داریم. پایه های AIN1 و AIN2 به پایه های PD5 و PD6 میکروکنترلر ATMEGA328 متصل می شوند. موتور به پین های AOUT1 و AOUT2 تراشه DRV8833 متصل است. شکل نهایی دستگاه پخش خمیر لحیم کاری در زیر نشان داده شده است:

شکل نهایی دستگاه پخش خمیر لحیم

کد آردوینو دستگاه خمیر لحیم کاری

کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را توضیح میدهیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

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

#include <U8g2lib.h>  //U8g2 Library for the SSD1306 OLED
#include <Arduino.h>
#include <EEPROM.h>
//Define switch pins
#define SW4 4
#define SW3 10
#define SW2 9
#define SW1 8
//Define debug LED Pin
#define ledPin 13
//Define DRV8833 motor driver pins
#define AIN1 5
#define AIN2 6
//Define Global Variables
int Mode = 0;
int Dtime;
int Htime;
int screenrotation = 0;
unsigned long presstime = 0;
// U8g2 Instance for OLED
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R2, /* clock=*/SCL, /* data=*/SDA, /* reset=*/U8X8_PIN_NONE);

در تابع Setup، تمام پین های مورد نیاز را با نقش های مربوطه مقداردهی اولیه کرده ایم. پس از اتمام کار، پین های کنترل DRV8833 را روی سطح منطقی LOW قرار میدهیم تا مطمئن شویم موتور خاموش است. بعداً مقادیر زمان‌های پخش و… را از EEPROM می‌خوانیم. این کار باعث می شود که آخرین مقادیر ذخیره شده حتی پس از قطع برق حفظ شوند. سپس با فراخوانی تابع menu پس از مقداردهی اولیه کلاس OLED، صفحه اصلی OLED را نمایش میدهیم.

void setup() {
  //initialize pins
  pinMode(ledPin, OUTPUT);
  pinMode(SW1, INPUT_PULLUP);
  pinMode(SW2, INPUT_PULLUP);
  pinMode(SW3, INPUT_PULLUP);
  pinMode(SW4, INPUT_PULLUP);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  //set motor driver to off during startup
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, LOW);
  //Get saved data from EEPROM
  Dtime = get_String(0, 1).toInt();
  Htime = get_String(5, 6).toInt();
  screenrotation = EEPROM.read(10);
  //initialize OLED and display the menu for first time
  u8g2.begin();
  u8g2.setFlipMode(screenrotation);
  u8g2.clearBuffer();
  menu(Mode);
  u8g2.sendBuffer();
}

تابع menu مسئول ترسیم عناصر رابط کاربری گرافیکی به صفحه نمایش OLED است. این تابع حالت فعال فعلی را بررسی می کند و رابط کاربری گرافیکی را برای حالت مربوطه ترسیم می کند.

void menu(int n) {
  //Draw main UI
  u8g2.drawLine(0, 21, 128, 21);
  u8g2.drawLine(0, 22, 128, 22);
  u8g2.drawLine(0, 23, 128, 23);
  switch (n) {
    case 0:
      u8g2.setFont(u8g2_font_baby_tf);
      u8g2.setCursor(5, 18);
      u8g2.print("Dispense Time");
      u8g2.drawDisc(32, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(53, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(75, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(96, 28, 3, U8G2_DRAW_ALL);
      u8g2.setFont(u8g2_font_tenthinnerguys_tf);
      u8g2.setCursor(75, 18);
      u8g2.print(Dtime);
      u8g2.print("ms");
      break;
    case 1:
      u8g2.setFont(u8g2_font_baby_tf);
      u8g2.setCursor(23, 14);
      u8g2.print("Continuous Dispense");
      u8g2.drawCircle(32, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawDisc(53, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(75, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(96, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawBox(8, 8, 9, 9);
      u8g2.drawTriangle(110, 7, 110, 16, 118, 12);
      break;
    case 2:
      u8g2.setFont(u8g2_font_baby_tf);
      u8g2.setCursor(22, 14);
      u8g2.print("  Continuous Retract");
      u8g2.drawCircle(32, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(53, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawDisc(75, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(96, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawBox(8, 8, 9, 9);
      u8g2.drawTriangle(110, 7, 110, 16, 118, 12);
      break;
    case 3:
      u8g2.setFont(u8g2_font_baby_tf);
      u8g2.setCursor(5, 18);
      u8g2.print("Retract Time");
      u8g2.drawCircle(32, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(53, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawCircle(75, 28, 3, U8G2_DRAW_ALL);
      u8g2.drawDisc(96, 28, 3, U8G2_DRAW_ALL);
      u8g2.setFont(u8g2_font_tenthinnerguys_tf);
      u8g2.setCursor(75, 18);
      u8g2.print(Htime);
      u8g2.print("ms");
      break;
  }
}

تابع Motor همراه با تابع های MotorD و MotorH وظیفه هدایت موتور گیربکس N20 را بر عهده دارد. این تابع ها پین های کنترلی DRV8833 را برای کنترل جهت و سرعت موتور دستکاری می کنند.

    digitalWrite(AIN1, LOW);
    digitalWrite(AIN2, LOW);
  } else if (n == 1) {
    digitalWrite(AIN1, LOW);
    digitalWrite(AIN2, HIGH);
  } else if (n == 2) {
    digitalWrite(AIN1, HIGH);
    digitalWrite(AIN2, LOW);
  }
}
void MotorD() {
  Motor(1);
  delay(Dtime);
  Motor(0);
}
void MotorH() {
  Motor(2);
  delay(Htime);
  Motor(0);
}

تابع set_String و get_String ذخیره و خواندن مقادیر حافظه EEPROM آردوینو استفاده میشود. این توابع از کلاس های  EEPROM.write و EEPROM.read استفاده میکنند.

void set_String(int a, int b, String str) {
  EEPROM.write(a, str.length());
  for (int i = 0; i < str.length(); i++) {
    EEPROM.write(b + i, str[i]);
  }
}
String get_String(int a, int b) {
  String data = "";
  for (int i = 0; i < EEPROM.read(a); i++) {
    data += char(EEPROM.read(b + i));
  }
  return data;
}

تابع loop اصلی وضعیت همه دکمه ها را کنترل می کند. هنگامی که فشار یک کلید شناسایی شود، میکروکنترلر عملکرد مربوطه را اجرا می کند. می توانید از SW2 برای تغییر حالت ها استفاده کنید و دکمه های SW1 و SW3 نیز مقادیر را تغییر می دهند. سوئیچ متصل به پورت BTN وظیفه پخش خمیر لحیم کاری را بر عهده دارد. هنگامی که این کلید فشار داده می شود، میکروکنترلر موتور را برای بازه زمانی تنظیم شده فعال می کند.

ما در اینجا از دو متغیر استفاده می کنیم. یکی زمان dispensing و دیگری retracting  است. متغیر dispensing زمان پخش را نشان می دهد یعنی مدت زمانی که موتور در جهت جلو حرکت می کند تا پیستون را به حرکت درآورد و خمیر لحیم کاری را پخش کند. وقتی خمیر لحیم شروع به پخش کرد، باید موتور را به صورت معکوس فعال کنیم تا از پخش بیش از حد خمیر جلوگیری کنیم. این کار با تنظیم متغیر retracting کنترل می شود. می توانید این مقادیر را هر طور که میخواهید با توجه به قطعاتی که دارید تنظیم کنید. حالت های 2 و 3 را می توان برای حرکت پیستون به جلو یا عقب یا تنظیم روی حالت تکرار مداوم قرار داد.

موارد موجود در فایل : سورس کامل و فایل قطعات سه بعدی

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *