Thái gửi vào
- 87237 lượt xem
Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn

Cộng đồng Arduino Việt Nam
Thấy bài viết hữu ích? Hãy bình chọn nó ở hệ thống Rate Node dưới mỗi bài viết để động viên tác già!
Thái gửi vào
Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn

Tôi yêu Arduino gửi vào
Sau khi nhận được board của cuộc thi VMIG2016 và thấy bài của ksp hơi hay nên hôm nay quyết định làm một bài chớp tắt led 13 trên Intel Edison bằng ngôn ngữ nodejs với thư viện johnny-five và edison-io.
Thái gửi vào
Bài viết sẽ gới thiệu với các bạn về một mô-đun nhận giạng giọng nói. Với mô-đun này các bạn có thể tạo ra nhiều sản phẩm rất ứng dụng với mình, mình sẽ ứng dụng nó cho người khuyết tật như điều khiển thiết bị bằng giọng nói trong thời gian thực.
Thái gửi vào
Bài viết này sẽ hướng dẫn các bạn cách làm một máy đo nồng độ cồn hay một thiết bị khóa nếu nồng độ cồn cao sẽ không hoạt động và nếu nồng độ đạt mức cho phép thiết bị mới hoạt động.
Hãy trở thành thành viên của Cộng đồng Arudino Việt Nam để mở khóa chức năng này.
Các bạn chuẩn bị phần cứng như phần 4 có điều phải nối lại dây theo code sau mình không muốn nhắc đến phần cứng
Xây dựng chương trình và thuật toán
Như thế này nếu số 1 là giá trị khi nhận ra line thì số 1 càng dịch sang trái hoặc sang phải thì ta có 10 mức lệch line trong cả trường hợp có hai cảm biến cùng phát hiện ra line, khi đó chúng ta sẽ áp dụng PID để tính toán để đưa ra giá trị điều kiển PWM đến mạch cầu H
các giá trị khi lệch line
Lập trình để nhận và chuyển đổi giá trị
void read_sensor_values() { sensor[0]=digitalRead(A0); sensor[1]=digitalRead(A1); sensor[2]=digitalRead(A2); sensor[3]=digitalRead(A3); sensor[4]=digitalRead(A4); if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==1)) error=4; else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==1)&&(sensor[4]==1)) error=3; else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==1)&&(sensor[4]==0)) error=2; else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[4]==1)&&(sensor[4]==0)) error=1; else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[4]==0)&&(sensor[4]==0)) error=0; else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[4]==0)&&(sensor[4]==0)) error=-1; else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0)) error=-2; else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0)) error=-3; else if((sensor[0]==1)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0)) error=-4; else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0)) if(error==-4) error=-5; else error=5; }Bây giờ là phần quan trọng áp dụng công thức PID ta có code để tính toán đưa ra giá trị điều kiển PWM ( mình tham khảo trên internet nha )
void calculate_pid() { P = error; I = I + error; D = error – previous_error; PID_value = (Kp*P) + (Ki*I) + (Kd*D); previous_error=error; }Motor control
void motor_control() { // Calculating the effective motor speed: int left_motor_speed = initial_motor_speed-PID_value; int right_motor_speed = initial_motor_speed+PID_value; // The motor speed should not exceed the max PWM value constrain(left_motor_speed,0,255); constrain(right_motor_speed,0,255); analogWrite(9,left_motor_speed); //Left Motor Speed analogWrite(10,right_motor_speed); //Right Motor Speed //following lines of code are to make the bot move forward /*The pin numbers and high, low values might be different depending on your connections */ digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,HIGH); }Bây giời đến void loop
void loop() { read_sensor_values(); calculate_pid(); motor_control(); }và đây là hoạt động của xe