.15 Sơ đồ nguyên lý Module LM2596

Một phần của tài liệu ĐỒ án TRUYỀN ĐỘNG điện đề tài thiết kế robot hút bụi sử dụng arduino (Trang 37)

3.3. Sơ đồ mạch của sản phẩm 3.3.1 Sơ đồ tổng quan hệ thống 3.3.1 Sơ đồ tổng quan hệ thống Hình 3.16 Sơ đồ tổng quan hệ thống PIN Module L298 ARDUINO Cảm biến SRF04

32

Hệ thống được chia ra làm 4 khối chính được trình bày trên Hình 3.15. Pin là nguồn cung cấp năng lượng duy nhất cho hệ thống.

Điện từ Pin qua Module L298, từ Module L298 nguồn được chia tới các thành phần trong hệ thống.

Nguồn 5VDC ổn định nuôi Arduino và cảm biến siêu âm, nguồn 6-9V ni hai động cơ DC; dịng điện tối đa mà L298 có thể cung cấp cho mỗi động cơ lên đến 2A.

Trên Hình 3.15 các đường năng lượng này được thể hiện bằng mũi tên màu da cam. Arduino đóng vai trị là bộ xử lý trung tâm, đọc tín hiệu từ cảm biến siêu âm SRF04 tính tốn khoảng cách với vật cản phía trước và đưa ra tín hiệu PWM điều khiển tốc độ và hướng di chuyển của Robot thông qua mạch cầu H một cách hợp lý. Các đường tín hiệu trong hệ thống được thể hiện bằng mũi tên màu xanh, Module mạch cầu H L298 chỉ nhận tín hiệu từ Arduino nên được thể hiện bằng mũi tên một chiều. Khi muốn đo khoảng cách Arduino sẽ phát tín hiệu đến cảm biến SRF04 và đọc tín hiệu từ cảm biến gửi về qua đó tính tốn khoảng cách đến vật cản vì vậy mũi tên hai chiều được sử dụng để thể hiện đường đi của tín hiệu từ Arduino đến cảm biến SRF04.

3.3.2 Sơ đồ nguyên lý hệ thống

33 Nguyên lý hoạt động của mạch:

- Khi cấp nguồn vào mạch thì có 1 dịng điện I0 chạy trong mạch, Robot hút bụi tự

động ở trạng thái thường trực, vi điều khiển sẽ đưa ra 1 khoảng cách an toàn . Cảm biến siêu âm bắt đầu đo khoảng cách rồi đưa ra biến khoảng cách trước. Động cơ hút bụi hoạt động.

- Khi khơng có vật cản trước mặt thì khoảng cách an tồn sẽ lớn hơn khoảng cách

trước, lúc này vi điều khiển sẽ phân tích , đánh giá số liệu rồi chuyển qua Module điều khiển động cơ L298 để điều khiển động cơ đi thẳng.

- Khi có vật cản đằng trước thì khoảng cách an tồn sẽ nhỏ hơn khoảng cách trước,

lúc này vi điều khiển sẽ điều khiển cảm biến siêu âm của 2 bên trái và phải để xác định khoảng cách trái, khoảng cách phải từ đó đưa 2 giá trị khoảng cách này về bộ vi điều khiển. Từ đó vi điều khiển sẽ so sánh giá trị này . Nếu khoảng cách trái lớn hơn khoảng cách phải thì vi điều khiển sẽ đưa ra tín hiệu sang Module L298 để điều khiển động cơ quay trái. Nếu khoảng cách trái nhỏ hơn hoặc bằng khoảng cách phải thì vi điều khiển sẽ đưa ra tín hiệu cho Module điều khiển động cơ L298 để động cơ quay phải.

3.3.3 Sơ đồ mô phỏng Matlab

34

CHƯƠNG Ⅳ

THUẬT TỐN, KẾT QUẢ VÀ CHƯƠNG TRÌNH ĐIỀU KHIỂN 4.1. Lưu đồ thuật toán

4.4.1 Lưu đồ tổng quan của hệ thống

Hình 4.1 Lưu đồ thuật tốn tổng quan của hệ thống Giải thích thuật tốn: Giải thích thuật tốn:

Trên Hình 4.1 trình bày lưu đồ thuật tốn tổng quan của hệ thống. Do quá trình điều khiển hoạt động của Robot là một vịng lặp nhiều q trình và bên trong mỗi quá trình bao gồm nhiều hàm xử lý phức tạp nên thuật toán điều khiển được chia thành nhiều chức năng nhỏ nhằm đem đến một cái nhìn trực quan hơn về nguyên tắc điều khiển của hệ thống.

Đầu tiên khi khởi động hệ thống vi điều khiển sẽ khởi tạo các biến toàn cục, khai báo các hàm chức năng và thiết lập ngoại vi cho hệ thống. Sau đó nó thực hiện q trình đọc dữ liệu từ khối cảm biến, đi vào xử lý tính tốn khoảng cách đến vật cản nếu có và điều khiển từng động cơ với các trạng thái tương ứng. Quá trình trên lặp đi lặp lại cho đến khi Robot làm sạch tồn bộ diện tích mặt sàn.

35

4.4.2 Lưu đồ quá trình đo khoảng cách

Hình 4.2 Lưu đồ thuật tốn q trình đo khoảng cách Giải thích thuật tốn: Giải thích thuật tốn:

Trên Hình 4.2 trình bày quá trình đo khoảng cách bằng cảm biến SRF04, đầu tiên vi điều khiển cấp tín hiệu mức 1 vào chân Trig trong khoảng thời gian 15µs, sau đó theo dõi trạng thái của chân Echo. Mặc định chân Echo sẽ ở mức 0 khi chân Trig được kéo lên mức cao, 15µs cảm biến sẽ phát sóng siêu âm đồng thời chân Echo được kéo lên mức cao, khi vi điều khiển phát hiện chân Echo lên mức cao sẽ lấy giá trị của bộ timer tại thời điểm đó và tiếp tục theo dõi trạng thái của chân Echo. Khi phát hiện trạng thái chân Echo xuống lại mức 0 vi điều khiển tiếp tục lấy giá trị của bộ timer. Hiệu giá trị của bộ timer trong hai lần lấy chính là khoảng thời gian chân Echo ở mức cao. Nếu khoảng thời gian này lớn hơn 25ms nghĩa là phía trước cảm biến khơng có vật cản ngược lại ta sẽ dễ dàng tính được khoảng cách từ cảm biến tới vật cản dựa vào thời gian lan truyền và vận tốc của sóng siêu âm.

Sau khi cấu hình chức năng PWM của bộ timer, khởi tạo các biến cần thiết, nếu phát hiện phía trước có vật cản (để thuận tiện cho việc xử lý và trình bày lưu đồ thuật tốn em coi trường hợp vật cản phía trước cách xa hơn 30cm là khơng có vật cản) vi điều khiển sẽ phát tín hiệu PWM điều khiển Robot chuyển hướng sang phải và quay về phía sau 180° và tiếp tục đi thẳng.

Sau đó vi điều khiển tiếp tục kiểm tra xem có vật cản khơng nếu có thì tiếp tục điều khiển Robot rẽ phải và quay về sau 180°, nếu khơng có vật cản thì tiếp tục di chuyển theo đường thẳng trong vòng 10s rồi rẽ trái và quay về phía sau 180° để

36

Robot di chuyển theo hình đường thẳng. Trong quá trình di chuyển vi điều khiển kiểm tra vật cản phía trước mỗi giây một lần, bất cứ khi nào phát hiện có vật cản thì chuyển hướng di chuyển của Robot 180°.

4.2. Kết quả hoàn thiện

37

Hình 4.4 Tổng quan bên trong Robot

4.3. Chương trình điều khiển

/*

* Do an truyen dong dien * Nhom 12

*/

int trig1 = A0; //trai int echo1 = A1; int trig2 = A2; //giua int echo2 = A3; int trig3 = A4; //phai int echo3 = A5;

38 int in1 = 4; int in2 = 5; int in3 = 6; int in4 = 7; int ENA = 3; int ENB = 11; int LeftSpeed = 55; int RightSpeed = 55 ;

long leftDistance = 0,middleDistance = 0,rightDistance = 0; long pingTime,distance; float speedSound = 0.0343; int DIS = 25; long leftMeasurement() { digitalWrite(trig1,LOW); delayMicroseconds(2); digitalWrite(trig1,HIGH); delayMicroseconds(10); digitalWrite(trig1,LOW); pingTime = pulseIn(echo1,HIGH); distance = (pingTime/2)*speedSound; return(distance); } long middleMeasurement()

39 { digitalWrite(trig2,LOW); delayMicroseconds(2); digitalWrite(trig2,HIGH); delayMicroseconds(10); digitalWrite(trig2,LOW); pingTime = pulseIn(echo2,HIGH); distance = (pingTime/2)*speedSound; return(distance); } long rightMeasurement() { digitalWrite(trig3,LOW); delayMicroseconds(2); digitalWrite(trig3,HIGH); delayMicroseconds(10); digitalWrite(trig3,LOW); pingTime = pulseIn(echo3,HIGH); distance = (pingTime/2)*speedSound; return(distance); } void setup() { Serial.begin(9600); pinMode(trig1,OUTPUT);

40 pinMode(trig2,OUTPUT); pinMode(trig3,OUTPUT); pinMode(echo1,INPUT); pinMode(echo2,INPUT); pinMode(echo3,INPUT); pinMode(in1,OUTPUT); pinMode(in2,OUTPUT); pinMode(in3,OUTPUT); pinMode(in4,OUTPUT); pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); moveStop(); } void loop() { leftDistance = leftMeasurement(); delay(10); middleDistance = middleMeasurement(); delay(10); rightDistance = rightMeasurement(); delay(10); Serial.print("leftDistance = "); Serial.print(leftDistance); Serial.print("cm /"); Serial.print("middleDistance = "); Serial.print(middleDistance);

41 Serial.print("cm /");

Serial.print("rightDistance = "); Serial.print(rightDistance); Serial.println("cm");

// Obstacle on left side

if(leftDistance < DIS && middleDistance > DIS && rightDistance > DIS) {

turnRight();

delay(25); // turn lightly right }

// Obstacle on front

else if(leftDistance > DIS && middleDistance < DIS && rightDistance > DIS) {

if(leftDistance > rightDistance) {

turnLeft();

delay(400); // turn 90 degree left }

if(leftDistance < rightDistance) {

turnRight();

delay(400); // turn 90 degree right }

}

// Obstacle on right side

42 {

turnLeft();

delay(25); //turn lightly left }

// Obstacle on front & left side

else if(leftDistance < DIS && middleDistance < DIS && rightDistance > DIS) {

turnRight();

delay(400); // turnRight 90 degree }

// Obstacle on front & right side

else if(leftDistance > DIS && middleDistance < DIS && rightDistance < DIS) {

turnLeft();

delay(400); // turnLeft 90 degree }

// Obstacle on left & right side

else if(leftDistance < DIS && middleDistance > DIS && rightDistance < DIS) {

if(leftDistance > rightDistance) {

turnLeft();

delay(50); // shift left }

if(leftDistance < rightDistance) {

43 delay(50); // shift right

} }

// Obstacle on all 3 side

else if(leftDistance < DIS && middleDistance < DIS && rightDistance < DIS) { moveStop(); delay(1000); moveBackward(); delay(1000); turnLeft();

delay(800); //turn 180 degrees } else { moveForward(); } } void moveForward() { Serial.println("Move Forward"); analogWrite(ENA,LeftSpeed); analogWrite(ENB,RightSpeed); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH);

44 digitalWrite(in4, LOW); } void moveBackward() { Serial.println("Move Backward"); analogWrite(ENA,LeftSpeed); analogWrite(ENB,RightSpeed); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } void turnRight() { Serial.println("Turn Right"); analogWrite(ENA,LeftSpeed); analogWrite(ENB,RightSpeed); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); } void turnLeft() {

45 Serial.println("Turn Left"); analogWrite(ENA,LeftSpeed); analogWrite(ENB,RightSpeed); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void moveStop() { Serial.println("Move Stop"); analogWrite(ENA,LOW); analogWrite(ENB,LOW); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }

46

CHƯƠNG Ⅴ

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Tổng kết

5.1.1 Kết quả thu được

- Có thêm nhiều kiến thức về mảng lập trình, lắp ráp, vận hành.

- Nâng cao kỹ năng làm việc nhóm.

- Được tự tay thiết kế, chế tạo mơ hình thực tế. - Robot hoạt động ổn định, linh hoạt.

5.1.2 Ưu và nhược điểm * Ưu điểm * Ưu điểm

- Mơ hình nhỏ gọn.

- Đáp ứng đúng yêu cầu đặt ra. - Giá cả sinh viên.

- Kết nối đơn giản, ổn định. * Nhược điểm

- Chưa khai thác triệt để các tính năng.

- Khơng có khả năng leo cầu thang. - Thời gian làm sạch lâu.

...

5.2 Hướng phát triển

Qua quá trình chế tạo và vận hành của Robot hút bụi, nhóm em xin đưa ra một số hướng phát triển để cho Robot có thể được hồn chỉnh và hoạt động hiệu quả nhất: - Robot cần trang bị thêm cảm biến để định vị trong không gian.

- Phát triển giải thuật để Robot có thể thay đổi quỹ đạo di chuyển trong khơng gian. - Cải tiến thêm nhiều tính năng.

- Khắc phục các hạn chế còn tồn tại của Robot. ...

47

5.3 Kết luận

Sau thời gian nghiên cứu, tìm tịi cùng sự giúp đỡ, chỉ dẫn tận tình của Cơ Th.s Đỗ

Hồng Ngân Mi, mơ hình Robot hút bụi của nhóm em đã hồn thành. Robot mà nhóm

đã làm đáp ứng tương đối tốt các yêu cầu đã đề ra, các chức năng hoạt động ổn định, trơn tru, hệ thống xử lý đảm bảo và cách sử dụng cũng khá dễ dàng.

Trong quá trình thực hiện đề tài, nhóm đã tích lũy được rất nhiều kiến thức, kinh nghiệm trong quá trình học tập và nghiên cứu. Một lần nữa, nhóm chúng em xin được chân thành cảm ơn sự hướng dẫn tận tình của Cơ Th.s Đỗ Hồng Ngân Mi đã giúp đỡ chúng em hoàn thành đồ án này.

48

TÀI LIỆU THAM KHẢO

- http://arduino.vn/

- https://www.arduinoplatform.com/arduino-sensors/detecting-distance-with- hc-sr04-sensor/

Một phần của tài liệu ĐỒ án TRUYỀN ĐỘNG điện đề tài thiết kế robot hút bụi sử dụng arduino (Trang 37)