Hướng dẫn arduino xoay chiều mô tơ
Chào các bạn, bài viết này sẽ hướng dẫn các bạn cách ứng dụng Transistor và Diode để điều khiển động cơ DC, rơ le. Show Nội dung
Phần cứng
Giới thiệu linh kiệnTransistorTransistor là 1 linh kiện cho phép chúng ta điều khiển dòng điện có cường độ lớn hơn mức cho phép của Arduino (tối đa 40mA mỗi chân Digital). Cấu tạo
Có 2 loại Transistor là PNP và NPN tương ứng với 2 cách sắp xếp 3 lớp bán dẫn. Trong bài này mình sử dụng Transistor loại NPN là N2222. Mỗi loại Transistor có sơ đồ chân khác nhau, do đó, khi sử dụng 1 loại Transistor nào đó (VD:C1815, BC548...) bạn nên tìm đọc datasheet của nó (trên google) để sử dụng chính xác. Nguyên lý hoạt động Để đơn giản, chúng ta xem Transistor như 1 công tắc bình thường. Đối với Transistor NPN, khi một dòng điện có cường độ nhỏ (như chân digital của Arduino) được cấp vào chân Base, Transistor sẽ cho phép dòng điện đi từ chân Collector đến chân Emitter (theo chiều mũi tên trên kí hiệu). Khi chân Base không còn được cấp điện (ở mức LOW), sẽ không có dòng điện chạy qua transitsor.
Diode (đi-ốt)Diode là 1 linh kiện rất đơn giản, nó chỉ cho phép dòng điện đi qua theo 1 chiều (từ anot đến catot). Trong bài viết này mình sử dụng Diode N4007 để bảo vệ các linh kiện trong mạch khỏi bị hư hỏng do dòng điện cảm ứng phát sinh khi motor, rơle, ...hoạt động. Dòng điện cảm ứng có chiều ngược với chiều dòng điện trong mạch, do đó gây hại cho các thiết bị điện trong mạch vốn chỉ hoạt động với một chiều dòng điện nhất định. Ứng dụng Transistor và DiodeChúng ta sẽ sử dụng Transistor và Diode để điều khiển motor DC vì:
Lắp mạch
Lập trìnhconst int motor = 6; // khai báo chân PWM điều khiển motor const int button = 8; // khai báo chân đọc nút bấm boolean oldState = 0; // trạng thái của nút bấm int time; // biến lưu thời gian boolean state = 0; int speedMotor = 0; // biến lưu giữ tốc độ của motor void setup() { Serial.begin(9600); // giao tiếp Serial với 9600 baudrate. pinMode(motor,OUTPUT); pinMode(button,INPUT); } void loop() { if (digitalRead(button) != oldState) { // kiểm tra thay đổi trạng thái nút bấm time = millis(); // reset lại bộ timer khi nút bấm thay đổi trạng thái } state = digitalRead(button); // đọc giá trị nút bấm int duration = millis() - time; // đo thời gian duy trì trạng thái hiện tại duration = constrain(duration,0,5000); // 0 <= duration <= 5000 ms. if (state == 1) { //nếu đang nhấn nút speedMotor = map(duration,0,5000,0,255); analogWrite(motor,speedMotor); // xuất xung PWM để điều khiển tốc độ motor // duty cycle càng lớn thì motor quay càng nhanh delay(500); } Serial.println(speedMotor); // in ra Serial monitor giá trị tốc độ oldState = state; // cập nhật trạng thái nút bấm. }Giải thích
Lời kết
|