1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giao Tiếp Arduino Uno R3 và Các Module Mạch Điện Thông Dụng

17 2,3K 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 0,92 MB

Nội dung

đây là tài liệu về cách giao tiếp căn bản giữa board Arduino Uno R3 và các module mạch điện thông dụng hiện nay như: DHT11, LM35, RTC DS1307, Cảm biến siêu âm SRF05, Module Wifi, Ethernetshield, Module Đo độ PH,... Tài liệu này là phần 1, bao gồm giao tiếp với DHT11, LM35 và module thời gian thực RTC DS1307. Tài liệu thật sự bổ ích cho các bạn mới tìm hiểu về arduino.

Trang 1

LỜI NÓI ĐẦU



Ngày nay với sự phát triển của ngành kĩ thuật với những người đang theo học chuyên ngành kĩ thuật, những người muốn làm ứng dụng về điện- điện tử Vì thế nhu cầu sử dụng board mạch nhúng Arduino ngày càng được ưa chuộng và phát triển mạnh mẽ

Board mạch nhúng Arduino Uno R3 là một sản phẩm tuyệt với cho các bạn không chuyên về điện tử, lập trình có thể tạo ra cho mình những sản phẩm ứng dụng cao trong thực tế như: đo nhiệt độ, độ ẩm, tránh vật cản môi trường xung quanh, cân điện tử, đo mực nước, máy đo độ PH,…đây là một board mạch rất mạch ở khả năng sử dụng thư viện mở, và ứng dụng vào thực tế rất cao

Tài liệu này sẽ giúp các bạn tìm hiểu căn bản về cách giao tiếp giữa board mạch Arduino Uno R3 và các Module sử dụng cho arduino hiện nay Từ đó các bạn có thể tự thiết kế cho mình những ứng dụng, những sản phẩm phục vụ cho cuộc sống của bạn

Liên Hệ

Email: ttldientu@gmail.com

Sđt: 01686648144

Chúc thành công!

Trang 2

MỤC LỤC

NHỮNG ĐIỀU LƯU Ý KHI SỬ DỤNG BOARD ARDUINO UNO R3 3

BÀI 1: GIAO TIẾP ARDUINO VÀ MODULE DHT11 5

1 Giới thiệu về module DHT11 5

2 Giao tiếp Arduino Uno và Module DHT11 5

Sơ đồ kết nối DHT11 vào Arduino Uno như sau: 5

3 Truyền nhận dữ liệu giữa Arduino và DHT11 6

Code giao tiếp: 7

BÀI 2: GIAO TIẾP ARDUINO VÀ MODULE RTC DS1307 8

1 Giới thiệu về DS1307 8

2 Module RTC DS1307- Thời gian thực 10

3 Lập trình giao tiếp DS1307 và Arduino Uno R3 11

BÀI 3: GIAO TIẾP ARDUINO VÀ LM35 14

1 Giới thiệu về IC LM35 14

2 Kết nối LM35 và Arduino Uno R3 14

3 Chuyển đổi ADC 15

Trang 3

NHỮNG ĐIỀU LƯU Ý KHI SỬ DỤNG BOARD ARDUINO

UNO R3



Khi sử dụng board mạch nhúng Arduino Uno R3 phải chú ý đến các vấn đề sau

đây, để có thể sử dụng tránh làm hư hỏng board mạch:

 Điều đầu tiên đó là chúng ta cấp nguồn ngoài cho board Arduino Điện áp cho phép là từ 7V- 12V, cấp vào jack DC của board mạch Ta có thể sử dụng adapter để cấp nguồn cho an toàn, ổn định Ta chọn 9V- 2A

Hình 1: Jack DC Arduino Uno

Hình 2: Adapter 9V- 2A

Trang 4

 Chân 5Volt power pin: chân này cấp đầu ra 5V, khi sử dụng chân này cấp nguồn cho các module rời hay linh kiện khác thì phải đảm bảo dòng ra không vượt quá 500ma

 Chân 3,3Volt power pin: chân này cấp đầu ra 3.3V, khi sử dụng chân này cấp cho các mạch rời thì phải đảm bảo dòng ra trên chân này không vượt quá 50ma

 Chân Vin: chân này cũng có thể dùng để cấp nguồn ngoài cho Arduino Uno, chân dương nối vào chân Vin và chân âm nối vào chân Gnd của Arduino Uno

 Chân IOREF: chân này dùng để đo điện áp sử dụng của Arduino, tuy nhiên bạn không được phép sử dụng để cấp nguồn cho các mạch ngoại vi

 Arduino Uno được thiết kế không có hệ thống bảo vệ cắm ngược nguồn, vì thế trước đi cắm nguồn ngoài vào bạn phải kiểm thật kĩ, để tránh làm hỏng boar mạch

 Các chân 3.3V, 5V được sử dụng để cấp nguồn cho các mạch ngoài Vì thế không khuyên dùng để cấp nguồn từ ngoài vào hai chân này cho board arduino

 Cấp nguồn ngoài thông qua Vin hoặc jack DC dưới 6V có thể làm hỏng board

 Cấp điện áp trên 13V qua chân reset có thể làm hỏng vi điều khiển ATMEGA328

 Cường độ vào/ra ở tất cả các chân Analog/Digital nếu vượt quá 200ma sẽ làm hỏng board mạch

 Cấp điện áp trên 5.5V vào các chân Analog/Digital sẽ làm hỏng vi điều khiển

 Cường độ dòng điện qua một chân digital hoặc arduino bất kì vào khoảng 40ma, nếu vượt quá sẽ làm hỏng board Khuyên bạn nếu không dùng để truyền nhận dữ liệu thì nên mắc một điện trở hạn dòng

 Trên đây là những điều bạn cần tránh khi sử dụng an toàn, hiệu quả board mạch Arduino Uno R3 Các bạn có thể đọc thêm tài liệu khác

Trang 5

BÀI 1: GIAO TIẾP ARDUINO VÀ MODULE DHT11



1 Giới thiệu về module DHT11

DHT11 là cảm biến tích hợp đo cả nhiệt độ và độ ẩm

Hình 1: IC DHT11

Một vài thông số DHT11:

 Đo độ ẩm khoảng 20% đến 95%

 Nhiệt độ từ 00C đến 500C

 Sai số độ ẩm: 5%

 Sai số nhiệt độ: 20C

2 Giao tiếp Arduino Uno và Module DHT11

Sơ đồ kết nối DHT11 vào Arduino Uno nhƣ sau:

Vcc=5VDC

Gnd

DATA

Trang 6

Thông số kết nối:

 Nguồn: sử dụng nguồn một chiều khoảng 5V

 Nối Mass: nối chung mass(Gnd) với Arduino Uno

 Chân Data: đây là chân dùng để giao tiếp qua lại giữa Arduino và DHT11

 Có sử dụng điện trở kéo chân Data lên mức cao thường trực, ta chọn điện trở này khoảng 10k và kéo lên Vcc=5VDC

3 Truyền nhận dữ liệu giữa Arduino và DHT11

DHT11 sử dụng chuẩn giao tiếp một dây, dựa vào việc ta thiết lập chân DATA của

ic DHT11 ở mức cao hoặc thấp, ngõ vào hoặc ngõ ra thì ta sẽ có thể giao tiếp được với DHT11 một cách dễ dàng

Ta sử dụng module được thiết kế sẵn dành cho các ứng dụng:

Bạn chỉ việc cấp nguồn 5VDC vào chân VCC và nối mass chung với Arduino nếu bạn cấp bằng Arduino Nếu bạn cấp nguồn ngoài cho module DHT11 thì bạn phải nối tất cả Mass chung lại với nhau Cuối cùng là nối chân DATA vào pin số 2 của board Arduino Uno

Cách thức giao tiếp giữa Arduino và Module DHT11:

 Đầu tiên Arduino thiết lập chân Data là Output, kéo chân Data xuống 0 trong khoảng > 18ms( thường lấy khoảng 25ms) Khi đó DHT11 hiểu Arduino muốn giao tiếp

 Tiếp theo Arduino đưa chân Data lên 1 và thiết lập là là chân Input

 Sau từ khoảng 20us đến 40us DHT11 sẽ kéo chân Data xuống mức thấp Nếu trong khoảng > 40us DHT11 không kéo chân Data xuống thấp thì giao tiếp thất bại

 Chân Data sẽ ở mức thấp khoảng 80us, sau đó được DHT11 kéo lên mức cao khoảng 80us Nếu đo được tín hiệu lên cao thì hoàn thành giao tiếp

Trang 7

 DHT11 sẽ trả về nhiệt độ và độ ẩm trong 5byte, Trong đó:

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

 Byte 2: giá trị phần lẻ của độ ẩm( RH%)

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

 Byte 4: giá trị phần lẻ của nhiệt độ(0C)

 Byte 5: là tổng của 4 byte trên, nếu giá trị byte 5 này không bằng tổng giá trị của 4 byte đầu thì giao tiếp thất bại

Code giao tiếp:

Ta sử dụng thƣ viên giao tiếp của DHT11 và Arduino Uno R3

Thƣ viện giao tiếp các bạn có thể download tại link sau:

https://github.com/adafruit/DHT-sensor-library

các bạn tải thƣ viện về và chép vào file thƣ viên của Arduino nhé Sau đó mở code DHT11 trong Example lên nhé

Đoạn code tham khảo:

//==============================================

void loop() {

// Wait a few seconds between measurements

delay(2000);

float h = dht.readHumidity(); //đọc giá trị độ ẩm

float t = dht.readTemperature(); //đọc giá trị nhiệt độ

if (isnan(h) || isnan(t) || isnan(f)) { //kiểm tra giao tiếp ok hay không

Serial.println("Failed to read from DHT sensor!");

return;

}

Serial.print("Humidity: "); //hiển thị RH=% lên Serial

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature: "); //hiển thị nhiệt độ lên Serial

Serial.print(t);

Serial.print(" *C ");

}

//==============================================

Các hàm nhƣ: dht.readHumidity(),dht.readTemperature() đều có trong thƣ viên

DHT.h các bạn tải về các bạn có thể tìm hiểu trong thƣ viện đó nhé

Với các giá trị h,t các bạn có thể xuất ra led 7 đoạn, LCD 1602 để làm những ứng dụng đơn giản phục vụ cho cuộc sống hàng ngày

Trang 8

BÀI 2: GIAO TIẾP ARDUINO VÀ MODULE RTC DS1307



1 Giới thiệu về DS1307

DS1307 là ic tích hợp thời gian thực được sử dụng rất nhiều trong các ứng dụng liên quan đến thời gian

Hình ảnh DS1307

Hình 1: IC DS1307

Thông số kĩ thuật:

 8 chân

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

 Sử dụng nguồn pin 3V bên ngoài để duy trì hoạt động khi mất điện

 56 Byte RAM trống dành cho người dùng

 Có thể xuất ra được xung tần số 1Hz, 4.096KHz, 8.192Kz, 32.768KHz

Tên và chức năng các chân của DS1307:

2 Gnd Chung mass với nguồn cấp vào và pin 3V

Dùng cho thạch anh 32768Hz

7 Vbat Chân Pin 3V nuôi mạch khi mất điện

8 SQW(OUT) Chân xuất xung có thể lập trình

Bảng 1: Tên Và Chức Năng Các Chân DS1307

Trang 9

Các thanh ghi trong DS1307:

DS1307 bao gồm 7 thanh ghi(0x00- 0x06) chứa các thông tin về thời gian đồng hồ

và một thanh ghi Control( 0x07) dùng để điều khiển xuất xung ra trên chân SQW

Hình 2: các thanh ghi trong DS1307 Chú ý: các giá trị trong các thanh ghi trong DS1307 là giá trị dạng BCD:

Ví dụ: giả sử thanh ghi 0x00 có giá trị là: 00010100 Khi đó giá trị sẽ là:

0001=1 và 0100 =4 => giá trị sẽ là 14 Khi đó bạn muốn xuất ra trên lcd thì bạn biến đổi lại thành các giá trị thập phân hoặc xuất ra led 7 đoạn thì bạn dùng lun giá trị BCD này

Tên và chức năng các thanh ghi trong DS1307:

Trang 10

Thanh ghi Control( 0x07):

Hình 4: 8 bits thanh ghi Control Trong đó:

 OUT: lựa chọn mức logic xuất ra tại chân SQW/OUT khi không kích hoạt

chức năng SQW/OUT:

 OUT=1: xuất ra mức logic 1

 OUT=0: xuất ra mức logic 0

 SQW=1: cho phép xuất xung clock ra chân này Với tần số đƣợc thiết lập

thông qua hai bit RS1 và RS0, ta có thể xem bảng sau:

Hình 5: chức năng thanh ghi Control

Theo bảng trên, nếu ta muốn làm ứng dụng về đèn giao thông, đếm sản phẩm cần

sử dụng đến thời gian thực thì ta sử dụng tần số 1Hz sẽ tạo ra chuẩn T=1s Có thể

sử dụng tần số thông qua chân SQW/OUT này để làm tần số hoạt động của mạch ngoại vi,…

2 Module RTC DS1307- Thời gian thực

Mạch RTC sử dụng DS1307 đƣợc thiết kế rất đơn giản với tần số hoạt động là 32768Hz, nguồn vào 5VDC với hai chân dữ liệu vào ra SCL, SDA Có nguồn nuôi pin 3V để đảm bảo hoạt động ở chế độ chờ

Sơ đồ mạch RTC dùng DS1307:

Hình 6: sơ đồ mạch điện RTC dùng DS1307

Trang 11

Trong đó:

 X1: thạch anh 32768Hz, nối vào hai chân 1, 2 của DS1307

 Pin Cmos 3V: nguồn nuôi mạch khi mất điện, nối vào chân 3 DS1307

 3 chân SCL(6), SDA(5), SQW/OUT(7): cần có điện trở 10kΩ kéo lên nguồn để hoạt động ổn định, không bị nhiễu khi truyền nhận dữ liệu

 Giữa nguồn và mass có thể gắn thêm tụ điện 0.1uF để mạch hoạt động tốt hơn

Hình ảnh tham khảo về module RTC được thiết kế sẵn trên thị trường

Hình 7: Module RTC DS1307

3 Lập trình giao tiếp DS1307 và Arduino Uno R3

Để giao tiếp được với module RTC DS1307 các bạn phải tìm hiểu về giao tiếp I2C, trên internet có rất nhiều tài liệu về vấn đề này Các bạn phải nắm vững các phương pháp, đặc điểm của giao tiếp I2C để từ đó có thể sử dụng nhiều module I2C khác nữa cho những mục đích của các bạn

Về mặt lý thuyết thì trên một mạng I2C có tối đa 128 thiết bị giao tiếp với Arduino, mỗi thiết bị này đều có một địa chỉ giao tiếp riêng biệt.DS1307 có địa chỉ

Trang 12

Chế độ Write:

Trong đó:

 Điều kiện Start( S): khi SCL, SDA đều ở mức cao Nếu Arduino muốn giao tiếp với DS1307 thì Arduino sẽ kéo chân SDA xuống thấp trong khi chân

SCL vẫn ở mức cao

 Điều kiện Stop(P): khi kéo chân SDA lên mức cao trong khi SCL vẫn ở mức cao Điều kiện Stop chỉ thực hiện khi quá trình truyện nhận dữ liệu đã

đƣợc thực hiện

 Tiếp theo đó là địa chỉ Slave là 0x68 Đây là chế độ Write nên bit W=0, khi

đó Arduino sẽ gửi bit W theo sau Slave Address Sau đó DS1307 sẽ gửi một bit ACK về Arduino Tiếp theo là ghi vào từng địa chỉ trong các thanh ghi: second, minutes, hour, date, day, month, year của DS1307 Việc giao tiếp

kết thức khi Arduino phát ra điều kiện Stop

Chế độ Read:

Trong đó:

 Arduino sẽ gửi Slava address + W(=1) = 0xD1, sau đó tiến hành đọc dữ liệu

về từ DS1307 Dữ liệu đọc đƣợc các giá trị BCD của thời gian Các bạn có

thể sử dụng với ứng dụng của các bạn

Các điều kiện Start, Stop giống với phần Write phía trên

Thƣ viện RTC DS1307 và code Arduino các bạn có thể tải theo link sau:

https://github.com/adafruit/RTClib

Trang 13

Một số hàm giao tiếp trong thư viện wire.h Arduino:

Trên board Arduino Uno R3: SDA là chân analog 4, và SCL là chân analog 5

 Wire.begin(address): khởi tạo thư viện wire.h và tham gia vào mạng I2C address là địa chỉ DS1307( 0x68) Nếu không có địa chỉ thì đó là Master

 Wire.beginTransmission(address): bắt đầu truyền dữ liệu đến DS1307

 Wire.endTransmission(): kết thức quá trình truyền dữ liệu đến DS1307 đã được bắt đầu bằng Wire.beginTransmission(address)

 Wire.requestFrom(address, quanty): yêu cầu dữ liệu từ Arduino Uno R3 với DS1307 Address = 0x68 và quanty là số byte yêu cầu nhận

 Wire.write(value): ghi value lên DS1307 giữa hai tín hiệu Start và Stop

 Wire.read(): đọc dữ liệu từ DS1307, là các giá trị thời gian

Lưu ý khi giao tiếp DS1307:

 Thanh ghi second có bit 7 là CH- khóa giao động, do đó khi ta lấy giá trị second từ DS1307 về ta loại bỏ bit7 này, ví dụ:

Second = Wire.read() & 0x7f

Khi ta thực hiện phép toán & với 0x7f thì bit 7 được loại bỏ

 Thanh ghi hour: bit6=1, chế độ 12h, do đó ta cần loại bỏ bit6, do đó:

Hour = Wire.read() & 0x3f

 Khi ghi dữ liệu cài đặt lại thời gian khởi tạo ban đầu cho DS1307 ta phải đưa giá trị vào dạng BCD, code chuyển đổi:

((second/10 * 16) + (second % 10))

 Với các ứng dụng của module thời gian thực RTC trong cuộc sống là rất nhiều, như hệ thống phun tưới tự động, bật tắt tự động thiết bị đèn trong nhà để tiết kiệm điện năng

Trang 14

BÀI 3: GIAO TIẾP ARDUINO VÀ LM35



1 Giới thiệu về IC LM35

Đây là cảm biến nhiệt độ dạng analog, dùng để đo nhiệt độ môi trường xung quanh Dựa vào sự thay đổi điện áp đầu vào so với nhiệt độ môi trường

Một vài hình ảnh về M35:

Hình 1: LM35 thực tế Hình 2: sơ đồ chân

Thông số kĩ thuật:

 Điện áp hoạt động: 4- 20V.( Tùy loại nhé các bạn)

 Độ phân giải điện áp: 10bit, 10mv/0C( Celsius)

 Độ chính xác cao ở 250C là 0.50C

 Dải nhiệt độ đo được: -500C đến 1500C

Một vài thông số kĩ thuật khác các bạn có thể tra trong datasheet nhé

2 Kết nối LM35 và Arduino Uno R3

Cách kết nối LM35 vào Arduino Uno R3 như sau:

Hình 3: kết nối LM35 và Arduino Uno R3

Trang 15

Ta kết nối như sau:

Chân số 1 của LM35 ta mắc vào nguồn out- 5VDC của Arduino Uno R3, có thể thì các bạn nên sử dụng nguồn 5VDC rời nhé Vì khi sử dụng nguồn của arduino có thể làm hư board

Chân số 3 các bạn mắc vào Gnd của arduino Nếu sử dụng nguồn ngoài thì cần mắc chung mass của nguồn và arduino

Chân ở giữa các bạn mắc vào một trong 6 chân analog của arduino nhé ở đây mình mắc vào kênh A0 của Arduino Uno R3

Các bạn có thể mắc trực tiếp theo hình 3 cũng được, nếu cần chống nhiễu các bạn

có thể mắc một tụ điện 102 vào 2 chân 1 và 3 của LM35

Hình 4: Tụ điện 102

3 Chuyển đổi ADC

Arduino giao tiếp với LM35 hay các loại chip lập trình khác như: MSP430, AVR, STM, PIC,… thì cũng phải giao tiếp qua ADC

Chuyển đổi ADC có nhiều dạng như: ADC 10bits, ADC 12bits,…

ở đây sử dụng giao tiếp ADC 10bits

Tính toán thông số chuyển đổi ADC 10bits:

Theo trong datasheet LM35 thì 10C sẽ cho ra chân số 2 của LM35 là 10mV Đây là chuyển đổi 10bits nên ta sẽ có 1024 giá trị ADC

Giả sử:

- Nhiệt độ môi trường là 300C thì đầu ra của chân 2 LM35 sẽ có mức điện áp

là 300mV Khi đó ta sẽ đo giá trị này, đưa vào chuyển đổi ADC trong Arduino để suy ngược lại giá trị nhiệt độ

Điện áp cấp cho LM35 là 5VDC

Bước thay đổi của LM35 là 5/1024 giá trị ADC Khi đó ta suy ra giá trị nhiệt độ đo được từ giá trị lượng tử ADC đầu vào thay đổi theo giá trị điện áp đầu vào theo công thức :

Float temperature = (5.0*analogRead(A0)*100.0/1024.0)

Ngày đăng: 21/06/2015, 21:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w