Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 21

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN

BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG

====o0o====

BÁO CÁO ĐỒ ÁN I
ĐỀ TÀI: THIẾT KẾ MODULE INPUT
CHO VI ĐIỀU KHIỂN (ARDUINO)

Giảng viên hướng dẫn: Th.S Chu Đức Việt


Nhóm sinh viên thực hiện:
Hoàng Bá Đức 20161069 ĐK&TĐH 04 - K61
Lê Thanh Sơn 20163516 ĐK&TĐH 04 - K61
Nguyễn Văn Trưởng 20164301 ĐK&TĐH 05 – K61
Hà Nội - 2019

1
MỤC LỤC

MỞ ĐẦU ..................................................................................................................... 3

I. Giới thiệu về tín hiệu trong công nghiệp và hướng thiết kế input module .............. 5

1.Giới thiệu về tín hiệu trong công nghiệp ................................................................. 5

2. Hướng thiết kế Input Module .................................................................................. 6

II. Chi tiết thiết kế Input Module cho Arduino ........................................................... 8

1. Digital Input Module ............................................................................................... 8

1.1. Sơ đồ nguyên lý.................................................................................................... 8

1.2. Lựa chọn linh kiện và tính toán............................................................................ 8

1.3. Code Arduino ..................................................................................................... 10

1.4. Hình ảnh thực tế và kết quả................................................................................ 11

2. Analog Input Module ............................................................................................ 13

2.1. Sơ đồ nguyên lý.................................................................................................. 13

1.2. Lựa chọn linh kiện và tính toán.......................................................................... 13

1.3. Code Arduino ..................................................................................................... 17

1.4. Hình ảnh thực tế và kết quả................................................................................ 18

PHẦN KẾT LUẬN ................................................................................................... 20

TÀI LIỆU THAM KHẢO ......................................................................................... 21

2
MỞ ĐẦU
Ngày nay với sự phát triển ngày càng nhanh chóng của ngành công nghiệp,
đặc biệt là công nghiệp 4.0, đòi hỏi những sinh viên, sau này sẽ là những kĩ sư, đặc
biệt là sinh viên ngành Điều khiển tự động phải trang bị cho mình rất nhiều kiến thức
để đáp ứng tốt được những yêu cầu của nền công nghiệp, và không ngừng sáng tạo
để tìm ra những giải pháp công nghệ mới đáp ứng nhu cầu của xã hội.

Hiện nay Arduino ngày càng được phổ biến rộng rãi, đặc biệt là trong giới
sinh viên. Với ưu điểm dễ sử dụng, có thể đáp ứng được các ứng dụng vừa và nhỏ mà
Arduino có thể vừa dùng cho các mục đích nghiên cứu, giảng dạy cũng như dùng
trong các sản phẩm thương mại. Với vai trò là các bộ vi điều khiển, Arduino dùng để
xử lý các tín hiệu điện nhận được. Nhưng có rất nhiều tín hiệu mà không nằm trong
dải xử lý của vi điều khiển, như những tín hiệu trong công nghiệp, nếu nhận trực tiếp
sẽ gây ra hỏng vi điều khiển. Do vậy để có thể giao tiếp cũng như xử lý các tín hiệu
ngày, điều cần thiết là phải có những bộ chuyển đổi riêng biệt giúp chuyển đổi những
tín hiệu này về những tín hiệu nằm trong dải cho phép của vi điều khiển, nhờ đó có
thể xử lý tín hiệu. Và đó cũng chính là mục đính chính của nhóm em khi thực hiện
đồ án I này, là thiết kế được một module input cho Arduino để giao tiếp với các tín
hiệu chuẩn công nghiệp.

Nội dung chính của bản báo cáo này gốm 2 phần:

I. Giới thiệu về tín hiệu trong công nghiệp và trình bày hướng thiết kế input
module. Phần này đưa ra một cái nhìn tổng quan về tín hiệu chuẩn công nghiệp là
như thế nào, và trình bày ý tưởng thiết kế input module của nhóm khi bắt đầu thực
hiện đồ án.

II. Chi tiết thiết kế Input Module cho Arduino. Phần này thể hiển chi tiết quá
trình nhóm thực hiện việc thiết kế input module từ xây dựng sơ đồ nguyên lý, lựa
chọn các linh kiện và viết code cho Arduino.

3
Để hoàn thành được đồ án này, nhóm đã nhận được rất nhiều sự giúp đỡ về
mặt kiến thức cũng như kinh nghiệm của thầy Chu Đức Việt, thầy đã tận tình giúp đỡ
nhóm em trong suốt quá trình làm đồ án.

Mặc dù đã nỗ lực cố gắng, song với thời gian hạn chế, quyển đồ án chắc chắn không
thể tránh khỏi thiếu sót, rất mong nhận được sự đóng góp, chỉ bảo của thầy giáo, cô
giáo.

Nhóm em xin chân thành cảm ơn!

4
I. Giới thiệu về tín hiệu trong công nghiệp và trình bày hướng thiết kế
Input Module

1. Giới thiệu về tín hiệu trong công nghiệp

Tín hiệu trong công nghiệp xuất phát chủ yếu từ các cảm biến công nghiệp,
các bộ thu phát. Tín hiệu trong công nghiệp gồm 2 loại: tín hiệu số và tín hiệu tương
tự.

Tín hiệu số: là tín hiệu nhị phân có biên độ thường 24 VDC,chủ yếu là báo
trạng thái đóng/ngắt của các khóa.

Tín hiệu tương tự:

 Hiện nay, hầu hết các hệ thống máy móc trong công nghiệp tự động đều có sử
dụng tín hiệu Analog để thuận tiện hơn trong quá trình điều khiển. Dạng tín hiệu
này được sử dụng rộng rãi để thay thế cho những dạng tín hiệu như: nhiệt độ, áp
suất, lưu lượng, trọng lượng….Có 2 loại dạng tín hiệu Analog là tín hiệu dòng
như: 0 – 20 mA, 4 – 20mA và tín hiệu áp như: 0 – 5V, 0 – 10V, -5 – 5V… Trong
đó, 2 tín hiệu được sử dụng trong công nghiệp nhiều và phổ biến nhất hiện nay
là 4 – 20 mA và 0 – 10V. Tín hiệu dòng 4-20mA chúng ta thấy giá trị Min bắt
đầu của tín hiệu là 4mA và giá trị kết thúc của tín hiệu là 20mA. Một cảm biến
áp suất có dãy đo 0-100bar có tín hiệu về là 4-20mA hay một cảm biến nhiệt độ
có dãy dãy đo 0-100 oC hay cảm biến nhiệt độ có dãy đo 0-1000 oC qua bộ
chuyển đổi tín hiệu nhiệt độ cũng chỉ đưa tín hiệu về 4-20mA . Điều này cho
chúng ta thấy gần như tất cả các tín hiệu đều đưa về tín hiệu chuẩn 4-20mA.
 Giả sử cảm biến áp suất có dãy đo 0-100 bar tương ứng với tín hiệu 4-20mA thì
giá trị 4mA tương ứng với áp suất bằng không (0), tại giá trị 100bar sẽ đưa về
tín hiệu 20mA . Trong trường hợp cảm biến bị hư hỏng giá trị đưa về sẽ là 3.8mA
(theo mặc định một số cảm biến) hoặc khi áp suất vượt ngưỡng sẽ cho ra tín hiệu
23mA (theo quy định của một số hãng lớn trên thế giới).Trường hợp bị mất

5
nguồn tín hiệu đưa về 0mA chúng ta xác định rõ đây là bị ngắn mạch (đứt cable
hoặc mất nguồn). Trong trường hợp này nếu chúng ta dùng cảm biến áp suất có
tín hiệu 0-10V thì khi cảm biến bị hư hỏng hay bị ngắn mạch thì tín hiệu đưa về
đều là 0V. Việc chuẩn đoán bị ngắn mạch hay cảm biến bị hư hỏng là một điều
khó khăn và tốn thời gian hơn rất nhiều. Chúng ta rất dể nhầm lẫn giữa cảm biến
bị hư hỏng và cảm biến đang hoạt động nhưng có giá trị là không (0). Điều này
rất nguy hiểm trong việc điều khiển tự động hóa.
 Tín hiệu áp 0-10V bị suy giảm tín hiệu và dể bị nhiễu. Các tín hiệu analog từ các
cảm biến đưa về có thể cách xa tủ điều khiển trung tâm từ 100m đến 1km là
chuyện rất bình thường. Trước kia các cảm biến dùng tín hiệu analog 0-10V để
truyền về PLC, với khoảng cách xa như vậy việc sụt áp tín hiệu là điều thường
thấy trên các tín hiệu Analog dòng 0-10V. Một điều ít ai biết nữa chính là tín
hiệu dòng 0-10V rất dể bị nhiễu bởi các dây động lực hoặc sóng hài hoặc motor
hay biến tần khi dây tín hiệu đi ngang qua các thiết bị này.
 Tín hiệu dòng 4-20mA ít bị suy giảm bởi khoảng cách. Nguồn dòng hay nguồn
cấp dòng hoặc tiêu thụ dòng là nguồn có tổng trở rất lớn. Chính vì thế mà tín
hiệu analog dòng 4-20mA ít bị ảnh hưởng bởi điện trở của dây ngoại trừ tổng
trở của dây dẩn quá lớn vượt qua ngưỡng cho phép. Các tín hiệu làm nhiễu như
biến tần, sóng hài, motor phát ra từ trường thường là xung điện áp. Chính vì thế
với nguồn tín hiệu là nguồn dòng và tải tín hiệu lại có điện trở nhỏ, các xung
nhiễu điện áp gần như ít bị ảnh hưởng.
 Với những ưu điểm đó, hầu hết trong thực tế có hơn 80% đều sử dụng tín hiệu
dòng 4 – 20mA thay cho những tín hiệu analog khác.

2. Hướng thiết kế input module cho Arduino

Với Arduino, dải điện áp cho phép với cả tín hiệu số và tương tự là 0-5VDC,
do vậy để có thể xử lý các tín hiệu này ta phải đưa những tín hiệu đó về trong dải điện
áp cho phép của Arduino. Việc thiết kế input module cho Arduino, qua những hướng

6
dẫn của thầy Chu Đức Việt, cùng với sự tìm hiểu qua internet, những thiết kế input
module cho PLC của các hãng như TI, nhóm em đã hình thành ý tưởng như sau:

 Với tín hiệu số 24VDC: Nhóm em sử dụng opto quang để vừa cách ly, vừa
có thể chuyển đổi dải điện áp từ 24VDC thành 5VDC.
 Với tín hiệu tương tự 0-10V, 4-20mA: Nhóm em sử dụng ADC để chuyển
đồi tín hiệu tương tự thành tín hiệu số với điện áp 5VDC, sau đó mới cách ly
tín hiệu số sau chuyển đổi bằng opto quang.

7
II. Chi tiết thiết kế input module cho Arduino

Về Arduino sử dụng khi làm đồ án này, nhóm em sử dụng Arduino Uno R3,
sử dụng vi điều khiển ATmega328P. Về xử lý các tín hiệu số và tương tự, nhóm em
mới chỉ thực hiện việc đo và báo trạng thái trên LCD.

1. Digital Input Module

1.1. Sơ đồ nguyên lý

1.2. Lựa chọn linh kiện và tính toán

*Opto coupler PC817

Thông số:

8
*IC 74HC14, Hex Schmitt-Triggered Inverters

Thông số:

9
*Tính toán:
Vin−Vf 24−1.4
Điện trở R1= = =2k2 Ω
If 0.01

Điện trở kéo lên R2= 5k Ω

1.3. Code Arduino:

#include <LiquidCrystal.h> // LCD library

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

// put your setup code here, to run once:

pinMode(6, INPUT);

lcd.begin(16, 2);

lcd.print("STATUS:");

10
void loop() {

// put your main code here, to run repeatedly:

lcd.setCursor(0, 1);

int status = digitalRead(6);

if (status == HIGH) {

lcd.print("CLOSE");

delay(100);

} else {

lcd.print("OPEN");

delay(100);

Code Arduino sử dụng thư viện mẫu LiquidCrystal để hiện thị trên LCD 16x2,
nhận tín hiệu trên chân D6 của Arduino Uno R3. Tín hiệu số là 1 sẽ hiển thị trên LCD
là “CLOSE”, và là “OPEN” nếu tín hiệu số là 0.

1.4. Hình ảnh thực tế và kết quả

11
12
2. Analog Input Module

2.1. Sơ đồ nguyên lý

Nguồn cấp VCC1=5VDC, VCC2=5VDC từ Arduino.

Dữ liệu sau chuyển đổi của ADC ADS1115 được truyền đi qua giao tiếp I2C
và được cách ly nhờ 3 opto quang loại High-Speed 6N137 cho 3 tín hiệu
SCL(forward), SDA(forward) và SDA(backward). 2 diode Schottky D1, D2 ngăn
việc tín hiệu SDA truyền đi không bị truyền ngược lại. Sau khi được cách ly 2 tín
hiệu SCL và SDA mới được truyền tới 2 chân SCL và SDA của Arduino.

2.2. Lựa chọn linh kiện và tính toán

*ADC ADS1115

Thông số:
13
14
*Opto coupler 6N137

Thông số:

15
*Schottky diode 1N5819

Thông số:

*Tính toán:

 Mạch phân áp sử dụng điện trở R1=R2=10k Ω để chia đôi điện áp tín hiệu
đầu vào 0-10V.
 Tín hiệu 4-20mA đưa qua điện trở R3=200 Ω để điện áp rơi trên R3 là 0.8-
4V.
 Các tụ điện để lọc nguồn C1=C2=C3=C4= 0.1 µF.
 Điện trở kéo R4=R7=10k Ω
R5=R6=R10=R11=1k5 Ω
VCC1−Vf 5−1.35
 Điện trở R8=R9= = =365 Ω
If 0.01
16
𝑉𝐶𝐶2−𝑉𝑓 5−1.35
R12= = = 365 Ω
𝐼𝑓 0.01

2.3. Code Arduino

#include <Wire.h>

#include <LiquidCrystal.h>

#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads; /* Use this for the 16-bit version */

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup(void)

lcd.begin(16, 2);

// For 0-10V signal:

lcd.print("Values(mV):");

// For 4-20mA signal:

//lcd.print(“Values(mA):”);

//ADS1115

ads.setGain(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 0.1875mV

ads.begin();

}
17
void loop(void)

lcd.setCursor(0, 1);

int16_t values;

/* Be sure to update this value based on the IC and the gain settings! */

// For 0-10V signal:

float multiplier = 0.375F; /* ADS1115 @ +/- 6.144V gain (16-bit results) */

values = ads.readADC_Differential_0_1();

lcd.print(values * multiplier);

/*// For 4-20mA signal:

float multiplier = 0.1875F

values = ads.readADC_Differential_2_3();

lcd.print(values * multiplier/200);*/

delay(1000);

Code Arduino sử dụng thư viện có sẵn Adafruit_ADS1015 để xử lý dữ liệu


từ ADC ADS1115, và thư viện LiquidCrystal để hiển thị giá trị tín hiệu trên LCD.

2.4. Hình ảnh thực tế và kết quả

18
19
KẾT LUẬN
Nhóm em đã cơ bản hoàn thành việc thiết kế input module cho Arduino, với
chi tiết quá trình thực hiện được trình bày trong bản báo cáo này. Trong quá trình
thực hiện đồ án này, nhóm em đã được tìm hiểu và học hỏi thêm nhiều kiến thức mới
từ việc tự tìm hiểu cũng như từ sự chia sẻ, hướng dẫn của thầy Chu Đức Việt. Song
thời gian nhóm dành cho đồ án này không được nhiều, cũng như việc lần đầu làm đồ
án, nên nhóm còn gặp nhiều khó khăn. Nhóm nhận thấy input module của nhóm thiết
kế vẫn khá còn đơn giản và còn nhiều hạn chế và thiếu sót. Nhóm đề xuất việc cách
ly tín hiệu với vi điều khiển có thử sử dụng khuếch đại cách ly, như IC ISO1541
chuyên dụng cho việc cách ly tín hiệu I2C, để đơn giản, thuận tiện và dễ sử dụng hơn.

Các input module rất cần thiết khi sử dụng vi điều khiển. Việc thực hiện đồ
án này đã mang lại cho nhóm nhiều kiến thức bổ ích hữu dụng cho việc học tập cũng
như làm việc sau này.

Nhóm em xin gửi lời cảm ơn tới thầy Chu Đức Việc đã hướng dẫn nhóm trong
quá trình thực hiện đồ án này. Nhóm em mong muốn nhận thêm những ý kiến, góp ý
đến từ thầy.

Chúng em xin chân thành cảm ơn!

20
TÀI LIỆU THAM KHẢO
[1]. Michael Margolis, Arduino Cookbook, O’Reilly Media, Inc., 1005 Gravenstein
Highway North, Sebastopol, 2011.

[2]. Simon Monk, 30 Arduino Projects for the Evil Genius, The McGraw-Hill
Companies, 2010.

[3]. Datasheet ATmega328P, Microchip Technology Incorporated.

[4]. Datasheet PC817, Sharp.

[5]. Datasheet 6N137, Vishay.

[6]. Datasheet ADS1115, Texas Instruments.

[7]. Datasheet 74HC14, Diodes Incorporated.

[8]. Datasheet 1N5819, Micro Commercial Components.

21

You might also like