4.3.1 Chỉ Sử dụng bộ điều khiển PID kết hợp với cảm biến quang
Mã Lập Trình
Thêm thư viện của cảm biến quang và khai báo số cặp thu phát là 8, tạo một mảng kiểu unsigned int có 8 phần tử.
<QTRSensors .h>^^^^^^^H
QTRSensors qtr ^^^^^^^^^^^^^^B
const uint8_t SensorCount = 8 J ^^J
uint16_t sensorValues[SensorCount];
Khai báo hằng số và các đại lượng của bộ điều khiển PID.
float Kp = ; float Ki = ; float Kd = ; int P; int I; int D;
Khai báo biến lastError để cập nhật đại lượng Derivative, đặt cờ onoff xác định trạng thái hoạt động của xe.
int lastError = 0; boolean onoff =
Khai báo hằng số thể hiện tốc độ của động cơ, vì ta cấp nguồn 7.4V nên duty cycle ở mức 150 sẽ tạo ra điện áp trung bình tối đa là 6V giúp động cơ không bị gây hại.
//Increasing the maxspeed can damage the motors - at a value of 255 the 6V motors will receive 7,4 V
const uint8_t maxspeeda = 150; const uint8_t maxspeedb = 150; const uint8_t basespeeda = 10' ;
const uint8_t basespeedb = 10' ;________________________________________________________
//Set up the drive motor carrier pins
int mode = ; int aphase = 9; int aenbl = (; int bphase = 5; int benbl = 3; void setup() { Serial.begin(960 ); qtr.setTypeRC();
//Set up the sensor array pins
qtr.setSensorPins((const uint8_t[]){ , 11, 12, 13, A0, A1, A2, A3}, SensorCount); qtr.setEmitterPin(9);//LEDON PIN pinMode(mode, OUTPUT); pinMode(aphase, OUTPUT); pinMode(aenbl, OUTPUT); pinMode(bphase, OUTPUT); pinMode(benbl, OUTPUT);
digitalWrite(mode, HIGH); //mode của mạch lái động cơ là Phase/Enable delay(500);
pinMode(LED_BUILTIN, OUTPUT); boolean Ok = fals< ;
while (Ok == false) { //the loop won't start until the robot is calibrated ii(digitalRead(buttoncalibrate) == HIGH) {
calibration(); //calibrate the robot for 10 seconds Ok = true;
} }
forward_brake( , 0);
Hàm hiệu chỉnh cho vị trí cảm biến ln ở giữa line.
Khai báo các chân của vi điều khiển để lái động cơ thông qua driver TB6612.
void calibration() {
digitalWrite(LED_BUILTIN, HIGH);
for (uint16_t i = 0; i < 401; i++)
{
qtr.calibrate(); }
digitalWrite(LED_BUILTIN, LOW);
}
Bên trong hàm lặp chỉ cần gọi hàm PID_control(); chứa tồn bộ thuật tốn điều khiển PID
void loop() {
if(digitalRead(buttonstart) == HIGH) {
onoff =! onoff;
if(onoff = tru ) {
delay(L00i );//a delay when the robot starts
} else { delay(50); _ } } if (onoff == tru ) { pID_control(); } else { forward_brake( , ); } } ____________________________________________________ void forward_brake(int posa, int posb) {
//set the appropriate values for aphase and bphase so that the robot goes straight
digitalWrite(aphase, LOW); digitalWrite(bphase, HIGH); analogWrite(aenbl, posa); analogWrite(benbl, posb);
Hàm chứa bộ điều khiển PID, có thể thấy đầu tiên tại một biến unsgined int để lấy giá trị của cảm biến.
Biến error bằng giá trị setpoint trừ đi vị trí hiện tại, việc gọi hàm này trong vịng lặp sẽ được cập nhật giá trị error nhiều lần.
Cập nhật các đại lượng PID, gán lastError bằng error lúc này giá trị Error trước đó đã được lưu trữ và sử dụng cho lần gọi hàm tiếp theo.
Lúc này sẽ có 2 giá trị lưu giá trị PWM để điều khiển động cơ được tính từ phương trình tốc độ động cơ và các câu lệnh điều kiện để xét các giới hạn giá trị cho động cơ.
Cuối cùng là truyền giá trị vào hàm forward brake(int, int) để thay đổi tốc độ động cơ.
void PID_control() {
uint16_t position = qtr.readLineBlack(sensorValues); int error = 3500 - position;
p = error; I = I + error;
D = error - lastError;
lastError = error;
int motorspeed = P*Kp + I*Ki + D*Kd;
int motorspeeda = basespeeda + motorspeed; int motorspeedb = basespeedb - motorspeed;
if (motorspeeda > maxspeeda) { motorspeeda = maxspeeda; } if (motorspeedb > maxspeedb) { motorspeedb = maxspeedb; } if (motorspeeda < 0) { motorspeeda = 0; } if (motorspeedb < 0) { motorspeedb = 0; } //Serial.print(motorspeeda);Serial.print(" ");Serial.println(motorspeedb); forward_brake(motorspeeda, motorspeedb); } 4.3.2 Kết hợp hệ thống dò line và xử lý ảnh
Huấn luyện và phân loại hình ảnh tín hiệu giao thơng sử dụng Mạng nơ-ron liên hợp (Convolutional neural networks), điều này sẽ được thực hiện trên thời gian thực sử dụng một webcam để lấy hình ảnh. CNN đã trở nên phổ biến trong vài năm qua do khả năng tổng quát hóa và phân loại dữ liệu với độ chính xác cao.
Hình 4.: Đối tượng và khả năng chính xác của đối tượng xử lý
Trong chương trình đã cung cấp một thư viện với số lượng biển báo lên đến 35000 tấm ảnh với 43 lớp giúp dễ dàng trong việc phân loại và nhận biết hình ảnh.
4.3.3 Phương pháp gia cơng khung xe
Cơng nghệ in 3D FFF viết tắt vủa cụm từ Fused Filament Fabrication, tương đương với một cụm từ phổ biến hơn Fused Deposition Modeling hay cịn gọi cơng nghệ in 3D FDM. Chúng cùng nguyên lý tạo hình cộng dồn, tức là sử dụng thiết bị có khả năng nấu chảy rồi đắp các lớp vật liệu (nhựa, sáp, kim loại) theo các mã Gcode để tạo nên mơ hình sản phẩm. Vật liệu được phun từ trên xuống và các lớp được gắn với nhau nhờ nhiệt độ.
Hình 4.: Quá trình nung chảy và in
Những thành phần được vẽ trên solidworks sẽ được xuất với dạng .stl sau đó được import vào phần mềm in 3D Ultimaker Cura, quá trình tạo ra mã thực thi (gcode) được gọi là slice.
Hình 4. : Phần mềm in 3D Ultimaker Cura
Vật liệu chính được sử dụng là nhựa PLA là tên viết tắt của “Polylactic Acid”. Đây là một loại nhựa nhiệt dẻo phân hủy sinh học có nguồn gốc từ các nguồn tái tạo. Thành phần của nhựa này gồm nhiều phụ gia như bột ngơ, mía, củ sắn hoặc thậm chí tinh bột khoai tây. Nhựa in PLA là một trong những nhựa in 3D FDM phổ biến trên thị trường. Loại nhựa này có giá thành khá thấp, dễ in và có nhiều màu sắc rực rỡ.
PLA có nhiều ưu điểm vượt trội hơn các sản phẩm nhựa hóa dầu trên mạng khác như ABS(Acrylonitrin butadien styren) hay PVA (Polyvinyl Alcohol). Với khả năng tự phân hủy trong môi trường. Nhựa PLA được sử dụng rộng rãi để sản xuất các đồ dùng hàng ngày. Các sản phẩm như bao bì để đựng thực phẩm, khay đựng hoặc là cốc chén, màng thực phẩm,...
Tính chất cơ học của nhựa PLA:
• PLA là một loại nhựa nhiệt dẻo. Vì vậy nó có nhiệt độ nóng chảy trong khoảng 190oC - 220oC.
• Cũng giống với các loại nhựa nhựa in khác. PLA có khả năng sử dụng tốt cho mọi loại máy in.
• Vật liệu in 3D này cũng có độ đàn hồi khá tốt. Ngồi ra nó cịn có tính mềm, dẻo vượt trội.
• Màu sắc in của vật liệu này đa dạng. Khách hàng có thể tùy ý lựa chọn sao cho phù hợp.
• Đặc biệt là khả năng lặp lại nhiều lần quá trình chảy mềm dưới tác dụng nhiệt và trở nên rắn khi được làm nguội. Trong q trình tác động nhiệt, nó chỉ thay đổi tính chất vật lý và khơng bị thay đổi tính chất hóa học. Do đặc tính như vậy nên là nó có khả năng tái sinh nhiều lần. Vì vậy những phế phẩm phát sinh trong q trình sản xuất đều có khả năng tái chế được.
Việc tạo mẫu nhanh với nguyên vật liệu rẻ tiền rất thích hợp cho ứng dụng phát triển và học tập, có thể dễ dàng sửa chửa và thay đổi mẫu in.