Thiết kế mạch giao tiếp

Một phần của tài liệu Thiết kế và chế tạo robot đo nhiệt độ điều khiển từ xa (Trang 54 - 76)

a. Mạch nguồn

-Mạch nguồn trên robot tương tự như như mạch đã thiết kế.

-Mạch nguồn mạch kết nối với máy tính thì chỉ cần 1 nguồn 5V để nuôi VDK và Rs232.

Hình 2.41: Mạch giao tiếp hope_rf và atmega32..

Ta xử dụng VDK để kích chân enable của bộ Rf đồng thời sử dung VDK để điều khiển robot.

- Bộ Rf có chức năng truyền tải dữ liệu giao tiếp giữa máy tính ,và board mạch điều khiển được đặt trên robot.

+Trên board mạch có jum kết nối với modul,ở chân 2 nguồn có tụ hóa và gốm có nhiệm vụ lọc nguồn và ổn định cho modul.

+ Truyền tải dữ liệu mà robot thu thập được.

+ Chấp hành lệnh do máy tính điều khiển thông qua công Rs232.

Hình 2.42: Sơ đồ mạch opto cách ly.

- Sử dụng 12V role để đảo chiều động cơ .

- Opto C817 để cách ly nguồn VDK và nguồn động cơ, đồng thời dùng chân kích của opto để điều khiển PWM.

Hình 2.43: Sơ đồ nguyên lý mạch điều khiển động cơ.

Hình 2.44: Mạch uln 2803

Thông thường để đảo chiều động cơ có thể dùng các tranzitor để kích cuộn dây của role thông mas, nhưng với mạch công suất không cần lớn lắm ta có thể sử dụng uln2803. Để tăng dòng cho động cơ qua uln2803 em dùng cách nối chung 2 chân

của đầu vào tương ứng, 2 chân đầu ra tương ứng như hình 3.12. Sử dụng IRF540 để kích cho động cơ chạy, nhờ việc opto kích vào chân G của IRF làm nó thông, điện sẽ qua động cơ qua role và qua chân D của IRF và xuống mass . 2 diod mắc ngược nhiệm vụ để bảo vệ cuộn dây và role, ngoài ra còn có led báo và tụ lọc nguồn cho động cơ. Opto cũng có điện trở giảm dòng tránh cháy opto.

Hình 2.45: Role 12V. 2.2.14. Thiết kế phần mềm

2.2.14.1 Giải thuật điều khiển robot

Ta dùng bàn phím máy vi tính để khiển robot. Ứng với mỗi phím là 1 mã phím khác nhau, ứng với mỗi mã đó sẽ truyền xuống 1 frame, trong đó gồm:

- 1 bit start.

- 4 bit check_sum. - 3 bit cmd.

Lưu đồ 1: Chương trình truyền dữ liệu từ máy tính xuống.

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

Private Sub PicWebCam_KeyDown(KeyCode As Integer, Shift As Integer)

key_code = KeyCode count_keycode = 0 Timer1.Enabled = True

End Sub

Private Sub Timer1_Timer()

If (key_code >= 35) And (key_code <= 40) Then

cmd = (key_code - 34) * 2 Begin Phím được nhấn Timer++ sai Đ úng Timer= 25 Truyền dữ liệu sai đúng End (adsbygoogle = window.adsbygoogle || []).push({});

Send_data Else cmd = 0 Send_data End If End Sub

Lưu đồ 2: Chương trình chính điều khiển robot.

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

switch(cmd)

{

case 0x02: Q_trai(); break;

case 0x04: Q_pai(); break;

case 0x06: Left(); break;

case 0x08: Forward(); break;

case 0x0A: Right(); break;

case 0x0C: Backward(); break; default: Disable(); } } else Disable(); Begin switch(cmd)

Forward Backward left right

Disable Đ úng Q_left Q_ right sai

2.2.14.2. Giải thuật nhận và hiển thị camera

Camera là camera không dây lên ta chỉ cần 2 dây nguồn cấp cho nó, trong lúc lập trình ta sẽ dùng giải thuật gọi file “avicap32.dll” trong window để camera có thể hiển thị trong visulbasic.

Lưu đồ 3: Chương trình hiển thị camera.

Chương trình hiển thị camera lên máy tính

“With PicWebCam

hCap = capCreateCaptureWindow("Take a Camera Shot", WS_CHILD Or WS_VISIBLE, 0, 0, PicWebCam.Width, PicWebCam.Height, PicWebCam.hWnd, 0)

If hCap <> 0 Then

Call SendMessage(hCap, WM_CAP_DRIVER_CONNECT, 0, 0) Call SendMessage(hCap, WM_CAP_SET_PREVIEWRATE, 66, 0&) Call SendMessage(hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&) End If End With” Begin Hình ảnh Camera Máy tính S óng rf Hiển thị

Bằng việc dùng hàm gọi file trong window khi dó ta có thể xâm nhập vào hệ điều hành của máy tính.Khi đó ta hiển thị camera trên visulbasic sẽ rất đơn giản như trên window.Ta cho hình ảnh thấy được hiển thị trong picture box, và có thêm cả chức năng chụp hình, phóng to hình

2.2.14.3. Chuẩn hóa giao thức

Byte1

Byte2

Byte1 Or 0x01

Thêm vào bit đầu tiên của byte 1 bit 1, để xác dịnh bit strart, khi đó ta được 1 byte mới, có bit đầu tiên là bit 1

Byte1

(adsbygoogle = window.adsbygoogle || []).push({});

Xóa giá trị của bit đầu tiên của byte 2 để khi nhận, xác định đang nhận byte 2. Byte2 and 0xFE

Ta được

1 byte mới có bit đầu tiên bằng 0

Byte2

Khi đó ta lấy byte1 xor byte2 được 1 byte, ta lấy 4 bit đầu tiên hoàn toàn mới

0 0 0 0 A1 A2 A3 A4 B1 B2 B3 B4 B5 B6 B7 B8 0 0 0 0 A1 A2 A3 A4 0 0 0 0 A1 A2 A3 1 B1 B2 B3 B4 B5 B6 B7 B8 B1 B2 B3 B4 B5 B6 B7 0

Byte3

Byte thứ 2 ta dịch qua phải 4 bit được byte mới

Byte4

Ta xor byte3 và byte4 với nhau rồi dịch qua trái 4 bit, khi đó ta được byte mới mà 4 bit cuối của nó là check_sum ta đang đi tinh toán.

Khi đưa dữ liệu xuống ta sẽ truyền 2 byte, byte 1 gồm 1 bit start, 3 bít lệnh và 4 bit kiểm tra lỗi

Byte thứ 2 là data,ta sẽ truyền giá trị của PWM xuống, bit đầu tiên la bit start nhận byte 2 còn 7bit là dữ liệu.

byte1

byte2

Check_sum cmd start data start

Lưu đồ 4: Chương trình chuẩn hóa giao thức.

Khi VDK nhận sẽ đi nhận lần lượt từng byte, khi nhận hết byte 1 đi kiểm tra bit start rồi sẽ nhận đến byte 2, rồi xuống đó VDK sẽ làm ngược lại bên trên, nếu Check _sum đúng thì thực hiện chương trình định sẵn.

0 0 0 0 C5 C6 C7 1

0 0 0 0 B1 B2 B3 B4

B1 B2 B3 B4 B5 B6 B7 0

2.2.14.4 Giải thuật đo nhiệt độ và gửi nhiệt độ về

Lưu đồ 4: Chương trình truyềnnhiệt độ về.

- Nhiệt độ được đo nhờ ADC của atmega32 VDK liên tục đo nhưng chỉ khi, máy tính hỏi thì VDK mới truyền dữ liệu lên.

- Ta truyền nhiệt độ lên máy tính ta cũng truyền 1 frame gồm 2 byte, cách tính toán cũng giống như bên trên nhưng khác là cmd ta cho bằng 0,và byte 2 chính la data (nhiệt độ). Begin Cảm biến Board điều khiển Máy tính Nhiệt độ môi trường Nguồn S óng rf Hiển thị

Chương III

Dụng cụ: Đồng hồ đo có chế độ kiểm tra thông mạch, nguồn ắc quy.

 Tiến hành:

 Sau khi thi công mạch hoàn chỉnh tiến hành kiểm tra thông mạch một lần nữa. (adsbygoogle = window.adsbygoogle || []).push({});

 Cấp nguồn đo các chân xem có đúng với sơ đồ nguyên lý chưa.

 Lắp các ic như opto, Atmega 32, uln 2803, rơle.

 Viết một đoạn chương trình nhỏ để thử khả năng hoạt động, các linh kiện có bị nóng hay không.

Hình 3.1 Ăcquy

Hình 3.3 Mạch công suất 3.1.2 Kiểm tra module Rf và camera.

 Tiến hành:

 Đặt mạch công suất, camera, module rf lên robot cấp nguồn.  Một bộ module rf, bộ thu camera để kết nối với máy tính.

 Ban đầu đặt robot xa máy tính khoảng 20m, tín hiệu hình ảnh nhận được khá rõ nét.

 Khi khoảng cách càng xa thì hình ảnh thu được càng mờ tối đa khoảng 50m .

Hình 3.5 Ảnh thu được ở khoảng cách khoảng 30m 3.2.Cách tiến hành cho robot chạy thử

 Thiết lập các thông số ban đầu:

 Sau khi lắp ráp robot xong , tiến hành bật nguồn các mạch vi điều khiển, nguồn camera.

 Thiết lập các thông số điều khiển như sau:

 Thiết lập các thông số truyền thông.

 Chọn chế độ cho camera là get picture.

 Tốc độ ban đầu là 0

 Lúc này chưa cập nhật giá trị nhiệt độ

 Cho robot chạy:

 Bật nguồn mạch công suất động cơ.

 Lấy hình ảnh thu được từ camera cho robot chạy thẳng sau đó rẽ trái, rẽ phải

 Khi robot đến vị trí cần đo nhiệt độ thì cho dừng lại, cho cánh tay vương ra, thả cảm biến đo nhiệt độ

 Sau khỏang thời gian khoảng 1 phút cho lệnh đọc nhiệt độ từ máy tính

Hình 3.6 Hình ảnh robot đang đo nhiệt độ

3.3. Tháo lắp, vận chuyển

 Robot cao thể tháo rời phần mạch điều khiển, nguồn, camera một cách dễ dàng do mạch thiết kế tạo các rắc cắm bên ngoài.

 Khi lắp ráp robot lắp phần mạch trước chú ý phải cẩn thận nhẹ nhàn vì dễ làm lỏng các chân rơle.

mạch

Hình 3.7 Quá trình tháo lắp robot

 Vận chuyển: vì robot dễ dàng tháo lắp nên rất dễ dàng vận chuyển, nên chú ý là không để khung robot bị nghiên, không để phần mạch bị tác động mạnh, không để pin bị ẩm ướt. (adsbygoogle = window.adsbygoogle || []).push({});

3.4. Phân tích kết quả

- Tín hiệu được truyền đi tương đối xa, tốc độ cao và khá ổn định. - Hình ảnh thu được từ camera tương đối rõ, khoảng cách tryền xa.

- Nhiệt độ gửi về đo được chuẩn hóa giao thức modbus nên tương đối chính xác. - Tín hiệu được truyền đi khá nhanh, không bị mất thông tin

*Ưu điểm

- Đề tài mang tính ứng dụng cao và rất khả thi. - Tốc độ truyền nhanh.

- Modul thu phát dễ mua, bền.

*Nhược điểm

- Truyền chưa được xa khoảng 50m.

Chương IV

Qua thời gian thực hiện đề tài “thiết kế và chế tạo robot đo nhiệt độ diều khiển từ xa”, với những kiến thức bản thân còn ít ỏi nên em gặp khá nhiều khó khăn. Nhưng với sự giúp đỡ của các bạn trong lớp, kinh nghiệm của các thầy trong bộ môn, sự nhiệt tình của thầy giáo Trần Văn Hùng đến nay đồ án của em cơ bản đã hoàn thành.

Với các thông số đạt được

 Chiều dài, rộng, cao 40x30x20cm

 Khối lượng 5kg

 Sử dụng nguồn gồm 3 ắc quy 12v, 2 pin 9v

 Truyền thông được khoảng cách khá xa gần 40m.

Phần cơ khí đáp ứng được các yêu cầu đưa ra có kích thước nhỏ gọn, đủ bền, có tính thẩm mỹ...Phần mạch được thiết kế nhỏ gọn, đơn giản nhưng hoạt động khá ổn định.

4.1.2 Những kết chưa quả đạt được

Bên cạnh những kết quả đạt được đề tài còn tồn tại nhiều hạn chế như phần cơ khí cần thiết kế sao cho robot có thể vượt được những địa hình mấp mô, gồ ghề. Cần trang bị cho robot khả năng hoạt động ở những vùng tối bằng cách sử dụng ánh sáng hồng ngoại.

4.2. Đề suất

Đây là một đề tài có tính ứng dụng rộng rãi, mới mẻ nhưng việc khai thác còn hạn chế do thời gian có hạn. Em hi vọng sẽ có cơ hội để tiếp tục khai thác và ứng dụng nhiều hơn nữa lĩnh vực này trong công nghiệp, đời sống...

Mặc dù vẫn còn tồn tại những mặt hạn chế như trên đã nêu như khả năng vượt những địa hình khó, khoảng cách truyền chưa xa. Song nó cũng gợi mở ra những ý tưởng mới, những hướng đi mới như thiết kế robot như kiểu robot rắn sử dụng động cơ servo để điều khiển, sử dụng bộ thu phát hồng ngoại để tránh những vật cản bất ngờ hay di động. Có thể thiết kế bộ module mới truyền với khoảng cách xa hơn...

Với những kết quả đạt được từ đề tài này, em hi vọng sẽ mang đến nhiều điều thú vị cho các ứng dụng trong đời sống. Với việc đưa xử lý ảnh vào sẽ cho khả năng điều khiển chính xác hơn, phạm vi ứng dụng rộng hơn như robot có thể đi thám hiểm, robot sửa cống nước, robot lau cửa nhà cao tầng, robot cứu hộ..

Em mong sao các bạn sinh viên khóa sau sẽ tiếp tục hoàn thiện đề tài và tìm ra những điều thú vị hơn nưa. Em xin chân thành cảm ơn!

TÀI LIỆU THAM KHẢO

1.Nguyễn Văn Định, Bài giảng môn học thực hành vi điều khiển, Đại học Nha

Trang

2. Trần Văn Hùng, Truyền động điện và điện tử công suất, Đại học Nha Trang.

3. Trần Văn Hùng, Thiết kế board giao tiếp, Đại học Nha Trang.

4.Hoàng minh Sơn, Mạng truyền thông công nghiệp, Đại học bách khoa Hà Nội.

5.Ngô Diên Tập , Kỹ thuật vi điều Khiển AVR, Nhà Xuất Bản Khoa Học Và Kỹ Thuật. (adsbygoogle = window.adsbygoogle || []).push({});

7. Đỗ Xuân Thụ, Kỷ thuật điện tử, NXB Giáo Dục

8. www.Alldatasheet.com 9.www.atmel.com

10.www.cdtvn.net

11.www.dientuvietnam.net 12. www.wikipedia.com

void Receive_Frame(void) { char check_sum, tmp_cks; data = getchar(); { if(data&0x01) //start { rx_Cmd = TRUE; cmd = data; } else if(rx_Cmd) { rx_Cmd = FALSE; check_sum = cmd>>4; tmp_cks = (cmd ^ data) & 0x0F; tmp_cks = tmp_cks ^ (data>>4); if(tmp_cks==check_sum) { cmd = cmd & 0x0E; rx_Data = TRUE; frame_ok = TRUE; } else frame_ok = FALSE; } } }///////////////////////////////////////

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

void Left(void) {

if((DIR_01 == LUI)&(DIR_02 == TIEN)) { MOTOR_01 = ROUND; MOTOR_02 = ROUND; } else { DIR_01 = LUI;

}

/*================================================ ===========================================*/

void Right(void) {

if((DIR_01 == TIEN)&(DIR_02 == LUI)) { MOTOR_01 = ROUND; MOTOR_02 = ROUND; } else { DIR_01 = TIEN; DIR_02 = LUI; delay_ms(10); } } /*================================================ ===========================================*/ void Forward(void) {

if((DIR_01 == TIEN)&(DIR_02 == TIEN)) { MOTOR_01 = DC_SPEED; MOTOR_02 = DC_SPEED; } else { DIR_01 = TIEN; DIR_02 = TIEN; delay_ms(10); } } /*================================================ ===========================================*/ void Backward(void) {

MOTOR_02 = DC_SPEED; } else { DIR_01 = LUI; DIR_02 = LUI; delay_ms(10); } } while (1) {

for(i=0; i<50; i++) { if(rx_counter) Receive_Frame(); if(rx_Data) break; delay_ms(10); } if(rx_Data) { rx_Data = FALSE; DC_SPEED = data; DC_SPEED *= 2; if(DC_SPEED <= 110) { ROUND = DC_SPEED ; } else ROUND = 110; switch(cmd) {

case 0x02: ADC(); break;

case 0x04: Q_trai(); break;

case 0x06: Q_pai(); break;

case 0x08: Left(); break;

case 0x0A: Forward(); break;

} else

Disable();

/////////////////////////////////////////////////////////////////////////////////////////

Giải thuật nhận kết quả đo nhiệtj độ của máy tính

Private Sub Timer2_Timer()

If MSComm1.InBufferCount <> 0 Then st = MSComm1.Input For I = 1 To Len(st) If kt = False Then add = Asc(Mid(st, I, 1)) kt = True Else: adc = Asc(Mid(st, I, 1)) kt = False End If

If adc = add Then

Text5.Text = Round(((5000 / 255) * adc) / 10, 2) Else

Text5.Text = "no singe" End If

Next I End If End Sub (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Thiết kế và chế tạo robot đo nhiệt độ điều khiển từ xa (Trang 54 - 76)