Nguồn cấp: Có thể cấp nguồn qua cong USB hoặc chân Vin7-12V -Màn hình LCD Sơ đồ kết nối LCD 16x2 với I2C VCC màn hình LCD > 5V Arduino GND man hinh LCD > GND Arduino SDA màn hình
Trang 1
DAI HOC BACH KHOA DA NANG TRUONG DAI HOC BACH KHOA
KHOA DIEN
BAI TIEU LUAN MON HE THONG THONG TIN DO LUONG
CHUYEN NGHANH:
KY THUAT DIEN VA TU DONG HOA
GHHD: Ts Nguyễn Hoàng Mai
SVTH: Phan Bản Tuần Kiệt - 20TDHCLCI - MSSV: 105200368
Nhật
Đà Nẵng, 11/2024
Trang 2
-Arduino nano
Microcontroller: ATmega328P ( hoặc Atmega1ó8 trên các phiên bản cũ)
Số chân I/O: 14 chan digital (6 chan PWM), 8 chan analog
Kết nối: Sử dụng cống USB mini-B để giao tiếp với máy tính và cấp nguồn
Nguồn cấp: Có thể cấp nguồn qua cong USB hoặc chân Vin(7-12V)
-Màn hình LCD
Sơ đồ kết nối (LCD 16x2 với I2C)
VCC ( màn hình LCD) > 5V ( Arduino)
GND ( man hinh LCD) > GND ( Arduino)
SDA ( màn hình LCD) > A4 ( Arduino Uno) ( hodc tương đương với các board khác)
SCL (man hinh LCD) > A5 ( Arduino Uno) ( hoặc tương đương với các board khac)
Các lớp màn hình LCD bao gồm một lớp tỉnh thể lỏng và hai lớp phân cực Khi có điện áp áp
vào các phân tử tinh thể lỏng sẽ thay đổi cấu trúc và điều chỉnh lượng ánh sáng đi qua
Màn hình LCD sử dụng hai lớp phân cực và một lớp tỉnh thể lỏng , khi có dòng điện chạy
qua, các phân tử tỉnh thể sẽ xoay , điều chỉnh ánh sáng xuyên qua màn hình để tạo ra các
điểm ảnh
-LM358 ( đôi )
Trang 3IN1(-) 2 7 OUT2
GND 4 5 IN2(+)
Inverting Input A 1 7) Output B Non Inverting Input A '# 6) Inverting Input 8 Ground (Gnd) 4 § Non Inverting Input B
LM358 là một loại IC khuếch đại thuật toán (Op-Amp) phổ biến được sử dụng rộng rãi trong các
mạch điện tử, đặc biệt trong các ứng dụng khuếch đại tín hiệu và các mạch analog Đây là một IC đôi
(dual op-amp), nghĩa là nó chứa hai khuếch đại thuật toán độc lập trong một vỏ chỉp
Thông số kỹ thuật chính của LM358:
e - Số lượng op-amp: 2 ( dual op-amp)
e Dién áp cung cấp: LM358 có thể hoạt động với nguồn cung cấp từ 3V đến 32V ( hoặc +1.5V
đến +1óV với nguồn đối xứng)
e Dong dau ra: Khoảng 20mA ( cho mỗi op-amp)
e - Loại gói ( Package): Có thể được cung cấp trong các dạng DIP-8 ( dạng 8 chân ), SOIC-8, và
các gói khác
e _ Tần số hoạt động : LM358 có tần số cắt ( Gain Bandwidth Product) khoảng 1MHz
e - Độ lợi ( Gain): Được thiết kế để cung cấp độ lợi cao với các tín hiệu điện áp thấp
e Đặc tính đầu vào: Đầu bào của Lm358 có độ lệch thấp, phù hợp cho các ứng dụng khuếch
đại tín hiệu nhỏ
-Modun RS485
Module RS485 là một bộ chuyển đổi giao tiếp được sử dụng để truyền tải dữ liệu qua giao thức
RS485, một chuẩn giao tiếp công nghiệp phổ biến RS485 có khả năng truyền tín hiệu dữ liệu với
khoảng cách xa và khả năng chống nhiễu tốt, rất phù hợp trong các ứng dụng công nghiệp, điều
khiển tự động, và các hệ thống yêu cầu kết nối nhiều thiết bị với nhau
-Cảm biến : LM35, quang trở
LM35 là một cảm biến nhiệt độ analog rất phổ biến, được sử dụng rộng rãi trong các dự án điện tử,
đặc biệt là trong các ứng dụng cần đo nhiệt độ như hệ thống giám sát nhiệt độ, điều khiển nhiệt độ,
Trang 4nhiệt độ trực tiếp mà không cần phải chuyển đổi tín hiệu phức tạp
Quang trở (Photoresistor), còn được gọi là LDR (Light Dependent Resistor), là một loại điện trở có
giá trị thay đối tùy theo mức độ ánh sáng mà nó nhận được Khi ánh sáng chiếu vào quang trở, điện
trở của nó sẽ giảm đi, và ngược lại, khi ánh sáng yếu hoặc không có, điện trở sẽ tăng lên Do đó,
quang trở là một cảm biến ánh sáng đơn giản và rất phổ biến trong các ứng dụng điện tử
-Tụ - khuếch đại tín hiệu
Tụ khuếch đại tín hiệu là một thành phần điện tử được sử dụng trong mạch điện tử để cải thiện
hoặc khuếch đại tín hiệu điện Tuy nhiên, tụ không trực tiếp khuếch đại tín hiệu như một bộ khuếch
đại (amplifier) Thay vào đó, tụ điện thường được sử dụng trong các mạch khuếch đại để lọc, tăng
cường hoặc cải thiện tín hiệu
-Bàn phím
Trang 5
II Các bước làm sản phẩm và phân công nhiệm vu:
1 Các bước
-Thiết kế sơ đồ nguyên lý
-Thiết kế mạch Protus
-Code
-Làm mạch:
+ In sơ đồ nguyên lý
+ Hàn thiết bị
+ Kiểm tra sơ bộ
- Lưu đồ:
Trang 6Xử ý dữ liệu truyền thong
Uếm ta đang ở hay nhận:
flagModeTx= 1?
Delay 100m
Xử lý ở chế độ truyền
Trang 7
/*BEGIN receive data*/
length = 0;
while(Serial.available()>0) { preRxBuffer[length] = Serial.read() // buffer[length] =
Tats} amu if(length>=22) flagData = true;
else flagData = false;
Trang 8
INPUT
INTPUT:
preft d3 uffer|2 uffer [2*?++1|
VU
eerie
eT Eh et i+
Trang 9
TTT
Es
Trang 10{
uint8_t valueti //lưu giã trị trả về
boolean bit_ value[8]ti // lưu các bit của byte dữ liệu ban đầu từ 2 byte đã thực hiện Hamming
boolean k[4]ti // lưu các hệ số Hamming
boolean bit_position[4]ti /⁄ xác định vị trí nếu có lỗi
uint8_t tempti // lưu vị trí lỗi
Lbyte & 0x01ti /⁄ thực hiện thu các bit của byte dữ liệu ban đầu Lbyte & 0x02ti
bit_value[O] =
= Lbyte & 0x04ti
[0]
bit_value[1]
bit_value[2]
bit_value[3] = Lbyte & 0xO8ti
bit_value[4] = Lbyte & 0x20ti
[5] = Lbyte & Ox40ti
[ó] = Lbyte & 0x80ti
[7] = Hbyte & 0x02ti
bit_value
bit_value
bit_value
k[0] = Hbyte & 0x08ti // thu cac hé s6 Hamming
[1] = Hbyte & 0x04ti
k[2] = Hbyte & 0x01ti
k[3] = Lbyte & 0x10ti
// Xác định vị trí lỗi (nếu có) từ các phương trình Hamming
bỉt_ position[0] = k[0]^bit_value[7]^bit_value[ó]^bit_value[4]^bit_value[3]^bit_value[1]ti
bỉt_ position[1] = k[1]^bit_value[7]^bit_value[5]^bit_value[4]^bit_value[2]^bit_value[1]ti
bỉt_ position[2] = k[2]^bit_value[ó]^bit_value[5]^bit_value[4]^bit_ value[0]ti
bỉt_ position[3] = k[3]^bit_value[3]^bit_value[2]^bit_value[1]^bit_value[0]ti
⁄/ Lưu vị trí lỗi
temp = (bit_position[3]<<3) | (bit_position[2]<<2) |(bit_position[1]<<1)| (bit_position[0])ti
⁄
//thach lấy vị trí bịt lỗi
rxPositionErrorBit = tempti
//end thach
// Sửa lỗi dựa vào vị trí lỗi
switch (temp)
{
case (0x01):
{
k[0] = (~k[0]) & 0x01ti
breakti
}
case (0x02):
k[1] = (~k[1]) & 0x01ti
breakti
}
case (0x03):
{
bit_value[7] = (~bit_value[7]) & Ox01ti
breakti
}
case (0x04):
k[2] = (~k[2]) & Ox01ti
breakti
}
Trang 11{
bit_value[6] = (~bit_value[6]) & 0x01ti
breakti
}
case (0x06):
{
bit_value[5] = (~bit_value[5]) & Ox01ti
breakti
}
case (0x07):
{
bit_value[4] = (~bit_value[4]) & 0x01ti
breakti
}
case (0x08):
{
k[3] = (~k[3]) & 0x01ti
breakti
}
case (0x09):
{
bit_value[3] = (~bit_value[3]) & 0x01ti
breakti
}
case (0x0A):
{
bit_value[2] = (~bit_value[2]) & Ox01ti
breakti
}
case (0x0B):
{
bit_value[1] = (~bit_value[1]) & 0x01ti
breakti
}
case (Ox0C):
{
bit_value[0] = (~bit_value[O]) & 0x01ti
breakti
}
default:
Ũ
// Ghép lại byte dữ liệu ban đầu
value = (bit_value[7]<<7) | (bit_value[6]<<6) | (bit_value[5]<<5) | (bit_value[4]<<4) | (bit_value[3]<<3) |
(bit_value[2]<<2) | (bit_value[1]<<‘1) | (bit_value[0])ti
return valueti
}
void make_error(uint8_t * value, uint8_t index)
{
boolean tempByte = *value & (0x01<<index-1)ti
if (tempByte==0x00)
{
*value = *value | (0x01<<index-1)ti
}
else if(tempByte==0x01)
Trang 12*value = *value & (~(0x01<<index-1))ti
}
}
void Hamm ing_make_array
(uint8_t *preTxBuffer, uint8_t * TxBuffer)
Hàm gắn mã han ming cho mảng
OUT Hàm gắn mãhamming cho mang
Ham tao hamming cho _ Í
Trả về | INTPUT: | Tite
5s -04:10./-TIỂN mẽ - TxBuffer [2*ï] ,T1xBuffer[2*®+1]
' Hamming_make() \ \
Cap nh& bién dém:
Tu
Trang 13
UCN CUCM)
boolean LUI Dị
Oa chor
REM [| - tt Ì 1;
HlUd41.-"
aR
Banca) Bea Oeics (0] = Ovid & (bit valuef7}
Ena ORR
HE "1
ul Cea CCG
LEN CR (LICR ATF
Ua Een Ny Cea Me me) Sta Cea MU)
CML
"tt - "te ) 0;
Se CAM CaN
MÃ (II Pu th:
alse "byte = (
Trang 14
bulferTx|
Hiến thi LCD 15, 1:
pont%t hu: én man hinh
2 phân công nhiệm vụ
Kiệt Nhật
sơ đồ nguyên lý Mạch protus Code code,Lưu đồ Word, pp Làm mạch
IV Kết quả sản phẩm:
Trang 15
V Tổng kết