chuong trinh thuc hanh 2

69
MỤC LỤC PHẦN 1: TỔNG QUAN VỀ KIT PHÁT TRIỂN ARDUINO INTEL GALILEO............2 PHẦN 2: NỘI DUNG CÁC BÀI THỰC HÀNH..................................10 BÀI 1: ĐIỀU KHIỂN HOẠT ĐỘNG LED BẰNG MÁY TÍNH......................10 1. Mục đích và yêu cầu...........................................10 2. Thiết bị và phần mềm cần thiết................................10 3. Tổng quan lý thuyết...........................................10 4. Trình tự thực hành............................................14 BÀI 2: HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ MÁY TÍNH............15 1. Mục đích và yêu cầu...........................................15 2. Thiết bị cần thiết............................................15 3. Tổng quan lý thuyết...........................................15 4. Trình tự thực hành............................................23 BÀI 3: ĐIỀU KHIỂN HOẠT ĐỘNG ĐỘNG CƠ MỘT CHIỀU VÀ ĐỘNG CƠ BƯỚC BẰNG MÁY TÍNH...........................................................24 1. Mục đích và yêu cầu...........................................24 2. Thiết bị cần thiết............................................24 3. Tổng quan lý thuyết...........................................24 Phương pháp điều khiển động cơ bước gồm điều khiển ba đối tượng: Góc quay, chiều quay và tốc độ quay..............................26 4. Trình tự thực hành............................................33 BÀI 4: GIAO TIẾP GIỮA CẢM BIẾN ĐO NHIỆT ĐỘ - ĐỘ ẨM VÀ MÁY TÍNH.....34 1. Mục đích và yêu cầu...........................................34 2. Thiết bị cần thiết............................................34 3. Tổng quan lý thuyết...........................................34 4. Trình tự thực hành............................................41 PHẦN 3: PHỤ LỤC CÁC CHƯƠNG TRÌNH MẪU VIẾT TRÊN PHẦN MỀM IDE........43 1

Upload: shishi-ma

Post on 02-Feb-2016

37 views

Category:

Documents


2 download

DESCRIPTION

Chuong Trinh Thuc Hanh 2

TRANSCRIPT

Page 1: Chuong Trinh Thuc Hanh 2

MỤC LỤC

PHẦN 1: TỔNG QUAN VỀ KIT PHÁT TRIỂN ARDUINO INTEL GALILEO.......................................2

PHẦN 2: NỘI DUNG CÁC BÀI THỰC HÀNH........................................................................................10

BÀI 1: ĐIỀU KHIỂN HOẠT ĐỘNG LED BẰNG MÁY TÍNH............................................................10

1. Mục đích và yêu cầu....................................................................................................................10

2. Thiết bị và phần mềm cần thiết....................................................................................................10

3. Tổng quan lý thuyết.....................................................................................................................10

4. Trình tự thực hành........................................................................................................................14

BÀI 2: HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ MÁY TÍNH...........................................15

1. Mục đích và yêu cầu....................................................................................................................15

2. Thiết bị cần thiết..........................................................................................................................15

3. Tổng quan lý thuyết.....................................................................................................................15

4. Trình tự thực hành........................................................................................................................23

BÀI 3: ĐIỀU KHIỂN HOẠT ĐỘNG ĐỘNG CƠ MỘT CHIỀU VÀ ĐỘNG CƠ BƯỚC BẰNG MÁY TÍNH........................................................................................................................................................24

1. Mục đích và yêu cầu....................................................................................................................24

2. Thiết bị cần thiết..........................................................................................................................24

3. Tổng quan lý thuyết.....................................................................................................................24

Phương pháp điều khiển động cơ bước gồm điều khiển ba đối tượng: Góc quay, chiều quay và tốc độ quay......................................................................................................................................................26

4. Trình tự thực hành........................................................................................................................33

BÀI 4: GIAO TIẾP GIỮA CẢM BIẾN ĐO NHIỆT ĐỘ - ĐỘ ẨM VÀ MÁY TÍNH............................34

1. Mục đích và yêu cầu....................................................................................................................34

2. Thiết bị cần thiết..........................................................................................................................34

3. Tổng quan lý thuyết.....................................................................................................................34

4. Trình tự thực hành........................................................................................................................41

PHẦN 3: PHỤ LỤC CÁC CHƯƠNG TRÌNH MẪU VIẾT TRÊN PHẦN MỀM IDE.............................43

1

Page 2: Chuong Trinh Thuc Hanh 2

PHẦN 1: TỔNG QUAN VỀ KIT PHÁT TRIỂN ARDUINO INTEL GALILEO

1.1 Mô tả phần cứng

Intel Galileo do Intel trực tiếp phát triển và là sản phẩm đầu tiên được đội ngũ phát triển

Arduino chứng nhận đạt chuẩn tương thích với nền tảng Arduino. Intel Galileo là một board ứng

dụng đầu tiên sử dụng vi xử lý Intel Quark SoC X1000, một vi xử lý 32 bit đầu tiên thuộc dòng

“Santa Clara” sản xuất trên công nghệ System on Chip lớp Petium 32nm với mức độ tiêu thụ

điện rất thấp. Vi xử lý X1000 hoạt động với xung nhịp 400Mhz dựa trên nền tảng Intel Pentium

x86 với bộ nhớ L1 cache 16Kb. Galileo được thiết kế thích với chuẩn board Arduino Uno R3.

Tương tự như những board Arduino khác, board Intel Galileo tuân theo những tiêu chuẩn

nhất định của nền tảng Arduino. Các chân Digital được đánh số từ chân 0 tới 13 (kề cận là chân

AREF và GND), các chân Analog từ chân 0 tới 5, header nguồn, header ICSP và 2 chân truyền

UART là tất cả những điểm giống nhau với Arduino Uno R3. Tất cả các chân của Galileo đều

tuân theo chuẩn Arduino pinout 1.0.

Hình 1. Một số thành phần chính trên board Galileo.

Sức mạnh của board Galileo tạo ra chủ yếu từ vi xử lý Intel Quark Soc X1000, ngoài khả

năng tương thích với chuẩn Arduino thì việc nhận được sự hỗ trợ từ nhà sản xuất vi xử lý lớn

nhất thế giới Intel cũng góp phần nào tạo ra một board phát triển đầy tiềm năng. Vi xử lý

400Mhz tương thích với tập lệnh 32 bit Intel Pentium với các đặc điểm như sau.

2

Page 3: Chuong Trinh Thuc Hanh 2

- Bộ nhớ cache L1 16Kb.

- Đơn lõi, đơn luồng, tốc độ không đổi.

- Hỗ trợ trạng thái ngủ ACPI.

- Một đồng hồ thời gian thực được tích hợp, sử dụng một pin 3V không có sẵn trên board,

cấp nguồn thông qua header.

- 11 Kb EEPROM có thể được lập trình thông qua thư viện EEPROM.

- Bộ nhớ flash Legacy SPI 8Mb để lưu trữ firmware (hay bộ nạp khởi động) hoặc Sketch

mới nhất. Ở giữa 256 Kb và 512 Kb được dành riêng cho việc lưu chương trình Sketch.

Việc upload diễn ra một cách tự động trừ khi có một bản nâng cấp được thêm vào

firmware.

- 512 Kb SRAM và 256 Mb DRAM được cho phép bởi firmware mặc định.

- Tùy chọn thêm vào thẻ nhớ micro SD cho phép không gian lưu trữ lên tới 32 Gb.

- Lưu trữ thông qua USB tương thích với chuẩn USB 2.0.

Galileo được thiết kế để hỗ trợ các Shield có điện áp hoạt động 3,3V hoặc 5V. Điện áp

hoạt động lõi của Galileo là 3,3V. Tuy nhiên, 1 jumper trên board cho phép chuyển đổi thành 5V

trên các chân I/O. Sự cung cấp này hỗ trợ cho các Shield Uno 5V và đây là thiết lập mặc định.

Nếu jumper bị chuyển vị trí, bộ chuyển đổi điện áp có thể không hoạt động và cung cấp điện áp

3,3V ở các chân I/O. Những đầu vào Analog còn lại có điện áp từ 0V tới 5V bất kể vị trí của

jumper. Sự đa năng trong cách sử dụng các chân trên board Galileo như sau.

- Chức năng vào/ra dữ liệu số/tương tự.

14 chân vào ra kỹ thuật số được đánh số từ D0 đến D13, trong đó có 6 chân có thể được

sử dụng như đầu ra PWM. Mỗi chân trong số đó đều có thể được sử dụng như input hay là

output. Điều đó thực hiện được nhờ vào các hàm pinMode(), digitalWrite() và digitalRead()

trong quá trình lập trình.Các chân hoạt động ở mức điện áp 3.3V hoặc 5V. Mỗi chân chịu được

dòng vào 10mA hoặc tối đa là 25mA và có điện trở kéo bên trong ( không kết nối theo mặc

định ) từ 5,6kOhm tới 10kOhm.

6 chân đầu vào analog là A0 tới A5, thông qua một IC chuyển đổi Analog to Digital

AD7298. Mỗi chân trong số chúng được cung cấp một độ phân giải ADC 10 bit hoặc 12 bit và

điện áp đầu vào từ 0V tới 5V, điện áp tham chiếu là 5V.

- Chức năng hỗ trợ chuẩn giao tiếp.

Bus I2C, TWI với chân SDA và SCL, cạnh đó là chân AREF.3

Page 4: Chuong Trinh Thuc Hanh 2

TWI: Chân A4 hay là chân SDA và chân A5 hay là chân SCL. Hỗ trợ giao tiếp TWI với

thư viện hỗ trợ là Wire Library.

Hình 2. Minh họa ký hiệu các chân vào/ra của Intel Galileo

SPI mặc định ở 4Mhz, có thể lập trình lên đến 25Mhz. Galileo sẽ không làm một SPI

slave mà chỉ có thể là SPI master, nó có thể hoạt động như một slave nhưng phải thông qua kết

nối USB client.

Giao tiếp UART có thể cấu hình tốc độ baud, và giao tiếp thông qua 3 chân là 0 (RX) và

1(TX).

ICSP: 6 chân trong mạch, phần cứng là 6 header có thể cắm vào.

- Chân Vin: khi sử dụng nguồn bên ngoài thì có thể cung cấp cho Galileo thông qua chân

này.

- Chân output 5V: được cung cấp bởi nguồn bên ngoài hoặc qua cổng USB. Dòng tối đa

cung cấp cho ngoại vi là 800mA.

- Chân output 3,3V: Cung cấp 3,3V qua bộ điều chỉnh trên mạch, dòng tối đa cung cấp cho

ngoại vi là 800mA.

- Chân GND là chân nối đất, sử dụng với mục đích tạo mạch kín khi cấp nguồn cho ngoại

vi.

4

Page 5: Chuong Trinh Thuc Hanh 2

- IOREF: Các chân IOREF trên Galileo cho phép 1 shield đính kèm với cấu hình thích ứng

với các điện áp cung cấp bởi board. Điện áp trên các chân IOREF được điều khiển bởi

một jumper trên board cho phép lựa chọn mức điện áp 3,3V hay 5V.

- Chân hay nút RESET, mức tích cực thấp để khởi động chạy lại phần mềm đã nạp từ đầu.

- Chân AREF không được sử dụng trên board Galileo. Việc cung cấp một điện áp tham

chiều từ bên ngoài không được hỗ trợ cho Galileo, mặc định điện áp tham chiều của

Galileo là 5V để đo điện áp đầu vào từ các Analog Input.

Ngoài ra board này còn hỗ trợ các khối chức năng thể hiện các nhiệm vụ mở rộng như

sau.

- Kết nối Ethernet 10/100.

- Khe cắm PCI Express đầy đủ, với những tính năng PCIe phù hợp.

- Kết nối USB Host 2.0. Hỗ trợ lên đến 128 thiết bị kết cuối.

- Kết nối USB Client. Sử dụng để nạp chương trình Sketch.

- 10 chân JTAG tiêu chuẩn sử dụng để gỡ rối (debug).

- Nút Reboot để khởi động lại vi xử lý.

- Các tùy chọn lưu trữ.

1.2 Phương pháp lập trình bằng trình biên dịch IDE

Chúng ta truy cập vào trang web http://arduino.cc/en/Main/Software và tải về chương

trình Arduino IDE phù hợp với hệ điều hành của máy mình bao gồm Windown, Mac OS hay

Linux. Đối với Windown có bản cài đặt (.exe) và bản Zip, đối với Zip thì chỉ cần giải nén và

chạy chương trình không cần cài đặt. Môi trường phát triển tích hợp (IDE) của Arduino là một

ứng dụng đa nền tảng được viết bằng Java.Nó được thiết kế để dành cho các nhà phát triển và

những người mới tập tành làm quen với lĩnh vực phát triển phần mềm. Nó bao gồm một trình

biên tập mã nguồn (code editor) với các chức năng như đánh dấu cú pháp, tự động kiểm tra phù

hợp dấu ngoặc và tự động canh lề, cũng như biên dịch (complie) và tải (upload) chương trình lên

bo. Một chương trình hoặc mã nguồn viết cho Arduino được gọi là một sketch.

5

Page 6: Chuong Trinh Thuc Hanh 2

Hình 3. Minh họa giao diện lập trình Arduino IDE

Các chương trình Arduino được viết bằng C hoặc C++. Arduino IDE đi kèm với một thư

viện phần mềm được gọi là "Wiring", từ project Wiring gốc, có thể giúp các thao tác input/output

được dễ dàng hơn. Người dùng chỉ cần định nghĩa 2 hàm để tạo ra một chương trình vòng thực

thi (cyclic executive) có thể chạy được.

Arduino IDE là nơi để soạn thảo chương trình, kiểm tra lỗi và nạp chương trình cho

Arduino. Giao diện này gồm có 3 vùng rõ ràng

- Vùng Toolbar có chứa các phím lệnh như kiểm tra chương trình, nạp chương trình, lưu,

mở hay tạo mới chương trình.

Hình 4. Minh họa vùng Toolbar trên giao diện Arduino IDE

Các nút chức năng có nhiệm vụ như sau.

- Kiểm tra chương trình viết có đúng cú pháp hay không- Verify Sketch

6

Page 7: Chuong Trinh Thuc Hanh 2

- Biên dịch chương trình và nạp vào board Arduino- Complie and upload sketch to

arduino

- Tạo một sketch mới- New Sketch

- Mở một sketch đã lưu trước đó- Open Sketch

- Lưu chương trình lại- Save Sketch

- Mở màn hình hiển thị Serial Monitor sử dụng cài này khi trong Sketch có lệnh in ra

màn hình hay gửi ký tự thông qua chuẩn RS232 - Open Serial Monitor

-Current tab: Sketch đang được mở hiện tại, có thể đồng thời có nhiều tab tương ứng với

nhiều sketch hiện trên thanh tab.

-Tab menu: Vào menu để chọn các chỉ dẫn.

Ngoài ra, trong Tool menu ta quan tâm các mục mạch và cổng nối tiếp như mục Board. Ở

đây việc lựa chọn bo mạch cho phù hợp với loại bo mà chúng ta đang sử dụng đóng vai trò hết

sức quan trọng. Nếu sử dụng loại bo mạch khác thì phải chọn đúng loại bo mạch, nếu chọn sai

thì nạp chương trình vào chip sẽ bị báo lỗi.

Hình 5. Minh họa chọn board Arduino và cổng COM giao tiếp phù hợp

Cổng giao tiếp giữa máy tính và Board được thiết lập thông qua tab Serial Port: đây là nơi

lựa chọn cổng COM của Arduino. Khi chúng ta cài đặt driver thì máy tính sẽ hiện thông báo tên

7

Page 8: Chuong Trinh Thuc Hanh 2

cổng COM của Arduino là bao nhiêu( xem ở phần Device Manager), ta chỉviệc vào Serial Port

chọn đúng cổng COM để nạp chương trình, nếu chọn sai thì không thể nạp chương trình cho

Arduino được.

- Vùng viết chương trình được đánh số dòng như hình vẽ. Đây là nơi để viết các dòng lệnh

điều khiển hoạt động của VĐK.

Hình 6. Minh họa vùng viết chương trình.

Nội dung trong void setup() {……} là các khai báo ban đầu như cấu hình ngõ vào ra, có sử

dụng cảm biến hay không…

Nội dung trong void loop(){……} là các dòng lệnh thực hiện một cách liên tục như đặt các

chân ở logic cao/thấp, tạo xung PWM…..

- Vùng thông báo chính là vùng có giao diện Đen và nằm ở cuối của Giao diện, các quá

trình nạp chương trình thành công hay các lỗi, vị trí lưu file đều được thông báo ở vùng này.

8

Page 9: Chuong Trinh Thuc Hanh 2

Hình 7. Minh họa vùng thông báo.

- Current line number: Dòng của con trỏ hiện tại (Ví dụ 33)

- Current arduino model: Dòng board Arduino đang sử dụng (Ví dụ Intel Galile Gen2)

- Your system’s name for current USB port: Tên cổng giao tiếp giữa máy tính và VĐK ( Ví

dụ COM1)

9

Page 10: Chuong Trinh Thuc Hanh 2

PHẦN 2: NỘI DUNG CÁC BÀI THỰC HÀNH

BÀI 1: ĐIỀU KHIỂN HOẠT ĐỘNG LED BẰNG MÁY TÍNH

1. Mục đích và yêu cầu

Qua bài thực hành này sinh viên sẽ nắm rõ quá trình trao đổi dữ liệu giữa máy tính (PC)

và vi điều khiển trong Kit phát triển Arduino nhằm điểu khiển hoạt động của LED.

Yêu cầu sinh viên cần nắm những kiến thức như sau.

- Kiến thức về cấu trúc máy tính (PC).

- Kiến thức về cấu trúc vi điều khiển(VĐK) trong Kit phát triển Arduino Intel Gallileo.

- Kiến thức về cấu trúc LED đơn, LED RGB và Laser Diode.

- Lập trình giao diện trên PC bằng các phần mềm như Visual basic, Visual C…..

- Mô phỏng hoạt động giao tiếp giữa VĐK và PC bằng các phần mềm như Proteus ISIS

Professional…

2. Thiết bị và phần mềm cần thiết

- Máy tính cá nhân hoặc laptop…

- Kit Arduino Intel Galileo Gen 1 hoặc 2 và board tích hợp LED, Laser Diode….

- Giao diện lập trình IDE cho Arduino Intel Galileo.

3. Tổng quan lý thuyết

3.1 LED đơn và LED RGB

LED đơn là linh kiện phát quang dựa trên hiện tượng tái hợp lỗ trống/eletron ở chân bán dẫn.

Ngõ ra của LED gồm hai chân Anode và Cathode có màu sắc hoàn toàn khác nhau tùy vào

phương pháp chế tạo Bằng cách ghép tổ hợp các LED nối tiếp hay song song chúng ta sẽ tạo ra

10

Page 11: Chuong Trinh Thuc Hanh 2

mạch điện phát ra màu sắc như ý. LED này sẽ phát sáng khi điện áp đầu Anode cao hơn Cathode

với một giá trị hoàn toàn xác định tùy theo từng loại.

LED RGB là loại LED siêu sáng được tích hợp 3 màu trong một con LED duy nhất (R = red

= đỏ; G = Green = xanh lá; B = Blue = Xanh dương). Loại này gồm 4 chân, trong đó có một

chân nối dương nguồn(Anode chung) hoặc âm nguồn (Cathode chung) và 3 chân RGB. Bằng

cách điều khiển các chân R,G hay B của LED, chúng ta sẽ tạo ra màu sắc phát ra tùy ý. Phương

pháp được sử dụng trong điều khiển loại LED này là phát xung có độ rộng thay đổi PWM.

Hình 8. Minh họa hình dạng và sơ đồ chân LED RGB

Trong sơ đồ mạch thông thường, các LED này đều được đấu thêm điện trở để hạn chế tác

dụng đánh thủng của dòng điện.(xem thêm phụ lục)

3.2 Kỹ thuật điều chế độ rộng xung PWM

Kỹ thuật điều chế độ rộng xung(PWM - Pulse Width Modulation) là kỹ thuật cho phép

điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay đổi độ rộng

của chuỗi xung vuông dẫn đến sự thay đổi điện áp trung bình. Các xung PWM khi biến đổi thì có

cùng 1 tần số và khác nhau về độ rộng của sườn dương hay hoặc là sườn âm. Đồ thị dạng sóng

ứng với các tỷ lệ phần trăm điều chế. Cụ thể PWM là phương pháp được thực hiện theo nguyên

tắc đóng ngắt nguồn của tải và một cách có chu kì theo luật điều chỉnh thời gian đóng cắt.

11

Page 12: Chuong Trinh Thuc Hanh 2

Hình 9. Minh họa phần trăm điều chế xung PWM.

Với các đặc điểm như trên, PWM được ứng dụng nhiều trong điều khiển hoạt động của các

thiết bị. Ứng dụng điển hình nhất là điều khiển tốc độ động cơ và các bộ xung áp, điều áp... Ở

đây bằng cách điều khiển xung PWM thích hợp chúng ta hoàn toàn có thể thực hiện phối màu

LED RGB một cách túy ý.

Lưu ý: Chế độ phát PWM của Board Intel Galileo 2 có độ phân giải 12 bit lên đến

4096 giá trị.

3.3 Mã hóa bằng mã Morse

Mã Morse hay mã Moóc-xơ là một loại mã hóa ký tự dùng để truyền các thông tin điện

báo. Mã Morse dùng một chuỗi đã được chuẩn hóa gồm các phần tử dài và ngắn để biểu diễn các

chữ cái, chữ số, dấu chấm, và các kí tự đặc biệt của một thông điệp. Các phần từ ngắn và dài có

thể được thể hiện bằng âm thanh, các dấu hay gạch, hoặc các xung, hoặc các kí hiệu thường được

gọi là "chấm" và "gạch" hay "dot" và "dash" trong tiếng Anh.

12

Page 13: Chuong Trinh Thuc Hanh 2

Hình 10. Bảng mã Morse quốc tế.

Quy tắc phát mã Morse được mô tả như sau.

- Thời gian 01 chấm tương đương 01 đơn vị thời gian chuẩn.

- Thời gian 01 gạch tương đương 03 đơn vị thời gian chuẩn.

- Thời gian giữa các chấm và gạch trong một chữ cái là 01 đơn vị thời gian chuẩn.

- Thời gian giữa các chữ cái là 03 đơn vị thời gian chuẩn.

- Thời gian giữa các từ là 07 đơn vị thời gian chuẩn.

Lưu ý: Nếu phát mã Morse bằng ánh sáng thì 01 đơn vị thời gian chuẩn phải được

quy định trước.

3.4 Sơ đồ mạch và nguyên tắc hoạt động mạch tích hợp các LED

Hình 10. Minh họa kết nối giữa khối chỉ thị LED và Arduino Intel Galileo 2

Đấu nối giữa các thiết bị và board Intel Galileo như sau.

- LED1 được nối với đầu vào D7 của VĐK

- LED2 được nối với đầu vào D6 của VĐK

- LED3 được nối với đầu vào D5 của VĐK

- LED4 được nối với đầu vào D4 của VĐK

- LED5 được nối với đầu vào D3 của VĐK

- Laser Diode được nối với đầu vào D2 của VĐK

- Chân R của LED RGB được nối với đầu vào D12 của VĐK

- Chân G của LED RGB được nối với đầu vào D11 của VĐK

13

Page 14: Chuong Trinh Thuc Hanh 2

- Chân B của LED RGB được nối với đầu vào D10 của VĐK

Nguyên tắc hoạt động của các thiết bị đã được trình bày ở phần tổng quan lý thuyết.

4. Trình tự thực hành

- Bước 1: Xây dựng chương trình tạo giao diện bảng điều khiển hoạt động của các LED bằng phần mềm

Visual basic hay Delphi…

Hình 11. Minh họa chương trình giao diện điều khiển LED đơn

được viết bằng Visual Basic

- Bước 2: Lập trình điều khiển các LED đơn và LED RGB bằng phần mềm IDE (Lệnh điều

khiển mức cao thấp của các cổng) và giao tiếp giữa VĐK và PC (Tập lệnh giao tiếp vào ra…. ).

Hoạt động của các LED này được xây dựng theo ý riêng của tác giả.

- Bước 3: Mô phỏng hoạt động giao tiếp cổng COM giữa PC và VĐK bằng phần mềm Proteous

và COM ảo (Bước này có thể có hoặc không).

- Bước 5: Tiến hành các đấu nối phần cứng cần thiết.

- Bước 6: Thực hiện các bài tập như sau.

Bài 1. Sử dụng bảng điều khiển trên máy tính để điều khiển hoạt động của LED đơn.

Bài 2. Sử dụng bảng điều khiển trên máy tính để điều khiể hoạt động LED RGB.

Bài 3. Nhập ký tự bằng bàn phím máy tính và phát ra mã Morse tương ứng trên cơ sở đóng/ngắt

Laser diode hàng chữ sau: DTVT

14

Page 15: Chuong Trinh Thuc Hanh 2

BÀI 2: HIỂN THỊ LCD 16x2 THEO NỘI DUNG NHẬP TỪ MÁY TÍNH

1. Mục đích và yêu cầu

Qua bài thực hành này sinh viên sẽ nắm rõ quá trình trao đổi dữ liệu giữa máy tính (PC)

và vi điều khiển trong Kit phát triển Arduino nhằm điểu khiển hoạt động của màn hình LCD

16x2.

Yêu cầu sinh viên cần nắm những kiến thức như sau.

- Kiến thức về cấu trúc máy tính (PC).

- Kiến thức về cấu trúc vi điều khiển(VĐK) trong Kit phát triển Arduino Intel Gallileo.

- Kiến thức về cấu trúc phần cứng và nguyên tắc hoạt động màn hình LCD 16x2.

- Kiến thức về cấu trúc phần cứng và nguyên tắc hoạt động cảm biến siêu âm HC-SRF05.

- Lập trình giao diện trên PC bằng các phần mềm như Visual basic, Visual C…..

- Mô phỏng hoạt động giao tiếp giữa VĐK và PC bằng các phần mềm như Proteus ISIS

Professional…

2. Thiết bị cần thiết

- Máy tính cá nhân hoặc laptop…

- Kit Arduino Intel Galileo Gen 1 hoặc 2 và board tích hợp LCD 16x2 và HC-SRF05

- Giao diện lập trình IDE cho Arduino Intel Galileo.

3. Tổng quan lý thuyết

3.1 Màn hình LCD 16x2

15

Page 16: Chuong Trinh Thuc Hanh 2

Hình 12 Sơ đồ chân và minh họa đấu nối giữa LCD và Arduino

Bảng Chức năng của các chân LCD

Chân Ký hiệu Mô tả

1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND

của mạch điều khiển.

2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với

VCC=5V của mạch điều khiển.

3 VEE Điều chỉnh độ tương phản của LCD.

4 RS

Chân chọn thanh ghi (Register select). Nối chân RS với logic “0”

(GND) hoặc logic “1” (VCC) để chọn thanh ghi.

Logic “0”: bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của

LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của

LCD (ở chế độ “đọc” - read).

Logic “1”: bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR

bên trong LCD.

Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0”

để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở

16

Page 17: Chuong Trinh Thuc Hanh 2

5 R/W chế độ đọc.

6 E

Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-

DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân

E.

Ở chế độ ghi: dữ liệu ở bus sẽ được LCD chuyển vào(chấp

nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-

low transition) của tín hiệu chân E.

Ở chế độ đọc: dữ liệu sẽ được LCD xuất ra DB0-DB7 khi

phát hiện cạnh lên (low-to-high transition) ở chân E và được

LCD giữ ở bus đến khi nào chân E xuống mức thấp.

7 - 14

DB0 đến

DB7

Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có

2 chế độ sử dụng 8 đường bus này:

Chế độ 8 bit: dữ liệu được truyền trên cả 8 đường, với bit

MSB là bit DB7.

Chế độ 4 bit: dữ liệu được truyền trên 4 đường từ DB4 tới

DB7, bit MSB là DB7.

15 - Nguồn dương cho đèn nền.

16 - GND cho đèn nền.

Hoạt động của LCD được điều khiển thông qua 3 tín hiệu E, RS, R/W.

Tín hiệu E là tín hiệu cho phép gửi dữ liệu. Để gửi dữ liệu đến LCD, chương trình phải

thiết lập E=1, sau đó đặt các trạng thái điều khiển thích hợp lên RS, R/W và bus dữ liệu, cuối

cùng là đưa E về 0. Hoạt động chuyển đổi từ cao-xuống-thấp cho phép LCD nhận dữ liệu hiện

thời trên các đường điều khiển cũng như trên bus dữ liệu.

Tín hiệu RS là tín hiệu cho phép chọn thanh ghi (Register Select). Khi RS=0, dữ liệu

được coi như là một lệnh hay một chỉ thị đặc biệt (như là xóa màn hình, đặt vị trí con trỏ…). Khi

RS=1, dữ liệu được coi là dữ liệu dạng văn bản và sẽ được hiển thị trên màn hình.

17

Page 18: Chuong Trinh Thuc Hanh 2

Tín hiệu R/W là tín hiệu “Đọc/Ghi”. Khi R/W=1, thông tin trên bus dữ liệu được ghi vào

LCD. Khi R/W=0, chương trình sẽ đọc LCD.

Bus dữ liệu gồm 4 hoặc 8 đường tùy thuộc vào chế độ hoạt động mà người sử dụng lựa

chọn.

Chú ý: Trong bài thực hành, chúng ta sử dụng chế độ Bus 4 bit để gửi dữ liệu đến LCD.

3.2 Cảm biến HC- SRF05

Hình 12. Cảm biến siêu âm HC- SRF05 và mình họa đấu nối giữa Arduino và SRF-5

Module SRF05 được nâng cấp thêm từ SRF04: khoảng cách xa hơn 1m và có thêm một

chế độ hoạt động. Nếu chân OUT của cảm biến được nối xuống đất thì SRF05 sẽ sử dụng chung

một chân cho cả Trigger và Echo để có thể tiết kiệm chân cho vi điều khiển, đồng thời thêm vào

một khoảng delay nhỏ để hỗ trợ cho những vi điều khiển cũ. Khi chân OUT không nối (chân

OUT có điện trở kéo lên Vcc, khi để trống nó sẽ nhận mức điện áp Vcc)thì SRF05 sẽ hoạt động

giống như SRF04 với hai chân riêng biệt cho Trigger và Echo.

Bảng thông số của SRF05

Điện áp hoạt động 5VDC

Sai số ± 0.3cm

Khoảng cách phát hiện 2 - 450cm

Dòng cung cấp <2mA

Vcc Chân cấp nguồn 5V

18

Page 19: Chuong Trinh Thuc Hanh 2

Sơ đồ chân

Trigger Chân ngõ vào kích hoạt phát sóng siêu

âm

Echo Chân ngõ ra tín hiệu phản hồi về từ

cảm biến

OUT Chân chế độ

GND Chân nối đất

SRF05 có thể thiết lập hai chế độ hoạt động khác nhau thông qua chân chế độ OUT. Nối

hoặc không nối chân OUT xuống GND cho phép cảm biến được điều khiển thông qua giao tiếp

dùng một chân hay hai chân I/O.

- Chế độ 1: Tương ứng SRF04 – tách biệt kích hoạt và phản hồi

Chế độ này sử dụng riêng biệt chân kích hoạt và chân phản hồi, đây là chế độ đơn giản nhất

để sử dụng. Nếu chân OUT của cảm biến không được kết nối xuống đất thì SRF05 sẽ hoạt động

ở chế độ này.

Hình 13. Giản đồ định thời SRF05 chế độ 1.

- Chế độ 2:Dùng một chân cho cả kích hoạt và phản hồi

Với chế độ này, SRF05 sử dụng một chân duy nhất cho cả tín hiệu kích hoạt và phản hồi.

Cảm biến hoạt động ở chế độ này khi chân chế độphải được kết nối xuống đất. Tín hiệu hồi tiếp

19

Page 20: Chuong Trinh Thuc Hanh 2

sẽ xuất hiện trên cùng một chân với tín hiệu kích hoạt. SRF05 sẽ không tăng dòng phản hồi cho

đến 700uS sau khi kết thúc các tín hiệu kích hoạt.

Hình 14. Giản đồ định thời SRF05 chế độ 2.

Module cảm biến siêu âm SRF05 đo khoảng cách đến vật chắn bằng sóng siêu âm.

Cảm biến gồm một bộ phát và một bộ thu sóng siêu âm. Sóng siêu âm từ đầu phát truyền đi trong

không khí, gặp vật cản sẽ phản xạ ngược trở lại và được ghi nhận ở phía đầu thu. Qua đó xác

định được khoảng thời gian từ lúc phát sóng siêu âm tới lúc nó phản xạ về đầu thu sẽ quy đổi

được khoảng cách từ cảm biến tới vật thể. Ở đây ta xem vận tốc truyền âm thanh trong không khí

là một giá trị xác định trước và ít thay đổi.

Hình 15. Minh họa nguyên lý thu phát siêu âm.

Cụ thể các bước tiến hành như sau.

Bước 1: Kích hoạt

Khi muốn SRF05 hoạt động ta chỉ cần cung cấp một đoạn xung ngắn có thời gian 10µS

kích hoạt đầu vào trên chân Trigger để bắt đầu đo khoảng cách. Sau khi đã nhận được xung từ

chân Trigger thì SRF05 sẽ phát ra một dãy8 xung để kích hoạt quá trình phátsóngsiêu âm ở tần

số 40KHz. Khi đã hoàn thành việc phát 8 xung này thì SRF05 sẽ kéo chân Echo lên mức cao và

sau đó chờ phản hồi.Thời gian giữa hai lần kích hoạt là 50mS hoặc 20 lần mỗi giây. Trong đó 20

Page 21: Chuong Trinh Thuc Hanh 2

thời gian chờ 50ms được nhà sản xuất khuyến nghị để tránh gây ra sai phản hồi ở lần đo kế tiếp

kể cả trong trường hợp SRF05 phát hiện một đối tượng gần và xung phản hồi ngắn hơn.

Chú ý:SRF05 chỉ có thể nhận xung trên chân Trigger tối đa là 0,05s. Do đó việc kích

xung trên chân Trigger phải phù hợp thì SRF05 mới hoạt động chính xác.

Bước 2: Chờ phản hồi

Chân Echo đang được kéo lên ở mức cao sau khi đã kích hoạt phát sóng siêu âmcho đến

khi xuất hiệnsóng siêu âm phản xạ. Cụ thể, nếu có vật cản trong vùng hoạt động của cảm biến thì

sẽ có sóng phản xạ về phía đầu thu của cảm biến; kết quả là chân Echo sẽ được kéo xuống mức

thấp. Dựa vào tính chất độ rộng của xung trên chân Echo tỉ lệ với khoảng cách tới vật cản, ta

hoàn toàn có thể để tính toán khoảng cách theo inch/cm hoặc đơn vị đo khác. Trong trường hợp

đầu thu không thu được sóng phản xạ không thì SRF05 sẽ tự động hạđiện áp ở chân Echo xuống

mức thấp sau 30 mS.

Bước 3: Tính toán khoảng cách

Sóng siêu âm truyền trong không khí có vận tốc phụ thuộc vào nhiệt độ môi trường và có

thể tính được. Bằng cách sử dụng bộ timer trong chip vi điều khiển ta có thể đo được độ rộng

xung của tín hiệu trên chân Echo, từ đó ta có thể tính được khoảng cách từ cảm biến tới vật cản.

Bộ timer hoạt động khi chân Echo được kéo lên mức cao và dừng đếm thời gian khi Echo kéo

xuống mức thấp. Điều kiện để SRF50 xác định được chính xác khoảng cách đó là giá trị độ rộng

xung nằm trong khoảng 100µS đến 25mS. Độ rộng dưới 100µS cho biết vật cản quá gần cảm

biến dẫn đến sai lệch kết quả. Trong khi đó độ rộng xung cao hơn 25mS có nghĩa rằng vật cản

nằm ngoài tầm đo của cảm biến.

Gọi T là thời gian từ lúc phát siêu âm cho đến khi nhận được sóng phản hồi[µS]

t là nhiệt độ môi trường [0C]

V là vận tốc truyền sóng siêu âm trong không khí theo nhiệt độ [m/s] và được tính theo

công thức:

S là khoảng cách cần tìm [cm]

21

Page 22: Chuong Trinh Thuc Hanh 2

Thời gian từ lúc phát sóng siêu âm đến khi nhận sóng phản hồi là thời gian sóng đi được

gấp hai lần khoảng cách từ cảm biến tới vật cản. Do đó khoảng cách cần tìm được xác định như

sau:

3.3 Sơ đồ và nguyên tắc hoạt động của mạch tích hợp LCD 16x2 và HC-SRF05

Hình 16: Minh họa kết nối giữa Arduino Intel Galileo 2 và board tích hợp LCD

Đấu nối giữa LCD và board Intel Galileo như sau.

- Chân R/W được nối với đất (GND).

- Chân E được nối với D11 của VĐK

- Chân RS được nối với D12 của VĐK

- Chân D4-D7 được nối lần lượt với D5,D4,D3 và D2 của VĐK

Đấu nối giữa cảm biến HC-SRF05 và board Intel Galileo như sau.

- Chân Trigger được nối với D6 của VĐK

- Chân Echo được nối với D7 của VĐK

Nguyên tắc hoạt động của các thiết bị đã được trình bày ở phần tổng quan lý thuyết.

22

Page 23: Chuong Trinh Thuc Hanh 2

4. Trình tự thực hành

- Bước 1: Xây dựng chương trình tạo giao diện nhập ký tự từ bàn phím PC và hiển thị giá trên LCD …

Hình 17. Minh họa chương trình giao diện nhập ký tự từ bàn phím và sau đó hiển thị

trên LCD được viết bằng Visual Basic

- Bước 2: Sử dụng phần mềm IDE xây dựng chương trình hiển thị trên LCD các ký tự nhập từ

bàn phím PC cho VĐK.

- Bước 3: Mô phỏng hoạt động giao tiếp cổng COM giữa PC và VĐK bằng phần mềm Proteous

và COM ảo (Bước này có thể có hoặc không).

- Bước 4: Tiến hành các đấu nối cần thiết.

- Bước 5: Thực hiện các bài như sau.

Bài 1. Nhập ký tự từ bàn phím PC. Kiểm tra hiển thị trên phần mềm giao diện cũng như màn

hình LCD 16x2.

Bài 2. Tiến hành đo khoảng cách bằng cảm biến siêu âm và hiển thị kết quả trên màn hình PC.

23

Page 24: Chuong Trinh Thuc Hanh 2

BÀI 3: ĐIỀU KHIỂN HOẠT ĐỘNG ĐỘNG CƠ MỘT CHIỀU

VÀ ĐỘNG CƠ BƯỚC BẰNG MÁY TÍNH

1. Mục đích và yêu cầu

Qua bài thực hành này sinh viên sẽ nắm rõ quá trình trao đổi dữ liệu giữa máy tính (PC)

và vi điều khiển trong Kit phát triển Arduino nhằm điểu khiển hoạt động của động cơ DC và

động cơ bước. Qua đó nắm được hoạt động của cảm biến mã quang- Encoder.

Yêu cầu sinh viên cần nắm những kiến thức như sau.

- Kiến thức về cấu trúc máy tính .

- Kiến thức về cấu trúc vi điều khiển trong Kit phát triển Arduino Intel Gallileo.

- Kiến thức về cấu trúc phần cứng động cơ DC, động cơ bước và cảm biến mã quang.

- Lập trình giao diện trên PC bằng các phần mềm như Visual basic, Visual C…..

- Mô phỏng hoạt động giao tiếp giữa VĐK và PC bằng các phần mềm như Proteus ISIS

Professional…

2. Thiết bị cần thiết

- Máy tính cá nhân hoặc laptop…

- Kit Arduino Intel Galileo Gen 1 hoặc 2, board tích hợp động cơ DC - động cơ bước-

Encoder.

- Giao diện lập trình IDE cho Arduino Intel Galileo.

3. Tổng quan lý thuyết

3.1 Tổng quan về động cơ bước

Động cơ bước được phân loại gồm động cơ nam châm vĩnh cửu, động cơ từ trở biến thiên và

động cơ hỗn hợp. Động cơ bước có nhiều loại góc quay phân biệt từ 90 độ đến 0.72 độ hoặc nhỏ

hơn.

24

Page 25: Chuong Trinh Thuc Hanh 2

- Động cơ nam châm vĩnh cửu có cấu trúc gồm các cuộn dây quấn trên roto, stato là các nam

châm vĩnh cửu. Loại này có cấu trúc gần giống với động cơ AC đồng bộ.

Hình 18. Minh họa một loại động cơ bước

- Động cơ có từ trở biến thiên có cấu trúc là roto làm bằng sắt nhẹ, số cực của roto ít hơn

số cực của stato, mỗi cuộn dây được quấn trên hai cực của stato đối diện nhau. Loại này còn

được gọi là động cơ phản kháng, động cơ phản kháng có góc quay giới hạn từ 1.80 đến 300 trong

chế độ điều khiển bước đủ, moment hãm từ 1 đến 50Ncm, tần số khởi động lớn nhất là 1 Khz và

tần số làm việc lớn nhất trong điều kiện không tải là 20Khz.

- Động cơ bước hỗn hợp: Đây là loại động cơ cảm ứng, có góc bước thay đổi trong

khoảng 0.36 độ đến 15 độ trong chế độ moment đủ, moment hãm từ 3 đến 1000Ncm, tần số khởi

động lớn nhất là 40Khz. Đây là loại động cơ được sử dụng nhiều hơn cả vì nó kết hợp được ưu

điểm của cả hai loại động cơ nam châm vĩnh cửu và động cơ biến từ trở.

25

Page 26: Chuong Trinh Thuc Hanh 2

Hình 19. Minh họa động cơ bước loại hỗn hợp và loại nam châm vĩnh cữu

Phương pháp điều khiển động cơ bước gồm điều khiển ba đối tượng: Góc quay, chiều

quay và tốc độ quay.

- Điều khiển góc quay: Động cơ bước có thể điều khiển được góc quay một cách rất chính xác,

góc quay nhỏ nhất mà động cơ bước quay được hiểu như là một bước. Có hai phương pháp điều

khiển phổ biến: phương pháp điều khiển đủ bước và phương pháp điều khiển nửa bước. Điều

khiển bước đủ là phương pháp điều khiển mà số bước tối đa trong một chu kỳ bằng số cặp cực.

Phương pháp này được thực hiện bằng cách kích dẫn cùng lúc hai cực đối xứng tạo moment

quay cùng chiều.

Hình 20. Phương pháp điều khiển bước đủ.

Phương pháp nửa bước là phương pháp điều khiển mà số bước tối đa trong một chu kỳ

nhỏ hơn số cặp cực. Cách thức đơn giản nhất của phương pháp này là kích dẫn lần lượt các cực

từ của stator. Khi đó số bước quay bằng với số cực stator. Ngoài ra, ta cũng có thể kích dẫn hai

cực liên tiếp để tạo thành bước nhỏ hơn.

Như vậy nếu sử dụng mạch điều khiển tự động, ta cần xuất một chuỗi xung đưa đến các

cuộn dây của động cơ, với tần số hợp lý thì động cơ sẽ quay với tốc độ hợp lý và theo yêu cầu

thiết kế. Qua đó ta xác định được tốc độ thực thế của động cơ. Thông qua việc điều khiển các

dãy xung đưa đến các cuộn dây của động cơ thì ta hoàn toàn có thể điều khiển cho động cơ quay

được các góc như ý muốn và dựng lại ở vị trí mong muốn.

26

Page 27: Chuong Trinh Thuc Hanh 2

- Điều khiển chiều quay: Việc cấp chuỗi xung vào các cực động cơ bước giúp động cơ

quay một góc xác định. Để đổi chiều quay của động cơ ta chỉ việc đảo thứ tự các bit của xung

cấp vào các cực từ của động cơ bước.

- Điều khiển tốc độ quay: Điều khiển tốc độ quay của động cơ bước bằng cách tăng hoặc

giảm thời gian cách nhau giữa các lần cấp xung, hay nói cách khác là thay đổi tần số cấp xung

điện cho các cực từ của động cơ bước.

3.2 Tổng quan về động cơ điện DC

Động cơ điện một chiều DC gồm hai phần chính:

- Stato (phần đứng yên) với các cực từ bằng nam châm vĩnh cửu hoặc nam châm điện.

- Roto (phần chuyển động) với các cuộn dây quấn, cổ góp cùng chổi điện.

Chức năng của chổi than – vành góp là để đưa điện áp một chiều vào cuộn dây phần ứng

và đổi chiều dòng điện một chiều trong cuộn dây phần ứng. Số lượng chổi than bằng số lượng

cực từ (một nửa có cực tính dương và một nửa có cực tính âm).

Hình 21. Minh họa cấu tạo động cơ điện một chiều

Để động cơ điện một chiều hoạt động, ta cần cung cấp cho nó một dòng điện một chiều.

Điều khiển động cơ điện một chiều là điều khiển chiều quay hoặc điều khiển tốc độ quay của

động cơ.

Chiều quay được điều khiển chiều một cách đơn giản bằng việc thay đổi cực tính trên 2

cực của động cơ một chiều. Thông qua phần mềm và sự truyển tải điện qua mạch công suất ta dễ

dàng thay đổi chiều quay của động cơ điện một chiều.

27

Page 28: Chuong Trinh Thuc Hanh 2

Hình 22. Minh họa thay đổi chiều quay động cơ điện một chiều.

Để điều khiển tốc độ quay động cơ điện một chiều ta phải thay đổi điện áp đặt lên hai cực

của động cơ. Ở khía cạnh kỹ thuật số chúng ta không thể thay đổi điện áp một cách trực tiếp mà

phải thông qua phương pháp điều chế độ rộng xung PWM (Pulse Width Modulation). Việc thay

đổi tỷ lệ thời gian phát xung mức 1 và mức 0 làm thay đổi điện áp trung bình Vtb. Độ rộng xung

sẽ quyết định Vtb từ đó điều khiển được tốc độ quay của động cơ, Vtb càng lớn thì động cơ quay

càng nhanh và tốc độ tối đa khi độ rộng xung là toàn chu kỳ xung (100%) tương đương với điện

áp vào động cơ là điện áp một chiều liên tục.

3.3 Tổng quan về cảm biến lập mã quang - Encoder

Hình 23. Minh họa cảm biến lập mã quang – Encoder và cấu tạo chính bên trong

Cảm biến lập mã quang hay còn gọi là Encoder thường được sử dụng vào mục đích đo

quãng đường, đo tốc độ quay hoặc nhận biết chiều quay. Bề ngoài cảm biến lập mã quang khá

giống với động cơ điện DC, tuy nhiên cấu tạo bên trong thì lại hoàn toàn khác.Cấu tạo bên trong

gồm hai phần chính:

28

Page 29: Chuong Trinh Thuc Hanh 2

- Bộ phận truyền nhận ánh sáng: gồm một nguồn phát ánh sang LED và một bộ tách sóng

quang (Photodiode).

- Đĩa quay tạo mã: là một bảng mỏng tròn có các khối tạo mã ở mép đĩa cách đều nhau. Nó

cho phép ánh sang từ nguồn phát LED truyền thẳng đến bộ tách sóng quang hoặc không cho

phép truyền qua.

Nguyên tắc hoạt động của Encoder được mô tả như sau. Để tạo mã xung thì mỗi bộ

Encoder sẽ sử dụng hai LED phát và tương ứng với hai bộ tách sóng để tạo tín hiệu ra có pha

vuông góc với nhau, mục đích là để xác định chiều quay của đĩa (tương ứng với chiều quay của

động cơ).Tốc độ quay của đĩa được xác định nhờ vào tần số của tín hiệu, chiều quay được xác

định dựa vào việc xem tín hiệu nào sớm pha hay muộn pha hơn. Khi Encoder ở trạng thái tiến,

xung ở đầu ra A sẽ sớm pha hơn xung ở đầu ra B và lệch pha 900. Ngược lại, khi ở trạng thái lùi

xung ở đầu ra A sẽ muộn pha 900 so với xung ở đầu ra B. Vậy để xác định chiều động cơ, nối

đầu ra B vào một chân I/O và cấu hình là đầu vào. Trong trình phục vụ ngắt ngoài khi có cạnh

xuống của xung kênh A, xét trạng thái chân I/O đấy và đưa ra kết luận về chiều quay động cơ.

Hình 24. Giản đồ xung mô tả hai chiều quay của Encoder.

3.4 Sơ đồ mạch và nguyên tắc hoạt động board điều khiển hoạt động của các động cơ

29

Page 30: Chuong Trinh Thuc Hanh 2

Hình 25. Minh họa đấu nối giữa Arduino Intel Galileo 2

và board tích hợp điều khiển động cơ

Kết nối giữa các thiết bị và board Intel Galileo như sau.

- Chân Step1 của động cơ bước được nối với đầu vào D8 của VĐK

- Chân Step2 của động cơ bước được nối với đầu vào D9 của VĐK

- Chân Step3 của động cơ bước được nối với đầu vào D10 của VĐK

- Chân Step4 của động cơ bước được nối với đầu vào D11 của VĐK

- Chân DC A của động cơ DC được nối với đầu vào D3 (PWM) của VĐK

- Chân DC B của động cơ DC được nối với đầu vào D5 (PWM) của VĐK

- Đầu ra Encoder A của cảm biến lập mã quang được nối với đầu vào D12 của VĐK

- Đầu ra Encoder B của cảm biến lập mã quang được nối với đầu vào D13 của VĐK

30

Page 31: Chuong Trinh Thuc Hanh 2

Hình 26. Mạch nguyên lý khối công suất động cơ DC.

- Mạch cầu H đóng vai trò làm đệm công suất để cung cấp nguồn cũng như khuếch đại tín

hiệu điều khiển từ khối vi xử lý trung tâm

- Các tín hiệu điều khiển đầu vào được nối với hai chân cắm 2 và 3 của JP9. Nguồn cấp

cho động cơ là 12VDC. Hai tín hiệu đầu vào được đưa vào mạch cầu H sau khi đã qua

cách ly quang PC817.

- Gọi tín hiệu vào từ header 2 là tín hiệu A, tín hiệu vào từ header 3 là tín hiệu B.

- Giả sử tín hiệu vào A là mức 1 và B là mức 0. Lúc này transistor Q5 ngắt, Q7 dẫn, Q6

dẫn, Q8 ngắt. Dòng điện chạy từ Vcc 12V qua Q6 qua động cơ DC qua Q7 và xuống

GND, động cơ chạy thuận.

- Ngược lại khi tín hiệu vào A là mức 0 và B là mức 1. Lúc này transistor Q5 dẫn, Q7 ngắt,

Q6 ngắt, Q8 dẫn. Dòng điện chạy từ Vcc 12V qua Q5 qua động cơ DC qua Q8 và xuống

GND, chiều dòng điện bị thay đổi nên động cơ chạy ngược.

- Trong hai trường hợp cả hai tín hiệu A và B đều ở mức 1 hoặc mức 0 thì sẽ không xuất

hiện dòng kín nên động cơ không thể hoạt động.

- Để điều khiển tốc độ động cơ, tôi cấp xung PWM vào hai chân tín hiệu A hoặc B. Ở

chiều chạy thuận tôi cấp xung PWM cho header 2 và header 3 là ở mức 0. Ở chiều chạy

ngược tôi cấp xung PWM cho header 3 và header 2 là ở mức 0.

31

Page 32: Chuong Trinh Thuc Hanh 2

Khối công suất động cơ bước.

Hình 27. Mạch nguyên lý khối công suất động cơ bước.

- Mạch công suất điều khiển động cơ bước sử dụng 4 transistor D882 làm đệm dòng cấp

cho các cuộn dây trong động cơ bước. Động cơ bước sử dụng có 4 vòng dây nên mạch sử

dụng có 4 D882. Ngoài ra còn có opto cách ly quang, các led báo hiệu điện nguồn và điện

cấp cho mỗi cuộn dây. Haihàng chân cắm JP11 và JP12 có chức năng nối đến nguồn

12VDC. Các hàng chân cắm JP2, JP3, JP4, JP5 nối đến các cuộn dây động cơ bước để

cấp nguồn. Hàng chân cắm JP1 để nối với chân phát tín hiệu điều khiển của board

Galileo.

- 4 tín hiệu điều khiển 4 cuộn dây của động cơ bước được đưa vào 4 chân cắm L1, L2, L3,

L4. Tín hiệu sau khi qua opto cách ly quang sẽ điều khiển sự đóng mở của D882 từ đó

điều khiển cấp nguồn cho cuộn dây tương ứng.

- Lúc tín hiệu đầu vào chân hàng chân cắm JP1 ở mức 1 thì đèn led của opto OK1 sẽ phát

sáng làm dẫn dòng điện từ Vcc 12V xuống cực B của Q1 làm Q1 bị kích lên trạng thái

dẫn bão hòa, cực C của Q1 được nối xuống đất và nhờ đó xuất hiện dòng điện kín từ chân

dương nguồn của động cơ bước chạy qua cuộn dây số 1 và xuống đất, lúc này cuộn dây

số 1 được cấp nguồn làm động cơ bước quay một bước. Led1 báo hiệu có dòng điện cấp

vào cuộn dây của động cơ bước. Ngược lại nếu đầu vào đó ở mức 0 thì cuộn dây số 1 sẽ

không được cấp nguồn. Tương tự đối với các tín hiệu điều khiển các cuộn dây còn lại.

32

Page 33: Chuong Trinh Thuc Hanh 2

- Led6 là led báo nguồn, diode 1N4007 mắc vào giữa cực C D882 và Vcc để chống sự ảnh

hưởng của điện áp cảm ứng do cuộn dây trong động cơ bước tác động lên D882.

4. Trình tự thực hành

- Bước 1: Xây dựng chương trình tạo giao diện điều khiển hoạt động của động cơ DC và động cơ bước

bằng phần mềm Visual basic hay Delphi…

Hình 28. Minh họa chương trình giao diện điều khiển hoạt động động cơ

- Bước 2: Sử dụng phần mềm IDE xây dựng chương trình đọc lệnh từ PC truyền đến và điều

khiển hoạt động của hai động cơ một cách tương ứng..

- Bước 3: Mô phỏng hoạt động giao tiếp cổng COM giữa PC và VĐK bằng phần mềm Proteous

và COM ảo (Bước này có thể có hoặc không).

- Bước 4: Tiến hành các đấu nối phần cứng cần thiết.

- Bước 5: Thực hiện các bài sau.

Bài 1. Sử dụng chương trình giao diện điều khiển chiều quay và tốc độ của động DC.

Bài 2. Sử dụng chương trình giao diện điều khiển chiều quay và tốc độ của động bước.

Bài 3. Đọc tốc độ quay của động cơ DC bằng Encoder và hiển thị trên PC.

33

Page 34: Chuong Trinh Thuc Hanh 2

BÀI 4: GIAO TIẾP GIỮA CẢM BIẾN ĐO NHIỆT ĐỘ - ĐỘ ẨM VÀ MÁY TÍNH

1. Mục đích và yêu cầu

Qua bài thực hành này sinh viên sẽ nắm rõ quá trình trao đổi dữ liệu giữa máy tính (PC)

và vi điều khiển ATmega trong Kit phát triển Arduino nhằm xử lý dữ liệu giữa PC và các cảm

biến đo nhiệt độ - độ ẩm.

Yêu cầu sinh viên cần nắm những kiến thức như sau.

- Kiến thức về cấu trúc máy tính (PC).

- Kiến thức về cấu trúc vi điều khiển(VĐK) trong Kit phát triển Arduino Intel Gallileo.

- Kiến thức về cấu trúc phần cứng và nguyên tắc hoạt động cảm biến đo nhiệt độ - độ ẩm.

- Lập trình giao diện trên PC bằng các phần mềm như Visual basic, Visual C…..

- Mô phỏng hoạt động giao tiếp giữa VĐK và PC bằng các phần mềm như Proteus ISIS

Professional…

2. Thiết bị cần thiết

- Máy tính cá nhân hoặc laptop…

- Kit Arduino Intel Galileo Gen 1 hoặc 2 và board tích hợp các cảm biến nhiệt độ- độ

ẩm.

- Giao diện lập trình IDE cho Arduino Intel Galileo.

3. Tổng quan lý thuyết

3.1 Cảm biến đo nhiệt độ DS18B20

34

Page 35: Chuong Trinh Thuc Hanh 2

Hình 29: Sơ đồ chân và minh họa kết nối DS18B20 và VĐK

DS18b20 là IC cảm biến nhiệt độ đóng gói dạng TO-92 ba chân nhỏ gọn sử dụng chuẩn

giao tiếp một dây (1 wire) nghĩa là có một đường dẫn tín hiệu lối ra và đường dẫn điện áp nguồn

nuôi có thể dùng chung trên một dây dẫn và không chỉ chung cho một cảm biến mà nhiều cảm

biến có thể sử dụng chung một đường dẫn. Đặc điểm chính của DS18B20 được liệt kê như sau.

- Lấy nhiệt độ theo giao thức một dây (1wire).

- Cung cấp nhiệt độ với độ phân giải 12bit.

- Ngưỡng nhiệt độ rộng: -10°C đến 125°C.

- Sai số cho phép: ±0.5°C.

- Có chức năng cảnh báo nhiệt khi nhiệt độ vượt ngưỡng cho phép. Người dùng có thể lập

trình chức năng này cho DS18B20. Bộ nhớ nhiệt độ cảnh báo không bị mất khi mất

nguồn.

- Cảm biến nhiệt độ DS18B20 có mã nhận diện lên đến 64-bit, vì vậy bạn có thể kiểm tra

nhiệt độ với nhiều IC DS18B20 mà chỉ dùng một dây dẫn duy nhất để giao tiếp với các

IC này.

35

Page 36: Chuong Trinh Thuc Hanh 2

- DS18B20 hoạt động với điện áp từ 3V-5,5V, có thể được cấp nguồn thông qua chân DQ-

chân trao đổi dữ liệu.

- Thời gian lấy mẫu và biến đổi thành số tương đối nhanh, không quá 200 ms.

- Thời gian chuyển đổi nhiệt độ tối đa là 750ms cho mã hóa 12 bit.

Quá trình trao đổi dữ liệu giữa vi điều khiển và DS18B20 thông qua 2 bước sau:

- Bước 1: Khởi tạo

Quá trình khởi tạo gồm một xung reset do vi điều khiển gửi đến DS18B20 theo phương

pháp chủ- tớ, sau đó xung presence từ DS18B20 gửi đến vi điều khiển, để chỉ ra sự hiện diện của

vi điều khiển và DS18B20. Lúc này quá trình trao đổi dữ liệu có thể bắt đầu.

- Bước 2: Lệnh điều khiển ROM và lệnh chức năng của DS18B20

Các lệnh điều khiển ROM làm việc với 64bits serial code ROM, lệnh này được phát ra

trong quá trình khởi tạo.Lệnh cho phép vi điều khiển biết có bao nhiêu thiết bị và thiết bị loại gì

trên bus.Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ

cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng

DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp

(scratchpath) của cảm biến DS1820.

Bên trong DS18B20 sẽ có bộ chuyển đổi giá trị nhiệt độ sang giá trị số và được lưu trong

các thanh ghi ở bộ nhớ scratchpad. Độ phân giải nhiệt độ đo có thể được cấu hình ở chế độ 9

bit,10 bit,11 bit hay12 bit. Ở chế độ mặc định thì DS18B20 hoạt động ở độ phân giải 12bit.Nhiệt

độ sau khi được lưu trong hai thanh ghi bộ nhớ sẽ được so sánh với hai thanh ghi ngưỡng nhiệt

độ TH và TL. Các giá trị ngưỡng nhiệt độ do người dùng quy định, và nó sẽ không thay đổi khi

mất điện.

3.2 Cảm biến đo nhiệt độ - độ ẩm DHT11

Cảm biến DHT11 là một cảm biến nhiệt độ và độ ẩm cơ bản xây dựng trên nền tảng kỹ

thuật số. Cảm biến này là sự kết hợp giữa một cảm biến độ ẩm điện dung,một nhiệt điện trở để

đo không khí xung quanh và một vi điều khiển 8-bit có đặc điểm hiệu năng cao, cung cấp chất

lượng dữ liệu tốt, đáp ứng nhanh, khả năng chống nhiễu cao và chi phí thấp.

36

Page 37: Chuong Trinh Thuc Hanh 2

Hình 30. Sơ đồ chân cảm biến DHT11 và minh họa kết nối cảm biến và VĐK

Thông số kỹ thuật của cảm biến này được mô tả như sau.

- Dải đo độ ẩm: 20%-95%

- Dải đo nhiệt độ: 0-50ºC

- Sai số độ ẩm ±5%

- Sai số nhiệt độ: ±2ºC

- Nguyên tắc hoạt động của cảm biến được mô tả như sau.

- VĐK gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại.

- Khi VĐK và DHT11 kết nối thành công, cảm biến sẽ gửi lại 5 byte dữ liệu có chứa thông

tin về độ ẩm và nhiệt độ đo được.

- Cụ thể các bước tiến hành như sau.

- Bước 1: gửi tín hiệu Start.

VĐK thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng

thời gian >18ms (khuyến nghị nên đặt 25ms). Khi đó DHT11 sẽ hiểu rằng VĐK

muốn đo giá trị nhiệt độ và độ ẩm.

VĐK đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.

Sau khoảng thời gian 20-40 μs, DHT11 sẽ kéo chân DATA xuống thấp. Nếu trên

40 μs mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với

DHT11.

37

Page 38: Chuong Trinh Thuc Hanh 2

Chân DATA sẽ ở mức thấp 80 μs sau đó nó được DHT11 kéo nên cao trong 80 μs. Bằng việc giám sát chân DATA, MCU có thể biết được việc giao tiếp với

DHT11 có thành công hay không. Tín hiệu đo được DHT11 lên cao chứng tỏ quá

trình giao tiếp của MCU với DHT đã hoàn thành.

Hình 31. Giản đồ gửi tín hiệu Start.

- Bước 2: Đọc dữ liệu từ DHT11 gửi đến VĐK.

Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về VĐK,

tương ứng chia thành 5 byte kết quả của nhiệt độ và độ ẩm.

Hình 32: Minh họa Bit 0 tương ứng với độ dài xung từ 26us tới 18us.

38

Page 39: Chuong Trinh Thuc Hanh 2

Hình 33. Minh họa Bit 1 tương ứng với độ dài xung 70us.

Sau khi tín hiệu được đưa về 0, VĐK chờ chân DATA được DHT11 kéo lên mức 1. Nếu

chân DATA là mức 1 trong khoảng thời gian 26 μs đến 28 μs thì có nghĩa là logic 0, còn nếu tồn

tại 70us là logic 1( Do đó trong lập trình ta bắt sườn lên của chân DATA, sau đó cho trễ 50 μs,

nếu giá trị đo được là 0 thì ta đọc được bit 0, nếu giá trị đo được là 1 thì giá trị đo được là 1. Cứ

như thế ta đọc các bit tiếp theo.

Như vậy DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte. Trong đó:

- Byte 1: giá trị phần nguyên của độ ẩm (RH%)

- Byte 2: giá trị phần thập phân của độ ẩm (RH%)

- Byte 3: giá trị phần nguyên của nhiệt độ (TC)

- Byte 4 : giá trị phần thập phân của nhiệt độ (TC)

- Byte 5 : kiểm tra tổng.

- Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là

chính xác, nếu sai thì kết quả đo không có nghĩa.

Từ các byte kết quả nhận được chúng ta tiến hành các bước tiếp theo theo yêu cầu đặt ra

trước đó.

3.3 Cảm biến đo nhiệt độ theo nguyên lý nhiệt điện trở

Điện trở nhiệt hay nhiệt điện trở hay Thermistor là loại điện trở có giá trị thay đổi một cách

rõ rệt dưới tác dụng nhiệt hơn hẳn so với các loại điện trở thông thường. Có hai loại thermistor:

Hệ số nhiệt dương PTC- điện trở tăng theo nhiệt độ; Hệ số nhiệt âm NTC – điện trở giảm theo

nhiệt độ (được sử dụng rộng rãi hơn). Nhiệt điện trở được dùng làm cảm biến nhiệt trong các

39

Page 40: Chuong Trinh Thuc Hanh 2

máy móc thiết bị, như máy điều hòa nhiệt độ, tủ lạnh,... Nó cũng được dùng trong phần mạch

bảo vệ quá nhiệt trong các bộ cấp nguồn điện.

Hình 34. Minh họa nhiệt điện trở và kết nối giữa Arduino và nhiệt điện trở

Nhiệt điện trở có điện trở thay đổi theo môi trường. Thông qua mạch chia áp, điện áp đưa

vào VĐK tỷ lệ với nhiệt độ của môi trường theo các phương trình như sau.

1/T = A+B(LnR)+C(LnR)3

Trong đó:

- A = 0.001125308852122 ; B = 0.000234711863267; C = 0.000000085663516

- T là nhiệt độ theo nhiệt gia Kelvin.

- Vpp là điện áp tham chiếu đưa vào cảm biến (5V)

- Vout là điện áp ADC nhận được.

Qua đó chúng ta xác định được nhiệt độ của môi trường.

3.4 Cảm biến nhiệt độ LM35.

40

Page 41: Chuong Trinh Thuc Hanh 2

Hình 2.1. Cảm biến nhiệt độ LM35.

LM35 có hình dạng bên ngoài tương tự với một số loại transistor, có ba chân. Các chân đánh số từ 1 đến 3 như hình lần lượt có chức năng cấp điện áp 4-20V, điện áp đầu ra, nối đất. Các đặc tính kỹ thuật được mô tả như sau.

- Đơn vị nhiệt độ: 0C.

- Nhiệt độ thay đổi tuyến tính 10C/10mV.

- Độ chính xác thực tế 0,5°C.

- Điện áp cung cấp từ 4V đến 30V.

- LM35 có hiệu năng cao, dòng tiêu thụ từ 60uA trở xuống.

- Dải nhiệt độ đo được từ -55 0C tới 150 0C.

- Nhiệt độ tự phát 0,080C trong điều kiện không khí tĩnh lặng.

- Sai số phi tuyến ± 0,250C.

- Trở kháng đầu ra thấp, khoảng 0,1 Ohm với tải đầu ra 1mA.

LM35 là cảm biến nhiệt độ tương tự, có nghĩa là mỗi giá trị nhiệt độ sẽ được ánh xạ sang một mức điện áp cụ thể, ta sử dụng bộ chuyển đổi tương tự số để đo mức điện áp đó và suy ra nhiệt độ.

2.1 Sơ đồ mạch và nguyên tắc hoạt động board điều khiển hoạt động của các cảm biến

41

Page 42: Chuong Trinh Thuc Hanh 2

Hình 35. Minh họa đấu nối giữa Intel Galileo 2 và board tích hợp các cảm biến

Kết nối giữa các cảm biến và board Intel Galileo như sau.

- Chân tín hiệu của cảm biến nhiệt điện trở được nối với đầu vào ngõ vào A0 của VĐK

- Chân tín hiệu của cảm biến DHT11 được nối với đầu vào ngõ vào D2 của VĐK

- Chân tín hiệu của cảm biến DS18b20 được nối với đầu vào ngõ vào D5 của VĐK

3. Trình tự thực hành

- Bước 1: Xây dựng chương trình tạo giao diện hiển thị nhiệt độ hay độ ẩm môi trường trên PC từ dữ liệu

trao đổi giữa PC và VĐK bằng phần mềm Visual basic hay Delphi…

Hình 36. Minh họa chương trình hiển thị nhiệt độ

- Bước 2: Sử dụng phần mềm IDE xây dựng chương trình đọc các thông số của môi trường.

42

Page 43: Chuong Trinh Thuc Hanh 2

- Bước 3: Mô phỏng hoạt động giao tiếp cổng COM giữa PC và VĐK bằng phần mềm Proteous

và COM ảo (Bước này có thể có hoặc không).

- Bước 4: Tiến hành các đấu nối phần cứng cần thiết.

- Bước 5: Thực hiện các bài thực hành như sau.

Bài 1: Đo nhiệt độ môi trường bằng cảm biến nhiệt điện trở và gửi các giá trị này đến PC. Từ đó

hiển thị các giá trị nhiệt độ hay độ ẩm trên màn hình giao diện.

Bài 2: Đo nhiệt độ môi trường bằng cảm biến LM35 và gửi các giá trị này đến PC. Từ đó hiển

thị các giá trị nhiệt độ trên màn hình giao diện.

Bài 3: Đo nhiệt độ và độ ẩm môi trường bằng cảm biến DHT11 và gửi các giá trị này đến PC.

Từ đó hiển thị các giá trị nhiệt độ hay độ ẩm trên màn hình giao diện.

Bài 4: Đo nhiệt độ môi trường bằng cảm biến DS18b20 và gửi các giá trị này đến PC. Từ đó

hiển thị các giá trị nhiệt độ trên màn hình giao diện.

43

Page 44: Chuong Trinh Thuc Hanh 2

PHẦN 3: PHỤ LỤC CÁC CHƯƠNG TRÌNH MẪU VIẾT TRÊN PHẦN MỀM IDE

Sau đây là một số chương trình và câu lệnh mẫu điều khiển hoạt động của các thiết bị sử dụng trong bài thực hành. Lưu ý các đoạn chương trình sau chỉ mang tính chất tham khảo và có thể thay đổi theo từng trường hợp cụ thể.

1. Chương trình mẫu minh hoạt hoạt động của LCD 16x2

#include <LiquidCrystal.h> // Sử dụng thư viện lcdLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // khai báo các chân lần lượt là RS, E, D4, D5, D6 và D7.void setup() {

  lcd.begin(16, 2); // khai báo lcd 16x2  lcd.print("hello, world!");// in ra hàng chữ ở ngay vị trí thứ nhất của hàng 01

lcd.setCursor(0,1); //Đưa con trỏ tới hàng 2, cột 0

lcd.print("the fuck");

}void loop()

 {

  lcd.noDisplay();// hiển thị  delay(500);// hiển thị trong thời gian 0,5 s

  lcd.display();// xóa hiển thị trong thời gian 0,5s với lệnh delay phía sau  delay(500);}

2. Chương trình mẫu minh họa hoạt động của cảm biến siêu âm

const int trig = 7;//chân trigger của cảm biến nối với chân số 7 của VĐK

const int echo = 8;//chân echo của cảm biến nối với chân số 8 của VĐK

void setup() // cấu hình ngõ vào ra dữ liệu

{

pinMode(trig,OUTPUT);//chân trigger xuất tín hiệu44

Page 45: Chuong Trinh Thuc Hanh 2

pinMode(echo,INPUT);//chân echo nhận tín hiệu

}

void loop()

{

unsigned long duration;//biến đo thời gian

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

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

digitalWrite(trig,0);// đưa chân trigger về mức thấp

delayMicroseconds(2); // tạo thời gian trễ phù hợp

digitalWrite(trig,1);// đưa chân trigger về mức cao

delayMicroseconds(10);// xung có độ dài 10 microSeconds

digitalWrite(trig,0);

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

duration = pulseIn(echo,HIGH);//đo độ rộng xung cao từ chân echo.

distance = int(duration/2/xxxx);//tính khoảng cách từ cảm biến đến vật, phép tính này tùy thuộc vào tác giả.

delay(200); tạo thời gian trễ 200 ms chờ đến lần đo tiếp theo

}

3. Chương trình điều khiển xuất nhập dữ liệu trên các ngõ vào/ra của Intel Galileo

Các tập lệnh xuất nhập dữ liệu trên các ngõ vào/ ra được mô tả như sau.

  pinMode(10, OUTPUT);    //  Đặt chân số 10 ở chế độ xuất dữ liệu

  pinMode(9,INPUT);    // Đặt chân số 9 ở chế độ xuất dữ liệu

  digitalWrite(9, LOW); // Đặt chân số 9 ở mức logic thấp (0V)

  digitalWrite(9, HIGH); // Đặt chân số 9 ở mức logic cao (5V hoặc 3,3V)

analogWrite(11,255); // Xuất ra xung PWM có độ rộng 100% ở chân 11 (PWM ứng 8

bit).

45

Page 46: Chuong Trinh Thuc Hanh 2

4. Chương trình mẫu điều khiển hoạt động của LED đơn và LED RGB

int led = 13; // LED được nối vào chân 13 của VĐK

int red=6;

int blue=5;

int green=3;

void setup()

 {                

  pinMode(led, OUTPUT);     

  pinMode(red, OUTPUT);     

  pinMode(green, OUTPUT);     

  pinMode(blue, OUTPUT);     

}

void loop() {

  digitalWrite(led, HIGH); delay(1000);                //  Bật sáng LED khi đưa chân 13 lên

mức cao  

  digitalWrite(led, LOW); delay(1000);//  Tắt sáng LED khi đưa chân 13 về mức thấp  

analogWrite(red,255); analogWrite(blue,0); delay(1000);  // Bật LED màu đỏ

analogWrite(red,0); analogWrite(green,255); delay(1000); // Bật LED màu xanh lá cây

analogWrite(green,0); analogWrite(blue,255); delay(1000);  // Bật LED màu xanh da trời

}

5. Chương trình mẫu điều khiển hoạt động của động cơ bước

int motorPin1 = 8;

int motorPin2 = 9;

int motorPin3 = 10;

int motorPin4 = 11;

int delayTime = 5;

void setup() {

pinMode(motorPin1, OUTPUT);

pinMode(motorPin2, OUTPUT);46

Page 47: Chuong Trinh Thuc Hanh 2

pinMode(motorPin3, OUTPUT);

pinMode(motorPin4, OUTPUT);

Serial.begin(9600);

}

void loop() {

digitalWrite(motorPin1, HIGH);

digitalWrite(motorPin2, LOW);

digitalWrite(motorPin3, LOW);

digitalWrite(motorPin4, LOW);

delay(delayTime);

digitalWrite(motorPin1, LOW);

digitalWrite(motorPin2, HIGH);

digitalWrite(motorPin3, LOW);

digitalWrite(motorPin4, LOW);

delay(delayTime);

digitalWrite(motorPin1, LOW);

digitalWrite(motorPin2, LOW);

digitalWrite(motorPin3, HIGH);

digitalWrite(motorPin4, LOW);

delay(delayTime);

digitalWrite(motorPin1, LOW);

digitalWrite(motorPin2, LOW);

digitalWrite(motorPin3, LOW);

digitalWrite(motorPin4, HIGH);

delay(delayTime);

}

6. Chương trình mẫu điều khiển hoạt động của động cơ DC

int motor1 =3;

int motor2 =5;

void setup() {

47

Page 48: Chuong Trinh Thuc Hanh 2

pinMode(motor1,OUTPUT);

pinMode(motor2,OUTPUT);

Serial.begin(9600);

}

void loop() {

int i=0;

while(i<1023)

{

analogWrite(motor1,i);

digitalWrite(motor2,LOW);

i+=20;

digitalWrite(13,HIGH);

delay(1000);

Serial.println("Quay thuan");

Serial.println(i);

}

i=0;

while(i<1023)

{

analogWrite(motor2,i);

digitalWrite(motor1,LOW);

i+=20;

digitalWrite(13,HIGH);

delay(1000);

Serial.println("Quay nguoc");

Serial.println(i);

}

7. Chương trình mẫu đọc giá trị nhiệt độ của cảm biến nhiệt điện trở

#include <math.h>

int sensorPin = A0; // select the input pin for the potentiometer

double Thermistor(int RawADC)

{

double Temp;

48

Page 49: Chuong Trinh Thuc Hanh 2

Temp = log(10000.0 * ((1024/ RawADC - 1)));

Temp = 1/ (0.001126068758413 + ( 0.000234572594529 + (0.000000086312248 * Temp *

Temp ))* Temp );

Temp = Temp - 273.15; // Convert Kelvin to Celcius

//Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit

return Temp;

}

void setup()

{

Serial.begin(9600);

}

void loop()

{

analogReadResolution(10);

int readVal = analogRead(sensorPin);

double temp = Thermistor(readVal);

Serial.print("ADC=");

Serial.print(readVal);

Serial.print(" Nhiet do =");

Serial.println(temp); // display tempature

//Serial.println(readVal); // display tempature

delay(1000);

}

8. Chương trình mẫu đọc giá trị nhiệt độ - độ ẩm không khí của cảm biến DHT11

int DHpin = 8;

byte dat[5];

byte read_data()

{

byte data;

for(int i=0; i<8; i++)

{

if(digitalRead(DHpin) == LOW)

{

49

Page 50: Chuong Trinh Thuc Hanh 2

while(digitalRead(DHpin) == LOW); //50us chan data duoc dat o muc thap

delayMicroseconds(30); //

if(digitalRead(DHpin) == HIGH)

data |= (1<<(7-i));

while(digitalRead(DHpin) == HIGH);

}

}

return data;

}

void DHT_init()

{

digitalWrite(DHpin,LOW);// Keo chan data xuong muc 0

delay(20);

digitalWrite(DHpin,HIGH);// keo chan data len muc 1 de dht hieu la muon giao tiep

delayMicroseconds(40);// Dat thoi gian 40us de dht hieu

pinMode(DHpin,INPUT); // Chuyen ngo vao/ra

if(digitalRead(DHpin) == HIGH) {return;}

delayMicroseconds(80);

if(digitalRead(DHpin) == LOW) {return;}

delayMicroseconds(80);

}

void start_DHT()

{

for(int i=0;i<4;i++)

dat[i] = read_data();

pinMode(DHpin,OUTPUT);

digitalWrite(DHpin,HIGH);

}

void setup()

{

Serial.begin(9600);

pinMode(DHpin,OUTPUT);

DHT_init();

50

Page 51: Chuong Trinh Thuc Hanh 2

}

void loop()

{

DHT_init();

start_DHT();

Serial.print("Current humdity = ");

Serial.print(dat[0], DEC); //

Serial.print('.');

Serial.print(dat[1],DEC); //

Serial.println('%');

Serial.print("Current temperature = ");

Serial.print(dat[2], DEC); //

Serial.print('.');

Serial.print(dat[3],DEC); //

Serial.println('C');

delay(800);

}

9. Chương trình mẫu đọc giá trị nhiệt độ bằng cảm biến LM35

#include <LiquidCrystal_I2C.h> // khai bao ham thu vien lcd

LiquidCrystal_I2C lcd(0x20,16,2);

int sensorPin = A0;// chan data lm35 noi voi chan A0 Galileo

void setup() {

lcd.init(); // khoi tao lcd

lcd.backlight();

Serial.begin(9600); //Khởi động Serial ở mức baudrate 9600

}

void loop() {

int reading = analogRead(sensorPin); //doc gia tri dien ap vao chan A0

float voltage = reading * 5.0 / 1024.0;

float temp = voltage * 100.0;

lcd.setCursor(0,0); //chọn vi tri con tro lcd

lcd.print(" Nhiet do : ");

51

Page 52: Chuong Trinh Thuc Hanh 2

lcd.setCursor(0,1); //chọn vi tri con tro lcd

lcd.print(temp,1);

lcd.setCursor(6,1); //chọn vi tri con tro lcd

lcd.print("0 C");

Serial.println(temp);

delay(1000);//đợi 1 giây cho lần đọc tiếp theo

}

52