a. Arduino Nano
Để đảm bảo kích thước phù hợp cũng như có không gian cho các linh kiện khác nên nhóm quyết định chọn board mạch Arduino Nano là vi xử lý chính cho hộp điều khiển
55 trung tâm. Board Arduino Nano R3 dựa trên vi điều khiển AVR Atmega328P. Do sử dụng chip dán SMD nên có kích thước rất nhỏ gọn. Tuy cấu hình không quá mạnh nhưng với mô hình túi khí đơn giản không có quá nhiều cảm biến thì tốc độ của Arduino Nano là đủ để đáp ứng. Bên cạnh đó phần mềm hỗ trợ lập trình cho bộ kit này là một nền tảng mở nên tài liệu rất phong phú và đa dạng. Code lập trình mẫu cũng được cộng đồng chia sẻ và phát triển mạnh nên việc lập trình cho nó cũng sẽ nhẹ nàng hơn. Arduino Nano R3 sử dụng cáp Mini-B USB và không có giắc nguồn nên nguồn cấp cho board hoạt động thông qua chân Vin của Arduino Nano với điện áp ngoài từ 7-15V hoặc cấp vào chân 5V một điện áp 5V Cấu tạo chính của Arduino Nano
Cổng Mini-B USB: Đây là loại cổng giao tiếp để nạp chương trình từ máy tính lên tivi điều khiển. Đồng thời nó cũng là cổng giao tiếp serial để truyền dữ liệu giữa vi điều khiển và máy tính.
Có 14 chân tín hiệu vào, ra số (Digital) đánh thứ tự từ 0 đến 113, ngoài ra còn có 1 chân GND, và 1 chân điện áp chiếu AREF.
Vi điều khiển AVR: Đây là bộ xử lý trung tâm của toàn board mạch. Với mỗi mẫu Arduino khác nhau thì có chip khác nhau. Ở Arduino Nano R3 này sử dụng chip ATmega328P.
56 Thông số chi tiết
Bảng 3.2 Thông số Arduino Nano
Vi điều khiển ATmega328 (họ 8bit) Điện áp hoạt động 5V-DC
Tần số hoạt động 16MHz Dòng tiêu thụ 30mA Điện áp khuyên dùng 7~12V – DC Điện áp giới hạn 6~20V – DC Số chân Digital I/O 14 (6 chân PWM) Số chân Analog 8 (độ phân giải 10bit) Dòng tối đa trên mỗi
chân I/O 40mA
Dòng tối đa (5V) 500mA Dòng tối đa (3.3V) 50mA
Bộ nhớ flash 32 KB (ATmega328) với 2 KB dùng bởi bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Kích thước 1.85cm x 4.3cm
b. Bộ chuyển đổi (DC – DC converter) 12V - 5V
Trên mô hình sử dụng nguồn điện chính lấy từ acquy 12V, nguồn điện này được cung cấp trực tiếp cho các board mạch Arduino và các module Relay 12V. Tuy nhiên, còn có các cảm biến, màn hình LCD, Núm xoay Rotary Encoder, các thành phần này đều sử dụng điện áp 5V. Mặc dù bản thân Arduino có bộ chuyển đổi điện áp từ chân Vin ra nguồn 5V ngay trên board mạch tuy nhiên công suất của bộ chuyển đổi này khá nhỏ không đủ cung cấp cho tất cả các thành phần trong hộp điều khiển trung tâm do đó trong trường hợp này ta cần sử dụng thêm một bộ chuyển đổi DC-DC nữa để đáp ứng cho tất cả các thành phần.
Ở đây ta sử dụng mạch giảm áp LM2596 3A, với ưu điểm nhỏ gọn có khả năng giảm áp từ 30V xuống 1.5V mà vẫn đạt hiệu suất cao.
57
Hình 3.21 Sơ đồ mạch điện mạch giảm áp LM2596
Các thông số của mạch Điện áp đầu vào: 4.5V~35V Điện áp đầu ra: 1.5V~30V Dòng điện đầu ra: 0.2A~3A Dải nhiệt độ: -45oC~60oC Công suất: 15W
Hình 3.22 Module LM2596
Với điện áp đầu vào trên mô hình là 12V, ta sẽ vặn điện trở tinh chỉnh trên mạch LM2596, dùng đồng hồ VOM đo điện áp đầu ra. Khi nào ta thấy điện áp đầu ra đúng 5V thì ngưng vặn biến trở.
c. Cảm biến gia tốc MPU6050 (GY-521)
MPU-6050 là cảm biến của hãng InvenSense. MPU-6050 là một trong những giải pháp cảm biến chuyển động đầu tiên trên thế giới có tới 6 (mở rộng tới 9) trục cảm biến tích hợp trong 1 chip duy nhất.
MPU-6050 sử dụng công nghệ độc quyền MotionFusion của InvenSense có thể chạy trên các thiết bị di động, tay điều khiển…
58
Hình 3.23 Cảm biến MPU-6050
MPU-6050 tích hợp 6 trục cảm biến bao gồm: + Con quay hồi chuyển 3 trục (3-axis MEMS gyroscope). + Cảm biến gia tốc 3 chiều (3-axis MEMS accelerometer).
Ngoài ra, MPU-6050 còn có 1 đơn vị tăng tốc phần cứng chuyên xử lý tín hiệu (Digital Motion Processor – DSP) do cảm biến thu thập và thực hiện các tính toán cần thiết. Điều này giúp giảm bớt đáng kể phần xử lý tính toán của vi điều khiển, cải thiện tốc độ xử lý và cho ra phản hồi nhanh hơn. Đây chính là 1 điểm khác biệt đáng kể của MPU-6050 so với các cảm biến gia tốc và gyro khác.
MPU-6050 có thể kết hợp với cảm biến từ trường (bên ngoài) để tạo thành bộ cảm biến 9 góc đầy đủ thông qua giao tiếp I2C.
Các cảm biến bên trong MPU-6050 sử dụng bộ chuyển đổi tương tự – số (Anolog to Digital Converter – ADC) 16-bit cho ra kết quả chi tiết về góc quay, tọa độ… Với 16- bit bạn sẽ có 2 = 65536 giá trị cho 1 cảm biến.
Tùy thuộc vào yêu cầu của bạn, cảm biến MPU-6050 có thể hoạt động ở chế độ tốc độ xử lý cao hoặc chế độ đo góc quay chính xác (chậm hơn). MPU-6050 có khả năng đo ở phạm vi:
59 + Gia tốc: ± 2 ± 4 ± 8 ± 16g
Hơn nữa, MPU-6050 có sẵn bộ đệm dữ liệu 1024 byte cho phép vi điều khiển phát lệnh cho cảm biến, và nhận về dữ liệu sau khi MPU-6050 tính toán xong. Ưu điểm lớn nhất của DMP là nó giúp loại bỏ sự cần thiết phải thực hiện phức tạp và tài nguyên tính toán chuyên sâu về phía Arduino. Nhước điểm lớn nhất của cảm biến này là dễ bị nhiễu.
Hình 3.24 Sơ đồ GY-521 chip MPU-6050
d. Relay 2 kênh 12V có cách ly
Module Relay 2-Channel 12V được dùng nhiều trong các ứng dụng đóng ngắt các thiết bị tiêu thụ dòng điện lớn (<10A). Module có thể đóng ngắt cùng lúc hai kênh bằng tín hiệu điều khiển (với mức điện áp 3V3 hoặc 5V) từ các vi điều khiển khác nhau như: Arduino, 8051, AVR, PIC, DSP, ARM, ARM, MSP430, logic TTL, đồng thời module được cách ly bằng optocoupler giúp bảo vệ tốt hơn cho các vi điều khiển.
60
Hình 3.25 Module Relay 2 kênh
Module được kết nối với các board điều khiển bằng 4 chân header như sau: VCC cung cấp nguồn cho các opto.
GND kết nối với GND của board điều khiển.
IN1 và IN2 dùng để điều khiển relay 1 và relay 2, tích cực mức thấp.
Ngoài ra còn một 3 chân header được dùng để cấp nguồn cho relay, header này sẽ có một jumper dùng để kết nối chân VCC với chân JD_VCC mục đích dùng chung nguồn VCC từ header 4 chân cho relay, thông thường jumper được nối lại với nhau. Nếu như muốn cách ly tín hiệu điều khiển với nguồn cấp cho relay thì có thể bỏ jumper này ra và cấp nguồn riêng cho chân JD_VCC.
Thông số kỹ thuật
Đóng ngắt được dòng điện cao AC250V 10A, DC30V 10A 2 led báo trạng thái relay
Điện áp điều khiển: tùy thuộc vào nguồn cấp VCC Mạch cách ly bằng opto
61 3.2.1.2. Board mạch in hộp điều khiển trung tâm
Hình 3.26 Mạch in board mạch điều khiển trung tâm
Mô tả board mạch
Một Arduino Nano được cấp nguồn 12V thông qua chân Vin.
Arduino Nano giao tiếp nhận tín hiệu từ các hộp khác qua giao tiếp I2C ở chân A4, A5.
Chân D3, D11 đưa đến các chân điều khiển IN1, IN2 của Relay.
Module chuyển đổi điện áp LM2596 được cấp nguồn 12V qua chân IN+ và IN- sau đó xuất ra 5V ở chân OUT+ và OUT-.
Relay được cấp nguồn 12V qua chân JD-VCC, chân VCC được cấp nguồn 5V lấy từ bộ chuyển đổi điện áp LM2596.
Module MPU-6050 giao tiếp với Arduino Nano thông qua chân SCL và SDA, nguồn cấp 5V lấy từ Arduino thông qua chân 5V.
62 Nguyên lý hoạt động của board mạch
Ban đầu Arduino Nano thực hiện quét các thiết bị giao tiếp I2C được kết nối vào mạng, sau đó Arduino phát tín hiệu kiểm tra các thành phần xem việc kết nối có thành công hay không. Tiếp đến, nó yêu cầu cảm biến MPU-6050 gửi tín hiệu về gia tốc và hộp thông tin gửi tín hiệu về tốc độ cài đặt cho nó thông qua giao tiếp I2C. Khi nhận được tín hiệu về gia tốc và tốc độ nó sẽ tính toán việc kích hoạt (chân D3 mức LOW) hay không kích hoạt (chân D3 mức HIGH) relay điều khiển đóng mở van khí.
Hình 3.27 Board mạch hộp điều khiển trung tâm hoàn chỉnh
63 3.2.2. Thiết kế hộp thông tin
3.2.2.1. Các linh kiện điện tử được sử dụng trong hộp thông tin a. Arduino Uno a. Arduino Uno
Mạch Arduino Uno là dòng mạch Arduino phổ biến dùng để lập trình, khi mới bắt đầu làm quen thì mạch Arduino thường dùng là Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (Mạch Arduino Uno R3).
Arduino Uno R3 là dòng cơ bản, linh hoạt, thường được sử dụng cho người mới bắt đầu. Có thể sử dụng các dòng Arduino khác như: Arduino Mega, Arduino Nano, Arduino Pro Micro… Nhưng với những ứng dụng cơ bản thì mạch Arduino Uno là lựa chọn phù hợp nhất.
Hình 3.29 Mạch Arduino Uno R3
Bảng 3.3 Thông số cơ bản của mạch Mạch Arduino Uno R3
Vi điều khiển ATmega328 họ 8bit
Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)
Tần số hoạt động 16 MHz
Dòng tiêu thụ khoảng 30mA
Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC
Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA
Dòng ra tối đa (5V) 500 mA
64 Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader
SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz LED_BUILTIN pin 13 Chiều dài 68.6 mm Chiều rộng 53.4 mm Trọng lượng 25 g
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V.
Lưu ý
- Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó phải hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho Arduino UNO.
- Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.
- Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển.
- Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển.
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối).
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 2 -1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit.
65 Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
b. Núm xoay Rotary Encoder
Mạch Volume xoay Rotary Encoder 360 độ không giới hạn số vòng quay, encoder đưa ra 2 xung vuông 90 độ gọi là 2 phase A và B, xung từ encoder đưa ra có thể dùng để nhận biết chiều quay, tốc độ quay, vị trí, module cung cấp 2 ngõ ra cho 2 phase và 1 ngõ ra dạng nút nhấn.
Hình 3.30 Rotary Encoder
Thông số kỹ thuật
Điện áp sử dụng: 3~5VDC Độ phân giải 20 xung/vòng. Các chân tín hiệu
+: Chân cấp nguồn 3~5VDC GND: chân cấp nguồn âm 0VDC CLK: phase A
DT: phase B SW: button
66 c. Bộ chuyển đổi (DC – DC converter) 12V - 5V
Trên mô hình sử dụng nguồn điện chính lấy từ acquy 12V, nguồn điện này được cung cấp trực tiếp cho các board mạch Arduino và các module Relay 12V. Tuy nhiên, còn có các cảm biến, màn hình LCD, Núm xoay Rotary Encoder, các thành phần này đều sử dụng điện áp 5V. Mặc dù bản thân Arduino có bộ chuyển đổi điện áp từ chân Vin ra nguồn 5V ngay trên board mạch tuy nhiên công suất của bộ chuyển đổi này khá nhỏ không đủ cung cấp cho tất cả các thành phần trong hộp điều khiển trung tâm do đó trong trường hợp này ta cần sử dụng thêm một bộ chuyển đổi DC-DC nữa để đáp ứng cho tất cả các thành phần.
Ở đây ta sử dụng mạch giảm áp LM2596 3A, với ưu điểm nhỏ gọn có khả năng giảm áp từ 30V xuống 1.5V mà vẫn đạt hiệu suất cao.
Hình 3.31 Sơ đồ mạch điện mạch giảm áp LM2596
Các thông số của mạch Điện áp đầu vào: 4.5V~35V Điện áp đầu ra: 1.5V~30V Dòng điện đầu ra: 0.2A~3A Dải nhiệt độ: -45oC~60oC Công suất: 15W
67 Với điện áp đầu vào trên mô hình là 12V, ta sẽ vặn điện trở tinh chỉnh trên mạch LM2596, dùng đồng hồ VOM đo điện áp đầu ra. Khi nào ta thấy điện áp đầu ra đúng 5V thì ngưng vặn biến trở.
d. LCD (Liquid Crystal Display) 1602
Sử dụng rộng dãi và đa dạng trong các ứng dụng khác nhau, có khả năng hiển thị hiển thị 16 ký tự x 2 line chữ đen trên nền phông xanh lá. Hướng xem rõ nhất: 06:00 các hướng khác cũng sử dụng được nhưng tầm nhìn không tốt. Có khả năng hiện thị ký tự linh hoạt, đa dạng, trực quan theo font 5x8 Dots có sẵn (hiển thị cả số, chữ, ký tự đồ họa, ký tự đặc biệt ...). Dễ dàng giao tiếp với các loại vi điều khiển theo nhiều cách khác nhau. Tốn rất ít tài nguyên hệ thống và giá thành rẻ.
Hình 3.33 Màn hình LCD 1602
e. Module chuyển đổi I2C dành cho LCD 1602
Thông thường để sử dụng màn hình LCD bạn cần rất nhiều chân trên Arduino để điều khiển. Do vậy để đơn giản hóa công việc, người ta tạo ra một loại mạch điều khiển màn hình LCD sử dụng giao tiếp I2C. Nói một cách đơn giản, bạn chỉ cần 2 dây để có thể điều khiển màn hình thay vì 8 dây thông thường.
Để sử dụng các loại LCD có driver là HD44780 (LCD 1602, LCD 2004, …) cần có ít nhất 6 chân của MCU kết nối với các chân RS, EN, D7, D6, D5 và D4 để có thể giao tiếp với LCD. Nhưng với module chuyển giao tiếp LCD sang I2C chỉ cần hai chân (SDA và SCL) của vi điều khiển để kết nối với hai chân (SDA và SCL) của module để có thể hiển
68 thị thông tin lên LCD. Ngoài ra có thể điều chỉnh được độ tương phản bởi biến trở gắn trên module.
Hình 3.34 Module chuyển đổi I2C cho LCD
3.2.2.2. Board mạch in hộp thông tin
Hình 3.35 Board mạch in hộp thông tin
Mô tả board mạch
Một Arduino Uno được cấp nguồn 12V thông qua chân Vin. Giao tiếp I2C nhận tín hiệu từ chân A4, A5.
Tín hiệu núm xoay rotary encoder gửi về chân D6 và chân D7 để đọc chiều quay và số xung thay đổi.
69 Chân 5 cung cấp tín hiệu ON/OFF đèn báo check túi khí trên bảng đồng hồ.
Chân 9 cung cấp xung cho việc hiển thị tốc độ hoạt động trên bảng đồng hồ kim. Socket 5 pin (D+ D- B+ GND CLK) dùng để kết nối với board mạch bảng đồng hồ.
Hình 3.36 Board mạch hộp thông tin khi hoàn thành
Nguyên lý hoạt động của board mạch
Khi được cấp nguồn điện, Arduino Uno đọc giá trị được gửi tới từ hộp điều khiển trung tâm qua giao tiếp I2C, đồng thời đọc tín hiệu tăng/giảm tốc độ thiết đặt từ núm xoay rotary encoder. Sau khi có dữ liệu về trạng thái thay đổi của nút xoay, Arduino Uno chuyển đổi tín hiệu xung của rotary encoder sang dạng số rồi truyền qua cho hộp điều khiển trung