Nội Dung Bài Viết
Hôm nay tôi sẽ hướng dẫn các bạn làm thế nào thiết kế giao diện MATLAB và lập trình Arduino điều khiển tốc độ động cơ DC. Trong bài này, Điều khiển động cơ DC bằng việc gửi các lệnh điều khiển từ MATLAB đến Arduino thông qua Serial port. Chúng ta điều khiển tốc độ động cơ bằng cách sử dụng chân PWM trên Arduino thông qua mạch điều khiển L298.
Những bài viết trước đây, tôi có hướng dẫn thiết kế giao diện GUI MATLAB qua một số chương trình đơn giản. Các bạn có thể tìm xem thêm.
Sơ đồ kết nối
Trước hết chúng ta phải kết nối phần cứng, giữa Arduino với cầu H L298 và Động cơ DC. Kết nối sơ đồ phần cứng như hình dưới.
Bây giờ, trong hướng dẫn này, tôi sẽ giải thích cho bạn làm thế nào gửi các lệnh khác nhau thông qua cổng nối tiếp từ Matlab đến Arduino. Tôi sẽ tạo ra một GUI đơn giản gồm các button khác nhau thông qua đó điều khiển động cơ: chiều quay, tốc độ.
Thiết kế giao diện GUI MATLAB
- Trước hết tạo một GUI rất đơn giản (Giao diện người dùng đồ họa) trong Matlab.
- GUI có 2 phần điều khiển các nhau: phần Serial port và phần điều khiển động cơ.
- Serial port có 2 button để mở và đóng serial.
- Phần điều khiển động cơ có 3 nút nhấn điều khiển quay cùng chiều kim đồng hồ, quay ngược chiều đồng hồ, dừng động cơ và một slider điều khiển tốc độ và một text để hiển thị trạng thái động cơ.
GUI MATLAB điều khiển tốc độ động cơ DC thông qua giao tiếp Serial port giữa MATLAB và Arduino sẽ được thiết kế giống như hình dưới đây:
Các bạn có thể tùy chỉnh các đối tượng trong giao diện GUI MATLAB để có một giao diện đẹp hơn.
Tiếp theo chúng ta sẽ cập nhật các lệnh điều khiển cho các đối tượng tương điều khiển tương ứng.
Thêm các câu lệnh cho GUI
Trước hết chúng ta thêm các câu lệnh để mở serial port bằng cách click vào đối tượng Connect.
Đi tới function Callback của button Connect trong GUI MATLAB.
Chỉ cần chèn đoạn code sau đây vào khu vực function Callback của đối tượng này.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | clc global arduino; port=get(handles.C_Port,'string'); port=strcat('COM',port); arduino=serial(port); set(arduino, 'BaudRate', 9600); % set BaudRate to 9600 set(arduino, 'Parity', 'none'); % set Parity Bit to None set(arduino, 'DataBits', 8); % set DataBits to 8 set(arduino, 'StopBit', 1); % set StopBit to 1 disp(get(arduino,{'Type','Name','Port','BaudRate','Parity','DataBits','StopBits'})); fopen(arduino); % Open Serial Port Object disp('Serial port is opened'); set(handles.text4, 'String','Serial port is opened'); |
Bây giờ trong giao diện GUI bạn nhập COM của Arduino vào edit text C_Port rồi nhấn Connect cổng Serial sẽ được mở.
Tiếp đến thêm câu lệnh điều khiển cho đối tượng đóng Serial port. Đi đến function Callback của button Disconnect và thêm đoạn lệnh dưới đây vào.
1 2 3 4 | global arduino; fclose(arduino); disp('Serial port is closed'); set(handles.text4, 'String','Serial port is closed'); |
Bây giờ các bạn nhấn vào button Disconnect, Cổng serial sẽ được đóng.
Tiếp theo chúng ta thêm câu lệnh điều khiển quay theo chiều kim đồng hồ bằng cách đi đền function callback button Clockwise. Chèn vào khu vực function đó đoạn câu lệnh sau:
1 2 3 4 5 | global arduino fwrite(arduino,'T'); %Print character ‘a’ to the serial port pause(1); disp('Charater sent to Serial Port is “T”.'); set(handles.text4, 'String','Motor is rotating in clockwise direction'); |
Bây giờ, khi bạn nhấn vào button Clockwise, MATLAB sẽ gửi câu lệnh kích hoạt cho động cơ quay theo chiều kim đồng hồ.
Kế tiếp nữa thêm câu lệnh cho button điều khiển quay ngược chiều đồng hồ. Đi đến function callback của button Anti Clockwise và chèn đoạn câu lệnh sau vào function.
1 2 3 4 5 | global arduino fwrite(arduino,'N'); %Print character ‘a’ to the serial port pause(1); disp('Charater sent to Serial Port is “N”.'); set(handles.text4, 'String','Motor is rotating in Anti-clockwise direction'); |
Bây giờ, khi nhấn vào button Anti Clockwise, MATLAB gửi câu lệnh cho Arduino điều khiển động cơ quay ngược chiều đồng hồ qua cổng Serial.
Tiếp đến chúng ta thêm câu lệnh cho button Stop làm nhiệm vụ dừng động cơ. Tượng tự như các button trước đó, đi đến fucntion callback của button Stop và thêm đoạn lệnh điều khiển sau.
1 2 3 4 5 | global arduino fwrite(arduino,'S'); %Print character ‘a’ to the serial port pause(1); disp('Charater sent to Serial Port is “S”.'); set(handles.text4, 'String','Motor is stopped'); |
Bây giờ, khi nhấn vào button Stop động cơ sẽ dừng.
Cuối cùng, chúng ta thêm câu lệnh cho slider điều khiển tốc độ động cơ. Giống như đã làm với các đối tượng button, đi đến khu vực function của slider mà tôi đã đặt tên tag là speed và chèn đoạn lệnh dưới vào.
1 2 3 4 5 6 | global arduino speed_motor=round(get(hObject,'Value'),0); fwrite(arduino,num2str(speed_motor)); %Print character ‘a’ to the serial port pause(1); disp(strcat('Speed Motor is ',num2str(speed_motor))); set(handles.text4, 'String',strcat('Speed Motor is ', num2str(round(speed_motor*(100/255),0)))); |
Bây giờ, khi chúng ta kéo thay đổi giá trị của slider từ 0 đến 255 ( min:0, max:255) thì MATLAB sẽ gửi câu lệnh thay đổi tốc độ động cơ trong phạm vi ấy. Và hiển thị ra text trạng thái tương ứng từ 0 đến 100%.
Như vậy chúng ta vừa hoàn thành thiết kế giao diện GUI MATLAB điều khiển động cơ DC.
Chạy và kiểm tra chương trình
Trước hết muốn chạy được chương trình các bạn cần có code giao diện GUI MATLAB và code Arduino. Các bạn download code Arduino điều khiển động cơ DC sử dụng MATLAB qua giao tiếp serial tại đây nhé.
Sau khi download code, các bạn cắm boarđ Arduino vào máy tính và nạp code chương trình cho Arduino.
Sau đó, các bạn RUN giao diện GUI MATLAB thiết kế điều khiển động cơ DC và nhập cổng COM của Arduino. Rồi nhấn vào button Connect để mở cổng serial.
Bây giờ các bạn thử điều khiển động cơ thông qua các nút nhấn.
Chúc các bạn thành công!
Download file
Bài viết các bạn có thể tham khảo:
- Tài liệu giao tiếp Arduino và Matlab (Matlab-Arduino Communication)
- Đoạn code matlab thiết lập giao tiếp Arduino qua cổng serial
- Tài liệu lập trình Arduino sử dụng Matlab