Sơ đồ nối dây của robot

Một phần của tài liệu ĐỒ án kĩ THUẬT MẠCH điện tử (Trang 57)

3. Phạm vi và đối tượng nghiên cứu, phương pháp nghiên cứu

3.3.2Sơ đồ nối dây của robot

HÌNH 3. 3 sơ đồ nối dây các linh kiện Giải thích:

1. Cảm biến hồng ngoại. 2. Cảm biến vật cản. 3. Motor hút bụi.

4. Esc 30A cho motor hút bụi 5. Motor chổi quét

6. Mạch điều khiển tốc độ động cơ 7. Mạch test động cơ rc servo 8. Mạch cầu H

9. Motor chổi quét

10. Board arduino xử lí chính 3.3.3 Hệ thống điều khiển: cảm biến và vi điều khiển

Cảm biến giúp robot nhận thức môi trường bên ngoài, đưa ra quyết định và hành động phù hợp. Robot được phát triển sử dụng 3 cảm biến siêu âm loại HC-SRO4 được

tích hợp sẵn sonar được thiết kế để xác định khoảng cách đến một vật thể . Loại cảm biến này cung cấp khả năng phát hiện phạm vi không tiếp xúc tuyệt vời (2–300 cm) với độ chính xác cao. Hoạt động của nó không bị ảnh hưởng bởi ánh sáng mặt trời hoặc vật liệu đen, mặc dù vật liệu mềm về mặt âm học như vải có thể khó phát hiện. Nó đi kèm với máy phát siêu âm và mô-đun thu.

Cấu tạo của nó gồm 3 phần:

 Phần phát tín hiệu

Các đầu phát và đầu thu siêu âm là các loa gốm được chế tạo đặc biệt, hoạt động phát siêu âm có cường độ cao nhất ở một tần số nào đó (thường là 40khz cho các ứng dụng đo khoảng cách). Các loa này cần có nguồn tín hiệu điều khiển có điện áp cao mới phát tốt được (theo datasheet thì là ~ 30v). Chính vì vậy trong phần phát, phần đệm công suất sử dụng một con max232 làm nhiệm vụ đệm. Nó sẽ lấy tín hiệu từ bộ điều khiển, khuých đại biên độ lên +/-30v cung cấp cho loa gốm.

Để tiết kiệm nguồn cho module cảm biến, phần cấp điện cho max232 được điều khiển thông qua một tran pnp, khi không hoạt động, bộ điều khiển sẽ làm cho tran này ngưng dẫn, hạn chế tiêu thụ dòng.

 Phần thu tín hiệu

Khi loa gốm làm đầu thu (loa này được chế tạo chỉ nhạy với một tần số nào đó- 40khz) thu được sóng siêu âm, nó sẽ phát ra một điện thế giữa hai cực. điện thế này là rất nhỏ, vì vậy nó được đưa qua một opam, ở đây là tl072 (một số module sự dụng lm324, ...). tín hiệu này liên tục được khuých đại biên độ và cuối cùng là đưa qua một bộ so sánh, kết hợp với tín hiệu từ bộ điều khiển để đưa về bộ điều khiển thông qua một trans npn

 Phần xử lý, điều khiển

Phần xử lý, điều khiển thường sử dụng một vi điều khiển (pic16f688, stc11, ...) làm nhiệm vụ phát xung, xử lý tính toán thời gian từ khi phát đến khi thu được sóng siêu âm do nó phát ra nếu nhận được tín hiệu trig. đến đây thì nguyên lý hoạt động thông thường của cảm biến này thì ai cũng biết rồi nhé (cấp xung trig, chờ đo độ rộng xung echo để tính toán thời gian,....).

 Làm thế nào nó hoạt động?

Cảm biến siêu âm sử dụng sóng siêu âm để xác định khoảng cách đến một vật thể. Đây là những gì sẽ xảy ra:

 Máy phát siêu âm (chân trig) phát ra âm thanh tần số cao (40 kHz).

 Âm thanh truyền trong không khí. Nếu nó tìm thấy một đối tượng, nó sẽ trả về mô-đun.

 Đầu thu siêu âm (chân echo) nhận âm phản xạ (echo).

HÌNH 3. 4 Cách hoạt động của cảm biến siêu âm HC-SR04

Thời gian giữa quá trình truyền và nhận tín hiệu cho phép chúng ta tính khoảng cách đến một đối tượng. Điều này là có thể vì chúng ta biết vận tốc của âm thanh trong không khí. Đây là công thức:

distance to an object = ((speed of sound in the air)*time)/2 tốc độ âm thanh trong không khí ở 20ºC (68ºF) = 343m / s

Nói chung, vi điều khiển chứa lõi xử lý, bộ nhớ và các thiết bị ngoại vi đầu vào / đầu ra có thể lập trình được. Chúng được sử dụng trong các sản phẩm và thiết bị được điều khiển tự động, chẳng hạn như hệ thống điều khiển động cơ ô tô, điều khiển từ xa, máy văn phòng, thiết bị và các hệ thống nhúng khác. Trong công việc này, chúng tôi đã sử dụng vi điều khiển Arduinobởi vì nó sử dụng máy tính bảng đơn, làm cho nó trở nên phổ biến trên thị trường chuyên nghiệp. Arduino là mã nguồn mở với phần cứng tương đối rẻ. Trong khi vi điều khiển Arduino có các tính năng khác nhau tùy thuộc vào mức độ phức tạp của việc sử dụng, Arduino mega được sử dụng cho công việc này vì nó cho phép chúng ta sử dụng nhiều chân hơn và nhiều bộ nhớ hơn để giữ lại mã. Arduino uno r3 dip là một bo mạch vi điều khiển dựa trên Atmega328p. trong số 14 chân digital có các chân đặc biệt như sau:

 Chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông

qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết.

 Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.

 Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.

 LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

Arduino UNO có 6 chân analog (A0 - A5) cung cấp độ phân giải tín hiệu 10bit (0 - 210-1) để đọc giá trị điện áp trong khoảng 0V -5V. Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit. (adsbygoogle = window.adsbygoogle || []).push({});

Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

Bộ vi điều khiển có thể được cấp nguồn bằng cách chỉ cần kết nối nó với máy tính bằng cáp USB, hoặc pin. Vi điều khiển Arduino có IDE trong đó các mã chương trình đã viết được lưu trữ . Điều này cho phép tương tác với phần mềm khác hoặc thiết bị phần cứng. Bộ vi điều khiển được kết nối với máy tính thông qua các trình điều khiển thường được cài đặt tự động.

3.4 Thiết kết phần mềm

3.4.1 Lựa chọn phần mềm

3.4.1.1 Arduino IDE

HÌNH 3. 5 Giao diện chương trình điều khiển

 Vùng lệnh

HÌNH 3. 6 Giao Diện Vùng Lệnh

 Vùng viết chương trình

Bạn sẽ viết các đoạn mã của mình tại đây. Tên chương trình của bạn được hiển thị ngay dưới dãy các Icon, ở đây nó tên là “Blink”. Để ý rằng phía sau tên chương trình có một dấu “§”. Điều đó có nghĩa là đoạn chương trình của bạn chưa được lưu lại.

 Vùng thông báo (debug)

HÌNH 3. 7 Giao diện vùng thông báo

3.4.1.2 Giới thiệu về Proteus

Proteus là phần mềm cho phép mô phỏng hoạt động của mạch điện tử bao gồm phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như MCS- 51, PIC, AVR, …

Proteus là phần mềm mô phỏng mạch điện tử của Lancenter Electronics, mô phỏng cho hầu hết các linh kiện điện tử thông dụng, đặc biệt hỗ trợ cho cả các MCU như PIC, 8051, AVR, Motorola.

Phần mềm bao gồm 2 chương trình: ISIS cho phép mô phỏng mạch và ARES dùng để vẽ mạch in. Proteus là công cụ mô phỏng cho các loại Vi Điều Khiển khá tốt, nó hỗ trợ các dòng VĐK PIC, 8051, PIC, dsPIC, AVR, HC11, MSP430, ARM7/LPC2000 ... các giao tiếp I2C, SPI, CAN, USB, Ethenet, ... ngoài ra còn mô phỏng các mạch số, mạch tương tự một cách hiệu quả. Proteus là bộ công cụ chuyên về mô phỏng mạch điện tử.

3.4.1.3 Tính năng của proteus

 Mô phỏng:

Bản mạch đã hoàn thiện hay chưa? Tính năng mô phỏng của Proteus 8 Professional có thể hiển thị hầu hết các chi tiết trong mạch điện. Có hai tùy chỉnh cho tính năng này: chạy bản mô phỏng và chạy từng bảng. "Chạy bản mô phỏng" trình chiếu bảng mạch ở tốc độ bình thường (nếu bản mạch không quá phức tạp). "Chạy từng bảng" sẽ chạy từng bảng mạch khi trong mỗi lần click. Tùy chỉnh này rất có ích cho việc khắc phục những bản mạch số.

Bạn có thể mô phỏng vi điều khiển. Tùy thuộc vào từng vi điều khiển sẽ được phác thảo dựa trên PIC24, dsPIC33, 8051, Arduino, hoặc ARM7. Bạn có thể tải các trình dịch và đổ tập tin hex vào vi điều khiển có trong Proteus. Hơn nữa, tích hợp thời gian thực với bản mô phỏng sử dụng công tắc, điện trở, quang điện trở, v.v. thậm chí cả vôn kế, ampe kế.

 Thiết kế PCB:

Là tính năng dễ sử dụng trong Proteus. Bạn có thể tự tạo bản thiết kế hoặc bắt Proteus làm hộ bạn. Tự tạo bản thiết kế rất dễ dàng chỉ cần bạn đặt những chi tiết vào sơ đồ và vẽ đường mạch điện chạy qua. Đừng lo lắng về việc vi phạm bất kỳ quy tắc thiết kế nào bởi vì nó sẽ tự động phát hiện ra lỗi. Còn nếu muốn Proteus làm thay bạn thì chỉ cần đặt các chi tiết vào vị trí tương ứng rồi cho chạy tự động. Nó sẽ vẽ ra các cách đặt đường mạch và lựa bản tốt nhất. Và hiện nay còn có một tùy chỉnh nữa "Auto placer", nó yêu cầu bạn xác lập kích thước bảng bằng cách vẽ hình dáng và kích cỡ bản mạch. Sau đó, nó tự động đặt các chi tiết vào trong khuôn. Sau đó, tất cả việc bạn phải làm là lập sơ đồ mạch.

3.4.2 Sơ đồ thuật toán

3.4.2.1 Thuật toán chính

HÌNH 3. 8 Lưu đồ thuật toán di chuyển chính của robot

 Mô tả thuật toán

STT KÍ HIỆU Ý NGHĨA

1 Bắt đầu/ kết thúc chương trình

2 Điều kiện rẽ nhánh

3 Xử lý, tính toán, gán (adsbygoogle = window.adsbygoogle || []).push({});

4 Luồng xử lí

HÌNH 3. 9 mô tả thuật toán

 Giải thích thuật toán

Sau khi khởi động robot, bộ điều khiển sẽ bắt đầu phát tín hiệu cho hoạt động, robot chạy theo hướng thẳng về phía trước, khi đó các cảm biến siêu âm sẽ được phát

tín hiệu và quét về phía trước, có 3 cảm biến siêu âm đặt theo 3 hướng: phía trước robot; bên phải robot và bên trái robot. Nếu cảm biến phải có vật cản, robot sẽ quay trái cho đến khi cảm biến không còn quét thấy vật cản thì đi tiếp. nếu cảm biến trái có vật cản, robot sẽ quay phải cho đến khi cảm biến không còn quét thấy vật cản thì đi tiếp. nếu cả 3 cảm biến trái, phải, giữa đều quét thấy vật cản thì robot sẽ quay 180 độ và đi tiếp.

Đồng thời khi khởi động, bộ điều khiển sẽ phát tín hiệu cho cảm biến hồng ngoại hoạt động, nó được gắn ngay dưới mép sàn phía trước của hút bụi, khi nó phát hiện được không có tín hiệu truyền lại, đồng nghĩa phía dưới nó là cầu thang, nên nó sẽ quay ngược và bám đuổi quỹ đạo.

3.4.2.2 Thuật toán con

 Sơ đồ thuật toán của cảm biến siêu âm HC-SR04

HÌNH 3. 10 Lưu đồ thuật toán của cảm biến tránh vật cản

 Sơ đồ thuật toán của cảm biến hồng ngoại

HÌNH 3. 11 Lưu đồ thuật toán của cảm biến tránh rơi cầu thang 3.4.3 Chương trình điều khiển

3.4.3.1 Chương trình điều khiển cho cảm biến siêu âm

/* * Kết nối: HCSR04 Arduino VCC 5V GND GND TRIG 8 ECHO 7

Nạp code mở Serial Monitor chọn No line ending, baud 9600. */

const int trig = 8; // chân trig của HC-SR04 const int echo = 7; // chân echo của HC-SR04 void setup()

{

Serial.begin(9600); // giao tiếp Serial với baudrate 9600 pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu }

void loop() {

int distance; // biến lưu khoảng cách

/* Phát xung từ chân trig */

digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2);

digitalWrite(trig,1); // phát xung từ chân trig

delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig

/* Tính toán thời gian */

// Đo độ rộng xung HIGH ở chân echo. duration = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. distance = int(duration/2/29.412);

/* In kết quả ra Serial Monitor */ Serial.print(distance); Serial.println("cm"); delay(200); }  Giải thích chương trình - duration = pulseIn(echo,1);

Hàm pulseIn() được dùng để đo độ rộng của xung, Duration sẽ bằng độ dài xung HIGH ở chân echo (tính theo micro giây).

- distance = int(duration/2/29.412);

Thời gian sóng truyền từ cảm biến đến vật sẽ bằng duration/2, sau đó ta chia tiếp cho 29,412 để tính khoảng cách. (adsbygoogle = window.adsbygoogle || []).push({});

Đọc một xung tín hiệu digital (HIGH/LOW) và trả về chu kì của xung tín hiệu, tức là thời gian tín hiệu chuyển từ mức HIGH xuống LOW hoặc ngược lại (LOW -> HIGH). Một số cảm biến như cảm biến màu sắc như TCS3200D hay cảm biến siêu âm dòng HC-SRxx phải giao tiếp qua xung tín hiệu nên ta phải kết hợp giữa 2 hàm digitalWrite() để xuất tín hiệu và pulseIn() để đọc tín hiệu.

Cú pháp

pulseIn(pin, value);

pulseIn(pin, value, timeout); Trong đó:

pin là chân được chọn để đọc xung. pin có kiểu dữ liệu là int.

Nếu đặt value là HIGH, hàm pulseIn() sẽ đợi đến khi tín hiệu đạt mức HIGH, khởi động bộ đếm thời gian. Khi tín hiệu nhảy xuống LOW, bộ đếm thời gian dừng lại. pulseIn() sẽ trả về thời gian tín hiệu nhảy từ mức HIGH xuống LOW này. Nếu đặt value là LOW, hàm pulseIn() sẽ làm ngược lại, đó là đo thời gian tín hiệu nhảy từ mức LOW lên HIGH. value có kiểu dữ liệu là int.

Nếu tín hiệu luôn ở một mức HIGH/LOW cố định thì sau khoảng thời gian timeout, hàm pulseIn() sẽ dừng bộ đếm thời gian và trả về giá trị 0. timeout được tính bằng đơn vị micro giây. Giá trị mặc định của timeout là 60.106 tương ứng với 1 phút. Giá trị tối đa là 180.106 tương ứng với 3 phút. timeout có kiểu dữ liệu là unsigner long.

Trả về

Một số nguyên kiểu unsigner long, đơn vị là micro giây. pulseIn() trả về 0 nếu thời gian nhảy trạng thái HIGH/LOW vượt quá timeout

Ví dụ int pin = 7;

unsigned long duration; void setup() {

Serial.begin(9600); pinMode(pin, INPUT); }

void loop() {

duration = pulseIn(pin, HIGH);

//Hãy nối chân 7 của Arduino vào đường tín hiệu //bạn muốn đọc xung

Serial.println(duration); }

3.4.3.2 Chương trình chính điều khiển cho adruino

// defining the pins const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9;

const int trigPin3 = 10; const int echoPin3 = 11; int irpin =2; // defining variables long duration1; long duration2; long duration3; int distanceleft; int distancefront; int distanceright; int a=0; void setup() { pinMode(trigPin1, OUTPUT); pinMode(trigPin2, OUTPUT);

pinMode(trigPin3, OUTPUT);// Sets the trigPin as an Output pinMode(echoPin1, INPUT); // Sets the echoPin as an Input pinMode(echoPin2, INPUT); pinMode(echoPin3, INPUT); pinMode(irpin, INPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(trigPin1, LOW); delayMicroseconds(2); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW);

duration1 = pulseIn(echoPin1, HIGH); distanceleft = duration1 * 0.034 / 2;

Một phần của tài liệu ĐỒ án kĩ THUẬT MẠCH điện tử (Trang 57)