Giới thiệu thư viện RobotMove - Thư viện điều khiển Xe, Robot di chuyển sử dụng module L298

Xin chào mọi người! Mình cảm thấy rằng việc điều khiển cho robot hay xe sử dụng module L298 di chuyển hơi rắc rối, bởi phải điều khiển tới 4 chân, chi tiết hơn thì tới 6 chân (Thêm 2 chân enA và enB). Với lại mình cũng mới học viết thư viện nên mình đã nảy ra ý tưởng viết thư viện này. Mình bắt tay vào gõ và gõ và gõ và cuối cùng cũng thành công. Ohhhh Zeeeeee. Mừng quá nên share cho anh em xem. Đây là thư viện đầu tiên của mình và mình chỉ mới học cơ bản nên có gì sai sót mong các bác Pro đóng góp cho.

Tìm hiểu về thư viện

Trước tiên là tải thư viện về. Tải về tại đây hoặc tại đây.

Lưu ý

MÌNH NÓI TRƯỚC LUÔN LÀ THƯ VIỆN NÀY CHỈ ĐỂ ĐIỀU KHIỂN ROBOT HAY XE DI CHUYỂN SỬ DỤNG MODULE L298 (HOẶC MODULE 2 MOTOR TƯƠNG TỰ). THƯ VIỆN NÀY KHÓ CÓ THỂ SỬ DỤNG CHO VIỆC ĐIỀU KHIỂN MOTOR ĐƠN THUẦN.

Thư viện của mình có tên là RobotMove. Cấu trúc của nó thì rất đơn giản. Thư viện bao gồm một số hàm sau:

  • Hàm khai báo(Bắt buộc):

Cấu trúc

RobotMove "Tên Thiết bị"(in1,in2,in3,in4,enA,enB);

Nếu bạn không muốn điều khiển tốc độ động cơ thì ghi enA và enB đều bằng 0.

  • Một số hàm điều khiển:
"Tên thiết bị".dung();
"Tên thiết bị".tien();
"Tên thiết bị".lui();
"Tên thiết bị".reTrai();
"Tên thiết bị".rẹPhai();
"Tên thiết bị".luiTrai();
"Tên thiết bị".luiPhai();
"Tên thiết bị".xoayTrai();
"Tên thiết bị".xoayPhai();
"Tên thiết bị".tienPWM(speed);
"Tên thiết bị".luiPWM(speed);
"Tên thiết bị".reTraiPWM(speed);
"Tên thiết bị".rẹPhaiPWM(speed);
"Tên thiết bị".luiTraiPWM(speed);
"Tên thiết bị".luiPhaiPWM(speed);
"Tên thiết bị".xoayTraiPWM(speed);
"Tên thiết bị".xoayPhaiPWM(speed);

Speed chính là tham số băm xung (0-255).

Một điều lưu ý nữa đó là các bạn phải mắc cực + motor trái vào OUT3 (cực - vào OUT4). Mắc cực + motor phải vào OUT2 (cực - vào OUT1). (Trái và phải ở đây là nhìn từ phía sau của robot, xe nha. Nhìn phía trước là khác nha). CÁC BẠN PHẢI MẮC NHƯ VẬY THÌ MỚI ĐÚNG NHA, MẮC KHÁC ĐIỀU KHIỂN SAI ĐÓ.

Đây là code của thư viện

File RobotMove.h

/*Create By Huynh Duc Nham
   *Date: 18-7-2016
   *Thanks For Using
*/
#ifndef RobotMove_h
#define RobotMove_h
#include "Arduino.h"
class RobotMove
{
  public:
  RobotMove(int in1, int in2, int in3, int in4, int enA, int enB);
  void dung();
  void tien();
  void lui();
  void xoayTrai();
  void xoayPhai();
  void reTrai();
  void rePhai();
  void luiTrai();
  void luiPhai();
  void tienPWM(int speed);
  void luiPWM(int speed);
  void xoayTraiPWM(int speed);
  void xoayPhaiPWM(int speed);
  void reTraiPWM(int speed);
  void rePhaiPWM(int speed);
  void luiTraiPWM(int speed);
  void luiPhaiPWM(int speed);
  private:
  int _in1;
  int _in2;
  int _in3;
  int _in4;
  int _enA;
  int _enB;
  int _speed;
};
#endif

File RobotMove.cpp

/*Create By Huynh Duc Nham
   *Date: 18-7-2016
   *Thanks For Using
*/
#include "Arduino.h"
#include "RobotMove.h"
RobotMove::RobotMove(int in1, int in2, int in3, int in4, int enA, int enB)
{
  if(enA!=0) pinMode(enA,OUTPUT);
  if(enB!=0) pinMode(enB,OUTPUT);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  _in1=in1;
  _in2=in2;
  _in3=in3;
  _in4=in4;
  _enA=enA;
  _enB=enB;
}
void RobotMove::dung()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,0);
}
void RobotMove::tien()
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,255);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::lui()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enA!=0)
    analogWrite(_enA,255);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::xoayTrai()
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enA!=0)
    analogWrite(_enA,255);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::xoayPhai()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,255);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::reTrai()
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,255);
}
void RobotMove::rePhai()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,0);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::luiTrai()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enB!=0)
    analogWrite(_enB,255);
}
void RobotMove::luiPhai()
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,0);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,255);
}
void RobotMove::tienPWM(int speed)
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,speed);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::luiPWM(int speed)
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enA!=0)
    analogWrite(_enA,speed);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::xoayTraiPWM(int speed)
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enA!=0)
    analogWrite(_enA,speed);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::xoayPhaiPWM(int speed)
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,speed);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::reTraiPWM(int speed)
{
    digitalWrite(_in1,1);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,speed);
}
void RobotMove::rePhaiPWM(int speed)
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,0);
    digitalWrite(_in3,1);
    digitalWrite(_in4,0);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::luiTraiPWM(int speed)
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,0);
    digitalWrite(_in3,0);
    digitalWrite(_in4,1);
    if(_enB!=0)
    analogWrite(_enB,speed);
}
void RobotMove::luiPhaiPWM(int speed)
{
    digitalWrite(_in1,0);
    digitalWrite(_in2,1);
    digitalWrite(_in3,0);
    digitalWrite(_in4,0);
    if(_enA!=0)
    analogWrite(_enA,speed);
}

Vậy là được rồi ha. Bây giờ tải thư viện về và thực hành nào!

Ví dụ thực hành

Phần cứng là một con xe lắp motor như đã nói ở trên.

Code đây:

#include <RobotMove.h>
RobotMove myRobot(6,7,8,9,0,0);
void setup()
{
}
void loop()
{
  myRobot.tien();
  delay(2000);
  myRobot.lui();
  delay(2000);
}

Tải về thư viện RobotMove ở đây.

Ngoài ra trong thư viện còn 1 ví dụ về băm xung điều khiển tốc độ nữa. Các bạn có thể vào đó xem.

Cảm ơn mọi người đã theo dõi. Có sai sót gì thì đóng góp giùm nha. Thấy hay thì cho thêm cái Rate Note. Cảm ơn!

lên
22 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

iNut cảm biến - Bài 2: Tự tạo webapp điều khiển thiết bị IoT

Xin chào các bạn, ở bài số 1, mình đã giới thiệu về mọi thứ cơ bản của iNut cảm biến, qua đó các bạn cũng đã nắm được các khái niệm về IoT cũng như cách sử dụng iNut cảm biến cơ bản. Tiếp nối seri, hôm nay mình sẽ giới thiệu về giao thức MQTT và cách tạo một cái webapp đơn giản để điều khiển và theo dõi nha.

lên
5 thành viên đã đánh giá bài viết này hữu ích.

Lập trình Arduino không cần viết code - Phần 6: Điều khiển led bằng nút nhấn kiểu 2

Đây là phần 6 của chuỗi bài viết "Lập trình arduino không cần viết code".

- Xem lại phần 5 tại đây

​Ở phần trước, mình đã hướng dẫn lập trình điều khiển led bằng nút nhấn kiểu 1, tuy nhiên kiểu này có 1 điểm yếu là giữ nút thì mới sáng led. Và ở phần này, mình sẽ nói đến kiểu 2 khắc phục nhược điểm trên. Tuy nhiên có thể nó cũng không phải là nhược điểm nếu như bạn cần nó vào 1 việc gì đó.

lên
27 thành viên đã đánh giá bài viết này hữu ích.